V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
autoxbc

用持久数据给 Tampermonkey 加速百倍

  •  
  •   autoxbc · Apr 12, 2018 · 4193 views
    This topic created in 2948 days ago, the information mentioned may be changed or developed.

    Tampermonkey 默认的 ES6 模板的工作流程是实时 Babel 转码,然后 eval 执行

    存在的问题就是 Babel 的性能非常差,我的 5500 行自用脚本转码并执行需要 3400 ms,每一个页面都延迟这么长时间是不可忍受的

    解决方法是用持久数据存储转码后的脚本,GM_getValue 和 GM_setValue 的用法教程里可以查到。添加存储后,每次修改代码并运行会完整转码一次,然后再次运行仅耗时 30ms,提速比较明显

    一个简化的模板

    // ==UserScript==
    // @name        ES6
    // @match        *://*/*
    // @require      https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.js
    // @require      https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js
    // @grant        GM_getValue
    // @grant        GM_setValue
    // ==/UserScript==
    
    /* jshint ignore:start */
    const text = (<><![CDATA[
    /* jshint ignore:end */
        /* jshint esnext: false */
        /* jshint esversion: 6 */
    
        // Your code here...
        
    /* jshint ignore:start */
    ]]></>).toString();
    /* jshint ignore:end */
    
    if( text !== GM_getValue('esText') )
    {
        GM_setValue('esCode', Babel.transform( text , { presets: [ 'latest' ] } ).code );
        GM_setValue('esText', text );
    }
    
    eval( GM_getValue('esCode') );
    
    5 replies    2018-04-12 21:12:35 +08:00
    Servo
        1
    Servo  
       Apr 12, 2018 via Android
    Tampermonkey 是不是开源的?
    yangxin0
        2
    yangxin0  
       Apr 12, 2018 via iPhone
    5.5k 行有点可怕
    ctsed
        3
    ctsed  
       Apr 12, 2018 via Android
    转 es5 再提交啊
    oott123
        4
    oott123  
       Apr 12, 2018 via Android
    我觉得能用 tamper monkey 的浏览器本身基本上对新语法特性都支持了,不如去掉转译…
    autoxbc
        5
    autoxbc  
    OP
       Apr 12, 2018
    @oott123 #4 适当调整 Babel,把已经实做的部分交给浏览器原生执行是可行的,应该会减少编译时间并提升性能

    不过彻底去掉转义比较困难,毕竟 Babel 的功能不仅仅是 Next Generation JavaScript,很多插件是不可替代的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1150 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 23:19 · PVG 07:19 · LAX 16:19 · JFK 19:19
    ♥ Do have faith in what you're doing.