Skip to content

Instantly share code, notes, and snippets.

@syranez
Created May 6, 2012 15:18
Show Gist options
  • Save syranez/2622881 to your computer and use it in GitHub Desktop.
Save syranez/2622881 to your computer and use it in GitHub Desktop.
Notizen zu "High Performance JavaScript"

Kapitel 1

  1. script-Tags unterbrechen den Aufbau der Seite. Code in script-Tags wird (runtergeladen,) geparst und sofort ausgeführt. Erst danach wird das nachfolgende HTML verarbeitet und dargestellt.
  2. Darum: So viele script-Tags wie möglich ans Ende des body-Tags setzen.
  3. Weil jedes script-Tag geparst und ausgeführt werden muss, sollte die Anzahl der script-Tags minimiert werden.
  4. defer-Attribut signalisiert dem Browser, dass keine DOM-Änderungen vorgenommen werden. Der Code wird erst ausgeführt, wenn der DOM komplett erzeugt wurde. Falls eine Script-URI angegeben ist, wird das Skript parallel runtergeladen.
  5. JavaScript kann dynamisch in die Seite eingefügt werden: script-Node einfügen. Sobald der Node eingefügt ist, wird der Code geparst und ausgeführt. Handler (onload, onreadystatechange) geben Auskunft darüber, wenn das Skript ausgeführt wurde.

Kapitel 2 - Data Access

  1. Data kann als literal value, in Variablen, Arrays und Objekten gespeichert werden. Nur bei datenreichen Anwendungen kann es sinnvoll sein, den Speicherort zu benchmarken und zu tunen.
  2. lokale Variablen sind schneller zu lesen als out-of-scope Variablen. Der Zugriff auf globale Variablen dauert immer am Längsten, weil diese am Ende der scope-chain sind.
  3. Ebenso prototype-chains und nested object members.
  4. Bei der Definition einer Funktion ist der scope-chain festgelegt. Dieser bleibt bei der weiteren Verwendung gleich (falls er nicht durch call, apply, bind... verändert wird)
  5. dynamic scopes => with, try-catch, eval.
  6. Führt der Interpreter eine Funktion aus, dann erzeugt er für diese (bei jedem Aufruf!) einen neuen execution context. Dieser definiert das environment in der die Funktion ausgeführt wird. Nach der Beendigung der Funktion wird der execution context entfernt. Der execution context erhält den Scope der Funktion zu dessen Definition. Zusätzlich wird an erster Position ein activition object eingefügt, das alle lokalen Variablen der Funktion (Parameter, über var definierte Variablen, in der Funktion definierte Funktionen, arguments-Objekt und this) enthält.
  7. Wird der catch-Block eines try-catch Statements ausgeführt, dann wird an den Anfang der scope chain ebenfalls ein activition object eingefügt, das das Exception-Objekt enthält. => Zugriffe auf lokale Variablen sind nun im zweiten scope-chain-Objekt.
  8. Eine closure ist im Grunde nur das activition object der definierenden Funktion.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment