2014-11-14 16 views
5

Ho sviluppato un sistema di punto vendita utilizzando MVC 4. I tempi di risposta e caricamento su Windows e Mac sono immediati ma su un iPad ci vogliono 8-13 secondi per caricare una pagina o eseguire un azione come aggiungere oggetti al carrello. Per migliorare la velocità dell'applicazione web ho attivato la compressione in IIS e minified tutti i miei file java script Ho anche usato raggruppamento per raggruppare i seguenti file .js insieme che presumibilmente migliora caricamento delle pagine così:Sito Web MVC 4 molto lento su iPad

  1. jquery-1.8 .2.min.js
  2. jquery.easing.1.3.js knockout-2.2.0.js
  3. b.popup.min.js (utilizzato per la visualizzazione di un popup modale solo 6KB)

Gli altri file javascript che uso sulle pagine a tra 5KB e 15KB. Dopo aver fatto tutto questo, l'applicazione sembra essere più veloce di alcuni secondi, ma richiede comunque un tempo inaccettabilmente lungo (8-10 secondi).

Qualcuno ha riscontrato problemi di prestazioni simili su un iPad e come è stato risolto? C'è qualcos'altro che posso fare per migliorare le prestazioni?

Sto utilizzando Windows Server 2003 e IIS 6.0

Ecco il mio fagotto codice di registrazione:

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; 
} 

E questo è dove io lo chiamo sulla pagina master:

@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

Potrebbe essere la connessione di rete. Tutti e tre i dispositivi utilizzano la stessa rete? Nel mio ufficio, il wireless è molto più lento, quindi confrontare il mio PC con il mio iPad non avrebbe senso. Hai provato Chrome su iPad? * Sembra * come ottenere prestazioni migliori con Chrome su Safari. –

+0

Ho provato su un laptop Windows, mac book e tablet Samsung con Windows 8 utilizzando lo stesso Wi-Fi dell'iPad e tutti e tre sono molto veloci. Ho solo problemi di prestazioni con l'iPad per qualche motivo. Sì, anch'io ho provato ad accedere al sito sia su Chrome che su Safari e sono entrambi lenti. –

+1

Specifica la versione di generazione iPad su cui hai verificato. Il tuo sito funziona lentamente su tutte le versioni di generazione iPad? Il motivo del problema può essere l'associazione dei dati lato client (come vedo che usi Knockout). Quindi, suppongo che dovresti guardare in questa direzione. –

risposta

1

Controlla la tua attività di rete server utilizzando Wireshark https://www.wireshark.org

ho avuto il problema in cui il server stava cercando di connettersi al client utilizzando NetBIOS e ICMP per risolvere i dettagli dei clienti e che è stato timeout.

Disabilitare Netbios su TCP sul server e verificare quindi se si tratta di un problema di rete e non di un problema di programmazione.

  1. Passare al pannello di controllo e selezionare Connessioni di rete.
  2. Fare clic con il pulsante destro del mouse sulla connessione alla rete locale che si desidera configurare in modo statico, quindi fare clic su Proprietà.
  3. Fare clic su Protocollo Internet (TCP/IP), fare clic su Proprietà, fare clic su Avanzate, quindi selezionare la scheda WINS.
  4. Fare clic su Disabilita NetBIOS su TCP/IP.
2

Quando si tratta di prestazioni del sito Web, può essere milioni di cose. Non è necessario i file JavaScript che causano il problema. Ecco alcune cose che potrebbero aiutarti:

  1. Connetti il ​​tuo iPad al Mac/PC e attiva gli strumenti di ispezione web di Safari. Con Web Inspector Tools puoi vedere quale processo impiega più tempo. Vedere questo: https://developer.apple.com/library/iad/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html
  2. Passare attraverso l'elenco di possibili correzioni da questo ebook gratuito: http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/entrypage/avoid-find-fix-asp-problems
  3. Provare a correre da Chrome in iPad. Chrome è noto per avere il motore JavaScript più veloce. Inoltre, prova a eseguire il debug remoto del Chrome di iPad. Gli strumenti di sviluppo di Chrome hanno JavaScript Profiler per verificare quale codice/funzione specifici è in ritardo. Vedi: http://blog.prototest.com/guide-to-remote-debugging-ios-and-android-mobile-devices.
  4. È inoltre possibile eseguire il debug remoto sul tablet basato su Android. Se la stessa cosa accade su tablet Android, usa PC Chrome per eseguire il debug remoto del tuo dispositivo mobile.
  5. La rete blocca il traffico di determinati dispositivi?
  6. Ottimizza il tuo codice Knockout. Knockout è ottimo, ma puoi esagerare con il suo aggiornamento automatico della UI e il monitoraggio delle dipendenze.
  7. Ottimizza il tuo codice JavaScript. Esegui il tuo codice tramite jshint.com o jslint.com
2

per iPad (e anche qualsiasi altro dispositivo/piattaforma che abbia un browser che non sia IE 8 o inferiore) jQuery 2 funziona meglio ..in realtà è jQuery che il peso molto e nelle versioni precedenti svolge su un sacco di convalide unrelevant e roba retrocompatibilità

modo, si può provare a:

  1. sostituire quella versione di jQuery
  2. dividere il jQuery includono comando dal resto e utilizzare un'istruzione if per determinare se avete bisogno di una versione precedente o più recente di jQuery

a breve (sulla base di questo post 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

Grazie per la tua risposta, ho provato questo, ma è ancora lento come un tempo.Il 2.1.1.min.js è solo 10kb più piccolo del 1.8 .2.min.js ma l'ho provato comunque ... Nessun miglioramento della velocità –

+0

la velocità non è riflessa dalla dimensione del file ma come si riflette dal modo in cui la nuova versione funziona (meglio per i nuovi dispositivi) .. thsnks per l'aggiornamento - cercherò di capirlo – ymz

1

Provare a scaricare wireshark sul server, avviarlo e ricreare l'errore durante l'acquisizione del flusso di pacchetti. Quindi trova i pacchetti per quella applicazione e fai clic con il tasto destro del mouse e scegli "Segui flusso TCP". Sarai in grado di vedere e filtrare solo quei pacchetti.

Si desidera cercare le richieste in ingresso e le risposte in uscita rispetto al tempo impiegato dal server per rispondere. Se i tempi sono veloci, <, 100 ms allora devi guardare per vedere per quanto tempo ogni successiva richiesta da parte dell'IPAD sta prendendo. Dovresti essere in grado di individuare facilmente dove si trova il congedo semplicemente osservando la colonna relativa temporale nella traccia.

Da lì se si tratta di un problema client puro, sarà necessario concentrarsi sul lato del dispositivo. Se si tratta di una cosa di rete, allora sarai almeno in grado di escludere l'applicazione. Se si tratta di un problema di applicazione, sarai in grado di vedere ciò che deve essere corretto.

Ricordare che nessuna applicazione può essere eseguita da un client finché tutte le cose di rete non sono pronte, ad esempio deve esserci una risoluzione DNS prima che qualsiasi pacchetto possa volare. Si può anche notare che uno o più pacchetti duplicati vengono inviati. Questo di solito è un indicatore di bridging e/o problemi del router non corretti. Potrebbe anche esserci quello che è noto come problema di conteggio hop, per cui i ritardi sono causati dal numero di router che il dispositivo deve colpire. Potrebbe esserci anche un problema di "Respirazione" del router in cui il traffico del router lo sta sovraccaricando (che l'architettura dice "butta via i pacchetti"). Quando ciò accade, TCP tenta di riprovare, il che, in pratica, peggiora le cose.