STATUS IS UPWIKI YA UBORESHAJI WA TOVUTI
25Harakisha
Utendaji na utoaji / Harakisha

Utendaji wa JavaScript: Punguza Kazi Kuu (Main-Thread)

Tambua JavaScript inayofanya ukurasa kusita, kuchelewesha au kufanya kazi zisizohitajika, na linda mwingiliano.

Utendaji wa JavaScript: Punguza Kazi Kuu (Main-Thread) — MWONGOZO WA KIONYESHI
SOMA
8 dakika
VYANZO
5
Thibitisha tena
2027-03-27
imehakikiwa
Mkaguzi Mwandamizi wa Utendaji wa Wavuti
JIBU MFUPI

Anza na uamuzi.

Punguza kazi za main thread kwa kupima ukurasa na mwingiliano halisi, kisha rekebisha gharama kubwa inayojirudia. Main thread huendesha JavaScript nyingi za ukurasa na kazi za kiolesura, kazi moja kwa wakati. Kazi inayozidi milisekunde 50 ni long task, hivyo mguso, kubofya, kusogeza au kuchora skrini kunaweza kusubiri nyuma yake. Anza na checkout, utafutaji, urambazaji, fomu, na safari nyingine nyeti.

Kwa kila kazi yenye gharama kubwa, iondoe, icheleweshe hadi itakapohitajika, igawe katika vijisehemu vifupi, au hamisha uchakataji unaoweza kutenganishwa kwenye Web Worker. Hifadhi mwitikio wa papo hapo kwenye main thread, lakini chelewesha analytics na kazi nyingine zisizo za msingi. Tibu kila tag ya mtu wa tatu kama utegemezi wenye mmiliki. Jaribu tena kwenye simu ya mkononi yenye CPU iliyopunguzwa kasi (throttled), na uhifadhi njia ya kurudisha nyuma (rollback) kwa miradi muhimu.

MWONGOZO WA KIONYESHI

Tazama kazi kama mfumo.

Tumia ramani hii kuunganisha maamuzi ya makala kabla ya kutekeleza mbinu binafsi.

SIUHarakisha
01Pima safari ya mteja kabla ya kubadilisha msimbo
02Soma trace kama foleni ya kazi
03Pakia msimbo mdogo wakati unapouhitaji
04Gawanya kazi ili browser iwasilishe mwitikio
01

Pima safari ya mteja kabla ya kubadilisha msimbo

Chagua njia moja muhimu na mwingiliano, kama kufungua urambazaji, kuchuja matokeo, au kutuma fomu. Rekodi katika kidirisha cha Performance cha Chrome DevTools ukiwa na hali safi ya kivinjari. Rudia kitendo hicho na chukua rekodi yenye CPU iliyopunguzwa kasi pamoja na rekodi kwenye mashine ya maendeleo; trace za desktop zinaweza kuficha kazi inayotatiza kwenye simu yenye uwezo mdogo wa kuchakata.

Tumia trace kujaribu nadharia nyembamba, si kumkashifu sehemu kutoka kwenye ripoti ya bundle. Katika mchoro wa moto wa Main, pau pana huchukua muda mrefu, na pau zilizopangwa juu kwa juu huonyesha mnyororo wa miito. Pembetatu nyekundu kwenye Task inaonyesha potential long task; chagua hiyo na fuata kiungo cha msimbo uliosababisha. Hifadhi traces kabla na baada kwa mabadiliko yenye maana.

Chukua wakati huo

Rekodi tu kabla ya kitendo na simamisha baada ya matokeo ya kuonekana.

Tumia kesi inayoweza kurudiwa

Hifadhi njia, hali ya akaunti, na mlolongo wa hatua sawa.

Taja mmiliki

Peana kila gharama kuu kwa timu au muuzaji anayeweza kuibadilisha.

02

Soma trace kama foleni ya kazi

Long task ni kigezo cha kuanzisha uchunguzi, si utambuzi kamili. W3C Long Tasks specification inaripoti tasks zinazodumu 50 milliseconds au zaidi. Angalia chini ya task kwa ajili ya JavaScript evaluation, event handler, recalculation ya style, layout, au paint. Call stack inaonyesha wapi kuanza; nyakati zinaonyesha ikiwa tatizo ni msimbo, rendering, au fremu ya mtu wa tatu.

Panga kipaumbele gharama zinazojirudia wakati wa mwingiliano wenye thamani. Handler fupi bado inaweza kuonekana polepole inapochochea layout au kusubiri nyuma ya kazi iliyotangulia. Trace ni kipimo cha maabara, hivyo thibitisha marekebisho kwenye vifaa vinavyowakilisha na, pale zinapopatikana, kwa telemetry ya uwanja inayozingatia faragha.

