/ Learning Log

Learning Log - Week #6

W tym tygodniu postanowiłem odświeżyć/poszerzyć wiedzę z zakresu silników JavaScriptu. Do tego szybkie przypomnienie czym jest i jak działa event loop. Ciekawej rzeczy dowiedziałem się także o jest. Czy wiedzieliście, że korzystając z jest-runnera możecie odpalić skrypty pythona? ...no właśnie, ja też nie wiedziałem ;) Zapraszam na #6-ty odcinek learning log'a.

JavaScript Engines: The Good Parts

W ostatnim odcinku wspomniałem, że z każdym dniem na oficjalnym kanale JSConf pojawiają się nowe filmy z ostatniej konferencji JSConf Europe. W tym tygodniu miałem przyjemność zobaczyć prezentację "JavaScript Engines: The Good Parts", którą poprowadzili Mathias Bynens i Benedikt Meurer. Jeżeli wolicie słowo pisane od filmu, to dostępny jest również blog post na ten temat ;)

Na rynku dostępnych jest wiele silników javascript:

  • V8 - użyty w Chrome i nodejs,
  • SpiderMonkey - napędzający Firefoxa,
  • Chakra - użyta w Edge'u,
  • JSC - JavaScriptCore - silnik, który znajdziemy w Safari

Podstawowym zadaniem silnika js jest przeparsowanie naszego kodu do postaci AST, czyli Abstract Syntax Tree, a następnie przetłumaczenie AST na kod maszynowy (bytecode). Dodatkowo, aby nasz kod "banglał" szybciej, bytecode może zostać zoptymalizowany przez kompilator optymalizujący. To tak z w wielkim skrócie ;) Jak zobaczycie na prezentacji, każdy silnik js implementuje wyżej opisany mechanizm nieco inaczej. Np. SpiderMonkey zamiast jednego kompilatora optymalizującego używa dwóch.

W dalszej części prezentacji dowiadujemy się między innymi o tym, jak silniki javascriptu implementują JavaScript object model, oraz jakich sztuczek używają, żeby przyspieszyć dostęp do atrybutów obiektu.

Mathias Bynens i Benedikt Meurer odwalili kawał dobrej roboty, opisując trudne rzeczy w bardzo przystępny sposób. Jeśli jeszcze nie widzieliście tej prezentacji to gorąco polecam:

Further Adventures of the Event Loop

Kolejną prezentacją jaką udało mi się w tym tygodniu obejrzeć była prelekcja Erin Zimmer na temat Event Loop'a - "Further Adventures of the Event Loop". Jest to doskonałe uzupełnienie prezentacji Philipa Robertsa z 2014 roku - What the heck is the event loop anyway?. Jeśli - tak jak ja - chcecie uporządkować sobie wiedzę na temat event loop'a to prezentacja Erin jest doskonałym wyborem. Mnóstwo humoru, jeszcze więcej przykładów...i to co mnie najbardziej urzekło - interaktywne przykłady, pokazujące jak wykonywane są taski z poszczególnych kolejek.

Interaktywny przykład z prezentacji Erin
Interaktywny przykład z prezentacji Erin (https://ejzimmer.github.io/event-loop-talk/)

Polecam gorąco :)

Make jest run anything

Jeśli przegapiliście "Dev Tips with Kent" o jest-runner - to śpieszę ze streszczeniem! Otóż od wersji 22 jest pozwala na użycie jest-runner'a do odpalenia innych skryptów np. python'a czy go - WOW - how awesome is that !? Nasuwa się tylko pytanie - dlaczego mam to robić? A otóż dlatego, że można przy tym skorzystać chociażby z trybu --watch, który odpala skrypty tylko dla zmodyfikowanych plików na podstawie git stage. Drugim powodem może być to, że "jest is 🔥blazing 🔥 fast" :) I rzeczywiście...zamiast odpalić standardowo np. eslinta, można użyć jest runner'a, który przejedzie nam eslintem po kilku plikach jednocześnie.

Po więcej szczegółów odsyłam do prezentacji Kent'a:

Oraz do konkretnych implementacji:

npm-quick-run

Ostatnią rzeczą, którą chciałbym się z wami dziś podzielić, jest pakiet npm-quick-run. Dzięki niemu szybko odpalicie swój skrypt z package.json używając krótkich aliasów. Ponad to możecie łatwo wylistować wszystkie dostępne skrypty.

$ nr t      # runs script starting with "t"
$ nr m -w   # runs a script starting with "m", probably "npm run mocha -- -w"
$ nr -i     # runs npm-quick-run in interactive mode

Kent, dzięki za tego tip'a! ;)


A Tobie drogi czytelniku dziękuję za uwagę! I zapraszam za tydzień na kolejny odcinek learning log'a.