v8-Natives, 在 Chrome & node 中,访问v8引擎容易

分享于 

6分钟阅读

GitHub

  繁體 雙語
Access v8 Engine Natives easily in Chrome & Node
  • 源代码名称:v8-Natives
  • 源代码网址:http://www.github.com/NathanaelA/v8-Natives
  • v8-Natives源代码文档
  • v8-Natives源代码下载
  • Git URL:
    git://www.github.com/NathanaelA/v8-Natives.git
    Git Clone代码到本地:
    git clone http://www.github.com/NathanaelA/v8-Natives
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/NathanaelA/v8-Natives
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    v8-Natives

    在 Chrome & node 中,访问v8引擎

    我们曾经在 https://github.com/petkaantonov/bluebird/wiki/Optimization-killers 阅读博客/维基文章,它展示了一些非常低级的诊断命令,所以我发现它们在我所做的一些事情中都是非常棒的。 V8引擎拥有大量的命令,可以调用它来获取和/或者在实际的V8引擎中设置状态。 这个库是我尝试使我的生活更容易,并且消除了试图使用turbo本机命令的错误。 这些低级命令允许你访问v8引擎来优化例程,然后找出例程是否可以进行优化。

    现在,可以直接调用v8本机命令,但是如果忘记使用 --allow-natives-syntax,v8引擎将立即停止解析文件,因为v8命令都以一个无效的javascript命令 start。 这个库做的是一个包装这些调用的简单包装器;所以我可以做(。v8.getv8version ( )。 如果你忘记了 --allow-natives-syntax,它仍然运行你的代码;它只是不会返回一个 N/A,它不知道版本。

    在示例文件夹中是一个浏览器示例,演示如何在 Chrome/Chromium 中使用它( chrome --js-flags="--allow-natives-syntax" browser.html 你可以在non-v8浏览器中运行它,它只使用虚拟 shim。
    另外还有一个NodeJS示例来展示NodeJS中的相同支持。 ( node --allow-natives-syntax node.js )

    请注意示例和 helper 命令可以向你展示如何在库中使用好的优化。常规和内存调用。 如果有人想使用变量/opject信息命令来完成一些例子,他们会欣然接受 !

    安装 V8 Natives

    
    npm install v8-natives
    
    
    
    

    用法

    浏览器:
    <script src="v8-browser.js" onload="waitForV8(some_callback)"></script><script>functionsome_callback() { 
     v8.collectGarbage(); 
     /* more v8.commands */}</script>
    node:
    var v8 =require('v8-natives'); v8.collectGarbage(); /* more v8 commands */

    命令

    helper-命令

    • helpers.testOptimization(func [, funcNames] ) - 这将自动调用函数,调用 optimizeOnNextCall,再次调用函数,然后调用函数的printStatus。 你也可以这样做:如果你有 func1,那么你就可以看到 all & func3,你可以看到所有三个都得到了优化。 它将自动调用 func1,在所有三个funcs上设置优化标志,然后调用 func1,然后在所有三个模块上调用 printStatus。
    • helpers.printStatus(func) - 将函数优化结果打印到控制台
    • helpers.benchmark(count, func) - 在循环计数时间内运行函数。 这将自动设置优化标志;运行;计数时间,运行garbageCollection开始时间;对于计数次数,返回总时间。
    • window.waitForV8(callback) - [Browser ONLY] ;这将等待正确加载xyz命名空间,然后调用你的回调。

    常规命令

    • isNative() - 启用本机支持模式( 例如。 true = 使用真正的包装;false = 使用虚拟包装器
    • getV8Version() - 获取v8引擎版本
    • functionGetName(func) - 获取函数的字符串 NAME

    内存命令

    • getHeapUsage() - 显示使用了多少堆
    • collectGarbage() - 强制执行完全垃圾回收

    优化命令

    • deoptimizeNow -
    • optimizeFunctionOnNextCall(func) - 告诉v8在你下次调用它时优化函数
    • deoptimizeFunction(func) - 优化函数
    • neverOptimizeFunction(func) - 从不优化函数
    • 我在测试中看到了 1 & 2,但是根据博客/维基文章,我也看到了 3 & 6

    变量/对象信息命令

    • hasFastProperties ( obj )
    • hasFastSmiElements ( obj )
    • hasFastObjectElements ( obj )
    • hasFastDoubleElements ( obj )
    • hasDictionaryElements ( obj )
    • hasFastHoleyElements ( obj )
    • haveSameMap ( obj1,obj2 )
    • isValidSmi ( obj )
    • isSmi ( obj )
    • hasFastSmiOrObjectElements ( obj )
    • hasSloppyArgumentsElements ( obj )

    注释

    optimizedFunctionOnNextCall(func) 需要运行该函数才能将它的标记为优化。 所以这个过程是:

    • 运行你的函数
    • 运行函数( 必须执行这两次操作)
    • 标记你的函数进行优化
    • 运行你的函数
    • 验证v8引擎是否优化了它。 如果它没有优化,那就意味着你有代码不能在它里面优化。

    acc  CHR  chrome  NAT  Native  
    相关文章