Tenganisha nyakati

Parsing ya startup inahitaji tiba tofauti na handler baada ya kugusa.

Kagua rendering

Tafuta mifumo ya kuandika style mara kwa mara na kusoma layout kabla ya kufanyia refactor.

Hifadhi msingi (baseline)

Ambatisha trace, senario, na gharama kuu kwenye kazi.

03

Pakia msimbo mdogo wakati unapouhitaji

Orodhesha skripti kwa njia na kusudi. Ondoa vifurushi visivyotumiwa, nakala rudufu, majaribio yaliyositishwa na msimbo wa vipengele vilivyoondolewa. Kisha gawanya vipengele vya njia fulani au vinavyotumiwa mara chache ili vipakizwe vinapohitajika badala ya kupakiwa katika njia ya mwanzo. Loading ya dynamic inaweza kupunguza kazi ya startup, lakini inaweza kuleta ucheleweshaji unaoonekana wakati mtumiaji anahitaji kipengele mara moja.

Jiulize ikiwa sehemu inahitaji framework kamili ya upande wa mteja, ikiwa utility inarudia uwezo uliopo, na ikiwa HTML tuli pamoja na uboreshaji mdogo itatosha. Jaribu hali ya fallback ya moduli iliyocheleweshwa. Kwa uwezo wa hiari, ukurasa unapaswa kuendelea kufanya kazi kwa staha hata kipengele hicho kisipatikane, badala ya kuonyesha kidhibiti kisichofanya kazi.

Tengeneza bajeti ya njia

Tambua scripts zilizokubaliwa kwenye njia na kwa nini.

Pakia mtumiaji anapoonyesha nia

Fikiria hili kwa wahariri wa hiari, ramani, wachezaji, au maoni ya ripoti.

Linda njia muhimu

Jaribu uthibitisho, upatikanaji, malipo, na kukamilisha fomu; tafuta ukaguzi wenye sifa ambapo vidhibiti vinaguswa.

04

Gawanya kazi ili browser iwasilishe mwitikio

Kugawa msimbo katika functions ndogo hakuundi browser tasks tofauti zinapoendeshwa kwa mfuatano. Kwa loop ndefu, fanya kazi kwa batch, sasisha hali inayoonekana kwa mtumiaji mara moja, kisha ipe browser nafasi ya kushughulikia kazi nyingine (yield) kabla ya kuendelea. Hilo huruhusu browser kuchakata ingizo na rendering kati ya batch.

Pale inapoungwa mkono, scheduler.yield() huipa main thread nafasi ya kushughulikia kazi nyingine kabla ya kuendelea na kazi; tambua upatikanaji wake kwa feature detection na utumie fallback kwa vivinjari visivyounga mkono. Usitumie yield baada ya kila operesheni ndogo: ina gharama na inaweza kuongeza muda wa kukamilisha. Chagua mipaka kwa vipimo, hifadhi uwezo wa kughairi, na zuia matokeo ya zamani yasibadilishe hali mpya.

Weka UI kwa mbele

Onyesha kukubaliwa au maendeleo kabla ya kazi ya ziada isiyoonekana.

Batch kwa muda uliopimwa

Rudisha kabla kazi iliyopimwa kuwa ndefu, badala ya mara kwa mara kwa kila kipengee.

Epuka mbinu fupi zisizofaa

Mwongozo wa sasa wa web.dev haupendekezi mkakati mpya unaotegemea isInputPending().

05

Hamisha uchakataji, si kiolesura, hadi worker

Web Worker huendesha script kwenye thread ya usuli, tofauti na main execution thread. Inafaa kwa uchanganuzi mzito, ubadilishaji wa data, uorodheshaji wa utafutaji na hesabu nyingine ambazo hazihitaji ufikiaji wa moja kwa moja wa kiolesura. Tuma ingizo lililobainishwa, rejesha matokeo yaliyobainishwa, na weka rendering pamoja na mabadiliko ya hali inayoonekana kwenye main thread.

Workers si suluhisho la kila kitu. Haziwezi kubadilisha DOM moja kwa moja wala kutumia Window, na mawasiliano ya ujumbe kwa kawaida hunakili data. Uundaji wa worker, uhamisho wa data, na uratibu wa makosa unaweza kuzidi faida kwa hesabu ndogo. Pima mwingiliano mzima, sitisha workers zisizohitajika, na tengeneza fallback ikiwa kazi ya worker itashindwa.

Chagua kazi iliyojitegemea

Anzisha na kalkuleti ambayo input yake na output inaweza kuserializiwa na kujaribiwa.

Endesha toleo la ujumbe

Tupa matokeo yaliyotengenezwa kwa filter, njia, au hatua ya zamani.

Hifadhi upatikanaji (accessibility)

