V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Sornets
V2EX  ›  问与答

不懂就问,关于 js 的一个问题

  •  
  •   Sornets · 2019-07-23 10:07:58 +08:00 · 1577 次点击
    这是一个创建于 1949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    既然 js 作为一个动态编译语言,效率是它的缺点之一

    那能否通过在浏览器加载“编译”之后的 js,在浏览器只将编译之后的 js 转换成机器码,这样会否提高 js 的执行效率呢?

    17 条回复    2019-07-26 12:21:55 +08:00
    hiplon
        1
    hiplon  
       2019-07-23 10:10:02 +08:00
    现在应该浏览器也是在本地“编译” js
    runze
        2
    runze  
       2019-07-23 10:12:19 +08:00
    1、浏览器本来就会“编译”
    2、asm.js 了解一下?
    3、WebAssembly 了解一下?
    Sornets
        3
    Sornets  
    OP
       2019-07-23 10:18:04 +08:00
    @runze
    @hiplon 我是说直接 script 标签 src 属性填写的,就是编译之后的 js 文件的地址,这样就能省掉编译的时间,不过看起来好像意义不大
    singleQ
        4
    singleQ  
       2019-07-23 10:18:34 +08:00 via Android
    jit 了解下
    Sornets
        5
    Sornets  
    OP
       2019-07-23 10:19:33 +08:00
    @runze
    @singleQ 感谢,我去了解一下
    blodside
        6
    blodside  
       2019-07-23 10:34:48 +08:00
    你说的就是 WebAssembly,用这项技术使得现在可以在浏览器运行 windows 了。
    在浏览器里运行 win2000,原理是用 WebAssembly 跑 qemu: https://bellard.org/jslinux/vm.html?url=https://bellard.org/jslinux/win2k.cfg&mem=192&graphic=1&w=800&h=600
    dremy
        7
    dremy  
       2019-07-23 10:41:46 +08:00 via iPhone
    加载编译后的二进制文件,会变得很大,影响加载速度
    flowfire
        8
    flowfire  
       2019-07-23 10:43:16 +08:00 via iPhone
    webassembly 了解一下,另外 js 是动态类型,很难预先优化编译,目前 v8 已经做到很好了
    maichael
        9
    maichael  
       2019-07-23 10:43:21 +08:00
    js 是动态编程语言,不是“动态编译”语言,选择用解释器,编译器,又或者是 JIT 这种模式来运行,跟语言是无关的。
    misaka19000
        10
    misaka19000  
       2019-07-23 10:46:20 +08:00
    V8 有 JIT 吧,执行效率已经很高了
    nigelvon
        11
    nigelvon  
       2019-07-23 10:47:24 +08:00
    动态编译不是语言问题,弱类型才是语言问题。
    mystorp
        12
    mystorp  
       2019-07-23 10:54:24 +08:00
    新出的 quickjs 就是这样,了解一下
    sunjourney
        13
    sunjourney  
       2019-07-23 11:24:13 +08:00
    既然 js 作为一个动态编译语言,效率是它的缺点之一

    笑了
    azh7138m
        14
    azh7138m  
       2019-07-23 12:49:02 +08:00 via Android
    @blodside
    原理是用 WebAssembly 跑 qemu

    还真是章口就莱
    jslinux 和 qemu 只是同一个作者,前者是一个纯 js 实现
    otakustay
        15
    otakustay  
       2019-07-23 13:32:37 +08:00
    JS 有一个 bytecode 的提案,现在不知道 stage 几了……用 js 做 wasm 不见得比 js 快就是了
    love
        16
    love  
       2019-07-23 14:05:13 +08:00 via Android
    js 瓶颈完全不在执行效率。
    要说缺点,现在只剩下了对各种错误太宽容了,如果像 python 这种程度就可以了,这样想动态就直接用,想静态就用 ts,完美了
    serge001
        17
    serge001  
       2019-07-26 12:21:55 +08:00
    js 是可以预先成编译成字节码然后在 node 中运行的,可以搜 node 编译 字节码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1545 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:10 · PVG 01:10 · LAX 09:10 · JFK 12:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.