GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing completejavascript.com — JavaScript Web Worker - chạy JavaScript ở background Cập nhật ngày 11/01/2018 Có thể bạn thừa biết, JavaScript là một ngôn ngữ chạy đơn luồng. Điều đó có nghĩa là nếu bạn thực hiện một tác vụ quá lớn trên giao diện chính thì khả năng cao là giao diện sẽ bị đơ. Để giải quyết vấn đề này, JavaScript đã đưa ra một khái niệm là Worker. Vậy JavaScript Web Worker là gì và dùng nó như thế nào? Chúng ta sẽ cùng nhau tìm hiểu sau đây. JavaScript Web Worker là gì?Web Worker là một phương tiện đơn giản giúp cho trang web có thể chạy JavaScipt ở background. Luồng này có thể chạy mà không can thiệp gì đến giao diện chính. Một khi đã được khởi tạo, Worker có thể giao tiếp với luồng chính thông qua việc gửi và nhận message. Vì vậy, khi áp dụng JavaScript Web Worker một cách chính xác và phù hợp, trang web của bạn sẽ hoạt động mượt mà hơn rất nhiều. Cách sử dụng JavaScript Web WorkerKiểm tra trình duyệt có hỗ trợ Web Worker hay khôngĐể kiểm tra xem trình duyệt bạn đang sử dụng có hỗ trợ JavaScript Web Worker hay không, bạn có thể sử dụng typeof: Tạo file JavaScript cho Web WorkerMột ví dụ đơn giản cho file JavaScript Web Worker: Khởi tạo Web WorkerGiả sử bạn đã tạo một file web_worker.js. Để khởi tạo Web Worker, bạn làm như sau: Bạn thấy sau khi khởi tạo JavaScript Web Worker, ta có thể implement hai function quan trọng là Worker.onmessage và Worker.onerror để xử lý event. Trong đó, Worker.onerror được gọi khi có lỗi với Web Worker sau khi khởi tạo. Và Worker.onmessage được gọi khi có message từ Worker Thread lên giao diện chính. Dừng Web WorkerSau khi khởi tạo Web Worker thì code JavaScript ở background sẽ chạy. Để dừng Web Worker lại, bạn có thể sử dụng phương thức terminate(). Giao tiếp giữa Web Worker ở luồng chính và backgroundĐể có thể thực hiện được điều này, bạn có thể sử dụng phương thức postMessage(), ở cả hai phía luồng chính và background. Khi đó, hàm onmessage() sẽ được gọi ở đầu còn lại. Đối với hàm postMessage() sẽ có hai cách sử dụng:
Truyền Message thông thườngTrong phương pháp này, tham số truyền vào sẽ là một object. Dữ liệu sẽ được copy từ phía gửi sang phía nhận. Ví dụ như sau: Ở đây object gửi đi sẽ là {cmd : 'start', msg : 'hello'}. Thực tế, object ở đây có thể là bất kì kiểu dữ liệu nào: Number, String, Boolean, Array. Và ở Worker Thread, hàm onmessage sẽ được gọi: Object nhận được từ phía giao diện chính sẽ được lấy từ data trong event. Để test chức năng này, mình có chuẩn bị một ví dụ nhỏ trên Github và codepen mà bạn có thể tham khảo. Cách này có một nhược điểm là nếu như bạn gửi dữ liệu lớn, chẳng hạn 500MB, thì sau khi gửi đi, nó sẽ được sao chép. Vì vậy, tổng dữ liệu chiếm sẽ là 500MB + 500MB = 1GB. Điều đó có thể dẫn đến hết bộ nhớ cho phép. Để khắc phục tình trạng này, ta có thể sử dụng Transferable Object như sau. Sử dụng Transferable ObjectKhi sử dụng Transferable Object, dữ liệu được chuyển toàn bộ từ phía gửi sang phía nhận. Dung lượng dữ liệu phía gửi sẽ bị xóa về 0. Phía Main Thread: Phía Worker Thread: Ở đây, Transferable Object là ArrayBuffer. Kết quả: Chú ý:
Bài viết hôm nay dừng lại tại đây. Để tìm hiểu thêm về JavaScript Web Worker thì bạn có thể tìm hiểu thêm ở những link phía dưới đây. Xin chào và hẹn gặp lại bạn ở bài viết tiếp theo, thân ái! Xem thêm★ Nếu bạn thấy bài viết này hay thì hãy theo dõi mình trên Facebook để nhận được thông báo khi có bài viết mới nhất nhé:
Chia sẻ: Bình luận |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |