【发布时间】:2011-02-19 15:10:39
【问题描述】:
从我读过的所有内容来看,似乎唯一提到的阻止 JavaScript 编译一次、到处运行(或至少每个浏览器运行)的是愚蠢的 eval() 语句。 JavaScript 还有什么其他的东西使这成为不可能的壮举吗?
与其浪费所有时间,在每台计算机和每一个浏览器上,JIT-ting 和下载多个源代码文件,我希望看到浏览器以更少的字节、更少的连接和极快的速度运行 JavaScript ,优化代码。
如何做到这一点?
【问题讨论】:
-
你可以使用
eval编译代码,你只需要访问eval的实现。这不仅仅是理论。 Cython,它编译 Python(嗯,一个几乎完美的 Python 超集,带有与 C 接口的扩展)。还有几个 Lisp 实现是静态编译的,虽然我不知道他们是否对eval的使用施加了任何限制。 -
Javascript是解释而不是编译,但是很多开发者使用compressor来减少电线上的文件。当代码包含
eval语句时,一些压缩器(如 YUI)拒绝修改作用域变量名称。但是如果你确信你的eval语句不会受到修改的伤害,你可以使用window.eval来规避这种保护。 -
@samshull 有诸如即时编译器之类的东西,目前所有主要引擎都在使用它来显着加快 JavaScript 的执行速度,因此您现在在浏览器上运行的 JavaScript 可能很好编译
-
@yi-jang,您的建议基于这样的想法,即编译后的代码可以被信任不会导致任何数量的恶意副作用,包括(但不限于)内存泄漏和缓冲区溢出。但总有 Chromium 的NativeClient
标签: javascript compiler-construction performance