Мое приложение должно загружать и читать много данных, которые были первоначально сохранены в базе данных. Я не смог определить, лучше ли разбивать каждую таблицу на собственный JSON-файл или я должен упаковать все данные в один файл JSON. Загрузка будет занимать больше времени для десятков файлов, но разбор будет занимать больше времени для одного файла. Ответ мог бы быть более мнением, чем фактом, но я подумал, что стоило вникать в SO для понимания.JSON performance - multi-file vs long single file
ответ
Я предполагаю, что вы говорите о клиентской стороне javascript на веб-странице? Если это так, несколько файлов могут быть лучше, потому что вы можете обрабатывать их в кусках, избегая предупреждений в браузере о том, что ваш сценарий занимает слишком много времени. Но, как заметил Квентин, вы можете обнаружить, что производительность даже не проблема.
Пользователи получат небольшие куски, так как они могут отображаться по одному и, таким образом, предоставляя информацию о пользователе, как только она будет доступна. Если у вас много данных для синтаксического анализа, может потребоваться слишком много времени, чтобы пользователь мог придерживаться или, по крайней мере, вызвать раздражение, потому что ваш сайт слишком медленный.
Я бы подумал, что сложность 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>
Я согласен, что меньшие куски лучше, когда данные требуются в разное время во время выполнения, но мне нужно загрузить все данные, когда загружается сама приложение. Это все, чтобы даже запустить приложение. В этой ситуации все еще держится небольшой кусок? – jugg1es
Да, несмотря на то, что моделирование, которое я выполнял (включено выше), недостаточно для окончательного ответа на вопрос о том, насколько быстрые мелкие куски, они как минимум * так же быстро *, как один большой кусок [когда он работает только с целыми числами] , Если вам действительно нужна производительность, я предлагаю вам попробовать приведенный выше код, приблизившись к вашим фактическим данным на машине, которая будет запускать ваш код, чтобы увидеть результаты. –
- 1. Inline (Single File) vs. CodeBehind
- 2. icCube incremental vs single load performance
- 3. neo4j cypher single vs multiple labels performance
- 4. String vs long performance в Java
- 5. PHP file() vs fopen() + fgets() performance debate
- 6. Sqlite vs CSV file manipulation performance
- 7. PHP - Несколько файлов Vs single file
- 8. Ajax - Json vs Text Performance
- 9. SQL Geometry VS decimal (8,6) Lat, Long Performance
- 10. GT200 Single Precision Peak Performance
- 11. Boost Asio single threaded performance
- 12. ImageMagick single convert command performance
- 13. 2dsphere vs 2d performance performance
- 14. build single file application
- 15. perl untar single file
- 16. Magit revert single file
- 17. C++: long long int vs. long int vs. int64_t
- 18. unsigned long long vs unsigned long (переносимость)
- 19. Python type long vs C 'long long'
- 20. Binary File Read Performance C++
- 21. Synchronized vs ReadWriteLock performance
- 22. Visual Studio 2013 Single-File Mode?
- 23. malloc vs mmap performance
- 24. removeAll ArrayList vs LinkedList performance
- 25. if/else vs virtual function: performance performance
- 26. if else vs performance performance в java
- 27. Python 3 urllib Vs performance performance
- 28. Сокращенное название типа long long vs long long int, стандартно?
- 29. JSON performance
- 30. PHP multifile upload
Делайте то, что проще, а затем беспокоиться о производительности, если это слишком медленно. – Quentin