Hidden classes
- Node.js kursu
- Uzman
- Ders 3/47
- 5 dk
V8 hidden classes ve inline cache öğrenirsin.
Hidden classes
V8 her nesneye bir hidden class atar; bu, nesnenin yapısını (hangi özellikler, hangi sırada) özetler. Aynı yapıdaki nesneler aynı hidden class'ı paylaşır; bu, özellik erişimini hızlandırır.
Bir nesneye özellik ekledikçe V8 yeni bir hidden class'a geçiş (transition) yapar. Örnek: önce {} (boş), sonra {x: 1} (x eklendi), sonra {x: 1, y: 2} (y eklendi). Geçiş yolu: root -> x -> y. Aynı sırayla özellik ekleyen nesneler aynı yolu paylaşır; farklı sırayla ekleyenler farklı hidden class'lara düşer. Bu yüzden kurucu fonksiyonlarda tüm özellikleri aynı sırayla eklemek performansı artırır.
Geçiş yolu
Bir nesnenin hidden class geçiş yolunu bir fonksiyonla modelleyebiliriz. buildTransitions(['x', 'y']) 'root -> x -> y' döndürür. Bu, V8'in iç yapısını basit bir dizeyle anlamanı sağlar.
Fonksiyon 'root' ile başlar, her özell için ' -> ' ve özell adını ekler. Örnek: let path = 'root'; for (const p of props) { path += ' -> ' + p; }. Bu, V8'in transition mekanizmasının bir modelidir. Gerçek V8'de her transition bir hidden class nesnesi yaratır; burada sadece yolu dize olarak görselleştiriyoruz. Özellik ekleme sırasının önemi böylece netleşir.
Uygulama Geçiş yolu fonksiyonu yaz
function buildTransitions(props) yaz. İçinde let path = 'root' ile başla. for (const p of props) { path += ' -> ' + p; } ile her özelliği ekle. return path ile döndür. console.log(buildTransitions(['x', 'y'])) ile yazdır.
Başlangıç kodu
// buildTransitions fonksiyonu yaz
// 'root' başlangıçlı, her özell için ' -> ad' eklesin
// ['x', 'y'] ile çağır ve yazdır
// buraya yazÖrnek çözüm
function buildTransitions(props) {
let path = 'root';
for (const p of props) {
path += ' -> ' + p;
}
return path;
}
console.log(buildTransitions(['x', 'y']));Beklenen çıktı
root -> x -> y
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kavramı açıklamasına eşle
| Kavram | Anlamı |
|---|---|
Hidden class |
Nesnenin yapısını özetler |
Transition |
Yeni hidden class'a geçiş |
root |
Boş nesnenin hidden class'ı |
Aynı sıra |
Hidden class paylaşımı |
2 İki nesne aynı hidden class'ı paylaşmaz, sebebi?
const a = {}; a.x = 1; a.y = 2;
const b = {}; b.y = 2; b.x = 1;- İsimler farklı
- Değerler farklı
- Özellik ekleme sırası farklı Doğru cevap
- İkisi de boş
Açıklama: a önce x sonra y; b önce y sonra x ekler. Sıra farklı olduğundan farklı hidden class.
3 for döngüsünü tamamla
for (const p of ____) { path += ' -> ' + p; }
for (const p of props) { path += ' -> ' + p; }
Açıklama: props dizisi üzerinde döngü kurulur.