Why a browser tab can freeze while processing a file
JavaScript in the browser, by default, runs on a single "lane" called the main thread — the same lane also responsible for redrawing the display, responding to clicks, and running scrolling. If a heavy computation (say, processing millions of image pixels for upscaling, or running an AI model to remove a photo's background) runs directly on that lane, that lane automatically becomes fully occupied — and since there's only one lane, the display can't refresh, clicks go unanswered, scrolling stalls. That's what makes a tab look "frozen" or "Not Responding."
The solution: offload heavy work to a separate thread
Modern browsers have a feature called a Web Worker — a way to run JavaScript code on a thread separate from the main thread, running in parallel in the background. On MEA Tools tools whose work is computationally heavy — like the image upscaler, photo background remover, OCR (extracting text from an image/scan), and PDF-to-Word conversion that involves OCR — that core work is deliberately run inside a Web Worker, not on the main thread.
The effect is immediately noticeable: while an image is being processed behind the scenes, the page can still be scrolled, other buttons can still be clicked, and the progress bar still updates smoothly — because the main thread never gets blocked by that heavy computation. Once the worker finishes, the result is then "reported back" to the main page through an inter-thread messaging mechanism.
An Honest Progress Bar
In the upscaler and background-remover tools, the progress bar you see combines two phases at once — the AI model download and the image inference process — so you always know the process is actually running, not just a loading animation disconnected from real progress.
Try the Upscaler →Why not every tool needs this
Of the 52 tools on MEA Tools, only some actually use a Web Worker — specifically the ones whose work is genuinely computationally heavy. Tools like Base64 conversion, computing a small file's hash, or generating a QR code usually finish in milliseconds, so there's no benefit to forcing them through a Worker — it would just add unnecessary complexity. The principle is simple: use a Worker where it's genuinely needed, not slap it onto every tool just to look sophisticated.
One tool, one function — not a coincidence
There's another reason MEA Tools generally feels lightweight: every tool is split into its own separate page, carrying only the code relevant to that one function. The merge-PDF tool doesn't also load watermark or OCR code it doesn't need. This differs from the "one big do-everything app" approach, which sometimes forces a single page to load code for dozens of features at once, even though only one is actually being used.
This separate-per-tool approach is also what lets the automatic performance-detection system (see the article on device adaptation) work effectively — because the load that needs to be measured and adjusted is specific to one function at a time, not one giant app with an unpredictable load.
The end result
Combining these two things — a Web Worker where it's genuinely needed, and a one-tool-one-function structure — keeps the experience of using MEA Tools feeling responsive, even when processing fairly large files on a not-so-powerful device. It's not a magical guarantee that everything will always be instant, but at least your browser tab doesn't need to "go comatose" while waiting for one process to finish.