2

我的应用程序必须下载并读取大量最初存储在数据库中的数据。我无法确定是否最好将每个表拆分为它自己的 JSON 文件,或者是否应该将所有数据打包到一个 JSON 文件中。几十个文件的下载时间会更长,但单个文件的解析时间会更长。答案可能更多的是意见而不是事实,但我认为值得利用 SO 获得洞察力。

4

2 回答 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 回答