优化慢速搜索算法 - javascript,JSON和本地存储
Optimize slow search algorithm - javascript, JSON and localstorage
我正在使用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/
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- JavaScript将JSON存储在2D数组中
- 如何将javascript对象或JSON存储在使用html5数据属性的html元素中
- 只是将 XML/JSON 存储在数据库中,用于数据库中未使用的数据
- 来自webserivce的Json存储适用于ExtJS 4.0,但不适用于4.2
- 将嵌套的 json 存储到 mysql db 中的节点中
- 使用 JSON 存储创建的 2 个 var 项
- 使用 Javascript 和 PHP 将 JSON 存储为 CSV
- 如何解码javascript json存储在php中使用$_POST隐藏字段
- 我可以在JSON存储RegExp和函数
- Session将Json存储在javascript上,并在服务器端使用
- Lawnchair json存储删除记录
- IBM worklight JSON存储删除文档数组
- 如何从JSON存储创建一个JavaScript日期对象
- 如何从一个get请求创建多个JSON存储
- 将JSON存储在HTMl中
- 在AJAX请求之后将Json存储在全局变量中
- 什么是JSON存储键值对的替代方案,并且可以使用Jquery轻松解析
- ExtJS:返回json存储中的总行/记录
- 每60秒刷新JSON存储- EXT JS 4