Загрузка большого объема данных в память - самый эффективный способ сделать это?

У меня есть система поиска / просмотра документации на основе Интернета, которую я разрабатываю для клиента. Частью этой системы является поисковая система, которая позволяет клиенту искать термин (и), содержащийся в документации. У меня созданы необходимые файлы поисковых данных, но нужно загрузить много данных, и загрузка всех данных занимает от 8 до 20 секунд. Данные разбиты на 40-100 файлов, в зависимости от того, какую документацию нужно искать. Каждый файл находится где-то от 40-350 КБ.

Также это приложение должно запускаться как в локальной файловой системе, так и через веб-сервер.

Когда веб-страница загружается, я могу создать список файлов поисковых данных, которые мне нужно загрузить. Весь этот список должен быть загружен, прежде чем веб-страницу можно будет считать функциональной.

С этим предисловием, давайте посмотрим, как я это делаю сейчас.

После того, как я знаю, что вся веб-страница загружена, я вызываю функцию loadData ()

function loadData(){
            var d = new Date();
            var curr_min = d.getMinutes();
            var curr_sec = d.getSeconds();
         var curr_mil = d.getMilliseconds();
         console.log("test.js started background loading, time is: " + curr_min + ":" + curr_sec+ ":" + curr_mil);
          recursiveCall();
      }


   function recursiveCall(){
      if(file_array.length > 0){
         var string = file_array.pop();
         setTimeout(function(){$.getScript(string,recursiveCall);},1);
    }
    else{
        var d = new Date();
        var curr_min = d.getMinutes();
        var curr_sec = d.getSeconds();
        var curr_mil = d.getMilliseconds();
        console.log("test.js stopped background loading, time is: " + curr_min + ":" + curr_sec+ ":" + curr_mil);
    }
  }

Это последовательно обрабатывает массив файлов с интервалом в 1 мс между файлами. Это помогает предотвратить полную блокировку браузера во время процесса загрузки, но браузер все еще имеет тенденцию зависать при загрузке данных. Каждый из загружаемых файлов выглядит следующим образом:

AddToBookData(0,[0,1,2,3,4,5,6,7,8]);
AddToBookData(1,[0,1,2,3,4,5,6,7,8]);
AddToBookData(2,[0,1,2,3,4,5,6,7,8]);

Где каждая строка - это вызов функции, которая добавляет данные в массив. Функция «AddToBookData» просто делает следующее:

    function AddToBookData(index1,value1){
         BookData[BookIndex].push([index1,value1]);
    }

Это существующая система. После загрузки всех данных «AddToBookData» может вызываться более 100 000 раз.

Я подумал, что это было довольно неэффективно, поэтому я написал скрипт для файла test.js, который содержит все вызовы функций выше, и обработал его, чтобы превратить его в гигантский массив, равный структуре данных, создаваемой BookData. Вместо того, чтобы делать все вызовы функций, которые делала старая система, я просто делаю следующее:

var test_array[..........(data structure I need).......]
BookData[BookIndex] = test_array;

Я ожидал увидеть повышение производительности, потому что я удалил все вызовы функций выше, этот метод требует немного больше времени для создания точной структуры данных. Я должен отметить, что «test_array» содержит чуть более 90 000 элементов в моем реальном тесте.

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

Пожалуйста, порекомендуйте?

Ответы на вопрос(4)

Ваш ответ на вопрос