Microtask là gì?

Noun Javascript
micro-task job
Tác vụ vi mô

Trong ngôn ngữ Javascript, bên trong hàng đợi tác vụ (task queue) / hàng đợi callback (callback queue), các tác vụ (task) được phân loại thành hai loại đó là tác vụ vi mô (microtask) và tác vụ vĩ mô (macrotask).

Tác vụ vi mô (microtask) là một hàm (function) được thực thi sau khi hàm hoặc chương trình tạo ra nó thoát và chỉ khi ngăn xếp thực thi (execution stack) của JavaScript trống (empty), nhưng trước khi trả lại quyền điều khiển cho vòng lặp sự kiện (event loop) đang được tác nhân người dùng (user agent) sử dụng để điều khiển môi trường thực thi (execution environment) của script. Một tác vụ vi mô (microtask) cũng có khả năng enqueue các tác vụ vi mô (microtask) khác.

Các tác vụ vi mô (microtask) thường được lên lịch cho những việc được yêu cầu hoàn thành ngay sau khi thực thi script hiện tại. Khi hoàn thành một tác vụ vĩ mô (macrotask), vòng lặp sự kiện sẽ chuyển sang hàng đợi của tác vụ vi mô (microtask queue). Vòng lặp sự kiện không di chuyển đến tác vụ tiếp theo bên ngoài hàng đợi của tác vụ vi mô cho đến khi tất cả các tác vụ bên trong hàng đợi tác vụ vi mô được hoàn thành. Điều này ngụ ý rằng hàng đợi của tác vụ vi mô có mức độ ưu tiên (priority) cao hơn.

Khi tất cả các tác vụ bên trong hàng đợi của tác vụ vi mô đã hoàn thành, chỉ khi đó vòng lặp sự kiện mới chuyển trở lại hàng đợi của tác vụ vĩ mô (macrotask queue). Lý do chính để ưu tiên hàng đợi của tác vụ vi mô là để cải thiện trải nghiệm người dùng (user experience). Hàng đợi của tác vụ vi mô được xử lý sau callback với điều kiện rằng bất kỳ code JavaScript nào khác không được thực thi giữa chừng. Các tác vụ vi mô (microtask) bao gồm callback của promise, callback của mutation observer.

Trong trường hợp như vậy, trong đó các tác vụ vi mô mới đang được thêm vào hàng đợi, các tác vụ vi mô bổ sung này sẽ được thêm vào cuối hàng đợi của tác vụ vi mô và chúng cũng được xử lý. Điều này là do vòng lặp sự kiện sẽ tiếp tục gọi các tác vụ vi mô cho đến khi không còn tác vụ vi mô nào nữa trong hàng đợi, ngay cả khi các tác vụ mới tiếp tục được thêm vào. Một lý do quan trọng khác cho việc sử dụng các tác vụ vi mô là để đảm bảo thứ tự nhất quán của các tác vụ cũng như đồng thời giảm nguy cơ chậm trễ (delay) do người dùng gây ra.

Learning English Everyday