gpt4 book ai didi

node.js - JavaScript 去优化

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:52 25 4
gpt4 key购买 nike

我不确定这段代码有什么问题。 src 是一个长度大于 0 的 Uint8Array 对象。

function makeImageFromChannel(src) {
var image = new Uint8Array(src.length * 4),
i = 0,
index = 0,
value = 0;

console.log(src.BYTES_PER_ELEMENT)
console.log(src.map)

for (i=0; i<src.length; i++) {
value = src[i]|0;
image[index] = value;
image[index + 1] = value;
image[index + 2] = value;
image[index + 3] = 255;
index += 4;
}

return image;
}

var vars = new Uint8Array(23034);
for(var i=0; i<23034; i++) {
vars[i] = (i % 254) + 1
}
makeImageFromChannel(vars);

以下是当我运行此命令 node --trace_deopt --allow-natives-syntax script.js 时我可以在终端中多次读取的内容。

[deoptimizing: begin 0x36125ec63a21 makeImageFromChannel @13]
translating makeImageFromChannel => node=59, height=24
0x7fff5fbfe798: [top + 64] <- 0x3feb15c04121 ; r8 0x3feb15c04121 <undefined>
0x7fff5fbfe790: [top + 56] <- 0x2bc986d9ffc1 ; rdi 0x2bc986d9ffc1 <an Uint8Array>
0x7fff5fbfe788: [top + 48] <- 0x2ea32af21c29 ; caller's pc
0x7fff5fbfe780: [top + 40] <- 0x7fff5fbfe808 ; caller's fp
0x7fff5fbfe778: [top + 32] <- 0x3feb15c414b1; context
0x7fff5fbfe770: [top + 24] <- 0x36125ec63a21; function
0x7fff5fbfe768: [top + 16] <- 0x2bc986c218d1 ; rdx 0x2bc986c218d1 <an Uint8Array>
0x7fff5fbfe760: [top + 8] <- 135448 ; rbx (smi)
0x7fff5fbfe758: [top + 0] <- 541792 ; rax (smi)
[deoptimizing: end 0x36125ec63a21 makeImageFromChannel => node=59, pc=0x2ea32af27c70, state=NO_REGISTERS, alignment=no padding, took 0.033 ms]
[removing optimized code for: makeImageFromChannel]

我不确定它是如何在其中找到未定义的值的。

最佳答案

由于某些原因,V8 将对访问数组的函数进行去优化,如下所示:

  for (i=0; i<src.length; i++) {
value = src[i]|0;
image[index] = value;
image[index + 1] = value;
image[index + 2] = value;
image[index + 3] = 255;
index += 4;
}

为了让V8不去优化这个功能,你可以像这样以相反的顺序重新排序:

    image[index + 3] = 255;
image[index + 2] = value;
image[index + 1] = value;
image[index] = value;

V8 会很高兴。这或多或少听起来像是 v8 引擎中的一个错误。引擎应该能够检测到重新排序这 4 行不会对结果产生任何影响。这意味着 v8 应该能够优化该函数,即使这些行的顺序是任意的。

目前还不清楚 SpiderMonkey 如何优化这些线路。

我会接受任何能够更好地解释为什么 V8 被去优化的答案。

关于node.js - JavaScript 去优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26298220/

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