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
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -81,6 +81,7 @@ count();
81
81
حتی ممکن است مرورگر اخطار «اسکریپت خیلی طولانی است» را نشان دهد.
82
82
83
83
بیایید کار را با استفاده از تماسهای `setTimeout` تودرتو تقسیم کنیم:
84
+
84
85
```js run
85
86
let i =0;
86
87
@@ -154,6 +155,7 @@ count();
154
155
این ساده است: همانطور که به یاد دارید، برای بسیاری از تماسهای تودرتوی `setTimeout`، حداقل تاخیر 4 میلیثانیه در مرورگر وجود دارد. حتی اگر `0` را تنظیم کنیم، `4 میلیثانیه` (یا کمی بیشتر) است. بنابراین هرچه زودتر آن را برنامه ریزی کنیم - سریعتر اجرا می شود.
155
156
156
157
در نهایت، ما یک کار تشنه CPU را به بخشهایی تقسیم کردهایم - اکنون رابط کاربری را مسدود نمیکند. و زمان اجرای کلی آن خیلی بیشتر نیست.
158
+
157
159
## Use case 2: progress indication
158
160
159
161
یکی دیگر از مزایای تقسیم وظایف سنگین برای اسکریپت های مرورگر این است که می توانیم نشانه پیشرفت را نشان دهیم.
@@ -272,6 +274,7 @@ alert("code");
272
274
اگر بخواهیم یک تابع را به صورت ناهمزمان (بعد از کد فعلی) اجرا کنیم، اما قبل از رندر شدن تغییرات یا مدیریت رویدادهای جدید، میتوانیم آن را با `queueMicrotask` زمانبندی کنیم.
273
275
274
276
در اینجا یک مثال با "counting progress bar" وجود دارد، مشابه آنچه قبلا نشان داده شده است، اما از `queueMicrotask` به جای `setTimeout` استفاده شده است. می بینید که در انتها رندر می شود. درست مانند کد همزمان:
277
+
275
278
```html run
276
279
<divid="progress"></div>
277
280
@@ -324,6 +327,7 @@ alert("code");
324
327
هیچ رابط کاربری یا مدیریت رویداد شبکه بین ریزکارها وجود ندارد: آنها بلافاصله یکی پس از دیگری اجرا می شوند.
325
328
326
329
بنابراین ممکن است کسی بخواهد که `queueMicrotask` را برای اجرای یک تابع به صورت ناهمزمان، اما در حالت محیطی بخواهد.
330
+
327
331
```smart header="Web Workers"
328
332
برای محاسبات سنگین طولانی که نباید حلقه رویداد را مسدود کند، میتوانیم از [Web Workers](https://html.spec.whatwg.org/multipage/workers.html) استفاده کنیم.
0 commit comments