我正在构建一种在服务器端使用 PHP 和 jQuery 以及在 javascript 中自定义 MVC 的项目管理工具。
我有一个弹出窗口来帮助用户在项目中添加人员。在它弹出的地方,用户必须选择一个组(比如说一个学生组),然后他可以选择配置文件以将它们添加到当前项目中。
我已经对 70-120 人的小组进行了测试,它可以工作,但有一点延迟。
但是当我测试一大群 1,000 人时,刷新时间太长,以至于 Chrome 会问我是要停止脚本还是等待更多时间……这对 iser 体验不好!!!
数据以 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 数据上循环 1,000 次,javascript 字符串将通配符 {{example-data-name}} 替换为其示例数据值,然后将其插入 DOM( jQuery)然后我绑定事件侦听器(jQuery 也是)...丑陋的代码,我同意,但是自制的,没有办法也没有时间使用 BackBone 或 Knockout 重构它...
文档片段?嗯...需要进一步挖掘!
@ajax81:页面加载时缓存的静态 JSON ??? 为什么不...也许是修改现有工作和努力的最简单方法!
@Alberto:我记住的有用提示。正如我上面评论的,我今天下午开始测试
我的感觉是 PHP 正确地完成了它的工作(关于数据大小和生成速度),但是 m 自定义模板方法不能有效地处理整个数据!
无需对数据进行分页,因为用户通常会在小 (50) 到中 (120) 记录列表中滚动。1000 是压力测试。它只发生在夏季(节假日),但如果我能成功,用户的日常体验会更好,并且不会在低性能系统上崩溃。
问候。
编辑并解决问题
PHP
我已经对 thz PHP 脚本进行了基准测试:1,000 条记录提取和 JSON 生成不到 0.25 秒的执行时间和不到 100ko 长......所以服务器端没有特别的问题。
我在服务器端进行了一些优化,通过使用一些 PHP 内缓存来限制数据库和 LDAP 请求,只是为了限制来自我的应用程序的冗余和网络流量。
Javascript
然后我修改了模板用法:现在我循环 1,000 条 JSON 记录,评估模板并将结果附加到原始 HTML 字符串中,然后将 LI 元素附加到 UL。
此时,此列表已为用户直观地准备好。
后来我再次循环 JSON 数据以绑定事件处理程序(单击复选框,单击周围的 DIV,并用指针悬停该 DIV...),但列表尚未显示!
刷新列表的延迟是可见的,但非常短暂,不到 1.5 秒......也许我会添加一些沙漏图标以防止用户在等待列表时重复点击。
所以计时测试现在成功 在常规使用中,列表不会超过 150 人,所以如果可以容纳 1,000 人...对我来说没问题 :-)
非常感谢(@all)的帮助。