· kaynak dev.to (home feed)
Deno 2.9 task cache'i değişmeyen build'leri atlıyor, 4 saniyelik işi 10ms'ye indiriyor
Deno 2.9, deno.json task'larının girdilerini bildirmesine ve hiçbir şey değişmediğinde çalışmayı atlamasına izin veriyor. Bir dev.to testi, dört saniyelik bir build'in 10 milisaniyenin altına düştüğünü ölçtü; ancak bazı uyarılar var.

Deno 2.9, yerleşik task çalıştırıcısına, bağımlı olduğu dosyalar değişmediğinde bir build adımını tamamen atlayabilen bir cache kazandırıyor. dev.to'da alexgeorgiev17 tarafından kaleme alınan uygulamalı bir yazıya göre, bilinçli olarak yavaş olacak şekilde tasarlanmış ve cold çalıştırmada tam dört saniyenin altında süren bir build task'ı, warm cache ile 10 milisaniyenin altında tamamlandı — yazar bu farkı kabaca 423x olarak ölçtü.
Cache nasıl çalışıyor
deno.json içinde tanımlanan task'lar artık üç ek alan taşıyabiliyor. files alanı, task'ın girdilerini belirten bir glob; bu alanı bildirmek cache'lemeyi mümkün kılan şey — bu alanı olmayan bir task her zaman çalışır. output alanı, task'ın ürettiği dosyaları belirtir; cache hit durumunda bunlar cache deposundan geri yüklenir, yeniden üretilmez. env alanı ise değerleri task'ın fingerprint'ine giren ortam değişkenlerini listeler.
dev.to yazarı testleri herhangi bir unstable flag olmadan Linux üzerinde Deno 2.9.8 ile çalıştırdı; yani bu davranış önizleme olarak değil, stable olarak geliyor.
Testler ne gösterdi
Benchmark script'i toplam yaklaşık 1.1MB'lık 40 kaynak dosya okudu, CPU yoğun işi taklit etmek için her birini SHA-256 ile 2.000 kez hash'ledi ve dist/'e bir manifest yazdı. Üç cold çalıştırma 3.9 ile 4.3 saniye arasında sürdü; bildirilen girdilerde hiçbir değişiklik olmadığı üç warm çalıştırmanın her biri yaklaşık 10 milisaniyede tamamlandı. Hit durumunda yeni bir process başlatılmıyor, kaynaklar yeniden okunmuyor ve hash'leme yapılmıyor — komut yalnızca çalıştırılmıyor.
Invalidasyon içerik tabanlı, timestamp tabanlı değil. ~/.cache/deno/task_cache_v1/ altında saklanan cache manifest'i her dosyanın boyutunu ve mtime'ını içerik hash'inin yanında kaydediyor, ancak bu metadata yalnızca hızlı bir başlangıç filtresi olarak hizmet ediyor. Bir dosyayı düzenlemeden touch etmek task'ı cache'lenmiş bıraktı; bir satır eklemek yeniden çalıştırmayı zorladı ve ondan sonraki çalıştırma tekrar cache'lendi.
Output geri yüklemesi de sağlamdı. dist/'i tamamen silip cache'lenmiş task'ı yeniden çalıştırdıktan sonra, bildirilen output dosyası son gerçek build'in ürettiği içeriğin aynısıyla geri döndü; output glob'unun dışındaki bir yan etki log'u ise dokunulmamış kaldı — komutun kendisinin hiç çalışmadığının kanıtı.
Eksik kaldığı yerler
Yazı aynı zamanda birkaç sınırlamayı da belgeliyor. Aynı zamanda girdi olarak listelediği bir dosyaya yazan bir task her çalıştırmada kendini geçersiz kılar; dolayısıyla cache'leme sessizce hiçbir işe yaramaz ve bununla ilgili hiçbir uyarı verilmez. Bir build adımı okuduğu bir dizine log, timestamp veya üretilmiş bir dosya bırakırsa bu özellik hiçbir fayda sağlamaz.
Başlıktaki sayının karşıtı ise overhead. Hiçbir şey yapmayan yalnızca bir mesaj yazdıran bir task'a bağlı, 3.000 dosyalık ve 12MB'lık bir girdi ağacında cache kontrolü, hit durumunda bile, hiçbir izleme olmadan komutu çalıştırmaktan kabaca üç ila dört kat daha uzun sürdü. Zaten milisaniyeler içinde biten bir task için — mesela hızlı bir lint geçişi — geniş bir ağaç üzerinde files bildirmek tasarruf ettiğinden daha fazlasına mal olabilir.
Eşzamanlılık koruması da yok: aynı task'ın iki eşzamanlı cold çalıştırması tamamen yürütüldü; ikincisi ne birincinin sonucunu bekledi ne de onu yeniden kullandı. Task başına cache sıfırlama da yok; tek kaldıraç deno clean, module ve npm cache'leri de dahil tüm Deno cache dizinini siliyor — tek bir build adımını yeniden çalıştırmaktan çok daha büyük bir temizlik.
Yazara göre daha önce bozuk olan iki davranış artık çalışıyor. Task argümanları farklı fingerprint'ler üretiyor — Deno'nun commit geçmişi, argümanların bir zamanlar hash'in dışında bırakıldığını gösteriyor — ve izlenen bir ortam değişkenini dev'den prod'a çevirmek, tekrar cache'lemeden önce doğru şekilde yeni bir çalıştırma zorladı.
Neden önemli
Artımlı build'ler uzun süredir harici araçların alanıydı; bunları deno task içinde sunmak, zaten Deno'nun runtime'ına bağlı projeler için bir bağımlılığı ortadan kaldırıyor. Ölçülen kazanımlar gerçekten pahalı adımlar için somut, ancak bu yazı getirinin orantılı olduğuna dair faydalı bir hatırlatma: cache'leme bir task'ın maliyetine göre karşılığını veriyor, kendini değiştiren task'lar için hiçbir şey yapmıyor ve geniş ağaçlarda ucuz task'ları aktif şekilde yavaşlatabiliyor. Bunu CI veya editör iş akışlarında benimseyen ekipler, başlıktaki hızlanmaya güvenmek yerine kendi task'larını ölçmeli.
- #deno
- #build-tools
- #caching
- #javascript
- #developer-tools
İlgili yazılar
- MiniLake, Databricks API'sini gerçek Spark, SQL ve Delta Lake çalıştırmasıyla yerel olarak taklit ediyor
- GitHub'ın star history endpoint'i, stargazers kısıtlamasının ardından yıldız grafiği verisini geri getiriyor
- Shopify Sonbahar '26 Sürümü, Shop.dev, shop.md ve WebMCP ile her mağazayı agent'a hazır hale getiriyor