Wasiliana maendeleo yenye maana kupitia kiolesura cha kawaida.

06

Dhibiti JavaScript ya mtu wa tatu kama utegemezi wa uzalishaji

Analytics, matangazo, majaribio, embeds za kijamii, wachezaji wa video, na widgets za msaada vinaweza kuongeza maombi, JavaScript evaluation, iframes, na utegemezi. Script ya muuzaji inaweza kuwa muhimu, lakini ipo nje ya udhibiti wa moja kwa moja wa timu ya programu na inaweza kuathiri utendaji, faragha, usalama, na kuendelea kwa huduma. Orodhesha kusudi chake, njia, hali ya upakiaji, mthibitishaji, hitaji la ridhaa (consent), na mwenye kuiondoa.

Pale masharti na mikataba vinaporuhusu, linganisha ukurasa unaowakilisha ukiwa na bila origin moja ya mtu wa tatu. Zana za utendaji zinaweza kufichua evaluation yenye gharama, payloads, na attribution ya long task. Dumisha integration nyepesi au iliyocheleweshwa tu pale thamani yake iliyoandikwa inapoidhinisha gharama iliyopimwa. Thibitisha maudhui ya msingi na kazi kuu ya muamala pale utegemezi wa hiari unapokuwa polepole au haupatikani.

Punguza mzunguko wa athari

Pakia tag tu kwenye njia na masharti zinazohitaji.

Kagua udhibiti wa mabadiliko

Jumuisha mabadiliko ya tag-manager katika ukaguzi wa utendaji, faragha, usalama, na rollback.

Hifadhi swichi ya kuondoa

Hifadhi na jaribu jinsi ya kuzima ushirikiano usio wa lazima.

07

Fanya mwitikio kuwa kinga ya utoaji

Geuza trace iliyo bora kuwa cheki ndogo ya regression kwa safari muhimu. Bainisha mwingiliano uliokamilishwa, kifaa au vizuizi vya CPU, mwitikio unaotarajiwa, na mkaguzi. Unganisha hili na ukaguzi wa bundle na orodha ya wahusika wengine ili package mpya au tag isirudi kwa utulivu kazi za main-thread bila kutambulika.

Status Is UP hutumia ushahidi huu kwa uboreshaji wa mapema na urejeshaji salama, si kuchukua nafasi ya ufuatiliaji hai wa upatikanaji. Kabla ya mabadiliko yenye hatari kubwa, andaa rollback na thibitisha mtiririko muhimu baada ya utoaji. Matokeo hutofautiana kulingana na kifaa, mtandao, kivinjari, maudhui, na hali ya akaunti; tibu vizingiti kama kinga, si dhamana.

Kata mabadiliko makubwa

Hitaji traces kabla na baada kwa urambazaji uliooshirikishwa, checkout, utafutaji, au bundles kubwa.

Fanya mazoezi ya rollback

Tambua feature flag, mipangilio ya tag, au toleo la deployment linalorejesha tabia iliyojulikana inayofanya kazi.

Rudia mara kwa mara

Pima tena baada ya utoaji mkubwa, mabadiliko ya muuzaji, au mabadiliko ya muundo wa vifaa.

KITENDO / THIBITISHA

Mwongozo wako wa vitendo.

  1. 01

    Chagua mwingiliano muhimu

    Taja njia, hatua, mwitikio unaotarajiwa, na athari kwa mteja.

    THIBITISHA: Kumbukumbu ya jaribio inarekodi njia, hali ya akaunti, hatua, kivinjari, na mipangilio ya kifaa au CPU.
  2. 02

    Rekodi msingi (baseline)

    Rekodi mwingiliano katika DevTools Performance kutoka kwenye hali safi.

    THIBITISHA: Timu inaweza kurudi kwenye trace na Main flame chart.
  3. 03

    Tafuta kazi zinazoziba

    Kagua long tasks, call stacks, rendering, na shughuli za mtu wa tatu.

    THIBITISHA: Kila gharama kuu ina muda, chanzo au asili, njia, na mmiliki.
  4. 04

    Ondoa scripts zisizohitajika

    Futa packages zisizotumiwa, majaribio yaliyokwisha, duplicates, na msimbo usiohitajika wa njia.

    THIBITISHA: Ujenzi na safari muhimu vinafanya kazi baada ya kuondolewa.
  5. 05

    Chelewesha vipengele vya hiari

    Pakia uwezo wa hiari baadaye tu wakati hali yake iliyocheleweshwa bado inatumika.

    THIBITISHA: Jaribio la ukurasa mpya linashughulikia upakiaji, kushindwa, au fallback.
  6. 06

    Gawanya long tasks

    Fanya kazi kwa batch na ipe browser nafasi ya kushughulikia kazi nyingine baada ya mwitikio wa papo hapo wa kiolesura.

    THIBITISHA: Trace mpya inaondoa long task inayolingana kwenye njia ya mwingiliano na inahifadhi matokeo sahihi.
  7. 07

    Pima worker

    Hamisha tu uchakataji wenye mipaka na ujumbe ulioainishwa.

    THIBITISHA: Pima nyakati za mwisho-mwisho, makosa, matokeo ya zamani, na usafi.
  8. 08

    Kagua watu wa tatu

    Rekodi kusudi, mmiliki, hali, ridhaa, gharama, na taratibu za kuzima.

    THIBITISHA: Kila tag ya njia muhimu ina uamuzi wa kuhifadhi, kupunguza, kuchelewesha, au kuondoa.
  9. 09

    Jaribu kwenye masharti yaliyo kizuizi

    Rudia kwa CPU iliyopunguzwa kasi (throttled) na vivinjari au vifaa vinavyowakilisha, pale inapowezekana.

    THIBITISHA: Kulinganisha kunatumia senario ile ile na kunatoa tofauti muhimu.
  10. 10

    Toa kwa utaratibu na rollback

    Ambatisha trace, cheki ya kukubali, na maagizo ya kurejesha kwenye utoaji.

    THIBITISHA: Mmiliki aliyetajwa anaweza kurudisha tabia iliyojulikana bila kutafuta wasioandikwa.
