JavaScript优化:如何缓存本地变量'初始值更有效
JavaScript optimizations: how to cache local variables' initial values more efficiently?
我只是好奇。也许有人知道2013年哪些JavaScript引擎可以优化,哪些不能优化?对最近的未来有什么假设吗?我一直在找一些好文章,但互联网上仍然没有"圣经"。
好的,让我们集中讨论单个问题:
假设我有一个函数,每10ms调用一次,或者在一个紧循环中调用一次:
function bottleneck () {
var str = 'Some string',
arr = [1,2,3,4],
job = function () {
// do something;
};
// Do something;
// console.log(Date.getTime());
}
正如您所看到的,我不需要每次都计算变量的初始值。但是,如果我把它们移到更高的范围,我将在变量查找上放松。那么,有没有一种方法可以告诉Javasrpt引擎做这样一件显而易见的事情——预先计算变量的初始值?
为了澄清我的问题,我特意做了一个jsperf。我正在尝试不同的类型。我对函数和基元特别感兴趣。
如果你需要每10ms调用一个函数,而这是一个瓶颈,你应该首先想到的是"我不应该每10ms就调用这个函数"。你做的架构出了问题。也就是说,参见中的1bhttp://jsperf.com/variables-caching/2,这大约比"缓存"版本快四倍,主要原因是对于代码中的每个变量,要么向上移动,要么重新声明。在1b中,我们向上移动一次范围,以获得"首字母",然后根据本地引用为其内容设置本地别名。节省了很多时间。
(关注V8)
数组数据本身并没有创建,但每次都需要创建一个唯一的数组对象。值1,2,3,4的后备数组由这些对象共享。
字符串是中间的,实际上最快的方法是将相同的字符串作为文本到处复制粘贴,而不是引用一些公共变量。但对于维护,你并不真的想这么做。
不要在热函数中创建任何新函数,如果job
函数引用了bottleneck
函数中的任何变量,那么首先这些变量将成为上下文分配的,访问任何地方都很慢,即使是在外部函数中,这将阻止瓶颈函数的内联。内衬是一个大的优化,你不想错过其他可能的时候。
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- 自定义角度过滤器提供TypeError.不能调用undefined,但变量已定义并有效
- jquery$(“#someID”).width(变量+'px')有效,现在无效
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 尝试检索变量以检查表单是否有效
- 在 AJAX 函数内部,变量具有有效值,在外部则没有
- 由具有内联 JavaScript 的元素赋值的变量中的“this”对所有元素或已赋值的活动元素有效
- 变量有效,但在代码块的下方未定义
- 将变量从PHP传递到JavaScript的有效方法
- JS:为什么这个对象属性不起作用,只有当我把它作为变量放在其中一个方法中时,它才有效
- 为什么这个变量声明语句有效
- Javascript - 如何有效变量链
- 在JavaScript中用冒号分配变量的语法有效吗
- 如何有效地检查变量是否已声明
- 为什么第一个有效,第二个无效?全局和私有变量声明
- 如何设置具有多个条件的if语句,该语句使用有效条件's变量
- JavaScript优化:如何缓存本地变量'初始值更有效
- 在用Javascript完全创建变量之前,我似乎一直在使用它,但这很有效——为什么
- 此代码在警报变量时有效,但如果不是,则不起作用
- 在Angular指令中,大写只对blur变量有效,而对set变量无效