2014-11-14 58 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會嘗試重試,這本質上會讓事情變得更糟。