Node.js
Hidden classes
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.
Örnek çözümü göster
function buildTransitions(props) {
let path = 'root';
for (const p of props) {
path += ' -> ' + p;
}
return path;
}
console.log(buildTransitions(['x', 'y']));
Kendini test et
-
Kavramı açıklamasına eşle
- 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ı
-
İ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ı
- İkisi de boş
Cevabı göster
Özellik ekleme sırası farklı — a önce x sonra y; b önce y sonra x ekler. Sıra farklı olduğundan farklı hidden class.
-
for döngüsünü tamamla
for (const p of ____) { path += ' -> ' + p; }
Cevabı göster
for (const p of props) { path += ' -> ' + p; }
Sıradaki ders: Garbage collection