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