gpt4 book ai didi

javascript - 为什么v8在生成的二进制文件中保存了原生javascript的源代码?

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:05 25 4
gpt4 key购买 nike

我一直在研究 v8 源代码,特别是“mksnapshot”工具如何在 v8 二进制文件中包含 native javascript 文件(runtime.js、json.js...)的编译图像,并注意到它还包括源的(某种程度上)缩小版本。例如,在检查 d8 可执行文件的内容时,我看到以下片段:

var $JSON=global.JSON;

function Revive(a,b,c){
var d=a[b];
if((%_IsObject(d))){
if((%_IsArray(d))){
var g=d.length;

在“src/json.js”的开头我看到:

var $JSON = global.JSON;

function Revive(holder, name, reviver) {
var val = holder[name];
if (IS_OBJECT(val)) {
if (IS_ARRAY(val)) {
var length = val.length;

显然这两个片段是等价的,但第二个在编译过程中被转换为第一个。

如果包含原始代码用于使用“toString”进行检查,我会理解,但是当我在 d8 中输入“JSON.stringify”时,我看到的只是“function stringify() { [native code] }”,那么什么是这有什么意义?

最佳答案

实际上快照不包括编译形式的所有内置函数。

V8 通常更喜欢惰性编译以节省空间和时间。如果编译未使用的内容,则会浪费内存用于生成代码(非优化编译器生成的代码非常“冗长”)和时间(如果我们谈论快照,则在编译或反序列化时)。

所以它可以延迟编译的所有东西 V8 都会延迟编译,这包括内置函数。因此快照实际上并不包含所有函数的编译版本,并且编译其余部分需要源代码。

当存在源代码时,另一件可能发生的事情是优化:V8 必须访问源代码才能应用其自适应优化管道。

关于javascript - 为什么v8在生成的二进制文件中保存了原生javascript的源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12653479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com