Javascript 你没有';我不知道JS:异步和性能协作并发?

Javascript 你没有';我不知道JS:异步和性能协作并发?,javascript,ajax,asynchronous,Javascript,Ajax,Asynchronous,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( func

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 );


我无法得到这一部分,我的想法无法接受这样做会使代码性能更好,这会不会导致来自两个数组的数据交错,或者我只是不明白事件循环是如何工作的???

看来您是正确的,多个ajax调用可能会导致数据排序错误(你非常机敏地注意到,+1),通过发布代码,你可以得到:

  • ajax调用1开始
  • ajax调用1结束
  • 追加调用1中的前1000个元素
  • ajax调用2开始
  • 从调用1追加接下来的1000个元素
  • ajax调用2结束
  • 从调用2中追加前1000个元素
  • 从调用1追加接下来的1000个元素

  • 至于问题的性能方面,请记住“性能”不仅仅是一件事。如果您所说的性能是指“这段代码需要多长时间才能运行”,那么分块将导致更差的性能。但这是前端。“性能”实际上是关于用户体验的,您的Javascript代码在主线程上运行。如果您执行10秒钟的操作后,您的UI将在10秒钟内无响应。如果将其分块,则用户仍可以在页面运行时与页面进行交互,即使它需要更长的时间才能完成。

    只有一个数组……那么您的问题是什么?没有ajax调用中看到的两个数组??我的问题在代码段下,我不知道这应该如何提高性能而不引起数据冲突?啊,好的。是的,你是对的,顺序可能会出错。至于性能方面,请参阅我之前的评论。这实际上是关于分解阻塞操作,以便它们…好吧,不要阻塞太多。我想这可能是一个示例,而不是producti在ready code上。引用“交叉插入事件循环队列将使我们的站点/应用程序更具响应性(性能)。性能应加引号。这种方法可以使应用程序更具响应性,从而使其看起来更具性能。@Saheregendy很乐意提供帮助。