草庐IT

v8-shell

全部标签

javascript - 操纵 V8 ast

我打算直接在v8代码中实现一个js代码覆盖。我最初的目标是为抽象语法树中的每个语句添加一个简单的打印。我看到有一个AstVisitor类,它允许您遍历AST。所以我的问题是如何在访问者当前访问的语句之后向AST添加语句? 最佳答案 好的,我将总结我的实验。首先,我写的内容适用于V8,因为它在Chromium版本r157275中使用,因此可能不再有效-但我仍然会链接到当前版本中的位置。如前所述,您需要自己的AST访问者,例如MyAstVisior,它继承自AstVisitor并且必须实现一堆VisitXYZ那里的方法。唯一需要检测/检

V8 上的 JavaScript 测试

functionadd(x,y){returnx+y;}console.time("time1");for(vari=0;i结果是:时间1:1481毫秒,time2:102ms,我在nodejs上运行这个测试,但我不知道为什么第一个测试比第二个慢。 最佳答案 这是因为参数类型更改导致引擎盖下发生了去优化。要知道这一点,我们必须知道优化V8做了什么:内联这是一项重要的优化,对于性能提升至关重要。它用函数体代替函数调用以加速执行。如果一个函数的大小很小,它将被内联。这假设在函数调用中,参数是固定的。去优化V8在某些假设下进行优化。如果错

javascript - 事件循环、libuv和v8引擎的关系

我正在学习Node.js的架构。我有以下问题。事件循环是libuv还是v8的一部分?事件队列是事件循环的一部分吗?事件队列是由libuv或v8引擎生成的还是事件循环本身?libuv和v8引擎有什么联系?如果事件循环是单线程的,libuv是否会创建多个线程来处理文件I/O?浏览器有事件循环机制还是只有Node.js有? 最佳答案 事件循环首先是一个高级概念,它是JavaScript编程模型的基础部分。实际上,每个V8嵌入器都需要实现一个事件循环。V8提供了一个默认实现,嵌入器可以替换或扩展它。我不明白这个问题。(我猜答案是"is",但

javascript - 为什么 V8 不能优化 try-catch-finally?

为什么V8无法优化try-catch-finallyblock,而其他著名的运行时(SpiderMonkey、Chakra)似乎对此没有问题? 最佳答案 除了问题的优先级相对较低外,没有特别的原因。这会在某个时候进行优化看看这个chromiumv8issue1065如果您以v8为目标,您可以将try-catch移动到单独的函数,但只有当它是一个真正的性能问题时才应该这样做,否则它只是过早的优化。"Programmerswasteenormousamountsoftimethinkingabout,orworryingabout,th

javascript - 在 Chrome V8 中实例化从 Object 扩展的类时,super() 不传递参数

下面的代码在ChromeV8中记录false但在Babel中记录true。feedbackfromGoogle说loggingfalse是应该的,而loggingtrue是Babel的一个错误。我查看了ES6规范,但仍然无法理解其背后的机制。任何想法将不胜感激!classNewObjextendsObject{constructor(){super(...arguments);//InV8,afterarguments===[{attr:true}]//ispassedasparametertosuper(),//this===NewObj{}inV8;//butthis===NewO

javascript - 在 v8 和 Node.js 中保存函数回调

您如何将javascript提供的回调保存在v8包装对象中,以供将来不仅在当前函数调用中使用。本质上,我想在C++中创建一个javascript对象,并在使用newObject()创建时提供一个函数回调。然后在整个C++对象生命周期中使用该回调。请参见下面的示例:我遇到的问题是,当我尝试在不同的静态函数中使用Handle对象时,它会出现段错误。在Nodejs文件中:varObject=require("./customModule");varobj=newObject(function(){console.log("Callbackcalled...")})//Emitcallback

javascript - 如何将 Bing Maps v8 添加到 Angular 2.0?

我想将BingMapV8控件添加到我的Anguar2.0项目中。我想知道我需要做什么才能将BingMapV8添加到Angular2.0项目中。我附上了我的实现。我创建的组件无法加载。如何引用Microsoft.Maps.Map?这是bingmapv8的示例。如果将以下示例保存为HTML,则一切正常。bingmap键被剪掉了。addOneLayerItemHTMLfunctionloadMapScenario(){varmap=newMicrosoft.Maps.Map(document.getElementById('myMap'),{credentials:'MyBingMapKey

javascript - MongoDb shell 脚本

您知道是否可以从javascript获取数据库列表(如控制台中的“showdbs”)。我想通过javascript文件(mongoadmin.js)从mongo中删除所有数据库,但我找不到列出所有数据库的方法...谢谢我正在尝试准备简单的脚本,但我无法找到如何从脚本更改数据库。这是示例javascript脚本。它总是在命令“使用”时失败。我尝试使用db.eval和eval,但都失败了。print(db.getMongo().getDBNames());varenvironments=db.getMongo().getDBNames()for(varenvironmentIndexine

javascript - JSON.stringify() 在 V8 中是确定性的吗?

我还没有看到(还?)JSON.stringify在Node.JS中是非确定性的。不能保证它在规范级别上是确定性的。但是V8呢?它的实现是确定性的吗?是否可以保证它对future的V8版本保持确定性?编辑:对于确定性,我的意思是无论json_str的值是什么,以下断言都是正确的。(给定值是一个有效的JSON字符串。)constobj=JSON.parse(json_str);assert(JSON.stringify(obj)===JSON.stringify(obj));//alwaystrue编辑2:实际上,我也对以下断言为真感兴趣if(deepEqual(obj1,obj2)){a

javascript - 带有类似于 shell 命令行完成的 TAB 完成/自动填充的 Ajax 自动完成(或自动建议)?

我正在实现一个AJAX自动完成/自动建议功能,我不仅要执行与用户键入的内容相似的通常显示建议,而且我想让用户执行部分完成以节省键入.所以,假设我的字典中有这些值:“青苹果”、“青梨”、“绿色水果”、“蓝天”、“蓝水”、“蓝苏醒”。如果用户输入“g”,建议应该是“greenapple”、“greenpear”、“greenfruit”,我想让用户按TAB或其他方式将他的查询更新为“green”,然后他们可以输入“a”,他们会完成“greenapple”。我正在尝试在linuxshell命令行完成后对其进行建模。您能推荐一个执行此操作的控件/脚本吗?还是对现有控件的修改/自定义?