- 主题:JavaScript的for循环是我理解错了吗?
还要寻找函数对象,构造Context之类的吧。
【 在 ttl (小驴) 的大作中提到: 】
: 顺便说下开销的问题:
: 以v8为例,一个function的调用对应到的C++:
: fn->GetFunction()->Call(v8::Context::GetCurrent()->Global(), 1, args)
: ...................
--
FROM 117.30.55.*
循环体里每次都整个arr[i]或者每次都加个 var item = arr[i]挺烦人的啊。
$.each(arr, function (k,v){ blabla.. }) 看着顺眼多了。
其实我用的最多的是 underscore 的 _.map 跟 _.reduce,如果profile显示是热点我才去人肉给它展开(基本没做过)
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 没觉得$.each()有多方便。JavaScript又不是函数式编程语言,能根据可重入函数的特性做惰性计算并行计算什么的。$.each与for的区别不过是写法上的不同而已。
: 而且性能这个,积少成多。咱不能像那些搞Java的那样,大家都写一坨坨,最后搞成一撮矬。
--
FROM 118.195.70.*
还不如用underscore 的_.each
【 在 hgoldfish (老鱼) 的大作中提到: 】
: for(var attr in obj) 或者 for(var elem in array) 两个有时候JavaScript解释器是不是会弄错。。我这种有个测试代码:
: Array.prototype.fish = function(){
: console.debug("fish is here.");
: ...................
--
FROM 210.13.94.*
_.each可以绑定context, 逻辑复杂的话,代码写出来比直接for这类要好看很多
代码写的好看,容易读懂,也是一个特性嘛,哈哈
【 在 hgoldfish 的大作中提到: 】
: 没觉得$.each()有多方便。JavaScript又不是函数式编程语言,能根据可重入函数的特性做惰性计算并行计算什么的。$.each与for的区别不过是写法上的不同而已。
: 而且性能这个,积少成多。咱不能像那些搞Java的那样,大家都写一坨坨,最后搞成一撮矬。
:
--
FROM 123.117.172.*
就是取了几个地址,至于中间的v8::Local<v8::Object>之类的临时变量的构造析构,编译器是会优化掉很多的。
测试平均下来是这种
push xxx
call fn
fn:
push ebp
mov ebp, esp
...
ret
调用的10倍多点,是可以接受的。如果是内部逻辑大的话,这点开销就可以忽略了。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 还要寻找函数对象,构造Context之类的吧。
--
修改:ttl FROM 118.195.70.*
FROM 118.195.70.*
我感觉性能真的不用考虑太多, 用js本身就说明你的应用不是cpu敏感的应用, 而用一些现成的库可以有效的避免错误, 提高开发效率, 为什么不用呢.
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 没觉得$.each()有多方便。JavaScript又不是函数式编程语言,能根据可重入函数的特性做惰性计算并行计算什么的。$.each与for的区别不过是写法上的不同而已。
: 而且性能这个,积少成多。咱不能像那些搞Java的那样,大家都写一坨坨,最后搞成一撮矬。
--
FROM 210.13.94.*
关键还是别乱动Array.prototype,如果真要动,那么要清楚造成的后果以及做好处理措施
--
FROM 219.141.211.*
看过一个js编码规则里有一条,不要对array用for in,就是为了避免你这种情况。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: for(var attr in obj) 或者 for(var elem in array) 两个有时候JavaScript解释器是不是会弄错。。我这种有个测试代码:
: Array.prototype.fish = function(){
: console.debug("fish is here.");
: ...................
--
FROM 140.207.203.*