我的应用程序必须下载并读取最初存储在数据库中的大量数据。我无法确定是否最好将每个表分成它自己的JSON文件,或者我是否应该将所有数据打包到一个JSON文件中。对于几十个文件,下载将花费更长的时间,但对于单个文件,解析将花费更长的时间。答案可能是更多的意见而不是事实,但我认为值得利用SO进行洞察。
答案 0 :(得分:1)
用户将受益于小块,因为它们可以一次显示一个,从而在用户可用时立即提供信息。如果您需要解析大量数据,那么用户可能需要很长时间才能留下来,或者至少会产生一些烦恼,因为您的网站太慢了。
我认为JSON.parse(..)的复杂性将是O(n),因此无论您是选择一次解析还是以块为单位,总时间应该非常相似。由于我找不到任何有关实际算法实现的信息,我写了一个小模拟,指出块实际上稍快一点。
Google Chrome
iterations = 1000,dataSize = 100000,chunks = 1000:bigData = 3115, smallData = 2331
iterations = 1000,dataSize = 100000,chunks = 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>
答案 1 :(得分:0)
我假设你在网页上谈论客户端javascript?如果是这样,多个文件可能会更好,因为您可以在块中处理它们,从而避免浏览器发出脚本占用时间过长的警告。但正如昆汀评论的那样,你可能会发现性能甚至都不是问题。