Tajniki jezyka JavaScript Asynchronicznosc i wydajnosc.pdf

(1012 KB) Pobierz
Tytuł oryginału: You Don't Know JS: Async & Performance
Tłumaczenie: Robert Górczyński
ISBN: 978-83-283-2172-4
© 2016 Helion SA.
Authorized Polish translation of the English edition You Don't Know JS: Async & Performance ISBN
9781491904220 © 2015 Getify Solutions, Inc.
This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all
rights to publish and sell the same.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były
kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane
z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie
ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji
zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail:
helion@helion.pl
WWW:
http://helion.pl
(księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/tjsasy
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
Lubię to! » Nasza społeczność
Spis treści
Przedmowa .......................................................................................................................5
Wprowadzenie ..................................................................................................................7
1. Asynchroniczność — teraz i później .................................................................................11
Program we fragmentach
Pętla zdarzeń
Równoległe wykonywanie wątków
Współbieżność
Zadania
Kolejność poleceń
Podsumowanie
12
14
16
21
28
30
32
2. Wywołania zwrotne .........................................................................................................33
Kontynuacja
Sekwencyjny mózg
Kwestie zaufania
Próba uratowania wywołań zwrotnych
Podsumowanie
34
35
41
45
49
3. Obietnice .........................................................................................................................51
Czym jest obietnica?
Określanie typu na podstawie then()
Kwestie zaufania i obietnice
Łańcuch przepływu kontroli
Obsługa błędów
Wzorce obietnic
Powtórzenie wiadomości o API obietnic
Ograniczenia obietnic
Podsumowanie
52
60
63
71
79
85
92
95
106
4. Generatory .................................................................................................................... 107
Złamanie zasady „działanie aż do zakończenia”
Generowanie wartości przez generator
107
116
3
Kup książkę
Poleć książkę
Asynchroniczna iteracja przez generatory
Generatory plus obietnice
Delegowanie generatora
Współbieżność generatorów
Koncepcja thunk
Generatory istniejące przed wydaniem ES6
Podsumowanie
123
126
135
142
146
152
158
5. Wydajność programu .....................................................................................................159
Architektura wątków roboczych
SIMD
asm.js
Podsumowanie
160
165
167
170
6. Testy wydajności i dostrajanie ........................................................................................173
Testy wydajności
Kontekst ma znaczenie
jsPerf.com
Tworzenie dobrych testów
Mikrowydajność
Optymalizacja rekurencji ogonowej
Podsumowanie
173
177
180
183
184
191
192
A Biblioteka asynquence ...................................................................................................195
Projekt oparty na sekwencji
API biblioteki asynquence
Sekwencje wartości i błędu
Obietnice i wywołania zwrotne
Iterowane sekwencje
Uruchamianie generatorów
Podsumowanie
196
198
208
209
210
211
213
B Zaawansowane wzorce asynchroniczności ......................................................................215
Iterowane sekwencje
Zdarzenia reaktywne
Współprogram generatora
Koncepcja języka CSP
Podsumowanie
215
221
225
229
233
C Podziękowania ..............................................................................................................234
Skorowidz .....................................................................................................................237
4
Spis treści
Poleć książkę
Kup książkę
ROZDZIAŁ 3.
Obietnice
W rozdziale 2. przedstawiłem dwie główne kategorie wad użycia wywołań zwrotnych w celu wyraże-
nia asynchroniczności w programie oraz zarządzania współbieżnością: brak sekwencyjności i brak
zaufania. Skoro dokładnie poznałeś problemy, to możemy przejść do wzorców pozwalających na
ich rozwiązanie.
Problemem, którym chcę się zająć na początku, jest odwrócenie kontroli. Zaufanie to dość delikatna
materia i bardzo łatwo można je stracić.
Przypomnij sobie, jak kod zapewniający kontynuację działania programu umieściliśmy w funkcji
wywołania zwrotnego przekazywanego później do innej części kodu (potencjalnie nawet do zewnętrz-
nego) i trzymaliśmy kciuki, aby ten kod działał prawidłowo po uruchomieniu wywołania zwrotnego.
Zdecydowaliśmy się na takie podejście, ponieważ chcieliśmy wyrazić: „Oto co się wydarzy
później,
po zakończeniu wykonywania bieżących kroków”.
Czy można zrobić cokolwiek, aby nie dochodziło do wspomnianego odwrócenia kontroli? Czy
nie lepiej zastosować zupełnie inne podejście — zamiast przekazywać na zewnątrz kod kontynu-
ujący działanie programu, oczekiwać poinformowania o zakończeniu zadania, co pozwoli kodowi
programu na określenie kolejnych kroków?
Takie podejście jest określane mianem
obietnicy.
Obietnice zaczęły szturmem zdobywać świat JavaScript, ponieważ programiści i twórcy specyfi-
kacji rozpaczliwie szukali sposobu na wyrwanie się z piekła wywołań zwrotnych. Tak naprawdę
większość nowych asynchronicznych API dodawanych na platformie JavaScript i DOM została
zbudowana na bazie obietnic. Dlatego też dobrym pomysłem będzie dokładne poznanie obietnic.
Słowo „natychmiast” jest dość często używane w rozdziale i ogólnie rzecz biorąc, odnosi się do
pewnej akcji rozwiązania obietnicy. Jednak w praktycznie wszystkich przypadkach, słowa
„natychmiast” użyłem w odniesieniu do zachowania kolejki zadań (patrz rozdział 1.), a nie
w sensie ściśle synchronicznego
teraz.
51
Kup książkę
Poleć książkę
Zgłoś jeśli naruszono regulamin