this指针和闭包那个性能更好?

测试代码:
let obj = { key: 1 };
function func1 () { obj.key = 2;}
let func2 = function () { this.key = 2; }.bind(obj) ;
function test (func) {
for (let i = 0;i < 1000000; i++) func();
}

console.time('func1');
test(func1);
console.timeEnd('func1')

console.time('func2');
test(func2);
console.timeEnd('func2')

Paste_Image.png

我在 chrome 上执行了三次,结果是这样的:
func1: 1.767ms
func2: 12.910ms

func1: 1.849ms
func2: 59.454ms

func1: 1.868ms
func2: 64.076ms

然后我把,fun1 和 fun2代码对调 ,我再执行了三次,结果是这样的:

func2: 57.897ms
func1: 9.906ms

func2: 61.492ms
func1: 9.527ms

func2: 58.168ms
func1: 9.356ms

我把循环扩大100倍,各执行3次,结果是这样的:
func1: 72.744ms
func2: 4635.589ms

func1: 80.379ms
func2: 4278.594ms

func1: 73.979ms
func2: 4300.288ms

可以看出第一种性能好...原因是call,apply,bind这种绑定this的操作非常耗性能...

stack overflow 上列出的原因:为什么 bind() 比 闭包要慢(在 chrome 中慢,改成 nodejs 环境后,闭包性能低于 bind())的原因:
1、bind() 的算法比闭包以及 call() 和 apply() 要复杂;
2、bind() 在 v8 引擎的实现中采用了很多耗性能的函数,
综上, bind() 性能低于闭包,但可读性和可维护性要高出闭包很多。闭包虽然可读性较差,但性能却要比call,apply,bind这种绑定this的操作要好很多。

参考链接:
https://segmentfault.com/q/1010000005987591
http://stackoverflow.com/questions/17638305/why-is-bind-slower-than-a-closure

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容