2012-03-04 239 views
0

我正在使用$.getJSON来拉动对象的库存(100个项目,不是一个大集合),但它的XHR呼叫需要8-10秒。

想知道是否有什么我失踪或我可以做什么来加快我的计划?

+2

找出哪个部分先慢;它是否发出初始请求,是服务器端生成,是将时间下载到客户端的时间,还是分析客户端数据的时间? – 2012-03-04 08:13:21

+1

请使用WebKit开发人员工具中的[时间轴](http://www.webkit.org/blog/1091/more-web-inspector-updates/#timeline_panel)/ Profiles面板等JavaScript分析工具。 – Gumbo 2012-03-04 08:24:13

+0

我猜初始请求$ .getJSON(blah) – 2012-03-04 08:37:46

回答

2

它涉及很多事情。两个主要的瓶颈,我认为这些是

  • 服务器脚本生成的JSON可能导致该问题或采取长期的过程的时间来产生输出。

  • 你有你的页面一样的效果或滑块上的脚本数量过多,使的getJSON,运行速度慢

在大多数的情况下,第一个是一个无声的杀手。为了测试你的脚本,对页面做一个getJSON请求,它只是显示JSON字符串,不做任何处理。东西非常轻便这样

{ "test" : "value" } 

在PHP

回声 '{ “测试”: “值”}';

并对此页面发出getJSON请求,并检查脚本是否运行得很快。如果速度很快,问题出在您的服务器脚本中。

+0

有没有办法通过查询一次并将其存储在本地对象中来访问JSON文件? – 2012-03-06 06:25:52

+0

@AbhishekKumar,使用会话作为'$ _SESSION ['backup']'是完美的方式,这 – Starx 2012-03-06 06:29:51

+0

你可以分享更多关于$ _SESSION ['备份']。抱歉,我是js – 2012-03-06 06:51:52

3

在请求的整个范围内有很多事情可能出错。

这里有几个值得注意的地方,你可以检查瓶颈,从请求到响应。

  • 您的浏览器/系统/硬件能够使用吗?

    由于此操作是JavaScript,IE6等较旧的浏览器,上网本等低功耗系统以及在特定时间运行太多应用程序的弱建立系统,可能会造成后果。

  • 浏览器是否立即执行任务?还是推迟了?

    繁忙的JavaScript是这里的罪魁祸首。 JavaScript是单线程的,太多的操作可能会让浏览器停滞不前,并可能延迟排队的任务运行。可以发生这种情况的场景的一个示例是,当您的页面包含过多的JavaScript插件,或者包含编码不良的代码时,其中一些甚至可能会使用同步操作。

  • 难道是PHP/JSP/[其他服务器端语言]?

    是的,它可能是。例如,PHP可能会按请求线程化,但其代码的操作是同步的。如果一行PHP执行时间过长,则这部分延迟。在该行完成之前,服务器将不会响应。

  • 您是否使用多个/嵌套的SQL查询?

    深入到服务器深处,多个和/或嵌套的SQL查询,特别是对于常用操作而言,可能并且会导致进一步的延迟。建议是将查询仅限于应该提取的内容,而不是整个记录。如果嵌套查询无法避免,请尝试使用其他方法检索该数据。

  • 未优化的函数调用

    这同样适用于这两种服务器端和客户端脚本。过度的操作也可能是造成延误的原因。确定过度冗余的代码并合并/缩短它们。例如,在JS中,可以使用三元操作完成简单的条件分配操作。

  • 循环太多?

    循环太多也是导致延迟的一个常见原因。 SQL中的一个错误是检索所有行并用PHP计数,而不是使用SQL中内置的COUNT()。这个错误是双重的,你从SQL返回太多的数据,然后你计算/循环PHP中太多的项目。

  • 你在拨号吗?

    带宽是必不可少的,因此大小很重要。所以,请将您的回报数据仅限于所需的数据。开发者更喜欢JSON的主要原因是与XML相比,它的尺寸更小,并且标记内容也更多。另外,您还可以使用gzip压缩来压缩您的返回数据。

+0

我不知道是否有一种方法来减少从$ .getJSON中读取的JSON文件的大小? – 2012-03-04 08:57:50

+0

据我所知,从PHP中,'json_encode()'将数据编码成JSON,它不是非常漂亮,因此已经很紧凑。为了补充说明,服务器可以使用GZIP进行压缩传输,也就是说,如果浏览器支持检索GZIPped内容。 – Joseph 2012-10-10 06:37:14