私のアプリケーションは、もともとデータベースに保存されていた大量のデータをダウンロードして読み取る必要があります。各テーブルを独自の JSON ファイルに分割する方が良いのか、それともすべてのデータを 1 つの JSON ファイルにパックするべきなのかを判断できませんでした。ファイルが数十個ある場合はダウンロードに時間がかかりますが、単一のファイルの場合は解析に時間がかかります。答えは事実よりも意見かもしれませんが、洞察のために SO を利用する価値があると思いました。
2 に答える
ユーザーは、一度に 1 つずつ表示できるため、ユーザー情報が利用可能になるとすぐに提供されるため、小さなチャンクの恩恵を受けます。解析するデータが大量にある場合、サイトの速度が遅すぎるために、ユーザーが固執するのに時間がかかりすぎるか、少なくとも煩わしさが生じる可能性があります。
JSON.parse(..) の複雑さは O(n) になると思うので、一度にすべてを解析するか、チャンクで解析するかを選択した場合、合計時間はほぼ同じになるはずです。実装されている実際のアルゴリズムに関する情報が見つからなかったので、チャンクが実際にわずかに高速であることを示す小さなシミュレーションを作成しました。
グーグルクローム
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>
Web ページでクライアント側の JavaScript について話していると思いますか? その場合、スクリプトに時間がかかりすぎるというブラウザーからの警告を回避して、複数のファイルをチャンクで処理できるため、複数のファイルの方が優れている可能性があります。しかし、Quentin がコメントしたように、パフォーマンスは問題ではないことに気付くかもしれません。