我正在使用$.getJSON
来提取对象的库存(100个项目,而不是大型集合),但是XHR调用需要8-10秒。
想了解我是否遗漏了某些东西或者我可以做些什么来加快我的计划?
答案 0 :(得分:3)
在整个请求期间,有很多事情可能出错。
以下是您可以检查瓶颈的一些值得注意的区域,从请求到响应。
您的浏览器/系统/硬件是否支持?
由于此操作是JavaScript,IE6等旧版浏览器,上网本等低功耗系统,甚至在特定时间运行过多应用程序的弱设置系统都可能会受到影响。
浏览器是否立即执行任务?还是被推迟了?
忙碌的JavaScript是罪魁祸首。 JavaScript是单线程的,过多的操作可能会使浏览器陷入困境,并可能导致排队的任务无法运行。可以实现此目的的场景示例是当您的页面包含太多JavaScript插件或包含编码不良的代码时,其中一些甚至可能使用同步操作。
可能是PHP / JSP / [其他一些服务器端语言]吗?
是的,可能。例如,PHP可能是每个请求的线程,但它的代码的操作是同步的。如果PHP行需要太长时间才能执行,那么这将构成该延迟的一部分。在该行完成之前,服务器将永远不会响应。
您是否使用多个/嵌套SQL查询?
深入了解服务器,多个和/或嵌套的SQL查询,特别是对于常用操作,可能并且将导致进一步的延迟。建议是将查询仅限于应该获取的内容,而不是整个记录。如果无法避免嵌套查询,请尝试使用其他方法检索该数据。
未经优化的函数调用
这适用于服务器端和客户端脚本。过度的操作也可能是延误的原因。确定过度冗余的代码并合并/缩短它们。例如,在JS中,可以使用三元运算完成简单的条件赋值操作。
循环过多?
过多循环也是造成延误的常见原因。 SQL中的一个错误是检索所有行并在PHP中对它们进行计数,而不是在SQL中使用内置的COUNT()
。错误是双重的,你从SQL返回太多数据,第二个是你在PHP中计算/循环太多项目。
您是拨号还是什么?
带宽是必不可少的,因此尺寸很重要。因此,仅将您的返回数据限制为所需的数据。开发人员更喜欢JSON的主要原因是它与XML相比尺寸较小以及标记内容。除此之外,您还可以使用gzip压缩来压缩返回数据。
答案 1 :(得分:2)
它涉及很多事情。我认为有两个主要瓶颈是这些
生成JSON的服务器脚本可能导致问题或需要很长的处理时间来生成输出。
您的页面上有太多脚本,如效果或滑块,getJSON运行缓慢
在大多数情况下,第一个是无声杀手。为了测试您的脚本,请向页面发出getJSON请求,该请求只显示JSON字符串,而不进行任何处理。像这样非常轻量级的东西
{ "test" : "value" }
在PHP中
echo'{“test”:“value”}';
并向此页面发出getJSON
请求,并检查脚本是否正在快速运行。如果速度很快,则问题出在您的服务器脚本中。