search
HomeWeb Front-endCSS Tutorial'Off The Main Thread'

JavaScript is single-threaded, which means it has only one call stack and one memory heap. This often results in performance stuttering and unresponsiveness of page elements or the entire website. If JavaScript is assigned a large number of tasks, it will be busy with these tasks and cannot quickly handle other things, such as event handlers.

Some interesting opinions and rebuttals have emerged around this issue recently.

Das Surma has always advocated transferring as many JavaScript tasks as possible from the main thread. In fact, when using Web Workers, he advises: Always use Web Workers. Web Workers are the main method to separate JavaScript from the main thread. Paul Lewis likens this issue to the morning rush hour: the worst time of travel of the day. Many people cannot travel at other times because they have to arrive at their workplace before 9 o'clock. This is exactly what a lot of web code looks like today: everything runs on a single thread (main thread) with a lot of traffic. In fact, it's even worse than that: there's only one driveway from downtown to suburbs, and almost everyone is on the road, even if they don't need to arrive at the office by 9 o'clock.

Surma compares the practice of often referring to "main thread" as "UI thread" in other languages. If your task is UI-related, execute on the main thread; if not, execute on other threads. He explored this issue in depth in this episode of Web Platform Podcast – 194: Off the Main Thread. I think this may change the attitude and mindset of JavaScript developers.

An example of decoupling tasks from UI threads is state management.

David Gilbertson probably read this and wrote: I recently saw an article that updating Redux storage is ideal for Web Workers because it is not a UI worker (non-UI worker does not belong to the main thread). It sounds reasonable to transfer data processing to worker threads, but the idea makes me feel a little academic.

David's main point seems to be that some of the heavy JavaScript tasks we need to deal with are responses to user-initiated operations, and the user needs to wait for the task to complete anyway, so it is acceptable for the UI to be unresponsive during this period. But for any non-user-initiated task—and taking more than 100 milliseconds—he agreed that using Web Worker would be helpful.

(About these 100ms, it is worth noting that one of Surma's main points is that there are many low-end phones in the world - who knows what the 100ms on high-end phones would look like on low-end phones.)

The main trick to separate tasks from the main thread in JavaScript is to use Web Workers. It's not a hack, Web Workers is indeed a native API that brings multiple background threads to JavaScript. Similar to Service Workers, they are usually located in another file:

 var myWorker = new Worker('worker.js');

But they don't have to be like this - you can inline them or use libraries. The API is not bad, but it is not great either. Surma created a library for this: Comlink.

Surma's efforts in this area are long-term. This is a feature at the 2018 Chrome Summit, with the theme of "A Quest to Guarantee Responsiveness: Scheduling On and Off the Main Thread" and reappeared in 2019 with the theme of "The main thread is overworked & underpaid", but this time it was viewed almost six times the time:

And he was not fighting alone. Alex MacArthur also talked about tweaking his view on event handlers to accommodate performing tasks on non-main threads.

The above is the detailed content of 'Off The Main Thread'. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
ToastToastApr 19, 2025 am 10:30 AM

One day, all the sudden, I started hearing jokes about toast. I had no idea what the context was. I assumed some friends just got started telling toast jokes,

Protecting Vue Routes with Navigation GuardsProtecting Vue Routes with Navigation GuardsApr 19, 2025 am 10:29 AM

Authentication is a necessary part of every web application. It is a handy means by which we can personalize experiences and load content specific to a

Different Approaches for Creating a Staggered AnimationDifferent Approaches for Creating a Staggered AnimationApr 19, 2025 am 10:28 AM

Animating elements, at its most basic, is fairly straightforward. Define the keyframes. Name the animation. Call it on an element.

Hey, let's create a functional calendar app with the JAMstackHey, let's create a functional calendar app with the JAMstackApr 19, 2025 am 10:22 AM

Hey, let's create a functional calendar app with the JAMstack

The Fight Against Layout JankThe Fight Against Layout JankApr 19, 2025 am 10:20 AM

A web page isn't locked in stone just because it has rendered visually. Media assets, like images, can come in and cause the layout to shift based on their

How I Created a Code Beautifier in Two DaysHow I Created a Code Beautifier in Two DaysApr 19, 2025 am 10:19 AM

I recently drew up a wireframe for a code beautifier. The next day, I decided to turn it into a real tool. The whole project took less than two days to

Build a Chat App Using React Hooks in 100 Lines of CodeBuild a Chat App Using React Hooks in 100 Lines of CodeApr 19, 2025 am 10:16 AM

We’ve looked at React Hooks before, around here at CSS-Tricks. I have an article that introduces them as well that illustrates how to use them to create

The Many Ways to Include CSS in JavaScript ApplicationsThe Many Ways to Include CSS in JavaScript ApplicationsApr 19, 2025 am 10:08 AM

Welcome to an incredibly controversial topic in the land of front-end development! I’m sure that a majority of you reading this have encountered your fair

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.