2014-11-14 64 views
5

我开发了一个使用MVC 4的销售点系统。Windows和Mac上的响应和加载时间是即时的,但在iPad上需要8-13秒来加载页面或执行诸如将物品添加到篮子的动作。为了提高Web应用程序我启用IIS中的压缩速度和精缩我所有的Java脚本文件我也用捆绑捆绑以下.js文件一起据称提高了页面加载,以及:MVC 4网站在iPad上很慢

  1. jQuery的1.8 .2.min.js
  2. 敲除2.2.0.js
  3. jquery.easing.1.3.js
  4. b.popup.min.js(用于显示模式弹出仅6KB)

我在页面上使用的其他JavaScript文件介于5KB和15KB之间。完成所有这些后,应用程序似乎要快几秒,但仍需要很长的时间(8-10秒)。

有没有人在iPad上遇到类似的性能问题,您是如何解决它的?我还有什么可以提高性能的方法吗?

我使用的是Windows Server 2003和IIS 6.0

这里是我包的注册代码:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
     "~/Scripts/jquery-1.8.2.min.js", 
     "~/Scripts/jquery.easing.1.3.js", 
     "~/Scripts/knockout-2.2.0.js", 
     "~/Scripts/common/common.min.js", 
     "~/Scripts/popup.min.js" 
     )); 

    bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css")); 
    BundleTable.EnableOptimizations = true; 
} 

而这正是我把它称为母版页上:

@using System.Configuration 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width" /> 
    <meta name="apple-mobile-web-app-capable" content="yes"> 
    <title>Prestige SSC</title> 
    @Scripts.Render("~/bundles/jquery") 
    @RenderSection("scripts", required: false) 
    @Styles.Render("~/Content/css") 
    <script type="text/javascript"> 
     var screenRefreshTime = '@ConfigurationManager.AppSettings["ScreenRefreshTime"].ToString()'; 
     screenRefreshTime = parseInt(screenRefreshTime); 
    </script> 
</head> 
<body> 
    @RenderBody() 
</body> 
</html> 
+0

它可能是网络连接。所有三个设备是否使用相同的网络?在我的办公室里,无线设备要慢得多,所以将我的电脑与我的iPad进行比较没有任何意义。你在iPad上试过Chrome吗?它感觉*就像使用Chrome over Safari获得更好的性能。 – 2014-11-14 16:15:38

+0

我试过在Windows笔记本电脑,Mac书和三星平板电脑上运行Windows 8,使用与iPad相同的Wi-Fi,并且所有三种都非常快。我只是因为某些原因在iPad上出现性能问题。尝试在Chrome和Safari上访问该网站,他们都很慢。 – 2014-11-17 08:34:36

+1

请指定您验证的iPad生成版本。您的网站在所有iPad版本上运行缓慢吗?问题的原因可以是客户端数据绑定(因为我看到你使用Knockout)。所以,我想你应该看看这个方向。 – 2014-11-17 12:58:54

回答

1

使用Wireshark的https://www.wireshark.org

我已经在服务器试图连接到使用NetBIOS和ICMP来解决客户的详细信息在客户端和被超时问题检查您的服务器的网络活动。

在服务器上禁用TCP上的Netbios,然后检查它是否是网络问题,而不是实际的编程问题。

  1. 转到控制面板并选择网络连接。
  2. 右键单击要静态配置的本地连接,然后单击“属性”。
  3. 单击Internet协议(TCP/IP),单击属性,单击高级,然后单击WINS选项卡。
  4. 单击禁用TCP/IP上的NetBIOS。
2

说到网站的性能,它可能是数百万的东西。导致问题的JavaScript文件不是必需的。这里有几件事可能会对你有所帮助:

  1. 将你的iPad连接到Mac/PC并启用Safari浏览器工具。借助Web Inspector工具,您可以查看哪个流程花费的时间最长。看到这个:https://developer.apple.com/library/iad/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html
  2. 从这个免费电子书中查看可能的修复列表:http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/entrypage/avoid-find-fix-asp-problems
  3. 尝试在iPad中运行Chrome。 Chrome已知拥有最快的JavaScript引擎。另外,尝试远程调试你的iPad的Chrome。 Chrome的开发者工具使用JavaScript Profiler来检查滞后的特定代码/功能。请参阅:http://blog.prototest.com/guide-to-remote-debugging-ios-and-android-mobile-devices
  4. 您也可以远程调试到基于Android的平板电脑。如果Android平板电脑出现同样的情况,请使用PC Chrome远程调试您的移动设备。
  5. 您的网络是否阻止某些设备的流量?
  6. 优化您的淘汰代码。淘汰赛是伟大的,但你可以过度自动UI刷新和依赖关系跟踪。
  7. 优化您的JavaScript代码。通过jshint.com或jslint.com运行您的代码
2

对于iPad(以及任何其他浏览器不是IE 8或更低版本的设备/平台)jQuery 2的表现更好。它实际上是jQuery的体重了很多,在旧版本中它进行大量unrelevant验证和向后兼容的东西

所以,你可以尝试:

  1. 替换版本的jQuery
  2. 分割你从jQuery的其余包括命令,并使用if语句,以确定是否需要在短期更早或更新版本的jQuery

(基于这个帖子Detect Internet explorer browser version problems

var jQuery = "~/Scripts/jquery-2.1.1.min.js"; 

if ((Request.Browser.Browser == "IE") && ((Request.Browser.MajorVersion < 9))) 
{ 
    jQuery = "~/Scripts/jquery-1.8.2.min.js"; 
} 

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    jQuery, 
    "~/Scripts/jquery.easing.1.3.js", 
    "~/Scripts/knockout-2.2.0.js", 
    "~/Scripts/common/common.min.js", 
    "~/Scripts/popup.min.js" 
    )); 
+0

谢谢你的回答,我已经试过了,但它仍然和以前一样慢。2.1.1.min.js比1.8版只小10kb .2.min.js,但我仍尝试过...没有速度改进 – 2014-11-24 15:02:29

+0

速度不是由文件的大小反映,但它反映了新版本的工作方式(更好的新设备).. thsnks for更新 - 我会试图弄清楚 – ymz 2014-11-24 15:09:51

1

尝试将wireshark下载到服务器,启动它并在捕获数据包流时重新创建错误。然后找到该应用程序的数据包,然后选择“Follow TCP Stream”。你将能够看到并过滤掉那些数据包。

您希望查找入站请求和出站响应,以了解服务器响应所需的时间。如果时间很快< 100ms,那么你必须接下来看看IPAD每个后续请求所花费的时间。您应该能够通过查看跟踪中的相对时间列轻松地找到dealays的位置。

如果这是纯粹的客户端问题,那么您需要关注设备端。如果这是一个网络事物,那么你至少可以排除该应用程序。如果这是一个应用程序问题,那么你将能够看到需要纠正的问题。

请记住,在所有网络事情都准备好之前,没有应用程序可以从客户端运行,例如,在任何数据包可以飞行之前必须先进行DNS解析。您还可能注意到正在发送一个或多个重复数据包。这通常是不正确的桥接和/或路由器问题的指示。也可能存在所谓的跳数问题,其中延迟是由设备必须击中的路由器的数量引起的。也可能存在路由器“呼吸”问题,路由器的流量压倒了它(这种架构称之为“丢弃数据包”)。发生这种情况时,TCP会尝试重试,这本质上会让事情变得更糟。