STATUS IS UPWIKI NG PAG-OPTIMIZE NG WEBSITE
25Pabilisin
Pagganap at paghahatid / Pabilisin

Pagganap ng JavaScript: Bawasan ang Trabaho sa Main Thread

Hanapin ang JavaScript na nagpapahinto o nag-aantala ng pahina, alisin ang hindi kinakailangang trabaho, at protektahan ang mga interaction.

Pagganap ng JavaScript: Bawasan ang Trabaho sa Main Thread — BISWAL NA GABAY
BASAHIN
8 minuto
PINAGMULAN
5
MULING SURIIN
2027-03-27
sinuri
Nakatatandang Tagasuri sa Web Performance
MAIKLING SAGOT

Magsimula sa desisyon.

Bawasan ang trabaho sa main thread sa pamamagitan ng pagsusukat ng totoong pahina at interaction, at pagkatapos ay ayusin ang pinakamalaking paulit-ulit na gastos. Ang main thread ang nagpapatakbo ng karamihan sa JavaScript ng pahina at gawain ng interface nang paisa-isa. Ang isang task na mas mahaba sa 50 milliseconds ay long task, kaya maaaring maghintay ang tap, click, scroll, o paint sa likod nito. Magsimula sa checkout, search, navigation, forms, at iba pang sensitibong daloy.

Para sa bawat gastos, alisin ito, ipagpaliban hanggang kailangan, hatiin sa maiikling batch, o ilipat ang bounded na compute sa isang Web Worker. Panatilihin ang agarang tugon sa main thread, ngunit ipagpaliban ang analytics at iba pang hindi esensyal na follow-up. Tratuhin ang bawat third-party tag bilang dependency na may nakatalagang may-ari. Muling subukan sa isang naka-constrain na mobile CPU at magpanatili ng rollback para sa mga kritikal na daloy.

BISWAL NA GABAY

Tingnan ang gawain bilang isang sistema.

Gamitin ang mapang ito para iugnay ang mga desisyon sa artikulo bago kumilos sa mga indibidwal na taktika.

SIUPabilisin
01I-profile ang customer journey bago baguhin ang code
02Basahin ang trace bilang pila ng trabaho
03Mag-ship ng mas kaunting code kung kailan mahalaga
04Hatiin ang trabaho para makaresponde ang browser
01

I-profile ang customer journey bago baguhin ang code

Pumili ng isang mahalagang ruta at interaction, gaya ng pagbukas ng navigation, pag-filter ng resulta, o pagsusumite ng form. I-record ito sa Chrome DevTools Performance panel mula sa malinis na estado ng browser. Ulitin ang aksyon at kuhanin ang isang throttled-CPU run pati na rin ang isang development-machine run; maaaring maitago ng desktop traces ang trabaho na nakakaistorbo sa mas mababang-powered na telepono.

Gamitin ang trace upang subukan ang isang tiyak na hypothesis, hindi upang sisihin ang isang component batay lamang sa ulat ng bundle. Sa Main flame chart, mas mahahabang bar ang tumatagal nang mas matagal at ipinapakita ng mga nakapatong na bar ang call stack. Ang pulang tatsulok sa isang Task ay nagsasaad ng posibleng long task; piliin ito at sundan ang link papunta sa code na nagpasimula nito. I-save ang mga trace bago at pagkatapos ng mahahalagang pagbabago.

Kunan ang sandali

I-record kaagad bago ang aksyon at itigil pagkatapos ng nakikitang resulta.

Gumamit ng paulit-ulit na kaso

Panatilihin ang pare-parehong ruta, account state, at pagkakasunod-sunod ng aksyon.

Tukuyin ang may-ari

Itatalaga ang bawat nangungunang gastos sa team o vendor na may kakayahang magbago nito.

02

Basahin ang trace bilang pila ng trabaho

Ang long task ay hangganan para simulan ang imbestigasyon, hindi kumpletong diagnosis. Nagtatala ang W3C Long Tasks specification ng mga task na tumatagal nang 50 millisecond o higit pa. Suriin ang nasa loob ng task: JavaScript evaluation, event handler, style recalculation, layout, o paint. Ipinapakita ng call stack kung saan magsisimula; ipinapakita ng timing kung code, rendering, o third-party frame ang problema.

Bigyang prayoridad ang gastos na paulit-ulit sa isang mahalagang interaction. Ang isang maikling handler ay maaaring magmukhang mabagal kapag ito ay nagti-trigger ng layout o nag-aantay sa likod ng naunang trabaho. Ang trace ay sukat sa lab, kaya i-confirm ang pag-aayos sa mga kinatawang device at, kung mayroon, gamit ang privacy-conscious na field telemetry.

