2013-03-29 3 views
0

Мое приложение должно загружать и читать много данных, которые были первоначально сохранены в базе данных. Я не смог определить, лучше ли разбивать каждую таблицу на собственный JSON-файл или я должен упаковать все данные в один файл JSON. Загрузка будет занимать больше времени для десятков файлов, но разбор будет занимать больше времени для одного файла. Ответ мог бы быть более мнением, чем фактом, но я подумал, что стоило вникать в SO для понимания.JSON performance - multi-file vs long single file

+2

Делайте то, что проще, а затем беспокоиться о производительности, если это слишком медленно. – Quentin

ответ

0

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

1

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

Я бы подумал, что сложность JSON.parse (..) будет O (n), так что общее время должно быть довольно похоже, если вы решили разобрать все сразу или в кусках. Поскольку я не мог найти никакой информации о реализованном алгоритме, я написал небольшую симуляцию, которая указывает на то, что куски на самом деле немного быстрее.

Google Chrome

итераций = 1000, DataSize = 100000, ломти = 1000: bigData = 3115, smallData = 2331

итераций = 1000, DataSize = 100000, ломти = 100: bigData = 3218, smallData = 2579

<body> 
    <div id="resultBigData"></div> 
    <div id="resultSmallData"></div> 

    <script type="text/javascript"> 
     // Parameters 
     var simulationIterations = 500; 
     var sizeOfData = 100000; 
     var smallDataChunk = 100; 

     // Create data to use in the simulation. 
     var bigDataArray = new Array(); 
     for (var indexBigData = 0; indexBigData < sizeOfData; ++indexBigData) { 
      bigDataArray.push(indexBigData); 
     } 

     var smallDataArray = new Array(); 
     for (var indexSmallData = 0; indexSmallData < smallDataChunk; ++indexSmallData) { 
      smallDataArray.push(indexSmallData); 
     } 

     // Create a stringified version of the arrays. 
     var jsonBigDataArray = JSON.stringify(bigDataArray); 
     var jsonSmallDataArray = JSON.stringify(smallDataArray); 

     // Run a timed simulation with the bigData array. 
     var startTimestampBigDataArray = new Date().getTime(); 
     for (var indexIterationBigData = 0; indexIterationBigData < simulationIterations; ++indexIterationBigData) { 
      JSON.parse(jsonBigDataArray); 
     } 
     document.getElementById('resultBigData').innerHTML = '<p><b>BigData:</b> ' + ((new Date().getTime()) - startTimestampBigDataArray) + '</p>'; 

     // Run a timed simulation with the smallData array. 
     var startTimestampSmallDataArray = new Date().getTime(); 
     for (var indexIterationSmallData = 0; indexIterationSmallData < simulationIterations; ++indexIterationSmallData) { 
      for (var indexIterationSmallDataCompensation = 0; indexIterationSmallDataCompensation < (sizeOfData/smallDataChunk); ++indexIterationSmallDataCompensation) { 
       JSON.parse(jsonSmallDataArray); 
      } 
     } 
     document.getElementById('resultSmallData').innerHTML = '<p><b>SmallData:</b> ' + ((new Date().getTime()) - startTimestampSmallDataArray) + '</p>'; 
    </script> 
</body> 
+0

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

+1

Да, несмотря на то, что моделирование, которое я выполнял (включено выше), недостаточно для окончательного ответа на вопрос о том, насколько быстрые мелкие куски, они как минимум * так же быстро *, как один большой кусок [когда он работает только с целыми числами] , Если вам действительно нужна производительность, я предлагаю вам попробовать приведенный выше код, приблизившись к вашим фактическим данным на машине, которая будет запускать ваш код, чтобы увидеть результаты. –