我是正确的说,JavaScript代码不编译,甚至没有JIT? 如果是这样,这是否意味着意见有对性能的影响,并在那里我把放在我的意见,我应该非常小心? 如放置功能上述评论和外部的函数定义可能的情况下,绝对避免将意见里面循环,如果我想最大限度地提高性能? 我知道,在大多数情况下(至少在非循环的情况下),在性能上的变化可以忽略不计,但我认为这将是东西,是很好的了解和认识,特别是对前端/ JS开发。 此外,相关的问题,有人问一个js评估最近我。
Answer 1:
我是正确的说,JavaScript代码不编译,甚至没有JIT?
不是。虽然JavaScript是一种传统的“解释”的语言(尽管它不一定是),大部分的JavaScript引擎编译上即时需要时。 V8用于及时快速地进行编译,然后回去,并积极优化之处是使用大量的(老FullCodegen +涡轮风扇堆栈)的任何代码(在Chrome和对的NodeJS引擎); 前阵子有做了很多实际的测量, 他们交换了最初解析来byteocde和解释,然后编译如果代码是在所有(新点火+涡轮风扇堆栈)重复使用了,通过不编译运行获得了显著节省内存-once设置代码。 即使发动机不那么积极的几乎可以肯定至少解析文本转换成某种形式的字节码,早期丢弃评论。
请记住,“解释”与“编译”通常更比一门语言的事情环境的事; 还有是C口译员,并有JavaScript的编译器。 语言往往与环境密切相关(如JavaScript如何往往与网络浏览器环境有关,即使它总是被用于更广泛的重要的是,即使在1995年后),但即使如此,(正如我们看到的),可以有差异。
如果是这样,这是否意味着意见有对性能的影响...
一个非常,非常, 非常小的一个,在最初的分析阶段。 但评论是非常容易扫描过去,没什么可担心的。
如果你真的担心它,但是,你可以再压缩与像工具脚本jsmin
或关闭编译器 (即使只是简单的优化)。 前者将刚刚剥离的意见和不必要的空白,这样的东西(仍然相当有效); 后者则认为,实际上理解的代码,并做一些内联和等。 所以,你可以自由地发表意见,然后使用这些工具来确保任何微小的影响时,第一次加载脚本是以涅槃工具绕过这些意见可能有。
当然,关于JavaScript性能的事情是很难准确预测的交叉发动机,因为发动机差别如此之大。 因此,实验可以很有趣:
- 这里的每一次它(理论上)重新解析/实验再现了功能
- 这里有一个 ,只是解析/一次创建功能,重用它
结果? 我的观点是,有测试的计量误差范围内没有明显的差异。
Answer 2:
该意见有最大的影响是臃肿的文件大小,从而减缓脚本下载。 因此,为什么所有的专业网站使用一个极小的生产版本削减JS下来小,因为它得到。
Answer 3:
它可能有一定的效果。 非常简约的效果,但(甚至IE6正确处理意见! 得到证实......)。
然而,大多数人使用剥除注释minifier。 因此,它的好。
也:
V8通过执行之前编译JavaScript以本机代码提高性能。
资源
Answer 4:
它可以防止内联函数 ,这会影响性能,但是这不应该真的会发生。