Diğer cevapların da belirtildiği gibi, sözün doğrudan geri dönerek kabarmasına izin verirken muhtemelen küçük bir performans avantajı vardır - çünkü önce sonucu beklemek ve sonra tekrar başka bir sözle paketlemek zorunda değilsiniz. Ancak, henüz kimse kuyruk arama optimizasyonundan bahsetmedi .
Kuyruk arama optimizasyonu veya "uygun kuyruk aramaları" , tercümanın çağrı yığınını optimize etmek için kullandığı bir tekniktir. Şu anda, pek çok çalışma zamanı henüz desteklemiyor - teknik olarak ES6 Standardının bir parçası olsa da - ancak gelecekte olası bir destek eklenebilir, böylece şimdiki zamanda iyi bir kod yazarak buna hazırlanabilirsiniz.
Özetle, TCO (veya PTC) çağrı yığını optimize değil , doğrudan başka bir işlev tarafından döndürülen bir işlev için yeni bir çerçeve açılması. Bunun yerine, aynı çerçeveyi yeniden kullanır.
async function delay1Second() {
return delay(1000);
}
Bu yana delay(), doğrudan tarafından döndürülen delay1Second(), PTC için ilk bir çerçeve açılır destek çalışma zamanları delay1Second()(dış fonksiyonu), ancak daha sonra yerine açma bir çerçevesini delay()(iç fonksiyonu), sadece dış işlev için açılmıştır aynı çerçeve yeniden. Bir önleyebilir, bu yığın optimize bellek taşması , örneğin çok büyük yinelemeli fonksiyonları ile (hehe) fibonacci(5e+25). Esasen çok daha hızlı bir döngü haline gelir.
PTC yalnızca iç işlev doğrudan döndürüldüğünde etkinleştirilir . İşlevin sonucu döndürülmeden önce değiştirildiğinde, örneğin return (delay(1000) || null), veya varsa kullanılmaz return await delay(1000).
Ancak dediğim gibi, çoğu çalışma zamanı ve tarayıcı henüz PTC'yi desteklemiyor, bu yüzden muhtemelen şu anda büyük bir fark yaratmıyor, ancak kodunuzu geleceğe hazırlamanıza zarar veremez.
Bu soruda daha fazlasını okuyun: Node.js: Eşzamansız işlevlerde kuyruk çağrıları için optimizasyonlar var mı?