Ihiwalay ang mga sandali

Iba ang lunas para sa startup parsing kumpara sa post-tap handler.

Suriin ang pag-render

Hanapin ang paulit-ulit na pattern ng style-write at layout-read bago mag-refactor.

Panatilihin ang panimulang batayan

I-attach ang trace, scenario, at nangungunang mga gastos sa work item.

03

Mag-ship ng mas kaunting code kung kailan mahalaga

Gumawa ng imbentaryo ng mga script ayon sa ruta at layunin. Alisin ang hindi nagagamit na packages, duplicate, mga retiradong eksperimento, at code para sa mga tinapos na feature. Pagkatapos ay i-split ang route-specific o bihirang ginagamit na feature upang mag-load lamang kapag kailangan sa halip na sa initial path. Maaaring bawasan ng dynamic loading ang startup work, ngunit maaari itong magdulot ng nakikitang pagkaantala kapag kailangan agad ng user ang feature.

Tanungin kung kailangan ng isang component ang buong client-side framework, kung duplicate ng umiiral na kakayahan ang isang utility, at kung sapat na ang static HTML na may maliit na enhancement. Subukan ang fallback state ng module na naantala ang pag-load. Kapag naantala ang isang opsyonal na kakayahan, dapat manatiling magagamit nang maayos ang pahina sa halip na magpakita ng kontrol na walang gumaganang aksyon.

Bumuo ng badyet para sa ruta

Idokumento kung aling mga script ang pinapayagan sa isang ruta at bakit.

I-load ayon sa intensyon

Isaalang-alang ito para sa mga optional editor, mapa, player, o reporting view.

Protektahan ang mga kritikal na landas

Subukan ang authentication, accessibility, payment, at form completion; humingi ng kwalipikadong review kapag naapektuhan ang controls.

04

Hatiin ang trabaho para makaresponde ang browser

Ang pagbibigay lang ng pangalan sa mas maliliit na function ay hindi awtomatikong lumilikha ng magkakahiwalay na task sa browser kung sabay-sabay pa rin silang tumatakbo. Para sa mahabang loop, hatiin sa batch ang trabaho, i-update ang agarang nakikitang estado para sa user, saka mag-yield bago magpatuloy. Nagbibigay ito ng pagkakataon sa browser na iproseso ang input at rendering sa pagitan ng mga batch.

Kung sinusuportahan, ang scheduler.yield() ay nag-yield sa main thread at nagpapatuloy ng trabaho mamaya; i-feature-detect ito at gumamit ng fallback para sa mga browser na hindi sinusuportahan. Huwag mag-yield pagkatapos ng bawat napakaliit na operasyon: may overhead ito at maaaring magpahaba ng kabuuang oras ng pagkumpleto. Pumili ng mga hangganan mula sa mga sukat, panatilihin ang cancellation, at iwasang pahintulutang palitan ng stale results ang mas bagong state.

Unahin ang UI

Ipakita ang pagtanggap o progreso bago ang nonvisible follow-up work.

Pangkatin ayon sa lumipas na oras

Mag-yield bago ang nasusukat na trabaho ay maging long, sa halip na isang beses kada item.

Iwasan ang mga lipas na maiksing paraan

Ang kasalukuyang web.dev guidance ay hindi nagrerekomenda ng bagong estratehiya batay sa isInputPending().

05

Ilipat ang compute, hindi ang interface, sa worker

Ang isang Web Worker ay nagpapatakbo ng script sa background thread na hiwalay sa main execution thread. Akma ito para sa mabibigat na parsing, data transformation, search indexing, at iba pang computation na hindi kailangan ng direktang access sa interface. Magpadala ng defined input, ibalik ang defined result, at panatilihin ang rendering at nakikitang state changes sa main thread.

Hindi universal ang workers. Hindi nila direktang mababago ang DOM o magagamit ang Window, at ang pangkalahatang message communication ay nagko-copy ng data. Ang paglikha ng worker, paglipat ng data, at koordinasyon ng error ay maaaring lumampas sa benepisyo para sa maliit na kalkulasyon. Sukatin ang buong interaction, i-terminate ang hindi kinakailangang workers, at magdisenyo ng fallback kung mabibigo ang worker work.

Pumili ng hiwalay na gawain

Magsimula sa kalkulasyon na ang input at output ay maaaring i-serialize at subukan.

