iPad上的MVC 4网站速度很慢

时间:2014-11-14 15:49:43

标签: javascript c# asp.net ipad asp.net-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)
  5. 我在页面上使用的其他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>
    

4 个答案:

答案 0 :(得分:2)

谈到网站性能,它可能是数以百万计的事情。导致问题的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来检查落后的具体代码/功能。请参阅:http://blog.prototest.com/guide-to-remote-debugging-ios-and-android-mobile-devices
  4. 您还可以远程调试到基于Android的平板电脑。如果在Android平板电脑上发生同样的事情,请使用PC Chrome远程调试您的移动设备。
  5. 您的网络是否会阻止某些设备的流量?
  6. 优化您的Knockout代码。 Knockout很棒,但你可以通过自动UI刷新和依赖性跟踪来过度使用。
  7. 优化您的JavaScript代码。通过jshint.com或jslint.com运行您的代码

答案 1 :(得分:2)

对于iPad(以及任何其他设备/平台,其浏览器不是IE 8或更低)jQuery 2表现得更好..它实际上是jQuery的重量很多而在旧版本中它带有很多不相关的验证和向后兼容性的东西

所以,您可以尝试:

  1. 替换该版本的jQuery
  2. 从其余部分拆分jQuery include命令并使用if语句确定是否需要较旧或较新版本的jQuery
  3. 简而言之(基于这篇文章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"
        ));
    

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

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

检查您的服务器网络活动

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

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

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