凯尔(Kyle)示例是关于通过异步事件对数据(如此之大)进行分块,并使事件在事件循环队列中交织,那部分我无法获得:
书中的示例
var res = [];
// `response(..)` receives array of results from the Ajax call
function response(data) {
var chunk = data.splice( 0, 1000 );
res = res.concat(
chunk.map( function(val){
return val * 2;
} )
);
if (data.length > 0) {
setTimeout( function(){
response( data );
}, 0 );
}
}
// ajax(..) is some arbitrary Ajax function given by a library
ajax( "http://some.url.1", response );
ajax( "http://some.url.2", response );
我无法理解这一部分,我不能接受这样可以使代码性能更好,不会导致两个数组中的数据交错,或者我只是不了解事件循环的工作原理?
答案 0 :(得分:3)
看来您是正确的,因为多个ajax调用可能会导致数据排序错误(您非常聪明地注意到+1),并且发布的代码可以得到:
关于问题的性能方面,请记住“性能”不仅仅是一回事。如果按性能来表示“此代码块运行需要多长时间”,那么分块将导致性能下降。但这是前端。 “性能”实际上与用户体验有关,您的Javascript代码在主线程上运行。如果您进行10秒钟的操作,则您的UI会在10秒钟内无响应。如果对它进行分块,那么即使页面需要花费更长的时间,用户仍可以在页面运行时与它进行交互。