Вы не знаете JS: Async и Performance - совместный параллелизм? - PullRequest
4 голосов
/ 30 октября 2019

Пример Кайла касается разбиения данных (когда они так велики) на асинхронные события и чередование событий в очереди цикла событий, часть, которую я не смог получить:

Пример из книги:

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

Я не мог получить эту часть, мой разум не может смириться с тем, что это может улучшить работу кода, не приведет ли это к чередованию данных из двух массивов, или просто нетпонять, как работает цикл событий ??

1 Ответ

3 голосов
/ 30 октября 2019

Похоже, что вы правы, что существует вероятность ошибочного упорядочения данных при множественных вызовах ajax (и вы очень умели это заметить, +1), с опубликованным кодом, который вы можете получить:

  1. AJAX вызов 1 начинается
  2. AJAX вызов 1 заканчивается
  3. добавляет первые 1000 элементов из вызова 1
  4. AJAX вызов 2 начинается
  5. добавляетследующие 1000 элементов из вызова 1
  6. ajax вызов 2 завершается
  7. добавляет первые 1000 элементов из вызова 2
  8. добавляет следующие 1000 элементов из вызова 1

Что касается вопроса производительности, помните, что «производительность» - это не одно. Если под производительностью вы подразумеваете «сколько времени занимает выполнение этого блока кода», то разбиение на части приведет к снижению производительности. Но это внешний интерфейс. «Производительность» - это действительно пользовательский опыт, и ваш код Javascript выполняется в главном потоке. Если у вас есть 10-секундная операция, то ваш интерфейс не отвечает в течение 10 секунд. Если вы разделите его на части, то пользователь все равно сможет взаимодействовать со страницей во время ее работы, даже если для ее завершения потребуется немного больше времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...