iPad上的MVC 4网站速度很慢

我已经开发了一个使用MVC 4的销售点系统。在Windows和Mac上的响应速度和加载时间是即时的,但在iPad上加载页面或执行诸如向篮子添加项目等操作需要8-13秒。 为了提高Web应用程序的速度,我在IIS中启用了压缩并缩小了我的所有java脚本文件,我还使用捆绑将以下.js文件捆绑在一起,这可能会改善页面的加载:

  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       Prestige SSC @Scripts.Render("~/bundles/jquery") @RenderSection("scripts", required: false) @Styles.Render("~/Content/css")  var screenRefreshTime = '@ConfigurationManager.AppSettings["ScreenRefreshTime"].ToString()'; screenRefreshTime = parseInt(screenRefreshTime);    @RenderBody()   

使用Wireshark https://www.wireshark.org检查您的服务器网络活动

我遇到了服务器尝试使用netbios和ICMP连接到客户端以解决客户端详细信息并且超时的问题。

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

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

谈到网站性能,它可能是数以百万计的事情。 导致问题的JavaScript文件不是必需的。 以下几点可能对您有所帮助:

  1. 将iPad连接到Mac / PC并启用Safari Web检查器工具。 使用Web Inspector Tools,您可以查看哪个进程花费的时间最长。 请参阅: 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,可检查落后的具体代码/function。 请参阅: http : //blog.prototest.com/guide-to-remote-debugging-ios-and-android-mobile-devices 。
  4. 您还可以远程调试到基于Android的平板电脑。 如果在Android平板电脑上发生同样的事情,请使用PC Chrome远程调试移动设备。
  5. 您的网络是否会阻止某些设备的流量?
  6. 优化您的Knockout代码。 淘汰赛很棒,但你可以通过自动UI刷新和依赖性跟踪来实现。
  7. 优化您的JavaScript代码。 通过jshint.com或jslint.com运行您的代码

对于iPad(以及任何其他设备/平台,其浏览器不是IE 8或更低)jQuery 2执行方式更好..它实际上是jQuery的重量很多,在旧版本中它进行了许多不相关的validation和落后兼容性东西

所以,你可以尝试:

  1. 替换那个版本的jQuery
  2. 从其余部分拆分jQuery include命令并使用if语句确定是否需要更新版本的jQuery

总之(基于这篇post检测Internet Explorer浏览器版本问题 )

 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" )); 

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

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

从那里,如果这是一个纯客户端问题,您将需要专注于设备方面。 如果它是网络的东西,那么你至少可以排除应用程序。 如果这是一个应用程序问题,那么您将能够看到需要纠正的内容。

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