WebAssembly. JavaScript history.


Każdy temat fajnie odpowiada się, jeśli to jest historia. Zacznijmy więc trochę od historii skąd się wzięło WebAssembly.

Back in the days czyli WWW 

W roku 1991 sir Tim Berners-Lee stwierdził, że nie chce mu się już biegać od komputera do komputera, aby dowiedzieć się nad czym pracują naukowcy w instytucie CERN. Dlatego zaproponował system, który miałby być rozwiązaniem tego problemu. Czyli system współdzielenia pomiędzy różnymi komputerami pewnych zasobów, w tym wypadku pracy naukowej naukowców.
W ten sposób powstała pierwsza strona WWW, która jest dostępna pod tym linkiem jako monumentu historyczny dla tej pierwszej strony.
Sir Tim Berners-Lee
Tego pana warto obserwować, ponieważ nie tyko był on twórcom pierwszej strony internetowe i przez to jest uznawany za twórcę całego Internetu, ale również teraz działa na rzecz wolnego Internetu. Tim nawołuje do odebrania władzy największym giganta takim jak Facebook czy Google i decentralizacji Internetu przy pomocy technologii BlockChain.
Pierwsze strony internetowe to tylko zawartość tekst, potem obrazki i ewentualnie jakieś kolorki, połączone hyper linkami prowadzącymi do kolejnych treści.
Jedną interakcje z taką stroną miało miejsce właśnie przez Hyper Linki.

Narodziny JavaScript

Hyperlinki to trochę mało, zwłaszcza dla potentata na rynku przeglądarek tamtego okresu Netspace. Dlatego ogłoszono burzę mózgów podczas której miał powstać nowy język, dodający interaktywności po stronie klienta do strony HTML. Założenia były takie, że nowy język musi być podobny do któregoś obecnie żyjącego języka, tak aby programiści mogli łatwo się przystosować, zacząć programować. Musiał być też bardzo prosty, dokładnie z tych samych powodów oraz zrozumiały dla człowieka, również po stronie przeglądarki.
Z tych założeń powstał język JavaScript zaproponowany przez Brendana Eich i stworzony w zaledwie 10 dni.

Jedną z najważniejszych cech tego języka miała być jego czytelność dla człowieka na każdym etapie pracy z językiem, czyli również po stronie przeglądarki. To ograniczenie, ta cecha odbiła się negatywnie na wydajność języka. Ponieważ jest to język tekstowy, zrozumiały dla człowieka, to przeglądarka musi ten tekst jakoś zinterpretować. Czyli sparsować, stworzyć Abstract Syntax Tree i wygenerować kod, który będzie już w stanie się uruchomić, wykonać jakąś akcję

*Wiele obrazków jest zaczerpniętych z prezentacji Lin Clark.


Ten wykres pokazuje, że czas wykonania jest raczej długi.

Pluginy

Potrzeba zwiększenia interaktywności po stronie klienckiej była realizowana również przez pluginy. Pluginy pozwalały uruchamiać kod napisany w innych językach po stronie przeglądarki. Niestety miały bardzo dużą wadę, mianowicie trzeba było je dodatkowo zainstalować. Nie zawsze i wszędzie jest to możliwe np. w korporacjach. Instalowanie pluginów otwierało też naszą maszynę na dodatkowe niebezpieczeństwo. Złośliwe oprogramowanie.


Większość pluginów odeszło już w zapomnienie. Słowo, którego nie należy wypowiadać w .Netowym świecie czyli Silverlight niebawem straci wsparcie. To jedna z ciekawszych technologii jaką Microsoft wypuścił, która szybko zdobyła serca programistów i umarła z niewiadomych powodów, po cichutku. Jednak kod pozostał.

Wojny przeglądarek

W roku 2008 rozpoczęła się wydajnościowe wojny przeglądarek.
W wyniku tego procesu JavaScript otrzymał kompilatory JIT (Just in Time), a co za tym idzie silniki uruchomieniowe takie i jak V8, SpiderMonkey, Chakra i inne.
Silniki potrafią preoptymalizować i optymalizować kod, ‘rozgrzewać’ funkcje, tak aby uruchamiały się najszybciej jak to możliwe. Jeśli optymalizacja da rezultaty inne niż oczekiwane funkcje są degradowane, inne znów przygotowywane i tak w kółko. Niektóre silniki mają cztery poziomy optymalizacji. Na koniec mamy jeszcze Garbage Collection. Cały proces optymalizacji i sprzątania jest wykonywany ciągle w trakcie życia aplikacji.
W pewnym momencie powstał koncept ASM.js, który miał być generowanym w locie bite codem i najoptymalniejszą opcją uruchamiania JS, jednak każda przeglądarka interpretowała go inaczej, więc wyniki nie były jednorodne i wiarygodne.

Teraz kod jest uruchomiony na zasadzie: parsowanie, kompilacja, optymalizacja, reorganizacja wszystkich wywołań, uruchomienie, Garbage collection. Proces ten dzieje się cały czas w czasie uruchamiania kodu, czyli w czasie działania naszego programu. Im dłużej użytkownik używa aplikacji tym lepiej przeglądarka radzi sobie z przewidywaniem jakie funkcje zostaną następnie użyte.




JavaScript dziś

Dzięki tym wszystkim zmianom i silnikom jak V8, ilość frameworków i możliwości jakie stanęły otworem przed JavaScriptem jest nie ograniczona. Dlatego obecnie mamy bardzo dużo JavaScriptu, co jest troszkę smutne, ponieważ JavaScript stał się językiem weba, natomiast nie jest on językiem assembly.




A tutaj inne spojrzenie. The Weird History of JavaScript.

Komentarze

Popularne posty