2016-08-08 28 views
0

Ich habe folgende Situation: Ich habe 86 Charts (ChartsJS) in drei Kategorien unterteilt. Ich benutze JQueryUI Tabs, um jede Kategorie einzeln auf einer separaten Registerkarte anzuzeigen. Die Sache ist, dass aufgrund der großen Menge von Javascript in die Seite eingebettet, Ladezeit der Seite ist über 7 Sekunden, in denen JS Parsing und Ausführung über 5.2 dieser Zeit dauert (gemessen mit Google Chrome).Wie faul bewerten und Javascript ausführen?

Ich frage mich, gibt es eine Möglichkeit, die JavaScript-Teile zu bewerten, die Elemente, die dem Benutzer noch nicht präsentiert werden (nicht auf der derzeit geöffneten Registerkarte) rendert. Bitte beachten Sie, dass ich nicht nur bestimmte Skripte auf Tab-Wechsel ausführen möchte (dies ist offensichtlich und einfach zu machen), sondern das benötigte Skript nach Bedarf zu einem bestimmten Zeitpunkt nach dem Laden der Seite zu bewerten.

EDIT: Ich muss klarstellen, dass meine JS dynamisch generiert daher asyncload von Datei ist keine Option. Dies könnte ein Konstruktionsfehler auf meiner Seite sein.

Hier ist eine Zeitleiste aus Chrom: enter image description here

+0

Das Tab-Plugin hat Ereignisse, zu denen Sie einen Haken haben können. Daher können Sie wissen, welche Charts gerade sichtbar sind und nur diese Charts laden. –

+0

@RoryMcCrossan das ist wahr und die Handhabung dieses Ereignisses ist kein Problem. Das Problem besteht darin, wie man js auswerten und sofort ausführen kann, ohne die Datei zu laden. – Antoniossss

+0

Ich sehe nicht, wie das ein Problem wäre? Verwenden Sie den Rückruf der AJAX-Anfrage, um die Diagramme zu initialisieren, nachdem sie an das DOM angehängt wurden. –

Antwort

0

Alles, was in einer Funktionsdefinition wird erst ausgeführt, wenn die Funktion aufgerufen wird. Daher können Sie Ihren tabellenspezifischen Code in Funktionen umbrechen und sie beim Öffnen der Registerkarte aufrufen.

, um ein Diagramm in chartjs Sie ausführen müssen folgendes schreiben:

var myChart = new Chart(SELECTOR, {...}) 

daher nur rufen neue Diagramm auf Ihrer aktiven Wähler

//Global Configs 
Chart.defaults.global.hover.mode = 'single'; 

function onTabOne() { 
    var myChart = new Chart(SELECTOR, {...}) 
} 
function onTabTwo() { 
    var pieChart = new Chart(SELECTOR, {...}) 
} 

HINWEIS Auswertung von Javascript ist super schnell und ist nicht schwer auf Maschine, es ist im Grunde hissen und Speicherzuweisung für Variablen, Sie sollten sich keine Sorgen über faule Bewertung, und es gibt keinen direkten Weg. Aber die Ausführung ist der Ort, an dem die schwere Arbeit stattfindet, und Sie können die Ausführung verzögern, indem Sie Dinge in Funktionsdefinitionen einschließen.

Es gibt hacky Möglichkeiten, faule Bewertung zu bekommen, wie z. B. Javascript in Strings setzen und eval verwenden, wann immer Sie den Code evaluieren und ausführen möchten, aber ich empfehle überhaupt eval nicht zu verwenden. und es gibt keine wirkliche Notwendigkeit, es zu tun.

+0

Sicher, aber der Code, den Sie geschrieben haben, wird geparst - da es viele JS gibt, dauert das Parsen 2.6 Sekunden. Ich möchte das auch vermeiden – Antoniossss

+0

hmm, dann glaube ich, dass Sie Ihren Code optimieren sollten, anstatt einen Weg zum "faulen Parse" zu finden. was meinst du dynamisch generiert? Chrome analysiert asynchrone und verzögerte Skripts in einem separaten Thread, sobald der Download begonnen hat. Das bedeutet, dass das Parsing nur wenige Millisekunden nach dem Download abgeschlossen werden kann und dass Seiten bis zu 10% schneller geladen werden. – Bamieh