You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/99-ui-misc/03-event-loop/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,15 +46,15 @@ Până acum, destul de simplu, nu?
46
46
47
47
Aceasta a fost teoria. Acum să vedem cum putem aplica aceste cunoștințe.
48
48
49
-
## Cazul de utilizare 1: împărțirea sarcinilor flămânde de CPU
49
+
## Cazul de utilizare 1: împărțirea sarcinilor flămânde pentru CPU
50
50
51
-
Să presupunem că avem o sarcină flămândă de CPU.
51
+
Să presupunem că avem o sarcină flămândă pentru CPU.
52
52
53
53
De exemplu, evidențierea sintaxei (utilizată pentru a colora exemplele de cod de pe această pagină) este destul de grea pentru CPU. Pentru a evidenția codul, se efectuează analiza, se creează multe elemente colorate, se adaugă la document - pentru o cantitate mare de text, ceea ce necesită mult timp.
54
54
55
55
În timp ce motorul este ocupat cu evidențierea sintaxei, nu poate face alte lucruri legate de DOM, procesa evenimentele utilizatorului etc. Poate chiar să provoace browserul să "sughițe" sau chiar să se "blocheze" pentru un timp, ceea ce este inacceptabil.
56
56
57
-
Putem evita problemele împărțind sarcina mare în bucăți. Evidențiază primele 100 de rânduri, apoi programați`setTimeout` (cu întârziere zero) pentru următoarele 100 de rânduri, și așa mai departe.
57
+
Putem evita problemele împărțind sarcina mare în bucăți. Evidențiază primele 100 de rânduri, apoi programa`setTimeout` (cu întârziere zero) pentru următoarele 100 de rânduri, și așa mai departe.
58
58
59
59
Pentru a demonstra această abordare, de dragul simplității, în loc de evidențierea textului, să luăm o funcție care numără de la `1` la `1000000000`.
60
60
@@ -89,7 +89,7 @@ let start = Date.now();
89
89
90
90
functioncount() {
91
91
92
-
//face o parte din munca grea (*)
92
+
//să facă o parte din munca grea (*)
93
93
do {
94
94
i++;
95
95
} while (i %1e6!=0);
@@ -113,7 +113,7 @@ O singură execuție a lui `count` face o parte din treabă `(*)`, și apoi se r
113
113
2. A doua rulare numără: `i=1000001..2000000`.
114
114
3. ...și așa mai departe.
115
115
116
-
Acum, dacă apare o nouă sarcină secundară (de exemplu, evenimentul `onclick`) în timp ce motorul este ocupat cu execuția părții 1, aceasta este pusă la coadă și apoi se execută când partea 1 s-a terminat, înainte de partea următoare. Revenirile periodice la event loop între execuțiile `count` oferă suficient "aer" pentru ca motorul JavaScript să facă altceva, să reacționeze la alte acțiuni ale utilizatorului.
116
+
Acum, dacă apare o nouă sarcină secundară (e.g. evenimentul `onclick`) în timp ce motorul este ocupat cu execuția părții 1, aceasta este pusă la coadă și apoi se execută când partea 1 s-a terminat, înainte de partea următoare. Revenirile periodice la event loop între execuțiile `count` oferă suficient "aer" pentru ca motorul JavaScript să facă altceva, să reacționeze la alte acțiuni ale utilizatorului.
117
117
118
118
Lucrul notabil este că ambele variante -- cu și fără diviziunea muncii prin `setTimeout` -- sunt comparabile ca viteză. Nu este o diferență prea mare în timpul total pentru numărare.
119
119
@@ -152,9 +152,9 @@ Dacă o rulezi, este ușor de observat că durează semnificativ mai puțin timp
152
152
153
153
De ce?
154
154
155
-
Este simplu: după cum vă amintiți, este o întârziere minimă în browser de 4 ms pentru multe apeluri nested `setTimeout`. Chiar dacă setăm `0`, este `4ms` (sau un pic mai mult). Deci cu cât programăm mai devreme - cu atât mai repede se execută.
155
+
Este simplu: după cum vă amintiți, este o întârziere minimă în browser de 4 ms pentru multe apeluri nested `setTimeout`. Chiar dacă setăm `0`, este `4ms` (sau un pic mai mult). Deci cu cât programăm mai devreme - cu atât mai repede rulează.
156
156
157
-
În cele din urmă, am împărțit în părți o sarcină flămândă de CPU - acum nu blochează interfața cu utilizatorul. Iar timpul său total de execuție nu este cu mult mai mare.
157
+
În cele din urmă, am împărțit în părți o sarcină flămândă pentru CPU - acum nu blochează interfața utilizatorului. Iar timpul său total de execuție nu este cu mult mai mare.
158
158
159
159
## Cazul de utilizare 2: indicare de progres
160
160
@@ -183,7 +183,7 @@ Iată demonstrația, modificările aduse lui `i` nu vor apărea până când fun
183
183
</script>
184
184
```
185
185
186
-
...Dar este posibil să dorim să afișăm ceva în timpul sarcinii, e.g. o bară de progres.
186
+
...Dar este de asemenea posibil să dorim să afișăm ceva în timpul sarcinii, e.g. o bară de progres.
187
187
188
188
Dacă împărțim sarcina grea în bucăți folosind `setTimeout`, atunci modificările sunt pictate între ele.
189
189
@@ -213,10 +213,10 @@ Asta arată mai frumos:
213
213
</script>
214
214
```
215
215
216
-
Acum,`<div>` arată valorile crescânde ale lui `i`, un fel de bară de progres.
216
+
Acum `<div>`-ul arată valorile crescânde ale lui `i`, un fel de bară de progres.
217
217
218
218
219
-
## Cazul de utilizare 3: a face ceva după eveniment
219
+
## Cazul de utilizare 3: făcând ceva după eveniment
220
220
221
221
Într-un gestionar de evenimente putem decide să amânăm anumite acțiuni până când evenimentul a crescut și a fost gestionat la toate nivelele. Putem face asta prin ambalarea codului în `setTimeout` cu întârziere zero.
222
222
@@ -283,7 +283,7 @@ Iată un exemplu cu "contorizarea barei de progres", similar cu cel prezentat an
0 commit comments