优化慢速搜索算法 - javascript,JSON和本地存储

Optimize slow search algorithm - javascript, JSON and localstorage

本文关键字:JSON 存储 javascript 搜索算法 优化      更新时间:2023-09-26

我正在使用PHP,Javascript/jQuery/Ajax,JSON和localstorage为我的公司构建一个guestlist应用程序。它将用于智能手机:主要是iPhone 4。我使用本地存储作为我的缓存,因为应用程序的搜索部分必须在离线模式下工作。

我在搜索来宾列表时遇到性能问题。

应用程序的流程如下所示(对于此考试,我正在使用包含 600 位来宾的来宾列表(

1. 使用 JSON 的 PHP 编码从服务器检索所有来宾,并通过 AJAX 发送回 js。这工作正常。

2. 使用 JSON 解析 PHP responseText(称为 phpData(。解析:

var parsedMysqlData = JSON.parse(phpData);

这给了我们一个 JSON。包含 600 个对象的数组,如下所示:

Object:  {
Id: Int
EventId: int
guestInfo: string
guestlist: string
guestName: string
reference: string
total: int
used: int
}

3. 保存 JSON。使用 JSON 阵列到用户的本地存储。字符串化:

 localStorage.setItem(0, JSON.stringify(parsedMysqlData));

4. 当用户开始搜索时,我们会得到他的搜索字符串,然后在 localStorage 中使用 JSON.parse 检索我们的来宾列表,如下所示:

 var currentGuestlist = JSON.parse(localStorage.getItem(0));

然后使用这个 for 循环遍历我们的对象,尝试将他的搜索字符串与我们的 guest(数组 currentGuestlist( 匹配:

 for (i=0; i<currentGuestlist.length; i++) {
 // match 'currentGuestList[i]['name']' with what the user typed in search form 
}


出于某种原因,这在iPhone 4上需要很长时间。搜索 600 个对象将使 iPhone 冻结约 4 秒,然后返回匹配项。

在将包含 JSON 对象的数组存储在 localStorage 中

并使用 JSON 解析之前,我只是将无序字符串存储在 localStorage 中,它的工作速度要快得多。JSON 对象广告结构到存储在本地存储中的数据,这是至关重要的。所以我想速度问题与我正在使用 JSON 对象的事实有关?如何以有组织的方式构建本地存储数据,同时仍保持与以前一样良好的速度性能?

最后,非常感谢关于

使用哪种技术使此应用程序尽可能轻巧和快速的任何提示或建议。

您是否从本地存储中获取每个搜索的列表?不要这样做,而是仅在需要时(每当它发生变化时(将其存储在本地存储中,并始终将其保留为数据结构。

简单地使用对象而不是纯字符串不能成为缓慢的原因,因为 JavaScript 中的所有内容都已经是一个对象,因此它应该只减慢一个常数。

此外,如果这是关于自动完成类型的行为,那么我建议你放慢搜索速度,并考虑如果用户在框中输入"Ma",列表会被过滤,并且用户为"Matt"添加"tt",只需要考虑以前过滤的匹配......

也许您的设置更适合使用 WebSQL 数据库,而不是在本地存储中存储 JSON 对象。WebSQL现在已经被弃用了,但它在webkit浏览器中得到了很好的支持。我在几个项目中使用它取得了良好的效果。

您可以在此处阅读有关它的更多信息:http://html5doctor.com/introducing-web-sql-databases/