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
+41-41Lines changed: 41 additions & 41 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ Conceptul *event loop* este foarte simplu. Există o buclă fără sfârșit, î
13
13
14
14
Algoritmul general al motorului:
15
15
16
-
1. În timp ce există sarcini:
16
+
1. În timp ce sunt sarcini:
17
17
- le execută, începând cu cea mai veche sarcină.
18
18
2. Doarme până când apare o sarcină, apoi treceți la 1.
19
19
@@ -115,7 +115,7 @@ O singură execuție a lui `count` face o parte din treabă `(*)`, și apoi se r
115
115
116
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.
117
117
118
-
Lucrul notabil este că ambele variante -- cu și fără diviziunea muncii prin `setTimeout` -- sunt comparabile ca viteză. Nu există o diferență prea mare în timpul total pentru numărare.
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
120
120
Pentru a le face mai apropiate, să facem o îmbunătățire.
121
121
@@ -152,7 +152,7 @@ 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, există 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 se execută.
156
156
157
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.
158
158
@@ -236,17 +236,17 @@ menu.onclick = function() {
236
236
};
237
237
```
238
238
239
-
## Macrotasks and Microtasks
239
+
## Macrotasks și Microtasks
240
240
241
-
Along with*macrotasks*, described in this chapter, there are *microtasks*, mentioned in the chapter<info:microtask-queue>.
241
+
Alături de*macrotasks*, descrise în acest capitol, mai sunt și *microtasks*, menționate în capitolul<info:microtask-queue>.
242
242
243
-
Microtasks come solely from our code. They are usually created by promises: an execution of `.then/catch/finally`handler becomes a microtask. Microtasks are used "under the cover" of`await`as well, as it's another form of promise handling.
243
+
Microtask-urile provin exclusiv din codul nostru. Ele sunt de obicei create prin promisiuni: o execuție a gestionarului `.then/catch/finally`devine un microtask. Microtask-urile sunt folosite "sub capacul" lui`await`de asemenea, deoarece este o altă formă de gestionare a promisiunilor.
244
244
245
-
There's also a special function `queueMicrotask(func)`that queues `func`for execution in the microtask queue.
245
+
Mai este de asemenea o funcție specială `queueMicrotask(func)`care pune la coadă `func`pentru execuție în microtask queue.
246
246
247
-
**Immediately after every*macrotask*, the engine executes all tasks from *microtask* queue, prior to running any other macrotasks or rendering or anything else.**
247
+
**Imediat după fiecare*macrotask*, motorul execută toate sarcinile din *microtask* queue, înainte de a rula alte macrotasks sau a randa sau orice altceva.**
248
248
249
-
For instance, take a look:
249
+
De exemplu, aruncați o privire:
250
250
251
251
```js run
252
252
setTimeout(() =>alert("timeout"));
@@ -257,23 +257,23 @@ Promise.resolve()
257
257
alert("code");
258
258
```
259
259
260
-
What's going to be the order here?
260
+
Care va fi ordinea aici?
261
261
262
-
1.`code`shows first, because it's a regular synchronous call.
263
-
2.`promise`shows second, because`.then`passes through the microtask queue, and runs after the current code.
264
-
3.`timeout`shows last, because it's a macrotask.
262
+
1.`code`apare primul, pentru că este un apel sincron obișnuit.
263
+
2.`promise`apare al doilea, deoarece`.then`trece prin microtask queue, și se execută după codul curent.
264
+
3.`timeout`apare ultimul, deoarece este un macrotask.
265
265
266
-
The richer event loop picture looks like this (order is from top to bottom, that is: the script first, then microtasks, rendering and so on):
266
+
Imaginea mai bogată a event loop arată astfel (ordinea este de sus în jos, adică: mai întâi scriptul, apoi microtaskul, randarea și așa mai departe):
267
267
268
268

269
269
270
-
All microtasks are completed before any other event handling or rendering or any other macrotask takes place.
270
+
Toate microtask-urile sunt finalizate înainte de orice altă gestionare a evenimentelor sau randare sau orice alt macrotask.
271
271
272
-
That's important, as it guarantees that the application environment is basically the same (no mouse coordinate changes, no new network data, etc) between microtasks.
272
+
Asta este important, deoarece garantează că mediul aplicației este practic același (fără modificări ale coordonatelor mouse-ului, fără date de rețea noi etc.) între microtaskuri.
273
273
274
-
If we'd like to execute a function asynchronously (after the current code), but before changes are rendered or new events handled, we can schedule it with`queueMicrotask`.
274
+
Dacă dorim să executăm o funcție în mod asincron (după codul curent), dar înainte ca modificările să fie randate sau noi evenimente gestionate, o putem programa cu`queueMicrotask`.
275
275
276
-
Here's an example with "counting progress bar", similar to the one shown previously, but`queueMicrotask`is used instead of `setTimeout`. You can see that it renders at the very end. Just like the synchronous code:
276
+
Iată un exemplu cu "contorizarea barei de progres", similar cu cel prezentat anterior, dar`queueMicrotask`este folosit în loc de `setTimeout`. Puteți vedea că se randează chiar la sfârșit. La fel ca în cazul codului sincron:
277
277
278
278
```html run
279
279
<divid="progress"></div>
@@ -283,7 +283,7 @@ Here's an example with "counting progress bar", similar to the one shown previou
283
283
284
284
functioncount() {
285
285
286
-
//do a piece of the heavy job (*)
286
+
//face o parte din munca grea (*)
287
287
do {
288
288
i++;
289
289
progress.innerHTML= i;
@@ -301,39 +301,39 @@ Here's an example with "counting progress bar", similar to the one shown previou
301
301
</script>
302
302
```
303
303
304
-
## Summary
304
+
## Sumar
305
305
306
-
A more detailed event loop algorithm (though still simplified compared to the [specification](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)):
306
+
Un algoritm mai detaliat al event loop (deși este încă simplificat în comparație cu [specificația](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model)):
307
307
308
-
1.Dequeue and run the oldest task from the*macrotask* queue (e.g. "script").
309
-
2.Execute all*microtasks*:
310
-
-While the microtask queue is not empty:
311
-
-Dequeue and run the oldest microtask.
312
-
3.Render changes if any.
313
-
4.If the macrotask queue is empty, wait till a macrotask appears.
314
-
5.Go to step 1.
308
+
1.Retrage din coadă și rulează cea mai veche sarcină din*macrotask* queue (e.g. "script").
309
+
2.Execută toate*microtasks*:
310
+
-Cât timp microtask queue nu este goală:
311
+
-Retrage din coadă și rulează cel mai vechi microtask.
312
+
3.Randează modificări dacă există.
313
+
4.Dacă macrotask queue este goală, așteptă până când apare un macrotask.
314
+
5.Merge la pasul 1.
315
315
316
-
To schedule a new*macrotask*:
317
-
-Use zero delayed `setTimeout(f)`.
316
+
Pentru a programa un nou*macrotask*:
317
+
-Utilizați `setTimeout(f)` cu întârziere zero.
318
318
319
-
That may be used to split a big calculation-heavy task into pieces, for the browser to be able to react to user events and show progress between them.
319
+
Acest lucru poate fi folosit pentru a împărți o sarcină mare cu calcule grele în bucăți, pentru ca browserul să poată reacționa la evenimentele utilizatorului și să afișeze progresul între ele.
320
320
321
-
Also, used in event handlers to schedule an action after the event is fully handled (bubbling done).
321
+
De asemenea, utilizat în gestionarii de evenimente pentru a programa o acțiune după ce evenimentul este complet gestionat (bubbling done).
322
322
323
-
To schedule a new*microtask*
324
-
-Use`queueMicrotask(f)`.
325
-
-Also promise handlers go through the microtask queue.
323
+
Pentru a programa un nou*microtask*
324
+
-utilizați`queueMicrotask(f)`.
325
+
-De asemenea gestionarii de promisiuni trec prin coada de microtask-uri.
326
326
327
-
There's no UI or network event handling between microtasks: they run immediately one after another.
327
+
Între microtask-uri nu există gestionare de evenimente de interfață sau de rețea: acestea se execută imediat una după alta.
328
328
329
-
So one may want to `queueMicrotask`to execute a function asynchronously, but within the environment state.
329
+
Astfel se poate dori să folosiți `queueMicrotask`pentru a executa o funcție în mod asincron, dar în cadrul stării mediului.
330
330
331
331
```smart header="Web Workers"
332
-
For long heavy calculations that shouldn't block the event loop, we can use [Web Workers](https://html.spec.whatwg.org/multipage/workers.html).
332
+
Pentru calcule lungi și grele care nu ar trebui să blocheze event loop, putem folosi [Web Workers](https://html.spec.whatwg.org/multipage/workers.html).
333
333
334
-
That's a way to run code in another, parallel thread.
334
+
Aceasta este o modalitate de a rula codul într-un alt thread, în paralel.
335
335
336
-
Web Workers can exchange messages with the main process, but they have their own variables, and their own event loop.
336
+
Web Workers pot face schimb de mesaje cu procesul principal, dar au propriile variabile, și propriul lor event loop.
337
337
338
-
Web Workers do not have access to DOM, so they are useful, mainly, for calculations, to use multiple CPU cores simultaneously.
338
+
Web Workers nu au acces la DOM, așa că sunt utili, în principal, pentru calcule, pentru a utiliza mai multe nuclee CPU simultan.
0 commit comments