Blog>
Snippets

Optimizing File Uploads Using Web Workers

Illustrate how to use Web Workers in JavaScript to offload the file processing tasks during uploads, ensuring UI responsiveness.
if (window.Worker) {
    const worker = new Worker('fileUploadWorker.js');

    document.getElementById('fileInput').addEventListener('change', function(event) {
        const file = event.target.files[0];
        worker.postMessage(file);
    });

    worker.onmessage = function(e) {
        console.log('File upload complete', e.data);
    };

    worker.onerror = function(e) {
        console.error('Error in worker:', e);
    };
}
This code checks if the browser supports Web Workers and creates a new worker using the 'fileUploadWorker.js' script. It then adds an event listener to a file input element, which sends the selected file to the worker when a file is chosen. The worker then handles the file upload process, and messages or errors from the worker are handled by the main thread.
// fileUploadWorker.js
self.addEventListener('message', function(e) {
    const file = e.data;
    // Perform the file upload operation here, possibly breaking the file into chunks and sending them to the server.
    // For demonstration, we're just simulating a file upload with a timeout.
    setTimeout(() => {
        // Once the file upload process is complete, post a message back to the main thread.
        self.postMessage('Upload completed for ' + file.name);
    }, 2000);
});
This is the content of 'fileUploadWorker.js', which is the Web Worker script. It listens for a message from the main thread (which contains the file to be uploaded). The script then performs the file upload process. For demonstration purposes, this script simulates the upload process with a setTimeout. After 'uploading' the file, it sends a message back to the main thread indicating the completion.