tag:forum.selfhtml.org,2005:/self JavaScript parser animation – SELFHTML-Forum 2016-06-14T19:50:23Z https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669060#m1669060 MB 2016-06-10T22:49:43Z 2016-06-10T22:49:43Z JavaScript parser animation <p>Moin!</p> <p>ich möchte gerne wissen...</p> <ul> <li>...ob der Parser <em>javascript</em> für animationen einließt und in <em>bytecode</em> umwandelt, sodas er den <em>Sourcecode</em> nicht mehr benötigt um zu animieren</li> <li>...oder muss er alle naslang den <em>sourcecode</em> neu interpretieren?</li> </ul> <p>Schöne Nacht und Guten morgenn,</p> <p>MBLG</p> <p><em>PS.: Ich weis das man um animationen zu wirken CSS 3 verwendet. Rein aus neugier und interesse.</em></p> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669069#m1669069 dedlfix 2016-06-11T07:21:14Z 2016-06-11T07:21:14Z JavaScript parser animation <p>Tach!</p> <blockquote> <ul> <li>...ob der Parser <em>javascript</em> für animationen einließt und in <em>bytecode</em> umwandelt, sodas er den <em>Sourcecode</em> nicht mehr benötigt um zu animieren</li> <li>...oder muss er alle naslang den <em>sourcecode</em> neu interpretieren?</li> </ul> </blockquote> <p>Ein Parser hat nur die Aufgabe, Quellcode zu analysieren und in seine Bestandteile zu zerlegen. Kompilieren und Ausführen gehören nicht zu seinem Aufgabengebiet.</p> <p>Wie eine Javascript-Engine intern arbeitet, ist Sache der konkreten Engine. Die Frage kann man nicht allgemein beantworten und eine mögliche Antwort auf einen konkreten Fall wäre auch nicht allgemeingültig. Die Beantwortung der Frage bringt dich nicht weiter, an den Gegebenheiten kannst du nichts ändern. Wenn dir etwas zu lange dauert, dann musst du dafür eine konkrete Lösung suchen, und du musst das für jede Engine / jeden Browser getrennt untersuchen. Und für den nächsten Fall musst du möglicherweise wieder von vorn anfangen.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669071#m1669071 Der Martin 2016-06-11T09:59:08Z 2016-06-11T09:59:08Z JavaScript parser animation <p>Hallo,</p> <blockquote> <p>ich möchte gerne wissen...</p> <ul> <li>...ob der Parser <em>javascript</em> für animationen einließt und in <em>bytecode</em> umwandelt, sodas er den <em>Sourcecode</em> nicht mehr benötigt um zu animieren</li> <li>...oder muss er alle naslang den <em>sourcecode</em> neu interpretieren?</li> </ul> </blockquote> <p>man kann wohl davon ausgehen, dass die meisten Javascript-Engines den Code beim Parsen in eine interne Darstellung umwandeln, die dann performanter zu verarbeiten ist als der Quellcode selbst. Und das gilt natürlich nicht nur für Animationen, sondern für die Verwendung von Javascript generell.<br> Ob man das als "Bytecode" bezeichnen mag ... okay, warum nicht.</p> <p>Das ist aber nur eine Vermutung, basierend auf dem Wissen, dass <strong>manche</strong> Javascript-Engines so vorgehen. Und wie dedlfix schon audführte: Ob du das nun weißt oder nicht, nützt dir nicht wirklich.</p> <blockquote> <p><em>PS.: Ich weis das man um animationen zu wirken CSS 3 verwendet. Rein aus neugier und interesse.</em></p> </blockquote> <p>Kommt auf die Art der Animation an. <em>Alles</em> kann CSS auch nicht, und JS ist sicher flexibler.</p> <p>So long,<br>  Martin</p> <div class="signature">-- <br> Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.<br> - Douglas Adams, The Hitchhiker's Guide To The Galaxy </div> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669089#m1669089 MB 2016-06-12T12:45:42Z 2016-06-12T12:45:42Z JavaScript parser animation <blockquote> <p>Ein Parser hat nur die Aufgabe, Quellcode zu analysieren und in seine Bestandteile zu zerlegen. Kompilieren und Ausführen gehören nicht zu seinem Aufgabengebiet.</p> </blockquote> <p>Nicht gewusst, danke.</p> <blockquote> <p>Wie eine Javascript-Engine intern arbeitet, ist Sache der konkreten Engine. Die Frage kann man nicht allgemein beantworten und eine mögliche Antwort auf einen konkreten Fall wäre auch nicht allgemeingültig.</p> </blockquote> <p>Das habe ich leider vermutet</p> <p>Danke für die AW</p> <p>VLG MB</p> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669091#m1669091 MB 2016-06-12T12:50:04Z 2016-06-12T12:50:04Z JavaScript parser animation <p>Moin Martin,</p> <blockquote> <p>man kann wohl davon ausgehen, dass die meisten Javascript-Engines den Code beim Parsen in eine interne Darstellung umwandeln, die dann performanter zu verarbeiten ist als der Quellcode selbst.</p> </blockquote> <p>verstehe.</p> <blockquote> <blockquote> <p><em>PS.: Ich weis das man um animationen zu wirken CSS 3 verwendet. Rein aus neugier und interesse.</em></p> </blockquote> <p>Kommt auf die Art der Animation an. <em>Alles</em> kann CSS auch nicht, und JS ist sicher flexibler.</p> </blockquote> <p>Ganz genau. Aber gut das du es nochmal bestätigt hast</p> <p>vgl mb</p> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669283#m1669283 Rolf b 2016-06-14T10:02:43Z 2016-06-14T10:02:43Z JavaScript parser animation <p>Es wird wohl keine JavaScript Engine geben, die den Quelltext ständig neu interpretiert. So dumm wäre ja nicht mal ich.</p> <p>Es wird immer so sein, dass Syntaxprüfung und Umwandlung in ein Format, das man "nur noch" ausführen muss, beim Laden stattfinden. Das resultierende Format ist dann sehr verschieden, und bereits auf dieser Stufe sind unterschiedliche Grade von Optimierung möglich.</p> <p>Es gibt auch JavaScript Engines, die nativen Maschinencode erzeugen. Wobei das auch nicht UNBEDINGT performanter sein muss. Man kann auch Maschinencode erzeugen, der aus einem Bibliotheksaufruf nach dem anderen besteht (Auabeispiel: IBM PC BASIC Compiler aus den 80ern: Reserviert die ganze Soft-Interrupt Tabelle für sich und macht aus jedem Befehl einen Interrupt-Aufruf). Viele Pseudocode-Interpreter laufen aber auf das gleiche Vorgehen heraus: Lies Pseudocode-Byte, hole Bibliotheksadresse dazu aus Tabelle, CALL, lies Pseudocodebyte, etc. Das KANN gelegentlich sehr fix sein und kompakten Code erzeugen (Clipper Compiler für dBase, 90er Jahre).</p> <p>Der Unterschied in der Performance entsteht im Ausführungsmodell. Viele Pseudocode-Engines verfolgen ein Stackmodell: Sie schieben alle Arbeitsdaten auf einen Stack und rufen dann Bibliotheksfunktionen auf, die auf der Stackspitze operieren. (Push 3, Push 5, Add -> nimmt die 5 vom Stack und ersetzt die 3 durch eine 8). Wer mal einen HP Taschenrechner mit UPN hatte, kennt das :). Dabei finden viele Speicher-zu-Speicher Transfers statt. Ein guter JIT (just-in-time Compiler) ist im Stande, diese Stackoperationen in Registeroperationen passend zur Architektur des Prozessors zu übersetzen, und ggf. zu erkennen, dass ein Wert nur temporär ist, gleich wiederverwendet wird und daher im Register bleiben kann ohne im Speicher geparkt werden zu müssen. Schlaurere JIT sortieren auch deine Anweisungen um, wenn das Ergebnis logisch gleich bleibt und dadurch die Registerausnutzung besser ist oder die internen Abhängigkeiten im Prozessor besser koordiniert werden. Natürlich - je schlauer der JIT, desto länger muss er grübeln und desto länger braucht es, bis dein Programm anfängt, etwas zu tun. Es ist immer ein Balanceakt. Auf deinem Handy wirst Du eher einen dummen JIT finden, in Umgebungen wie node.js wird ein besserer JIT sitzen weil diese Umgebungen für länger laufende Scripte ausgelegt sind.</p> <p>JavaScript ist ein relativ schwieriger Optimierungskunde, weil jedes Objekt in JavaScript eine Key-Value Map ist, die dynamisch modifiziert werden kann und nur die Spitze eines Eisbergs (sprich: Prototype-Chain) ist. Bei jedem Zugriff auf ein Property muss neu geprüft werden, wo das Property denn nun tatsächlich steckt. Und bei jedem Zugriff auf eine nicht-lokale Variable muss die gerade gültige Scope-Chain abgegrast werden. Die Optimierung dieser Zugriffe ist zentral für JavaScript, da ist ein JIT der nativen Maschinencode ausspuckt weniger wichtig. Diese Aufgabe löst jede JS Engine anders und unterschiedlich gut.</p> <p>Rolf</p> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669286#m1669286 Der Martin 2016-06-14T10:15:39Z 2016-06-14T10:15:39Z JavaScript parser animation <p>Hallo Rolf,</p> <p>klasse Beitrag, finde ich!</p> <p>Du gehst zwar nicht unbedingt in die Tiefe (ist hier auch gar nicht gefragt), reißt aber eine Menge wesentlicher Aspekte an und regst den Leser an, selbst weiterzudenken.</p> <p>Aber das Tag <strong>klugscheißerei</strong> hätte ich mir an deiner Stelle nicht angeheftet. Das klingt so negativ.</p> <p>So long,<br>  Martin</p> <div class="signature">-- <br> Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.<br> - Douglas Adams, The Hitchhiker's Guide To The Galaxy </div> https://forum.selfhtml.org/self/2016/jun/11/javascript-parser-animation/1669315#m1669315 MB 2016-06-14T19:50:23Z 2016-06-14T19:50:23Z JavaScript parser animation <p>nabed Rolf,</p> <p>wow, sehr gut erklärt, Danke. Und sehr viele Fachbegriffe. Das weckt natürlich meine neugier. Nur grober Abriss: Wa sind die Begriffe die u nicht erklärt hasst? Ich kenne JIT nur am rande. Mich interessieren andere Begriffe die du genannt hast.</p> <blockquote> <p>JavaScript ist ein relativ schwieriger Optimierungskunde, weil jedes Objekt in JavaScript eine Key-Value Map ist, die dynamisch modifiziert werden kann und nur die Spitze eines Eisbergs (sprich: Prototype-Chain) ist.</p> </blockquote> <p>Was ist Key-Value Map, Prototype-Chain, Scope-Cain? Ich kenne aber den Begriff Prototyp in JavaScript und allgemein Scope in OOP.</p> <p>vlg MB</p>