· kaynak dev.to (home feed)
TC39 iterator helperları Baseline 2026'ya ulaştı ve tüm büyük tarayıcılara doğal tembel iterasyon getiriyor
ES2025'in iterator helperları, güncel tarayıcılarda ve Node.js LTS'te Baseline 2026 oldu; geliştiriciler artık istekli array zincirleri ve Lodash boru hatları yerine doğal tembel iterasyon kullanabiliyor.
Iterator helperları Baseline'a ulaştı
TC39'nun iterator helperları, Stage 4'e ulaştıktan sonra ES2025'in parçası olarak standartlaştırıldı ve artık Baseline Newly Available durumunda. dev.to'da yayımlanan bir yazıya göre bu yöntemler Chrome 122, Safari 17.4, Firefox 131, Node.js 22 LTS ve Bun 1.0'da doğal olarak geliyor ve Eylül 2026 itibarıyla tüm güncel evergreen tarayıcılar bunları polyfill olmadan destekliyor.
Bu özellik, tanıdık array yöntemlerine zincirlenebilir karşılıklar ekliyor — .map(), .filter(), .take(), .drop() ve .flatMap() — ve sonuçları somutlaştırmak için .toArray() da bunlara dahil. Array'ler yerine iterator'lar üzerinde çalıştıkları için Maps, Set'ler, generator'lar ve sonsuz dizilere de uygulanabiliyorlar; TypeScript 5.7 ve sonrası da bunlar için eksiksiz tip tanımlarıyla geliyor.
İstekli array zincirlerinin maliyeti
Yazının motivasyonu bellek kullanımı. Array yöntemleri isteklidir: zincirdeki her .map() veya .filter() çağrısı eksiksiz bir ara array ayırır. 50.000 elemanlı bir veri kümesi üzerinde beş zincirlenmiş işlem çalıştırdığınızda, motor nihai sonuç oluşmadan önce beş tam array oluşturur. Yazının örnek hesabında, filtre/map/filtre/sort/slice boru hattı sadece on satır döndürmek için 80.000'den fazla ayrılmış nesnede zirve yapıyor; çünkü sonundaki bir slice, önce her girdi elemanını dönüştürmenin maliyetini yine de ödüyor.
Ekipler bu ödünü uzun süredir kabul ediyordu; çünkü array yöntemleri zincirlenebilir tek seçenekti ve alternatif olan, elle biriktirme yapan imperatif döngüler de okunabilirlikten feragat ediyordu.
Tembel değerlendirme hesabı değiştiriyor
Iterator helperları farklı çalışıyor. Her helper bir iterator'ı başka bir iterator'a sarar ve bir şey .next() üzerinden değer çekene kadar hiçbir şey hesaplanmaz. .toArray() gibi bir terminal adım tüm zinciri sondan itibaren çalıştırır: take(10) sarmalayıcısı kendisinden önceki filtreden bir değer ister, o filtre map'ten ister ve istek kaynağa kadar geriye doğru ilerler. On eleman geçtikten sonra sarmalayıcılar istemeyi bırakır ve kalan veriye hiç dokunulmaz.
Sonuç şudur: yapılan işin miktarı girdinin değil, çıktının boyutunu izler. Bir milyon kayıttan on sonuç üreten bir boru hattı yalnızca filtrelerinin geçişine izin verdiği kadar eleman işler ve tepe bellek kullanımı, kaynak koleksiyon büyüdükçe kabaca sabit kalır.
Lodash zincirlerinin yerine geçmesi
Doğal helperlardan önce, Lodash'un .chain()/.value() deseni tembel ve zincirlenebilir boru hatları elde etmenin standart yoluydu; bedeli ise yaklaşık 70KB'lık bir bağımlılıktı. dev.to yazısı, yerleşik yöntemlerin artık yaygın Lodash işlemlerini sıfır ek bayt ile karşıladığını savunuyor.
Yazı ayrıca iterator helperları üretime alan ekiplerden bildirilen deneyimlere de değiniyor: veri yoğun boru hatlarında %40-60 bellek azalması ve büyük veri kümelerinde 2-3 kat verim artışı. Bu rakamlar yayımlanmış benchmark'lar değil, ekiplerin kendi bildirdiği değerler; bu yüzden kesin büyüklüğe temkinle yaklaşmak gerekir — ama yön, ara ayırmaların ortadan kalkmasından doğrudan kaynaklanıyor.
Neden önemli
Baseline durumu son engeli kaldırıyor: iterator helper kullanan kod artık Chrome, Safari ve Firefox'un yanı sıra Node.js LTS ve Bun'da değiştirilmeden çalışıyor. API yanıtlarını, veritabanı sorgu sonuçlarını veya dosya akışlarını işleyen ekipler, atacakları elemanları dönüştürmek için ödeme yapmadan okunabilir kalan boru hatlarına kavuşuyor ve sonsuz diziler dokunulması tehlikeli değil, tüketilmesi pratik hale geliyor.
Bu durum ayrıca fonksiyonel veri boru hatları için Lodash paketlemenin uzun süredir süren bir gerekçesini de aşındırıyor — platformun içine çektiği bir yardımcı kütüphane daha. Uyarı tanımsal: Baseline Newly Available yalnızca güncel evergreen tarayıcıları kapsıyor; dolayısıyla daha eski ortamları hedefleyen her şey için hâlâ transpilation veya polyfill gerekiyor.
- #javascript
- #tc39
- #ecmascript
- #web-standards
- #performance