Javascript 构建/传输大型数据结构的更有效方法?

Javascript 构建/传输大型数据结构的更有效方法?,javascript,node.js,Javascript,Node.js,我正在用node.js构建一个移动Boggle类型的web应用程序。我正试图找到一种更有效的方法来加载/构建一个庞大的字典(180000多个单词)。我目前有它的工作,但加载时间有点长。用户需要等待大约15秒才能构建整个东西,一些用户在整个东西加载之前超时。我想知道是否有人有任何提高速度的建议 我目前这样做的方式(可能完全没有效率): 我将列表分解为26个数组,每个字母对应一个数组,并将每个数组放入它自己的javascript文件中 当应用程序加载时,它运行一个递归函数,该函数获取下一个js文件

我正在用node.js构建一个移动Boggle类型的web应用程序。我正试图找到一种更有效的方法来加载/构建一个庞大的字典(180000多个单词)。我目前有它的工作,但加载时间有点长。用户需要等待大约15秒才能构建整个东西,一些用户在整个东西加载之前超时。我想知道是否有人有任何提高速度的建议

我目前这样做的方式(可能完全没有效率):

  • 我将列表分解为26个数组,每个字母对应一个数组,并将每个数组放入它自己的javascript文件中
  • 当应用程序加载时,它运行一个递归函数,该函数获取下一个js文件,并从中加载数组,覆盖上一个js文件。然后,它在整个数组中循环,并将每个新词加载到我的数据结构中
  • 合并了阵列的文件大约为2mb。合并后,数据结构本身的时钟频率约为12mb,这在台式计算机上并不算糟糕,但确实会让我的用户的智能手机重量下降

这需要建立在客户端,以允许即时查找。我目前的做法很有效,但我知道必须有更好的办法。

另一种策略是将递归代码转换为使用显式堆栈的非递归代码,只保存实际需要的对象


你试过分析你的代码吗?

为了回答最快加载时间的问题,你是这样做的吗?(又名,没有更多的代码,我们不可能知道)


为什么不把它作为一个大的gzip文件加载呢?预计算数据结构并将其作为JSON对象转储。根据我的经验,尝试使用Trie以使其比本机JavaScript属性名哈希更快是非常困难和不可能的。看起来像一个简单的物体,有很多属性,速度可能会更快;无论如何,查找速度必须有多快?@Pointy我实际上已经预先计算了该结构,并将其作为JSON对象存储在一个.js文件中。我唯一的问题是在gzip上用node实现。看起来很痛苦。你可以预先gzip.js文件,并通过Apache或nginx或其他方式提供它;使用Node服务应该很容易,因为你所要做的就是确保标题正确。你真的需要每次用户连接时都建立一个180k单词字典吗?是的,我正在做的几乎完全是减去超时功能
setTimeout
让浏览器“呼吸”一下,所以试着添加它,看看它是否能让事情看起来更快。如果可以的话,你也可以尝试缓存到
localStorage
function LoadFiles(fileArray){
  file = fileArray.slice(); //get the first file.
  $.ajax(file).success(function(data){
    /* yes, my object is a little funky, I'm focused on writing pseudocode */
    wordLibraryAdd(data);

    if (fileArray.length) // on a zero length quit processing
    setTimeout(function(){ LoadFiles(fileArray) }, 50) //a 50 ms buffer between each loading isn't bad.
  })
}