V8 發布 v8.4
高性能的 C++ 垃圾回收
我們之前已多次撰文討論過JavaScript 的垃圾回收、文件物件模型 (DOM) 及其在 V8 中的實現及優化。然而,Chromium 中並不全是 JavaScript,瀏覽器本身及 V8 所嵌套的 Blink 渲染引擎大多數使用 C++ 編寫。JavaScript 可用於操作 DOM,而後者由渲染管線進行處理。
理解 ECMAScript 規範,第 4 部份
最多可在 WebAssembly 中使用 4GB 記憶體
簡介
由於 Chrome 和 Emscripten 的近期工作,您現在可以在 WebAssembly 應用程式中使用最多 4GB 的記憶體。這比之前的 2GB 限制有所提升。聽起來可能有些奇怪,記憶體的限制似乎本不應該存在——畢竟,使用 512MB 或 1GB 的記憶體並不需要特別的工作!——但事實證明,在從 2GB 跨越到 4GB 的過程中,無論是在瀏覽器還是工具鏈中,都發生了一些特別的變化,我們將在本篇文章中介紹。
V8 發佈 v8.3
裡面的 `.wasm` 是什麼?介紹一下:`wasm-decompile`
我們有越來越多的編譯器和其他工具生成或操作 .wasm
文件,有時您可能想要看看其內部結構。也許您是此類工具的開發者,或者更直接地說,您是一個面向 Wasm 的程序員,並想了解生成的代碼模樣,這樣做是出於性能或其他原因。
瞭解 ECMAScript 規範,第 3 部分
在這一集中,我們將更深入地探討 ECMAScript 語言及其語法的定義。如果您不熟悉上下文無關文法,那麼現在正是了解基礎知識的好時機,因為規範使用上下文無關文法來定義語言。請參閱《Crafting Interpreters》中關於上下文無關文法的章節以獲得易於理解的介紹,或者查看維基百科頁面以獲得更數學化的定義。
V8 中的指針壓縮
記憶體和效能之間總是一場持續的鬥爭。作為使用者,我們希望事情既快速又盡可能少地消耗記憶體。不幸的是,通常提升效能會以增加記憶體消耗為代價(反之亦然)。
理解 ECMAScript 規範,第2部分
讓我們來多練習一些我們驚人的規範閱讀技巧。如果你還沒看過上一集,現在是個好機會!
準備好進入第2部分了嗎?
了解規範的一個有趣的方法是從我們已知的 JavaScript 功能入手,找出它是如何被規範定義的。
警告!本集包含來自 ECMAScript 規範(截至 2020 年 2 月)的複製粘貼算法,最終它們可能會過時。
我們知道屬性會在原型鏈中查找:如果一個物件沒有我們試圖讀取的屬性,我們會沿著原型鏈往上找到它(或找到一個不再有原型的物件)。
例如:
const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
// → 99
原型鏈的查找定義在哪裡?
讓我們嘗試找出這種行為的定義位置。一個不錯的起點是 物件內部方法清單。
這裡既有 [[GetOwnProperty]]
也有 [[Get]]
——我們關心的是不限於 自有 屬性的版本,所以我們選擇 [[Get]]
。
不幸的是,屬性描述符的規範類型 也有一個名為 [[Get]]
的欄位,因此在瀏覽規範時,我們需要小心區分這兩種不同的用法。