大家好我正在测试我的应用程序。使用萤火虫我发现我的应用程序速度非常慢,需要加快速度。
我有一个超过700KB的巨大丛集javascript文件,其中包括我所有的js库,但是怪异的部分是代码本身需要20到40秒才能运行。现在的问题是我的代码基于zend框架并从邮件文件夹中检索电子邮件 - 但这太慢了。我怎样才能加快速度 - 如何判断代码的哪一部分正在收费呢?
========================
javascript是iissue的一部分,但与此同时另一个问题是我正在谈论的页面特别是通过电子邮件收件箱阅读。它是webmail接口的前端,有数据库调用,但时间似乎可以忽略不计。看看我使用microtime制作的以下信息来计算获取消息和代码片段的时间。
我花了一些时间来运行每个代码片段并在报告中附加一个标签,这就是结果 - 第一个数字是以微秒为单位的时间,而对于该代码片段的标签数字是什么花了很长时间。我应该关注哪个片段。具有重复标签的那些是如此cos它们在循环中运行 - 它是一个电子邮件客户端,并且每个消息都作为循环被检索。
[Log Entry 2010-07-10T10:49:44+00:00] 0.000446:::::01
[Log Entry 2010-07-10T10:49:45+00:00] -0.100127:::::02
[Log Entry 2010-07-10T10:49:46+00:00] 0.191738:::::get message
[Log Entry 2010-07-10T10:49:46+00:00] 2.0E-5:::::get headers
[Log Entry 2010-07-10T10:49:46+00:00] 0.000776:::::contacts check
[Log Entry 2010-07-10T10:49:46+00:00] 0.174134:::::non multipart
[Log Entry 2010-07-10T10:49:47+00:00] -0.842978:::::get message
[Log Entry 2010-07-10T10:49:47+00:00] 1.2E-5:::::get headers
[Log Entry 2010-07-10T10:49:47+00:00] 0.000834:::::contacts check
[Log Entry 2010-07-10T10:49:47+00:00] 0.179016:::::non multipart
[Log Entry 2010-07-10T10:49:48+00:00] -0.851685:::::get message
[Log Entry 2010-07-10T10:49:48+00:00] 1.8E-5:::::get headers
[Log Entry 2010-07-10T10:49:48+00:00] 0.001334:::::contacts check
[Log Entry 2010-07-10T10:49:49+00:00] -0.587962:::::html part message
[Log Entry 2010-07-10T10:49:49+00:00] 0.138799:::::get message
[Log Entry 2010-07-10T10:49:49+00:00] 1.9E-5:::::get headers
[Log Entry 2010-07-10T10:49:49+00:00] 0.002155:::::contacts check
[Log Entry 2010-07-10T10:49:49+00:00] 0.181675:::::non multipart
[Log Entry 2010-07-10T10:49:50+00:00] -0.856142:::::get message
[Log Entry 2010-07-10T10:49:50+00:00] 1.6E-5:::::get headers
[Log Entry 2010-07-10T10:49:50+00:00] 0.000803:::::contacts check
[Log Entry 2010-07-10T10:49:50+00:00] 0.178046:::::non multipart
[Log Entry 2010-07-10T10:49:50+00:00] 0.141544:::::get message
[Log Entry 2010-07-10T10:49:50+00:00] 1.8E-5:::::get headers
[Log Entry 2010-07-10T10:49:51+00:00] 0.001167:::::contacts check
[Log Entry 2010-07-10T10:49:52+00:00] -0.188653:::::html part message
[Log Entry 2010-07-10T10:49:52+00:00] 0.148198:::::get message
[Log Entry 2010-07-10T10:49:52+00:00] 2.0E-5:::::get headers
[Log Entry 2010-07-10T10:49:53+00:00] 0.00284:::::contacts check
[Log Entry 2010-07-10T10:49:53+00:00] 0.336415:::::html part message
[Log Entry 2010-07-10T10:49:53+00:00] 0.140683:::::get message
[Log Entry 2010-07-10T10:49:53+00:00] 2.0E-5:::::get headers
[Log Entry 2010-07-10T10:49:54+00:00] 0.003539:::::contacts check
[Log Entry 2010-07-10T10:49:54+00:00] 0.311735:::::html part message
[Log Entry 2010-07-10T10:49:54+00:00] 0.143097:::::get message
[Log Entry 2010-07-10T10:49:54+00:00] 1.9E-5:::::get headers
[Log Entry 2010-07-10T10:49:55+00:00] 0.001392:::::contacts check
[Log Entry 2010-07-10T10:49:55+00:00] 0.313101:::::html part message
[Log Entry 2010-07-10T10:49:55+00:00] 0.146926:::::get message
[Log Entry 2010-07-10T10:49:55+00:00] 1.7E-5:::::get headers
[Log Entry 2010-07-10T10:49:55+00:00] 0.000743:::::contacts check
[Log Entry 2010-07-10T10:49:56+00:00] 0.173081:::::non multipart
答案 0 :(得分:1)
要进行性能分析,您可以尝试What is the best way to profile javascript execution?或https://developer.mozilla.org/en/Venkman(具体请参阅here)。
除非JS正在处理大量数据,否则我猜测问题在于将大量API调用回到Web服务器(AJAX等)。这应该很容易解决,比如,如果您当前拥有并返回单个信息单元,那么创建获取和返回列表的API函数。 getText(1,2,5,6)
与getText(1),getText(2),...
或者服务器本身的代码坏了,所以服务器需要20多秒才能响应一些需要响应的JS查询才能真正构建你的页面......
答案 1 :(得分:0)
您可以将XDebug与{K,Win} Cachegrind一起使用来进行一些分析,并找到代码的缓慢部分。 KCachegrind在linux上运行,并且优于Wincachegrind。
答案 2 :(得分:0)
通常,SQL查询编写不正确或在循环下迭代会导致网站速度变慢。一个700KB的javascript文件不会让它慢得那么慢。尝试找出哪些查询执行时间太长或者如果在循环中运行某些查询,尝试找到一些其他方法来获取没有循环的相同结果。
答案 3 :(得分:0)
很难说问题可能来自哪里,但如果加载本身你可以为Firebug安装YSlow。
这会在您加载网站时对其进行分析。然后,它将对其进行评级并确定问题区域 - 建议改进(通常容易获胜)以帮助改善情况。这有助于识别实际网页资源的任何问题。
答案 4 :(得分:0)
要检测与提供给浏览器的内容相关的一些问题,请在Mozilla Firefox下安装YSlow插件。您将获得有关各种维度的一些成绩:http请求计数,压缩,动态CSS等。