Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Do hlubin implementací JavaScriptu: 1. díl - úvod

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Seriál je určen primárně pro zvídavé webové vývojáře pracující s JavaScriptem. Pro ty, které zajímá, jak všechno funguje pod povrchem, ale sami nikdy nenašli sílu či čas implementace JavaScriptu zkoumat. V průběhu seriálu budeme tedy předpokládat, že čtenář JavaScript v praxi používá a dobře zná, nebudeme ale předpokládat nic navíc. Není potřeba mít za sebou přednášku z tvorby kompilátorů apod. – všechny implementační techniky a pojmy budou vysvětleny. Předpokladům o čtenáři bude odpovídat také hloubka, do jaké budou jednotlivé oblasti probírány, a technická náročnost.

Proč toto téma a proč právě teď?

Historie

Pro plné pochopení, proč je právě v této době zajímavé se zabývat implementacemi JavaScriptu, je třeba se podívat do historie.

První verze JavaScriptu se objevila v roce 1995 v prohlížeči Netscape Navigator 2. JavaScript byl tehdy zamýšlen jako nástroj na doplnění jednoduchých dynamických prvků do webových stránek. Jeho typické použití byly validace formulářů na straně klienta a drobné efekty s obrázky – o moc víc s tehdejším JavaScriptem dělat nešlo. Programy v JavaScriptu tak měly většinou délku jen několika řádků.

Situace se změnila s příchodem Internet Exploreru 4, který jako první prohlížeč umožnil skriptům přistupovat k objektovému modelu celé stránky. Z JavaScriptu se tak dal měnit obsah libovolných částí stránky, přidávat obsah nový či naopak obsah mazat. Možnosti JavaScriptu se tím řádově rozšířily, objevila se spousta skriptů typu „moje super vyskakovací menu“ a průměrná délka skriptů ve stránkách podstatně vzrostla.

Dalším zlomem byl nástup AJAXu, který umožňoval stránkám komunikovat se serverem a zobrazovat uživateli nový obsah či provádět různé akce, aniž by bylo nutné nové načtení stránky. Pamětníci vědí, jaký poprask způsobilo uvedení GMailu – první aplikace, která byla na JavaScriptu a AJAXu kompletně postavená a nemohla bez nich fungovat. Takových aplikací je dnes mnoho a jejich společným rysem je, že obsahují stovky kB javascriptové­ho kódu.

Posledním důležitým bodem ve vývoji JavaScriptu byl nástup knihoven typu Prototype a jQuery. Jejich cílem je usnadnit práci s DOM a skrýt některé rozdíly mezi prohlížeči. Důsledkem je, že prakticky každá nová stránka si dnes s sebou nese desítky kB JavaScriptového kódu a při běžných operacích se vykoná více javascriptových příkazů, než tomu bylo bez knihoven.

Z předchozích odstavců je vidět jednoznačný trend – důležitost JavaScriptu, jeho složitost a množství obsažené ve webových stránkách postupně rostlo, a to o několik řádů. Naproti tomu implementace v prohlížečích zůstávaly po mnoho let prakticky nezměněné, když pomineme přidávání nových vlastností a občasnou příležitostnou optimalizaci.

Současnost

V posledním cca roce se ale situace změnila. Výrobci prohlížečů si začali uvědomovat, že javascriptové interprety se stávají úzkým hrdlem mnohých webových aplikací a v nejednom případě jsou hlavní příčinou jejich pomalosti. Začali na rychlosti JavaScriptu intenzivně pracovat a vše se postupně vyhrotilo až do podoby závodu (především mezi prohlížeči Firefox a Safari), kdy se jednotlivé strany přetahují o prvenství v několika různých rychlostních testech a odpovědí na momentální vítězství strany jedné je obvykle velice rychle nová verze interpretu strany druhé, která situaci opět mění. Z toho samozřejmě v důsledku nejvíc těží uživatel, kterému webové aplikace poběží s každou novou verzí jeho prohlížeče podstatně rychleji.

