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

2019-07-23 10:07:58 +08:00
 Sornets

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

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

1481 次点击
所在节点    问与答
17 条回复
hiplon
2019-07-23 10:10:02 +08:00
现在应该浏览器也是在本地“编译” js
runze
2019-07-23 10:12:19 +08:00
1、浏览器本来就会“编译”
2、asm.js 了解一下?
3、WebAssembly 了解一下?
Sornets
2019-07-23 10:18:04 +08:00
@runze
@hiplon 我是说直接 script 标签 src 属性填写的,就是编译之后的 js 文件的地址,这样就能省掉编译的时间,不过看起来好像意义不大
singleQ
2019-07-23 10:18:34 +08:00
jit 了解下
Sornets
2019-07-23 10:19:33 +08:00
@runze
@singleQ 感谢,我去了解一下
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
2019-07-23 10:41:46 +08:00
加载编译后的二进制文件,会变得很大,影响加载速度
flowfire
2019-07-23 10:43:16 +08:00
webassembly 了解一下,另外 js 是动态类型,很难预先优化编译,目前 v8 已经做到很好了
maichael
2019-07-23 10:43:21 +08:00
js 是动态编程语言,不是“动态编译”语言,选择用解释器,编译器,又或者是 JIT 这种模式来运行,跟语言是无关的。
misaka19000
2019-07-23 10:46:20 +08:00
V8 有 JIT 吧,执行效率已经很高了
nigelvon
2019-07-23 10:47:24 +08:00
动态编译不是语言问题,弱类型才是语言问题。
mystorp
2019-07-23 10:54:24 +08:00
新出的 quickjs 就是这样,了解一下
sunjourney
2019-07-23 11:24:13 +08:00
既然 js 作为一个动态编译语言,效率是它的缺点之一

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

还真是章口就莱
jslinux 和 qemu 只是同一个作者,前者是一个纯 js 实现
otakustay
2019-07-23 13:32:37 +08:00
JS 有一个 bytecode 的提案,现在不知道 stage 几了……用 js 做 wasm 不见得比 js 快就是了
love
2019-07-23 14:05:13 +08:00
js 瓶颈完全不在执行效率。
要说缺点,现在只剩下了对各种错误太宽容了,如果像 python 这种程度就可以了,这样想动态就直接用,想静态就用 ts,完美了
serge001
2019-07-26 12:21:55 +08:00
js 是可以预先成编译成字节码然后在 node 中运行的,可以搜 node 编译 字节码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX