Ana içeriğe geç

Büyük JSON Dosyalarını Tarayıcıda İşleme Yöntemleri

Tarayıcılar tek iş parçacıklı (single-threaded) çalıştığı için JavaScript motorunun uzun süren işlemleri (büyük JSON/XML parser'ları gibi) tarayıcı sekmesinin donmasına ve "Page Unresponsive" hatasına yol açar.

Web Worker Kullanımı

Bu sorunun en yaygın çözümü, ayrıştırma ve formatlama gibi yoğun CPU gerektiren görevleri **Web Worker** katmanına taşımaktır. Web Worker'lar:

  • Main thread (ana iş parçacığı) dışında, arka planda paralel olarak çalışır.
  • Kullanıcı veri girişi yaparken veya sayfada gezinirken arka planda 50MB'lık bir veriyi parse edip sonucu ana thread'e mesaj olarak gönderebilir.
  • Arayüz akıcılığını (60 FPS) tamamen korur.
  • Sanal Liste (Virtual Windowing)

    Milyonlarca satırdan oluşan DOM elemanlarını ekrana çizmek tarayıcıyı kilitler. Bu yüzden sadece ekranda görünen satırların DOM üzerinde oluşturulması, kaydırıldıkça dinamik olarak güncellenmesi gerekir. Bu teknolojiye **Virtual List** veya **Windowing** denir.

    JSONFlow, hem Web Worker arka plan işlemcisi hem de sanallaştırılmış ağaç/grid yapıları sayesinde büyük dosyaları tereyağından kıl çeker gibi işler.

    Bellek Kullanımını Anlamak

    50 MB'lık bir JSON dosyası parse edildiğinde metin, JavaScript nesneleri ve görünüm düğümleri nedeniyle bellekte birkaç kat büyüyebilir. Sorun yalnızca parser süresi değildir; milyonlarca DOM düğümü üretmek arayüzü kilitleyebilir. Sanallaştırılmış liste ve katmanlı görüntüleme bu nedenle önemlidir.

    Güvenli İnceleme Stratejisi

    Önce dosya boyutunu ve biçimini doğrulayın. Tam ağaç yerine biçimlendirilmiş metin veya özet istatistiklerle başlayın. Aradığınız alan belliyse tüm düğümleri açmadan sorgu çalıştırın. Tarayıcı bellek sınırına yaklaşıldığında sekmeyi yenilemeden önce gerekli sonucu dışa aktarın.

    Streaming Ne Zaman Gerekir?

    Tek bir dev nesne yerine NDJSON gibi satır tabanlı formatlar akış işlemeye daha uygundur. Sunucu tarafında incremental parser kullanmak, tüm belgeyi belleğe almadan kayıtları işleyebilir. JSONFlow istemci tarafında çalıştığından donanıma göre sınırlar değişir; kritik üretim dosyalarında örneklenmiş veya bölünmüş kopyayla çalışmak daha güvenlidir.