STATUS IS UPWEB SİTESİ OPTİMİZASYONU VİKİSİ
25Hızlandır
Performans ve teslimat / Hızlandır

JavaScript Performansı: Ana İş Parçacığı Yükünü Azaltın

Sayfanın takılmasına veya gecikmesine neden olan JavaScript’i bulun, gereksiz işleri kaldırın veya erteleyin ve etkileşimleri koruyun.

JavaScript Performansı: Ana İş Parçacığı Yükünü Azaltın — GÖRSEL REHBER
OKU
8 dakika
KAYNAKLAR
5
YENİDEN DOĞRULA
2027-03-27
gözden geçirildi
Kıdemli Web Performansı İnceleyicisi
KISA CEVAP

Kararla başlayın.

Gerçek bir sayfada ve etkileşimde ölçüm yaparak ana-iş parçacığı (main-thread) işini azaltın; ardından en büyük, tekrarlanabilir maliyeti düzeltin. Ana iş parçacığı çoğu sayfa JavaScript’ini ve arayüz işlerini tek tek görevler halinde çalıştırır. 50 milisaniyeden uzun görevler “long task” olarak adlandırılır; bu yüzden bir dokunuş, tıklama, kaydırma veya paint işlemi bu görevlerin arkasında bekleyebilir. Öncelikle ödeme, arama, gezinme, formlar ve diğer hassas yolculuklarla başlayın.

Her maliyet için onu kaldırın, gerektiğinde erteleyin, kısa partilere bölün veya sınırlı hesaplamayı bir Web Worker'a taşıyın. Ana iş parçacığında anlık yanıtı koruyun, ancak analizler ve diğer zorunlu olmayan takip işlerini erteleyin. Her üçüncü taraf etiketini sorumlusu olan bir bağımlılık olarak ele alın. Kısıtlı bir mobil CPU üzerinde yeniden test edin ve kritik akışlar için geri alma planını koruyun.

GÖRSEL REHBER

Çalışmayı bir sistem olarak görün.

Bireysel taktiklere geçmeden önce makaledeki kararları bağlamak için bu haritayı kullanın.

SIUHızlandır
01Kod değiştirmeden önce bir müşteri yolculuğunu profilleyin
02İzlemeyi bir iş kuyruğu olarak okuyun
03Önemli olduğu anda daha az kod gönderin
04Tarayıcının yanıt verebilmesi için işi parçalayın
01

Kod değiştirmeden önce bir müşteri yolculuğunu profilleyin

Önemli bir rota ve etkileşimi seçin; örneğin navigasyon açmak, sonuçları filtrelemek veya bir form göndermek. Bunu Chrome DevTools’un Performance panelinde temiz bir tarayıcı durumunda kaydedin. Eylemi tekrarlayın ve hem CPU sınırlı (throttled) bir çalışmayı hem de geliştirme makinesi çalışmasını yakalayın; masaüstü izleri, düşük güçlü bir telefonda rahatsızlık yaratan işleri gizleyebilir.

İzlemeyi (trace) bir bileşeni paket raporundan suçlamak için değil, dar bir hipotezi test etmek için kullanın. Main flame chart’ta daha geniş çubuklar daha uzun süren işleri, üst üste binen çubuklar ise çağrı yığını gösterir. Bir Task üzerindeki kırmızı üçgen potansiyel bir long task’i işaretler; onu seçin ve başlatan kod bağlantısını izleyin. Anlamlı değişiklikler için önce-sonra izlerini saklayın.

Anı yakalayın

Eylemden hemen önce kayıt başlatın ve görünür sonuç sonrası durdurun.

Tekrarlanabilir bir vaka kullanın

Rota, hesap durumu ve eylem sırasını tutarlı tutun.

Bir sahip atayın

Her en yüksek maliyeti değiştirebilecek ekip veya tedarikçiye atayın.

02

İzlemeyi bir iş kuyruğu olarak okuyun

Uzun bir görev araştırma eşiğidir; tam bir tanı değildir. W3C Long Tasks spesifikasyonu 50 milisaniye veya daha uzun süren görevleri raporlar. Bir görevin altında JavaScript değerlendirme, olay işleyici, stil yeniden hesaplama, layout veya paint görünebilir. Çağrı yığını nereden başlanacağını gösterir; zamanlama sorunun kod mu, render mı yoksa üçüncü taraf bir frame mi olduğunu gösterir.

Değerli bir etkileşim sırasında tekrarlanan maliyeti önceliklendirin. Kısa bir handler, layout tetiklediğinde veya önceki işlerin arkasında beklediğinde yine de yavaş hissettirebilir. İzleme bir laboratuvar ölçümüdür; bu yüzden düzeltmeyi temsil eden cihazlarda ve mümkünse gizlilik-dostu saha telemetrisi ile doğrulayın.

Anları ayırın

