首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将大量数据加载到内存中-这是最有效的方法吗?

将大量数据加载到内存中-这是最有效的方法吗?
EN

Stack Overflow用户
提问于 2010-11-12 02:50:12
回答 2查看 20K关注 0票数 21

我有一个基于web的文档搜索/查看系统,我正在为一个客户开发。这个系统的一部分是一个搜索系统,它允许客户搜索文档中包含的术语。我已经创建了必要的搜索数据文件,但需要加载大量数据,加载所有数据需要8-20秒。数据被分成40-100个文件,具体取决于需要搜索的文档。每个文件的大小在40-350kb之间。

此外,此应用程序必须能够在本地文件系统上运行,也可以通过well服务器运行。

当网页加载时,我可以生成需要加载哪些搜索数据文件的列表。必须先加载整个列表,然后才能认为该网页是有效的。

有了前言,让我们看看我现在是如何做到这一点的。

在知道加载了整个网页之后,我调用了loadData()函数

function loadData(){
            var d = new Date();
            var curr_min = d.getMinutes();
            var curr_sec = d.getSeconds();
         var curr_mil = d.getMilliseconds();
         console.log("test.js started background loading, time is: " + curr_min + ":" + curr_sec+ ":" + curr_mil);
          recursiveCall();
      }


   function recursiveCall(){
      if(file_array.length > 0){
         var string = file_array.pop();
         setTimeout(function(){$.getScript(string,recursiveCall);},1);
    }
    else{
        var d = new Date();
        var curr_min = d.getMinutes();
        var curr_sec = d.getSeconds();
        var curr_mil = d.getMilliseconds();
        console.log("test.js stopped background loading, time is: " + curr_min + ":" + curr_sec+ ":" + curr_mil);
    }
  }

这样做的目的是按顺序处理一组文件,在文件之间间隔1ms。这有助于防止浏览器在加载过程中被完全锁定,但浏览器仍然会因为加载数据而陷入停滞。我加载的每个文件看起来都是这样的:

AddToBookData(0,[0,1,2,3,4,5,6,7,8]);
AddToBookData(1,[0,1,2,3,4,5,6,7,8]);
AddToBookData(2,[0,1,2,3,4,5,6,7,8]);

其中每一行都是将数据添加到数组的函数调用。"AddToBookData“函数只执行以下操作:

    function AddToBookData(index1,value1){
         BookData[BookIndex].push([index1,value1]);
    }

这是现有的系统。加载完所有数据后,"AddToBookData“会被调用100,000+次。

我认为这是非常低效的,所以我写了一个脚本来获取包含上面所有函数调用的test.js文件,并对其进行处理,将其更改为一个巨大的数组,该数组与BookData创建的数据结构相同。我没有像旧系统那样进行所有的函数调用,而是简单地执行以下操作:

var test_array[..........(data structure I need).......]
BookData[BookIndex] = test_array;

我希望看到性能的提高,因为我删除了上面所有的函数调用,这个方法需要稍微多一点的时间来创建准确的数据结构。我应该注意到,在我的真实测试中,"test_array“包含了略多于90,000个元素。

这两种加载数据的方法似乎具有大致相同的CPU利用率。我很惊讶地发现了这一点,因为我希望第二种方法只需要很少的CPU时间,因为数据结构是事先创建的。

请给我建议?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4158102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档