WordPress网站上的高TTFB

时间:2015-02-02 16:54:55

标签: wordpress performance apache latency

我在使用wordpress网站时遇到问题,我获得了大约8秒的TTFB。

我的服务器是debian 7,带有apache,3go RAM,托管在gandi cloud IAAS

  • 如果我安装了一个缓存模块(如SuperCache),当一个页面在缓存中时一切正常,页面加载速度非常快

  • 但是对于新页面或禁用缓存模块,它的加载时间为8..9秒。

我的apache2.conf配置如下:

 <IfModule mpm_prefork_module>
     StartServers          1
     MinSpareServers       1
     MaxSpareServers       3
     MaxClients            10
     MaxRequestsPerChild   3000
 </IfModule>

<IfModule mpm_worker_module>
    StartServers          1
    MinSpareThreads       5
    MaxSpareThreads      15
    ThreadLimit          25
    ThreadsPerChild       5
    MaxClients           25
    MaxRequestsPerChild 200
</IfModule>

free-m请求说:

               total       used       free     shared    buffers     cached
 Mem:          2858       1772       1085          0        166       1152
 -/+ buffers/cache:        453       2404

网站的网址为https://www.super-taux.com

如果有人有了主意......非常感谢你。

2 个答案:

答案 0 :(得分:3)

这就是WordPress的本质。代码和页面生成通常是可怕的

您的TTFB不是问题。对于WordPress来说,这是非常好的。

  • 您的服务器未缓存任何静态内容
  • 未指定字符集
  • 未启用“保持活动”

您的服务器非常快,18,766,667字节/秒。并且使用gzip压缩,有效速度为104,249,275字节/秒。

  • 基页大小:71,932字节
  • 传输速度:18,766,667字节/秒
  • 压缩:5.6X
  • HTML空白:4.0%
  • Bytes Transmitted:12,949 Bytes
  • HTML传输速率:104,249,275字节/秒。

总页面加载时间是问题。

通常使用WP加载CSS和JS文件的顺序会延迟Start Render。如果您在webpagetest.org测试页面加载,并查看瀑布,您将看到加载页面和开始渲染的大量时间。

WebPagetest Waterfall Details

基页(第1行)加载时间为562毫秒,“开始渲染”为2.789秒。

注意第22行是.woff2字体文件,其开始偏移量为2.511秒。

然后开始渲染开始渲染。这一件事花费你超过2秒。

每次浏览器运行可以改变页面布局的资源(例如CSS和字体)时,浏览器都会重新启动渲染。同时,在最后一个CSS之前加载的每个JS文件都停止渲染,因为浏览器会解析JS。

如果SuperCache为您工作,那么您必须拥有静态网页。使用静态页面,您不必拥有WP动态生成页面。

如果您需要WP来设计您的页面,那么复制WP渲染的页面并将它们用作静态页面。

这可能需要您将链接从一个页面更改为另一个页面。

然后,您还可以更正<head>中资源的顺序,并将所有CSS和字体移到任何JS之上,并将相应的JS移动到页面底部。

运行Google PageSpeed Insights

PageSpeed Insights

点击链接以消除上层内容中的渲染阻止JavaScript和CSS

您需要修复服务器配置。最好将它添加到httpd.conf,但快速修复是创建一个包含以下内容的.htaccess文件:

AddCharset utf-8 .html .css .php .txt .js .svg
Header unset ETag
FileETag None
ExpiresActive On
ExpiresByType image/* A31536000
ExpiresByType text/* A2592030
ExpiresByType application/* A2592030
<FilesMatch "\.(js|xml|gz)$">
Header set Cache-Control "max-age=2592030, public"
Header append Vary: Accept-Encoding
</FilesMatch>
<ifModule mod_headers.c>
Header set Connection keep-Alive
</ifModule>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|svg|swf)(\.gz)?$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
<FilesMatch "\.(html|js|css|xml|gz)$">
Header set Cache-Control "max-age=86401, public"
Header append Vary: Accept-Encoding
</FilesMatch>

答案 1 :(得分:1)

您的网站有很长时间来启动渲染(当用户看到某些内容时)和整个页面。

1)你正在加载很多CSS,这会延迟渲染。其中大部分(193 KB GZipped!)看起来像Bootstrap和库以支持swipebox。你真的需要所有这些吗?例如:

  • 您可以将Bootstrap降低到您真正需要的子集(可能使用Less或Sass)吗?
  • 你在哪里使用swipebox?我在首页上看不到它。如果您正在使用添加它的WordPress插件,许多插件只需将其CSS和JS添加到每个页面,无论它们是否在该页面上使用。这意味着即使大多数人永远不会看到灯箱,每个人都会受到性能损失。有些方法可以禁用在不使用它们的页面上执行此操作的插件。

2)您正在加载大量Javascript文件(可能来自插件)。这些也延迟了渲染。如果你可以将它们限制在需要的页面或使它们异步,那么它们不会延迟渲染(但它们仍会使页面变慢)。

3)使用SSL / TLS会导致很多延迟。你真的需要为每一页吗?两个建议:

  • 仅在真正需要它的页面上使用SSL / TLS(用户将输入敏感信息)。
  • 如果您确实需要使用SSL / TLS,请将所有静态内容(CSS,JS,图像)移至CDN。这样,您就不会受到静态文件的SSL / TLS惩罚。

4)你使用了很多小图片。考虑使用精灵。这样,只会下载一些图像,从而节省了大量的HTTP连接(使用SSL / TLS时会额外受到惩罚)。