MADA ZA MAJADILIANO

Linganisha faida na hasara, si data binafsi.

Tumia vichocheo hivi na timu yako au jamii ya wamiliki wa tovuti. Shiriki mbinu na masomo, lakini usibandike kamwe taarifa za uthibitishaji, rekodi za wateja, au maelezo ya miundombinu yasiyo ya umma.

  1. 01

    Ni mwingiliano gani ulionekana kukubalika kwenye ripoti ya upakiaji lakini ukadhihirika kuwa polepole ulipomfanyia profiling mguso au kubofya halisi?

  2. 02

    Unamua vipi ikiwa kipengele cha mtu wa tatu kinastahili gharama yake iliyoripotiwa kwenye main-thread?

  3. 03

    Ni utaratibu gani wa rollback unaorahisisha zaidi kurudisha nyuma regression ya utendaji bila kuathiri safari muhimu?

RASIMALI MAARUFU / ZINAZOAMINIKA

Fungua nyenzo za chanzo.

web.devOptimize long tasks ↗

Inaelezea long tasks, yielding, scheduler.yield(), fallbacks, na gharama za yield.

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

Inaonyesha jinsi ya kurekodi, kuchambua flame-chart, kutambua long-task, na kuchunguza chanzo.

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

Inaelezea workers, mawasiliano ya ujumbe, na ukomo wa DOM moja kwa moja.

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

Inatoa mwongozo wa ukaguzi wa script za watu wa tatu na upimaji.

Imehakikiwa 2026-09-27
W3CLong Tasks API ↗

Inafafanua long tasks, kizuizi cha muda, na attribution.

Imehakikiwa 2026-09-27

Sera ya vyanzo. Makala hii inatumia nyaraka rasmi za kivinjari, viwango, na web-platform zilizosasishwa na timu ya uhariri. Inatofautisha upimaji na dhamana na inatoa taarifa bila madai yasiyothibitishwa.

MAELEZO YA HARAKA

Maswali ya kawaida.

Je, nini kinachohesabiwa kama long JavaScript task?

W3C Long Tasks specification inatumia 50 milliseconds au zaidi kama kizuizi cha kuripoti. Ni ishara ya kuchunguza, si ushahidi kwamba tasks fupi ziko salama. Thibitisha chanzo katika trace.

Je, code splitting itaboresha kila mara utendaji wa JavaScript?

Hapana. Kugawanya kunaweza kupunguza kazi ya startup lakini kuongeza ucheleweshaji wa matumizi ya kwanza. Tumia kwa msimbo maalumu kwa njia au wa hiari, kisha jaribu kipengele hicho chini ya masharti yaliyo kizuizi.

Je, kila kazi ghali inapaswa kukimbizwa ndani ya Web Worker?

Hapana. Workers zinafaa kwa hesabu zinazotumia CPU kwa kiwango kikubwa na zenye ujumbe uliobainishwa. Haziwezi kubadilisha DOM moja kwa moja, uhamishaji wa data unachukua muda, na kazi ndogo zinaweza kumalizika haraka kwenye main thread.

Status Is UP Editorial Team · Waandishi wa Uwekaji wa Uptime

Imehakikiwa na Mkaguzi Mwandamizi wa Utendaji wa Wavuti. Ilichapishwa 2026-09-27; imesasishwa 2026-09-30.