如何加快网页加载?主要问题是排队时间

时间:2011-06-26 22:47:03

标签: drupal optimization web

我一直在处理基于drupal的个人页面。 我注意到经常需要6​​-10秒才能加载。

在研究了一些性能测试后,特别是来自site-perf.com, 我注意到加载时间是80%的队列时间。 enter image description here

似乎lightbox2和我的主题贡献了大约2/3的队列时间。

有关加快这项工作的建议吗?

3 个答案:

答案 0 :(得分:2)

当您将javascripts添加到页面(例如灯箱或任何其他插件)时,请确保通过将其添加到页面底部而不是将它们添加到页面来推迟解析。

浏览器将在渲染网页之前解析头部中的任何内容,因此请采取不需要的任何内容,例如灯箱包含或其他自定义脚本,包含或写入头部并在之前包含它们关闭身体标签。

我还注意到包含了8个js文件(以及大量的CSS文件),你可以通过将所有这些javascripts的代码放入一个单独的js文件(以及所有CSS到一个文件中)来缩短渲染时间并且仅包括那个。

注意,请确保将CSS保留在页面的顶部,因为必须正确呈现网页。

答案 1 :(得分:1)

引用上述http://site-perf.com/网站:

  

请求正在队列中等待

     

通常,浏览器不会开始   尽快处理http请求   入队,阻止Web服务器   超载。每个主机限制   同时连接和总数   所有连接的限制。这些限制   从浏览器到浏览器各不相同   今天是8-10的常见值   每个主机的并行请求数和32-128   总

     

提示:如果您看到很多请求   把大部分时间花在浏览器上   队列,你可以考虑增加   将为这些服务的主机数量   要求。你甚至可以创建域名   指向相同IP的别名   从同一目录提供,   因为浏览器只在域上查找   名称,而不是其申请时的IP   连接限制。但请记住,那   每个额外的域都会添加   相应的解决和连接   延迟,所以3-6个这样的别名是相当的   够了。

您可以尝试使用并行模块 - http://drupal.org/project/parallel - 来查看是否会为您加速。或者,如果你想要更多,并且有点冒险 - CDN - http://drupal.org/project/cdn

我假设您已经聚合了所有CSS / JS?是否启用了缓存?

答案 2 :(得分:1)

请记住在根目录中的.htaccess文件中缓存和压缩文件。如果没有,请创建一个,然后添加此代码段:

#GZIP ----------------------------
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
<ifModule mod_gzip.c>
  mod_gzip_on Yes
  mod_gzip_dechunk Yes
  mod_gzip_item_include file \.(html?|txt|css|js)$
  mod_gzip_item_include handler ^cgi-script$
  mod_gzip_item_include mime ^text/.*
  mod_gzip_item_include mime ^application/x-javascript.*
  mod_gzip_item_exclude mime ^image/.*
  mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
<ifmodule mod_php4.c>
php_value zlib.output_compression 16386
</ifmodule>

#CACHE ----------------------------
<ifModule mod_headers.c>
    # MONTH
    <FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    # WEEK
    <FilesMatch "\.(js|css|pdf|txt|mp4|m4v|ogv|webm|ogg)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    # DAY
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    # NEVER CACHE
    <FilesMatch "\.(pl|php|cgi|spl)$">
        Header set Cache-Control "max-age=0"
    </FilesMatch>
</ifModule>

一旦你进行缓存和gzipping,尝试组合任何非并行加载的文件。如果在开始下载之前找到等待另一个文件加载的文件,那么如果可能的话,将两者合并为一个文件。