Lagyan ng bersyon ang mga mensahe

Itapon ang mga resulta na ginawa para sa mas lumang filter, ruta, o aksyon.

Panatilihin ang aksesibilidad

I-komunika ang makahulugang progreso sa pamamagitan ng normal na interface.

06

Pamahalaan ang third-party JavaScript bilang production dependency

Maaaring magdagdag ang analytics, advertising, experiments, social embeds, video players, at support widgets ng requests, JavaScript evaluation, iframes, at dependencies. Maaaring kailanganin ang vendor script, ngunit ito ay nasa labas ng direktang kontrol ng application team at maaaring makaapekto sa performance, privacy, security, at continuity. I-inventory ang layunin nito, mga ruta, loading condition, approver, consent requirement, at removal owner.

Kung pinapayagan ng mga kondisyon at kontrata, ihambing ang isang kinatawang pahina na may at walang isang third-party origin. Maaaring ilantad ng mga performance tool ang magastos na evaluation, payload, at pagtukoy kung aling long task ang nauugnay dito. Panatilihin lamang ang magaan o ipinagpalibang integration kapag ang dokumentadong pakinabang nito ay nagbibigay-katwiran sa nasusukat na gastos. Tiyaking gumagana ang pangunahing content at pangunahing transaksyon kapag mabagal o wala ang isang opsyonal na dependency.

Limitahan ang lawak ng epekto

I-load ang tag lamang sa mga ruta at kondisyon na nangangailangan nito.

Suriin ang kontrol sa pagbabago

Isama ang mga pagbabago sa tag-manager sa performance, privacy, security, at rollback review.

Panatilihin ang isang switch para sa pagtanggal

Idokumento at subukan kung paano i-disable ang hindi-kritikal na integration.

07

Gawing release safeguard ang responsiveness

Gawing maliit na regression check ang winning trace para sa mahalagang journey. Tukuyin ang sakop na interactions, device o CPU constraint, inaasahang tugon, at reviewer. Ipaloob ito sa bundle at third-party inventory review upang ang bagong package o tag ay hindi makapagpakilala nang tahimik ng main-thread work.

Ginagamit ng Status Is UP ang ebidensyang ito para sa proactive optimization at ligtas na remedyo, hindi bilang kapalit ng live availability monitoring. Bago ang high-risk na pagbabago, maghanda ng rollback at i-verify ang kritikal na daloy pagkatapos ng release. Nag-iiba ang resulta ayon sa device, network, browser, content, at account state; tratuhin ang mga threshold bilang guardrails, hindi garantiya.

Kontrolin ang mahahalagang pagbabago

Kailangang may before-and-after traces para sa shared navigation, checkout, search, o malalaking bundle.

Magsanay ng pagbabalik

Alamin ang feature flag, tag setting, o bersyon ng deployment na magbabalik sa napatunayang maayos na pagganap.

Balikan nang regular

Muling i-profile pagkatapos ng malalaking release, pagbabago ng vendor, o pagbabago sa device mix.

AKSYON / SURIIN

Ang praktikal mong gabay sa mga dapat gawin.

  1. 01

    Pumili ng kritikal na interaction

    Tukuyin ang ruta, aksyon, inaasahang tugon, at epekto sa customer.

    SURIIN: May test note na nagtatala ng ruta, account state, aksyon, browser, at device o CPU setting.
  2. 02

    I-record ang baseline

    I-record ang interaction sa DevTools Performance mula sa malinis na estado.

    SURIIN: Kayang bisitahin muli ng team ang trace gamit ang Main flame chart.
  3. 03

    Hanapin ang blocking work

    Suriin ang long tasks, call stacks, rendering, at third-party activity.

    SURIIN: Bawat nangungunang gastos ay may duration, source o origin, ruta, at may-ari.
  4. 04

    Alisin ang hindi kinakailangang scripts

    Tanggalin ang unused packages, retiradong eksperimento, duplicate, at hindi kinakailangang route code.

    SURIIN: Gumagana ang build at kritikal na journey pagkatapos ng pag-alis.
  5. 05

    Ipagpaliban ang optional features

    I-load ang optional capability kapag kailangan at tiyaking ang delayed state ay mananatiling magagamit.

    SURIIN: Tinitiyak ng pagsubok sa pahinang bagong binuksan na nasusuri ang pag-load, pagkabigo, o fallback.
  6. 06

    Hatiin ang long tasks

    I-batch ang trabaho at mag-yield pagkatapos ng agarang interface response.

    SURIIN: Ang bagong trace ay nag-aalis ng katumbas na interaction-path long task at pinapanatili ang tamang resulta.
  7. 07

    Suriin ang worker

    Ilipat lamang ang bounded computation na may defined messages.

    SURIIN: Subukan ang end-to-end timing, errors, stale results, at cleanup.
  8. 08

    I-audit ang third parties

    Itala ang layunin, may-ari, kondisyon, consent, gastos, at disable procedure.

    SURIIN: Bawat critical-route tag ay may keep, limit, delay, o remove na desisyon.
  9. 09

    Subukan sa naka-constrain na kondisyon

    Ulitin sa throttled CPU at kinatawang browser o device kung maaari.

    SURIIN: Ang comparison ay gumagamit ng parehong scenario at nagtatala ng mahahalagang pagkakaiba.
  10. 10

    Mag-release na may rollback

    I-attach ang trace, acceptance check, at reversal instruction sa release.

    SURIIN: May nakatalagang may-ari na maaaring ibalik ang kilalang-mabuting pag-uugali nang hindi nangangailangan ng hindi-dokumentadong paghahanap.
