Tento článek otevírá nový seriál, který bude věnován implementacím JavaScriptu. Postupně si v něm představíme nejdůležitější současné interprety tohoto jazyka (především ty obsažené ve webových prohlížečích) a u některých vybraných se podrobněji podíváme, jak vypadají uvnitř. Nejvíc nás přitom bude zajímat, jaké techniky se v nich používají pro optimalizaci a urychlení spouštěného kódu.
Ve druhém dílu seriálu o implementacích JavaScriptu se podíváme na to, proč není snadné JavaScript rychle interpretovat, a které vlastnosti tohoto jazyka mají největší negativní vliv na jeho výkon. Zaměříme se přitom na problémy způsobené jeho dynamičností.
Do hlubin implementací JavaScriptu: 3. díl – výkonnostně nepříjemné konstrukce (díl 3)
Komentáře: 19V dnešním dílu seriálu zakončíme obecné povídání o rychlosti interpretace JavaScriptu. Podíváme se na funkci eval, dále na to, jak výkonnostně nepříjemná může být možnost zjistit informace o parametrech funkcí na zásobníku a také na příkaz with. Na závěr si stručně povíme, jak jsou interprety obvykle implementované.
Dnešním dílem opouštíme teorii a začínáme se věnovat konkrétním implementacím JavaScriptu. Dnes stručně projdeme ty, které jsou k nalezení uvnitř webových prohlížečů Internet Explorer, Firefox, Safari, Opera, Google Chrome a několika dalších. Ukážeme si, co je pro ně charakteristické.
V tomto dílu dokončíme přehled implementací JavaScriptu a podíváme se, kde všude kromě webových prohlížečů se dá tento jazyk najít. JavaScript můžeme totiž používat také v Javě, Flashi, .NETu, ale třeba i na webovém serveru Apache, v Emacsu a v několika jiných nečekaných prostředích.
Tímto dílem začínáme část seriálu o implementacích JavaScriptu, která se bude věnovat vnitřnostem konkrétních implementací. Začneme s popisem vybraných částí interpretu SquirrelFish – podíváme se, jak se v něm reprezentují hodnoty javascriptových proměnných a jak je navržen jeho virtuální stroj a bajtkód.
Dnes se budeme věnovat tomu, jak urychlit vykonávání instrukcí bajtkódu JavaScriptu ve virtuálním stroji SquirrelFish. Představíme si přitom techniku direct threading, která zrychluje dispatching instrukcí, a další optimalizace. Na závěr článku se podíváme, jak je na tom SquirrelFish s generováním nativního kódu.
V dnešní části seriálu dokončíme povídání o interpretu SquirrelFish. Podíváme se na to, jakým způsobem urychluje práci s regulárními výrazy a jak optimalizuje přístup k vlastnostem objektů. Článek zakončíme popisem některých optimalizací, které jeho vývojáři chtějí implementovat v blízké budoucnosti.
Tímto dílem seriálu o interpretech JavaScriptu zahajujeme část věnovanou interpretu SpiderMonkey. Dnes si ho představíme a popíšeme si, jak v něm probíhá zpracování javascriptového kódu. Pozastavíme se také nad jeho reprezentací hodnot a optimalizacemi, které umožňují efektivní práci s řetězci a poli.
V předchozím dílu našeho seriálu jsme si představili SpiderMonkey, interpret JavaScriptu ve Firefoxu. Dnes si povíme o jeho vývojové verzi TraceMonkey, která zvládá kompilaci do nativního kódu pomocí nové techniky zvané trace trees. Vyzkoušet si ji můžete v betaverzích Firefoxu 3.1.