Ze širšího pohledu je také velice zajímavé, že zrychlování JavaScriptu posouvá „state-of-art“ v oblasti interpretace dynamických jazyků obecně. Dynamické skriptovací jazyky (kam JavaScript patří) totiž obvykle slouží jen jako „lepidlo“ komponent napsaných v jiných, rychlejších jazycích. Jejich rychlost tak není kriticky důležitá a tím pádem se výzkum v oblasti jejich interpretace nedostal příliš daleko – na rozdíl od oblasti kompilace „klasických“ statických jazyků, která je intenzivně zkoumána přes 30 let. Na tom nic nezměnilo ani časté nasazení dynamických jazyků ve webových aplikacích, protože zde je obvykle největší brzdou I/O, resp. databáze. JavaScript je první dynamický jazyk, jehož rychlost je klíčová a zároveň je dostatečně rozšířený na to, aby vznikla dostatečná poptávka po tom ho významně zrychlit.

Důsledkem je, že díky JavaScriptu poněkud ožil výzkum v oblasti interpretace dynamických jazyků, a to jak v týmech zabývajících se vývojem javascriptových interpretů, tak i na univerzitách (např. s technikou tracingu, kterou bude používat interpret JavaScriptu v příští verzi Firefoxu, přišli výzkumníci z University of California). Z tohoto výzkumu můžou samozřejmě těžit i všechny ostatní dynamické jazyky, jako třeba PHP, Perl, Python a nebo Ruby. (Jiná otázka je, jestli skutečně těžit budou.)

Jak je vidět, oblast interpretů JavaScriptu je v současné době pěkně „horká“ a dějí se v ní poměrně zajímavé věci. Právě to je hlavní motivací pro sérii článků, která by tuto oblast zmapovala.

Co nás čeká v příštích dílech?

V příštím díle se podíváme na některé rysy JavaScriptu, které činí největší problémy při jeho implementaci (z pohledu rychlosti). Stručně se také seznámíme se všemi významnými implementacemi JavaScriptu.

TIB2012

       

V dalších částech seriálu si podrobněji představíme javascriptový interpret zobrazovacího jádra WebKit SquirrelFish, protože ve své původní implementaci je poměrně jednoduchý a budeme si tak na něm moci vysvětlit základní optimalizační techniky. Poté se podíváme na SpiderMonkey používaný ve Firefoxu (včetně jeho vývojové varianty TraceMonkey) a také na nového hráče – V8 od Googlu, který je součástí prohlížeče Google Chrome.

Na úplný závěr seriálu se seznámíme s některými rychlostními testy JavaScriptu – výrobci prohlížečů pomocí nich rádi ukazují, jak se jejich implementace oproti dřívějšku zlepšila. Je docela užitečné vědět, co testy doopravdy testují a umět interpretovat prezentované grafy.

Anketa

Bude mít zrychlení JavaScriptu vliv i na rychlost dalších dynamických jazyků?

       

David Majda

Autor je vývojář na volné noze se zájmem o programovací jazyky, webové aplikace a problémy programování jako takového. Vystudoval informatiku na MFF UK a během studií zde i trochu učil.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

RE: Do hlubin implementací JavaScriptu: 1. díl - úvod
Brut4r 30. 10. 2008 08:07
Nový
├ 
RE: Do hlubin implementací JavaScriptu: 1. díl - úvod
Jan Válek 30. 10. 2008 08:37
Nový
└ 
RE: Do hlubin implementací JavaScriptu: 1. díl - úvod
m 30. 10. 2008 08:53
Nový
 
├ 
RE: Do hlubin implementací JavaScriptu: 1. díl - úvod
Mazarik 30. 10. 2008 09:52
Nový
 
└ 
RE: Do hlubin implementací JavaScriptu: 1. díl - úvod
maros 3. 11. 2008 11:34
Nový
Rhino
Radek 30. 10. 2008 10:02
Nový
└ 
Re: Rhino
David Majda 30. 10. 2008 11:37
Nový
Smalltalk
maros 30. 10. 2008 14:52
Nový
├ 
Re: Smalltalk
tomas z. 30. 10. 2008 15:45
Nový
│
└ 
Re: Smalltalk
David Majda 31. 10. 2008 09:33
Nový
└ 
Re: Smalltalk
David Majda 31. 10. 2008 09:25
Nový
 
└ 
Re: Smalltalk
tomas z. 31. 10. 2008 12:31
Nový
 
 
├ 
Re: Smalltalk
Ladislav Thon 31. 10. 2008 19:12
Nový
 
 
└ 
Re: Smalltalk
David Majda 31. 10. 2008 19:58
Nový
RE: Do hlubin implementací JavaScriptu: 1. díl - úvod
anonymní uživatel 31. 10. 2008 06:34
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem