JIT compilation
- Node.js kursu
- Uzman
- Ders 2/47
- 5 dk
V8 JIT compilation ve TurboFan'ı öğrenirsin.
JIT eşik mantığı
V8 bir fonksiyonu hot işaretlemek için çağrı sayısına bakar. Çağrı sayısı bir eşiği geçince V8 fonksiyonu daha agresif iyileştirir. Bu eşik V8 sürümüne göre değişir ama fikir aynıdır: sık çalışan kod daha çok iyileştirme kazanır.
Bir isHot(callCount) fonksiyonu bu mantığı modeller: return callCount >= THRESHOLD. THRESHOLD bir sabittir; örneğin 100. isHot(150) true, isHot(50) false döndürür. Bu, V8'in kararını basit bir modelle anlamanı sağlar. Gerçek V8'de eşik daha karmaşıktır (geri alma, osilasyon) ama temel fikir budur: sıcaklık çağrı sıklığına bağlıdır.
Sıcak ve soğuk fonksiyonlar
V8 fonksiyonları soğuk (az çağrılan) ve sıcak (çok çağrılan) olarak ayırır. Soğuk fonksiyonlar hızlı bytecode ile yürütülür; sıcak fonksiyonlar makine koduna yükseltilir. Bu, derleme süresini sadece kazanan kodlara harcamanın yoludur.
Örnek: isHot(50) false döndürürse fonksiyon soğuktur; isHot(150) true döndürürse sıcaktır. V8 sıcak fonksiyonları tür geribildirimiyle (type feedback) iyileştirir: hangi türlerin geçtiğini izler, buna göre makine kodu üretir. Tür değişirse (örneğin hep sayı beklerken dize gelirse) V8 iyileştirmeyi geri alır (deoptimization). Bu yüzden kararlı türler kullanan kod daha hızlıdır.
Uygulama JIT eşik fonksiyonu yaz
const THRESHOLD = 100 tanımla. function isHot(callCount) { return callCount >= THRESHOLD; } yaz. console.log(isHot(150)) ve console.log(isHot(50)) yazdır.
Başlangıç kodu
// eşik sabitini tanımla
// isHot fonksiyonu yaz: çağrı sayısı eşiği geçiyorsa true döndürsün
// iki çağrıyı yazdır (150 ve 50)
// buraya yazÖrnek çözüm
const THRESHOLD = 100;
function isHot(callCount) {
return callCount >= THRESHOLD;
}
console.log(isHot(150));
console.log(isHot(50));Beklenen çıktı
true false
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Eşik koşulunu tamamla
return callCount >= ____;
return callCount >= THRESHOLD;
Açıklama: callCount THRESHOLD ile karşılaştırılır.
2 Kavramı açıklamasına eşle
| Kavram | Anlamı |
|---|---|
Sıcak fonksiyon |
Makine koduna yükseltilir |
Soğuk fonksiyon |
Bytecode ile yürütülür |
Type feedback |
Türleri izler |
Deoptimization |
İyileştirmeyi geri alır |
3 isHot(50) THRESHOLD=100 ise ne döndürür?
const THRESHOLD = 100;
function isHot(c) { return c >= THRESHOLD; }
isHot(50)- 50
- false Doğru cevap
- true
- 100
Açıklama: 50 < 100 olduğundan false döner.