美文网首页
this指针和闭包那个性能更好?

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

作者: linda102 | 来源:发表于2017-01-09 22:08 被阅读12次

测试代码:
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

相关文章

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

    测试代码:let obj = { key: 1 };function func1 () { obj.key = 2...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • 闭包引起的循环引用问题

    闭包的内存管理 为什么苹果要区分逃逸闭包和非逃逸闭包类,当然是从性能优化上考虑的。上篇文章我们说非逃逸闭包的作用域...

  • 闭包 性能

    function a(){ let name = 'a'; return function (){ ...

  • WEB面试题总结

    模块一 JavaScript高级内功修炼 this指针/闭包/作用域 1.this指针详解 什么是this指向th...

  • Block笔记

    函数或函数指针+外部上下文变量 = 闭包,block其实是OC对闭包的实现,配合dispatch_queue实现简...

  • JavaScript闭包的理解

    前言 在JavaScript中,闭包对于JavaScript的意义无异于指针在c++中的意义。理解闭包是我们掌握J...

  • block原理

    1. block的定义 block是Objective-C对于闭包的实现(闭包是一个函数<或者指向函数的指针>加上...

  • iOS 中的内存管理优化

    闭包 外面将强引用对象转化为弱引用指针,防止循环引用 block内弱引用转换成strong强引用指针,防止多线程和...

  • 面试题

    vue和angular的区别? ng-if和ng-show的区别? 闭包 DOM操作 性能优化 sessionSt...

网友评论

      本文标题:this指针和闭包那个性能更好?

      本文链接:https://www.haomeiwen.com/subject/xjrxbttx.html