Başlangıç ayrıştırması (startup parsing) bir dokunma sonrası handler’dan farklı bir çözüm gerektirir.

Render’ı inceleyin

Refaktör etmeden önce tekrarlayan stil-yazma ve layout-okuma desenlerini bulun.

Bir temel tutun

İzleme, senaryo ve en yüksek maliyetleri iş öğesine ekleyin.

03

Önemli olduğu anda daha az kod gönderin

Rotalara ve amaçlara göre script’leri envanterleyin. Kullanılmayan paketleri, kopyaları, emekliye ayrılmış deneyleri ve sona eren özelliklerin kodunu kaldırın. Ardından rota-özel veya nadiren kullanılan özellikleri, başlangıç akışında yüklenmek yerine gerektiğinde yüklenecek şekilde ayırın. Dinamik yükleme başlangıç işini azaltabilir, ancak kullanıcı özelliğe hemen ihtiyaç duyduğunda görünür gecikme yaratabilir.

Bir bileşenin tam bir istemci tarafı framework’e (client-side framework) gerçekten ihtiyacı olup olmadığını, bir yardımcı programın (utility) mevcut yeteneği kopyalayıp kopyalamadığını ve statik HTML artı küçük bir iyileştirmenin yeterli olup olmadığını sorun. Gecikmeli modülün yedek durumunu test edin. Sayfa, isteğe bağlı bir yeteneği ölü bir kontrol göstermek yerine kibarca ertelemelidir.

Bir rota bütçesi oluşturun

Bir rotada hangi script’lerin neden izinli olduğunu belgeleyin.

Niyete göre yükleyin

Bunun isteğe bağlı düzenleyiciler, haritalar, oynatıcılar veya raporlama görünümleri için düşünülebileceğini değerlendirin.

Kritik yolları koruyun

Kimlik doğrulama, erişilebilirlik, ödeme ve form tamamlamayı test edin; kontroller etkilendiğinde nitelikli inceleme isteyin.

04

Tarayıcının yanıt verebilmesi için işi parçalayın

Küçük fonksiyonlara ad vermek, senkron çalıştıklarında onları ayrı tarayıcı görevlerine dönüştürmez. Uzun bir döngüde işi partilere ayırın, kullanıcıya hemen görünen durumu güncelleyin ve devam etmeden önce tarayıcının kontrolü geri almasına izin verin. Böylece tarayıcı, partiler arasında kullanıcı girdisini işleyebilir ve ekranı güncelleyebilir.

Destekleniyorsa scheduler.yield() ana iş parçacığına yield eder ve daha sonra işi sürdürür; bunu feature-detect edin ve desteklenmeyen tarayıcılar için bir geri dönüş (fallback) kullanın. Her küçük işlemden sonra yield etmeyin: bunun bir yükü vardır ve tamamlanma süresini artırabilir. Ölçümlere göre sınırlar seçin, iptali koruyun ve eski sonuçların yeni durumu değiştirmesini önleyin.

Önce UI

Görünür olmayan takip işlerinden önce kabul veya ilerleme göstermek.

Geçen zamana göre parti yapın

Öğe başına değil, ölçülen iş uzunluğu uzun hale gelmeden önce yield edin.

Eski kısayollardan kaçının

Mevcut web.dev rehberi isInputPending() temelli yeni bir stratejiyi önermemektedir.

05

Hesaplamayı, arayüzü değil, bir worker’a taşıyın

Bir Web Worker, ana yürütme iş parçacığından ayrı bir arka plan iş parçacığında bir script çalıştırır. Ağır ayrıştırma, veri dönüşümü, arama indeksleme ve doğrudan arayüz erişimi gerektirmeyen diğer maliyetli hesaplamalar için uygundur. Tanımlanmış bir girdi gönderin, tanımlanmış bir sonuç döndürün ve render ile görünür durum değişikliklerini ana iş parçacığında tutun.

Worker'lar evrensel bir çözüm değildir. DOM'u doğrudan değiştiremezler veya Window nesnesini kullanamazlar; mesajlaşma yoluyla iletişimde veriler kopyalanır. Worker oluşturma, veri taşıma ve hata koordinasyonunun getirdiği ek yük, küçük bir hesaplamanın sağlayacağı faydayı aşabilir. Tüm etkileşimi ölçün, gereksiz worker'ları sonlandırın ve worker işi başarısız olduğunda bir geri dönüş tasarlayın.

İzole işi seçin

Girdisi ve çıktısı serileştirilebilir ve test edilebilir bir hesaplamayla başlayın.

Mesajları versiyonlayın

Eski bir filtre, rota veya işlem için oluşturulmuş sonuçları atın.

Erişilebilirliği koruyun

Normal arayüz yoluyla anlamlı ilerleme bildirin.

06

Üçüncü taraf JavaScript’i üretim bağımlılığı olarak yönetin

