big*_*olf 3 javascript performance animation requestanimationframe
我通常不太关心微优化,直到javascript UI性能(特别是在移动设备上)并保持神圣的16.666666667ms下的所有内容以获得平滑不间断的60fps.
我正在从requestAnimationFrame运行tick函数,直到满足条件,并且它依赖于在当前实例上设置的某些值,例如this.velocity,this.translateX等.
我的问题是,是否应该使用this在var _this = this;声明之外声明的缓存版本,而不是指"这个地方更快?" 要清楚我已经多次调用它了......下面是一些代码:
swipeIt.prototype.tick = function() {
if (Math.abs(this.translateX) < (+this.elWidth*1.2 && this.velocity > 6) ) {
this.velocity = this.velocity*1.15;
this.translateX = (this.dir === 'left') ? this.translateX - this.velocity : this.translateX + this.velocity;
requestAnimationFrame(function() {
_this._update(_this.updateCb);
_this.tick();
});
} else {
//....
}
}
Run Code Online (Sandbox Code Playgroud)
关于进一步优化这一点的任何其他建议都会受到欢迎,这是我第一次真正给予这一点.干杯.
不,你不会看到任何改进.如果有任何差异,那将是一个微小的性能下降,因为额外的声明.
你可能已经看过类似的东西:
var $this = $(this);
Run Code Online (Sandbox Code Playgroud)
在jQuery中.这很有意义,因为$(this)评估成本很高,因此$(this)通过将其分配给变量然后在任何地方使用该变量,可以大大改善散落的代码.在你的情况下,评估保存没有任何代价.访问_this时间与访问时间一样长this.