Javascript JSON性能-多文件与长单文件

Javascript JSON性能-多文件与长单文件,javascript,json,Javascript,Json,我的应用程序必须下载并读取许多最初存储在数据库中的数据。我还不能确定是否最好将每个表分解成它自己的JSON文件,或者是否应该将所有数据打包成一个JSON文件。数十个文件的下载时间更长,但单个文件的解析时间更长。答案可能更多的是观点而不是事实,但我认为值得深入了解 我假设您正在讨论网页中的客户端javascript?如果是这样,多个文件可能会更好,因为您可以分块处理它们,从而避免浏览器发出脚本耗时过长的警告。但正如昆廷所评论的,你可能会发现性能甚至不是问题。用户将从小数据块中受益,因为它们可以一次

我的应用程序必须下载并读取许多最初存储在数据库中的数据。我还不能确定是否最好将每个表分解成它自己的JSON文件,或者是否应该将所有数据打包成一个JSON文件。数十个文件的下载时间更长,但单个文件的解析时间更长。答案可能更多的是观点而不是事实,但我认为值得深入了解

我假设您正在讨论网页中的客户端javascript?如果是这样,多个文件可能会更好,因为您可以分块处理它们,从而避免浏览器发出脚本耗时过长的警告。但正如昆廷所评论的,你可能会发现性能甚至不是问题。

用户将从小数据块中受益,因为它们可以一次显示一个,从而在用户信息可用时立即提供给用户。如果你有很多数据需要解析,那么用户可能会花太长的时间停留,或者至少会因为你的网站太慢而产生一些麻烦

我认为JSON.parse(..)的复杂度应该是O(n),因此无论您选择一次性解析还是分块解析,总时间应该非常相似。因为我找不到任何关于实际实现的算法的信息,所以我写了一个小的模拟,指出块实际上稍微快一点

谷歌浏览器

迭代次数=1000,数据大小=100000,块数=1000:bigData=3115,smallData=2331

迭代次数=1000,数据大小=100000,块数=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>

//参数
var模拟迭代次数=500;
var sizeOfData=100000;
var smallDataChunk=100;
//创建要在模拟中使用的数据。
var bigDataArray=新数组();
对于(变量indexBigData=0;indexBigData';
//使用smallData阵列运行定时模拟。
var startTimestampSmallDataArray=new Date().getTime();
对于(var indexIterationSmallData=0;indexIterationSmallData';

做最简单的事情,然后担心速度太慢时的性能。我同意在运行时的不同时间需要数据时,块越小越好,但我需要在应用程序本身加载时加载所有数据。甚至启动应用程序都需要它。小数据块方法在这种情况下仍然适用吗?是的,尽管我运行的模拟(包括上面)本身不足以确定小数据块的速度有多快,但它们至少与单个大数据块一样快[仅处理整数时]。如果您真的需要性能,我建议您尝试上面的代码,并在运行代码以查看结果的机器上使用更接近实际数据的示例。