Web worker là một tác vụ javascript chạy ngầm dưới trang web, không làm ảnh hưởng đến hiệu năng của trang web hiện tại.
Như bạn đã biết Javascript chỉ có một luồng. Nên nếu chúng ta thực hiện nhiều tác vụ cùng một lúc thì nó sẽ làm đứng trình duyệt. Ví dụ như sắp xếp và format một mảng dữ liệu gồm hàng trăm ngàn, hàng triệu phần tử thì trang web sẽ bị đơ. Khi ấy, trải nghiệm của người dùng bị giảm xuống rất nhiều. Người dùng không thể click hay scroll được, thậm chí họ phải tắt và mở lại trình duyệt. Và liệu họ có quay lại sử dụng trang web như thế một lần nữa?
Một kiến trúc đơn giản của Worker có thể là:

Với mô hình này, chúng ta có 2 luồng chính là: main thread(main.js) và worker(worker.js). Điều kì diệu ở đây là giữa hai channel này, chúng ta có thể gửi thông tin qua lại lẫn nhau. Giả sử sau khi load trang web và API lên với data lớn, chúng ta có thể dùng postMessage để gửi data cho Worker. Sau đó, worker xử lí rồi gửi ngược lại cho main.js.
Hai phương thức chúng ta giao tiếp giữa worker là:
- postMessage: giúp chúng ta gửi dữ liệu qua lại giữa main thread và worker.
- onmessage: một listener lắng nghe và nhận dữ liệu từ worker, cũng như worker lắng nghe dữ liệu từ main thread.
Bạn có thể xem ví dụ đơn giản tại đây.
Em đã đọc hết tất cả bài post về javascript của anh. Cám ơn anh đã chia sẻ ạ.
Thanks em