jjzjj

javascript - 近期 Chrome/V8 版本中的对象描述符 getter/setter 性能

给定varobj={};var_a=1;obj._a=1;obj.aGetter=function(){return_a;}obj.aSetter=function(val){_a=val;}Object.defineProperty(obj,'a',{enumerable:true,get:function(){return_a;},set:function(val){_a=val;}});使用getter/setter函数obj.aSetter(2);obj.aGetter();与直接属性访问相比,Chrome/V8性能会有所下降(~3倍):obj._a=2;obj._a;这是可以

javascript - 优化/函数运行时 v8 状态代码会发生什么变化?

我看到一个关于v8Optimization的问题这让我尝试了一下v8优化。我还看过关于v8的bluebird帖子Optimizationkillers.根据v8repo,优化状态代码是2的乘积:1,2,4,8等等(参见OptimizationStatus枚举)然而,下面的代码给了我奇怪的状态代码,比如17和65,而且只在这些特定情况下(见最后几行代码)。关于为什么会发生这种情况的任何想法?functionadder(a,b){returnnewFunction('a','b','returnb%2?a+b:b%3?a-b:b%5?b/a:a*b')(a,b);}functionadde

javascript - 鉴于 V8/spidermonkey/chakra 的内部工作原理,在 JavaScript 中显式初始化 undefined object 成员是否是一种优化?

在JavaScript中,一个通常被吹捧的良好性能原则是避免改变对象的形状。这让我想知道,这是不是classFoo{constructor(){this.bar=undefined;}baz(x){this.bar=x;}}一个有值(value)的最佳实践,将提供比这更好的性能classFoo{constructor(){}baz(x){this.bar=x;}}这是真的还是假的?为什么?在一个JS引擎中是否比其他引擎更真实或更不真实? 最佳答案 这里是V8开发人员。是的,总的来说,第一个版本是一个有值(value)的最佳实践。这样

javascript - 在 OpenCL 应用程序中嵌入 V8?

我正在使用OpenCL编写面向NVidiaCUDA运行时的GPGPU内核。我最近在阅读V8并找到描述V8嵌入技术的页面:http://code.google.com/apis/v8/embed.html是否可以将所有OpenCL函数“包装”在V8"template"中,以便我可以用JavaScript编写内核逻辑?作为引用,OpenCL1.1C++绑定(bind)的链接在Khronos网站上。我主要担心的是OpenCL严重依赖OpenGL。V8OpenCL包装器是否也需要包装大部分OpenGL(或者令人望而却步的闭源CUDA运行时)?或者根本无法协调V8虚拟机和CUDA运行时?

javascript - 如何检测 v8 堆使用量接近 Node.js 中的限制

现在我使用:constv8=require('v8');letheap=v8.getHeapStatistics();letusage=100/heap.heap_size_limit*heap.used_heap_size;if(usage>90){console.log(`V8heapusageclosetothelimit(${usage.toFixed()}%)`);}elseif(usage>95){console.log(`V8heapusageveryclosetothelimit(${usage.toFixed()}%)`);}此解决方案无法正常工作。当我尝试这个命令时

javascript - V8引擎巫毒: Why is this faster/slower?

我目前正在研究图像编辑器,偶然发现了V8中有关像素操作和/或函数调用的奇怪行为。http://jsperf.com/canvas-pixelwise-manipulation-performance有两个测试用例。两个测试用例都应该操纵内存Canvas的图像数据以增加亮度。因此他们必须遍历每个像素并操纵每个像素的4个颜色值。案例一案例1“总共调用了1个函数”,这意味着它将上下文和imageData传递给一个函数,然后该函数遍历像素并处理数据。一站式功能案例2案例2执行“每个像素1次函数调用”,这意味着它遍历像素并为每个像素调用一个方法,然后操作给定像素的imageData。这导致(在本

javascript - 为什么在 v8 源的 JS 文件中一些函数调用前面有一个 %?

我在很多代码中看到了%。您能向我解释一下它的用途或作用吗?编辑:我知道数学中的操作数13%10=3但我看到的是return%foo。在浏览v8sourcefiles时遇到了这个问题为什么一些函数调用前面有%符号?%CheckIsBootstrapping();//---//Onlyusedbyasync-await.jsfunctionRejectPromise(promise,reason,debugEvent){%PromiseReject(promise,reason,debugEvent);}//---varcallbacks=%create_resolving_functio

javascript - 从 v8 shell 使用 stringify

我正在创建一个基于v8shell的控制台,我采用了v8附带的示例代码并且它运行良好,但我正在尝试将v8::object转换为它的字符串版本(json)但是没有找到办法。这是我在shell.cc中的示例代码:v8::Handletest(constv8::Arguments&args){v8::HandleScopehandle_scope;constchar*json;v8::String::Utf8ValuestrJson(args[0]);printf(ToCString(json));if(args[0]->IsObject()){printf("it'sanobject\n")

javascript - 如何禁用 V8 的优化编译器

我正在编写一个恒定时间的字符串比较函数(用于node.js),并且想为这个单一函数禁用V8的优化编译器;使用命令行标志是不可能的。我知道使用with{}(或try/catch)block将禁用优化编译器现在,但我担心这个“功能”(bug)将在未来的版本中修复。是否有一种不可变的(并记录在案的)方法来禁用V8的优化编译器?示例函数:functionconstantTimeStringCompare(a,b){//Byaddinga`with`blockhere,wedisablev8'soptimizingcompiler.//UsingObject.create(null)ensure

javascript - 使用 Google Chrome (V8) 时,Javascript 可以被视为一种解释型语言吗?

我正在阅读这篇关于V8的优秀文章,Google的Javascript引擎:https://developers.google.com/v8/design#mach_code.有一次,他们说Javascript直接编译成机器语言,没有任何字节码或解释器。引用:V8compilesJavaScriptsourcecodedirectlyintomachinecodewhenitisfirstexecuted.Therearenointermediatebytecodes,nointerpreter.那么,为什么Javascript仍然与“脚本”和“解释”语言一起列出,虽然它已明确编译(至少