MGA PAKSA NG TALAKAYAN

Ihambing ang mga trade-off, hindi ang pribadong data.

Gamitin ang mga prompt na ito kasama ang iyong koponan o komunidad ng may-ari ng website. Magbahagi ng mga pamamaraan at aral, ngunit huwag kailanman ipaste ang mga kredensyal, rekord ng customer, o hindi-pampublikong detalye ng imprastruktura.

  1. 01

    Aling interaction ang mukhang katanggap-tanggap sa loading report pero napatunayang mabagal nang i-profile mo ang totoong tap o click?

  2. 02

    Paano ninyo pinagpapasyahan kung sapat ang pakinabang ng isang third-party feature upang bigyang-katwiran ang nasusukat nitong gastos sa main thread?

  3. 03

    Aling rollback mechanism ang pinakamadaling gamitin para i-reverse ang performance regression nang hindi naaabala ang isang kritikal na daloy?

Sikat / Awtoritatibong mapagkukunan

Buksan ang pinagmulang materyal.

web.devOptimize long tasks ↗

Nagpapaliwanag ng long tasks, yielding, scheduler.yield(), mga fallback, at overhead ng yield.

Sinuri 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

Nagpapakita ng pag-record, flame-chart analysis, long-task identification, at source investigation.

Sinuri 2026-09-27
MDN Web DocsWeb Workers API ↗

Naglalarawan ng workers, message communication, at ang limitasyon na hindi direktang mababago ang DOM.

Sinuri 2026-09-27
web.devLoad Third-Party JavaScript ↗

Nagbibigay ng gabay sa third-party script audit at measurement.

Sinuri 2026-09-27
W3CLong Tasks API ↗

Nagtatakda ng long tasks, ang threshold, at attribution.

Sinuri 2026-09-27

Patakaran sa pinagkukunan. Gumagamit ang artikulong ito ng opisyal na dokumentasyon tungkol sa browser, mga pamantayan, at web platform na sinuri ng editorial team. Ipinag-iiba nito ang pagsukat at ang mga garantiya at iniiwasan ang mga pahayag na walang sapat na suporta.

Mabilis na paglilinaw

Karaniwang mga tanong.

Ano ang binibilang na long JavaScript task?

Gumagamit ang W3C Long Tasks specification ng 50 milliseconds o higit pa bilang reporting threshold. Ito ay senyales para mag-imbestiga, hindi patunay na ang mas maiikling task ay walang epekto. I-confirm ang sanhi sa trace.

Palaging nagpapabuti ba ng JavaScript performance ang code splitting?

Hindi. Maaaring bawasan ng splitting ang startup work ngunit magdagdag ng unang-gamit na pagkaantala. Gamitin ito para sa route-specific o optional na code, at subukin ang feature sa naka-constrain na kondisyon.

Dapat ba ang bawat magastos na function ay tumakbo sa isang Web Worker?

Hindi. Ang mga Worker ay angkop para sa isolated, CPU-heavy na computation na may defined messages. Hindi nila direktang mababago ang DOM, may oras ang pag-transfer ng data, at ang maliliit na task ay maaaring mas mabilis matapos sa main thread.

Status Is UP Editorial Team · Mga Editor ng Uptime Enablement

Sinuri ni Nakatatandang Tagasuri sa Web Performance. Inilathala 2026-09-27; na-update 2026-09-30.