V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
autoxbc
V2EX  ›  分享发现

用持久数据给 Tampermonkey 加速百倍

  •  
  •   autoxbc · 2018-04-12 06:38:36 +08:00 · 3849 次点击
    这是一个创建于 2444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2018-04-12 21:12:35 +08:00
    Servo
        1
    Servo  
       2018-04-12 08:53:36 +08:00 via Android
    Tampermonkey 是不是开源的?
    yangxin0
        2
    yangxin0  
       2018-04-12 08:54:26 +08:00 via iPhone
    5.5k 行有点可怕
    ctsed
        3
    ctsed  
       2018-04-12 08:59:38 +08:00 via Android
    转 es5 再提交啊
    oott123
        4
    oott123  
       2018-04-12 09:02:05 +08:00 via Android
    我觉得能用 tamper monkey 的浏览器本身基本上对新语法特性都支持了,不如去掉转译…
    autoxbc
        5
    autoxbc  
    OP
       2018-04-12 21:12:35 +08:00
    @oott123 #4 适当调整 Babel,把已经实做的部分交给浏览器原生执行是可行的,应该会减少编译时间并提升性能

    不过彻底去掉转义比较困难,毕竟 Babel 的功能不仅仅是 Next Generation JavaScript,很多插件是不可替代的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3433 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:47 · PVG 08:47 · LAX 16:47 · JFK 19:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.