javascript - JSON性能问题产生大量HTML列表

标签 javascript performance

我正在使用服务器端的PHP和jQuery以及JavaScript中的自定义MVC来构建一种项目管理工具。

我有一个弹出窗口可帮助用户在项目中添加人员。在弹出的地方,用户必须选择一个组(例如学生组),然后他可以选择配置文件以将其添加到当前项目中。

我已经对70-120人的小组进行了测试,并且工作时稍有延迟。

但是,当我测试一组1000个人时,刷新时间是如此之长,以至于Chrome浏览器会问我是否要停止脚本或等待更多时间...对于体验者而言这不是很好!

数据以JSON格式来自服务器:

{“ users”:[{“ uid”:“ cortes”,“ firstname”:“ Francois”,“ lastname”:“ CORTES”,“ mail”:“ ...”}],/ * 1000个用户记录了更多* /}

并以此HTML格式设置数据(自定义伪Mustache模板)

<li>
  <div class="wrapper">
    <p class="title"> {{firstname}} {{lastname}} {{mail}} </p>
    <p> {{uid}} </p>
    <p> <input type="checkbox" id="select-{{uid}}" /> </p>
  </div>
</li>


jQuery用于构建列表并添加一些侦听器
-在弹出验证之前选择/取消选择状态本地存储
-鼠标悬停时的一种亮点
在每个列表元素上
[代码] [代码]
我的问题是如何跟踪性能泄漏并解决该问题?

当然,代码有点丑陋且难以维护,当然,我又一次要快速解决这个问题,有人可以帮助我吗?

编辑:感谢您的评论和您的帖子。

更多的解释:通常团体容纳50-200人。由于某些技术和管理原因,这1000人的团体只是临时总数的90%的合并。但是,要强制执行性能并确保UI的响应性是一个巨大的挑战。

目前它没有通过测试...

@Chris:我正在用PHP构建一个测试控制器,以设置JSON的生成时间和大小

@Dandavis:是的,目前我正在这样做。我使用jQuery从页面上获取了一个通用的DIV模板,并在JSON数据上循环了1000次,用Javascript字符串用其example-data-value替换了通配符{{example-data-name}},然后将其插入到DOM中( jQuery),然后绑定事件监听器(jQuery也是如此)。我同意丑陋的代码,但是是自制的,没有办法,也没有时间使用BackBone或Knockout重构它。

documentFragment?好...需要进一步挖掘!

@ ajax81:页面加载时缓存的静态JSON ???为什么不……也许是修改现有工作和努力的最简单方法!

@Alberto:我牢记有用的提示。正如我上面评论的那样,我今天下午开始测试

我的感觉是PHP可以正确地完成其工作(关于数据大小和生成速度),但是自定义模板方法无法有效地处理整个数据!

无需分页数据,因为用户通常在小(50)到中(120)记录列表中滚动。 1,000是压力测试。它仅在夏季(节假日)发生,但是如果我能成功的话,用户的日常体验将会更好,并且可以防止低性能系统崩溃。

问候。

编辑并解决问题

的PHP

我已经对PHP脚本进行了基准测试:1,000条记录提取和JSON生成的执行时间少于0.25秒,并且少于100ko长...因此在服务器端没有特别的问题。

我在服务器端进行了一些优化,以通过使用一些PHP内缓存来限制数据库和LDAP请求,只是为了限制应用程序的冗余和网络流量。

Java脚本

然后,我修改了模板用法:现在,我循环了1000条JSON记录,评估模板并将结果附加到原始HTML字符串中,然后将LI元素附加到UL。

此时,该列表在视觉上已为用户准备好了。

稍后,我再次循环处理JSON数据以绑定事件处理程序(单击复选框,单击周围的DIV,然后将DIV悬停在指针上...),但该列表尚未显示!

刷新列表时的延迟是可见的,但非常短,不到1.5秒...也许我会添加一些沙漏图标,以防止用户在等待列表时重复单击。

所以计时测试现在成功了
在常规使用中,列表不会超过150个人,因此,如果1000可以的话...对我来说也可以:-)

非常感谢(@all)的帮助。

最佳答案

我不知道您到底想要什么,但是您在此json列表中使用分页吗?列出分页为10、20、30行等的值,并给ajax服务器调用以获取下一批分页的行。

关于javascript - JSON性能问题产生大量HTML列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531605/

相关文章:

javascript - 如何使用 JavaScript 输出数组中出现的次数

javascript - concat()、 "="和 "+="之间有区别吗

iphone - MKMapKit 实际最大 MKPolylines 数

css - 使用 Sencha Architect 提高 ST2.3 应用程序的性能

javascript - 为什么这个向后循环比向前循环慢得多?

C# 将参数命名为替换为参数值的字符串

javascript - 我必须绕过 ngModelController.$parsers 来存储值

javascript - Node js ajax 上缺少 Google 翻译键

javascript - 如何将 .html() 中的 javascript 变量传递给 php

javascript - ExtJS 的代码结构