JSON性能 - 多文件与长文件

时间:2013-03-29 19:24:55

标签: javascript json

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

2 个答案:

答案 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?如果是这样,多个文件可能会更好,因为您可以在块中处理它们,从而避免浏览器发出脚本占用时间过长的警告。但正如昆汀评论的那样,你可能会发现性能甚至都不是问题。