Analitik, reklam, deneyler, sosyal gömme içerikler, video oynatıcılar ve destek widget’ları istek, JavaScript değerlendirmesi, iframe’ler ve bağımlılıklar ekleyebilir. Bir sağlayıcı script’i gerekli olabilir, ancak uygulama ekibinin doğrudan kontrolü dışında kalır ve performans, gizlilik, güvenlik ve süreklilik üzerinde etkili olabilir. Amacını, rotalarını, yükleme koşulunu, onaylayıcısını, izin gereksinimini ve kaldırma sahibini envanterleyin.

Koşullar ve sözleşmeler izin verdiğinde, temsilî bir sayfayı belirli bir üçüncü taraf kaynağı etkin ve devre dışıyken karşılaştırın. Performans araçları maliyetli değerlendirmeyi, yükleri ve uzun görevlere ilişkin kaynak atfını gösterebilir. Belgelendirilmiş değeri, ölçülen maliyetini haklı çıkarıyorsa hafif veya gecikmeli bir entegrasyonu koruyun. İsteğe bağlı bir bağımlılık yavaş veya kullanılamaz olduğunda temel içeriğin ve ana işlemin çalıştığını doğrulayın.

Patlama alanını sınırlayın

Bir etiketi yalnızca ihtiyaç duyan rotalar ve koşullar için yükleyin.

Değişiklik kontrolünü gözden geçirin

Tag-manager değişikliklerini performans, gizlilik, güvenlik ve geri alma incelemesine dahil edin.

Kaldırma anahtarı tutun

Kritik olmayan entegrasyonu devre dışı bırakma prosedürünü belgeleyin ve test edin.

07

Yanıt verebilirliği bir sürüm emniyeti (release safeguard) yapın

Başarılı sonucu gösteren performans kaydını, önemli yolculuk için küçük bir regresyon kontrolüne dönüştürün. Kapsanan etkileşimleri, cihaz veya CPU kısıtını, beklenen yanıtı ve inceleyiciyi tanımlayın. Bunu paket ve üçüncü taraf envanteri incelemesiyle birlikte kullanın; böylece yeni bir paket veya etiket ana iş parçacığı yükünü fark edilmeden yeniden getiremez.

Status Is UP bu kanıtı proaktif optimizasyon ve güvenli düzeltme için kullanır; bu yaklaşım canlı kullanılabilirlik izlemenin yerine geçmez. Yüksek riskli bir değişiklikten önce geri alma hazırlayın ve sürüm sonrasında kritik akışı doğrulayın. Sonuçlar cihaz, ağ, tarayıcı, içerik ve hesap durumuna göre değişir; eşik değerlerini garanti değil, koruyucu hatlar olarak ele alın.

Önemli değişiklikleri kontrolleyin

Paylaşılan gezinme, ödeme, arama veya büyük paketler için önce-sonra izleri şart koşun.

Geri almayı pratik edin

Bilinen iyi davranışı geri getiren özellik bayrağı, etiket ayarı veya dağıtım sürümünü bilin.

Düzenli olarak yeniden ziyaret edin

Büyük sürümler, sağlayıcı değişiklikleri veya cihaz-karışımı kaymaları sonrası tekrar profilleyin.

EYLEM / DOĞRULA

Pratik yapılacaklar rehberiniz.

  1. 01

    Kritik bir etkileşim seçin

    Rotayı, eylemi, beklenen yanıtı ve müşteri etkisini adlandırın.

    DOĞRULA: Bir test notu rota, hesap durumu, eylem, tarayıcı ve cihaz veya CPU ayarını kaydeder.
  2. 02

    Bir temel (baseline) kaydı yapın

    Etkiyi DevTools Performance’ta temiz bir durumdan kaydedin.

    DOĞRULA: Ekip Main flame chart ile bir izlemeyi yeniden inceleyebilir.
  3. 03

    Engelleyici işi bulun

    Long task’leri, çağrı yığınlarını, render’ı ve üçüncü taraf etkinliğini inceleyin.

    DOĞRULA: Her en yüksek maliyetin süresi, kaynağı veya kökeni, rotası ve sahibi vardır.
  4. 04

    Gereksiz script’leri kaldırın

    Kullanılmayan paketleri, emekliye ayrılmış deneyleri, kopyaları ve gereksiz rota kodunu silin.

    DOĞRULA: Kaldırma sonrası build ve kritik yolculuk çalışır.
  5. 05

    İsteğe bağlı özellikleri erteleyin

    İsteğe bağlı yeteneği yalnızca geciktirilmiş durumu kullanılabilir kaldığında daha sonra yükleyin.

    DOĞRULA: Yeni sayfa testi yükleme, başarısızlık veya geri dönüş durumunu kapsar.
  6. 06

    Uzun görevleri bölün

    İşi partilere ayırın ve hemen arayüz yanıtından sonra yield edin.

    DOĞRULA: Yeni bir izleme, karşılaştırılabilir etkileşim-yolu long task’ini ortadan kaldırır ve doğru sonuçları korur.
  7. 07

    Bir worker’ı değerlendirin

    Yalnızca tanımlı mesajlarla sınırlı hesaplamayı taşıyın.

    DOĞRULA: Uçtan uca zamanlama, hatalar, eski sonuçlar ve temizleme test edilir.
  8. 08

    Üçüncü tarafları denetleyin

    Amaç, sahip, koşul, izin, maliyet ve devre dışı bırakma prosedürünü kaydedin.

    DOĞRULA: Her kritik rotadaki etiket için tutma, sınırlandırma, erteleme veya kaldırma kararı vardır.
  9. 09

    Kısıtlı koşullarda test edin

    CPU sınırlanmış ve mümkün olduğunca temsilci tarayıcılar veya cihazlarda tekrarlayın.

    DOĞRULA: Karşılaştırma aynı senaryoyu kullanır ve önemli farkları not eder.
  10. 10

    Geri alma ile yayınlayın

    İzlemeyi, kabul kontrolünü ve geri alma talimatını sürüme ekleyin.

    DOĞRULA: Adlandırılmış bir sahip, belgelenmemiş arama yapmadan bilinen iyi davranışı geri getirebilir.
TARTIŞMA KONULARI

Ödünleri karşılaştırın, özel verileri paylaşmayın.

Bu başlıkları ekibiniz veya site sahipleri topluluğuyla kullanın. Yöntemleri ve çıkarılan dersleri paylaşın; ancak kimlik bilgilerini, müşteri kayıtlarını veya kamuya açık olmayan altyapı detaylarını asla paylaşmayın.

  1. 01

    Hangi etkileşim yükleme raporunda kabul edilebilir görünüyordu fakat gerçek bir dokunuş veya tıklamayı profilleyince yavaş olduğu ortaya çıktı?

  2. 02

    Bir üçüncü taraf özelliğin ölçülen ana-iş parçacığı maliyetini haklı çıkarıp çıkarmadığını nasıl kararlaştırıyorsunuz?

  3. 03

    Hangi geri alma mekanizması, kritik bir yolculuğu bozmadan performans gerilemesini tersine çevirmeyi en kolay hale getiriyor?

POPÜLER / YETKİLİ KAYNAKLAR

Kaynak materyalini açın.

web.devOptimize long tasks ↗

Uzun görevleri, yielding’i, scheduler.yield(), fallback’ları ve yield yükünü açıklar.

İncelendi 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

Kayıt alma, flame-chart analizi, long-task tanımlama ve kaynak araştırmasını gösterir.

İncelendi 2026-09-27
MDN Web DocsWeb Workers API ↗

Worker’ları, mesaj iletişimini ve doğrudan-DOM sınırlamasını tanımlar.

İncelendi 2026-09-27
web.devLoad Third-Party JavaScript ↗

Üçüncü taraf script denetimi ve ölçüm rehberi sağlar.

İncelendi 2026-09-27
W3CLong Tasks API ↗

Long task’leri, eşik değerini ve atfedilmeyi tanımlar.

İncelendi 2026-09-27

Kaynak politikası. Bu makale, editoryal ekip tarafından okunan resmi tarayıcı, standart ve web-platform dokümantasyonlarını kullanır. Ölçümü garantilerden ayırır ve desteklenmeyen iddiaları içermez.

HIZLI AÇIKLAMALAR

Yaygın sorular.

Uzun bir JavaScript görevi (long task) ne sayılır?

W3C Long Tasks spesifikasyonu raporlama eşiği olarak 50 milisaniye veya daha uzun süreleri kullanır. Bu, araştırma için bir sinyaldir; daha kısa görevlerin zararsız olduğunun kanıtı değildir. Nedeni bir izlemeyle doğrulayın.

Kod bölme (code splitting) her zaman JavaScript performansını iyileştirir mi?

Hayır. Bölme başlangıç işini azaltabilir ama ilk kullanımda gecikme ekleyebilir. Route-özel veya isteğe bağlı kod için kullanın ve bu özelliği kısıtlı koşullarda test edin.

Her pahalı fonksiyon bir Web Worker’da mı çalıştırılmalı?

Hayır. Worker’lar izole, CPU ağırlıklı ve tanımlı mesajlarla uygun hesaplamalar içindir. DOM’u doğrudan değiştiremezler, veri aktarımları zaman alır ve küçük görevler ana iş parçacığında daha hızlı bitebilir.

Status Is UP Editorial Team · Uptime Etkinleştirme Editörleri

Kıdemli Web Performansı İnceleyicisi tarafından incelendi. Yayınlandı 2026-09-27; güncellendi 2026-09-30.