做为一个全面的 WordPress 性能优化教程,本文旨在帮助读者排查 WordPress 网站的性能问题,同时也提供网站前端优化加速的建议。javascript
若是你曾经遇到过 WordPress 管理界面加载缓慢、「MySQL 服务器崩溃」、网页一直没法加载等状况,或者你预计网站的流量将要大涨,相信本教程会对你有益。php
一般状况下,网站加载缓慢是因为网页规模过大引发的,并且如今的大多数网页,都包含许多图片、Flash、视频以及 JS 文件,这些元素都会给网络加载带宽形成压力,进而导页面打开缓慢、用户体验差的问题。css
若是你准备认真地解决这个问题,你须要安装部署 Firefox 浏览器,Firebug 扩展程序 、Yslow 插件以及 Browser Insight。html
开发时最好尽可能将页面大小保持在 100KB 最好是 50KB 之内,若是你的网页包含许多多媒体内容,那你最好学会使用 Yslow。Yslow 会对网站性能进行打分(分值为0到100),从js脚本、css、多媒体资源等多个方面,80分应该是网站的最低目标。前端
不过 Yslow 自己也有些局限性:java
1.最新版的火狐还有谷歌浏览器已经没法使用了mysql
2.其次 Yslow 主要是页面结构分析,可是如今界面主要靠 js 绘制例如 react 等react
3.并且 Yslow 自己主要关注的是 PC 端,但是如今是 mobile 时代web
给你们推荐一个与 Yslow 有关的文章:YSlow老矣尚能饭否,有兴趣的能够去看看,我的以为帮助比较大。ajax
Firebug 一直同 Firefox 链接在一块儿,造成了强大的网页开发工具,经过 Firebug 你能够编辑、调试和监控任何页面的 CSS、HTML 和 JavaScript,不过就像 Yslow 主要是负责 PC 端同样,Firebug 主要针对的是手机端的调试。
Browser Insight 这款工具比较好的地方在于,它支持多平台页面监控分析,不管是PC端、移动微信、移动浏览器、仍是安卓 webview 均可以兼容。其次,它的功能比较总体化,涉及:页面响应时间、脚本错误、资源加载时间耗时、ajax、DNS/TCP耗时、用户响应时间分布等多个维度,相比于上面两款工具,Browser Insight 算是一个比较全面的前端性能监控分析工具了。
给你们附上三篇以前读过的相关文章,有需求的话能够去看看:
Firebug,Debugger javascript调试利器 附下载地址
从 WordPress 2.6 开始,Post 版本开始引用追踪机制,例如,每次保存一篇 Post 时,数据库会写入一次修正。若是你不须要此功能,能够在 wp-config.php 文件中添加一行代码禁用之,wp-config.php 文件能够在 WordPress 主站的安装目录找到:
define('WP_POST_REVISIONS', false);
若是你启用了该功能,一段时间以后,数据库中会写入许多修正 post,这个也会致使数据加载缓慢等问题,若是你想删除它们,只要在插件中运行下面的查询语句(好比:利用前文提到过的 WP-DBManager)便可。
DELETE FROM wp_posts WHERE post_type = "revision";
该语句会删除数据库中的全部 「revision」 posts,使数据库查询更加快捷。
注意:使用时请必定仔细,若是你不知道本身在作什么,请确保先备份数据库。或寻求专业帮助。
插件每每是致使加载缓慢的重点嫌疑犯, WordPress 提供了丰富的插件,极可能就是由于一个资源分配不佳的插件致使了页面的加载问题。
例如,过去曾致使过加载缓慢的插件有:Popularity contest,aLinks 及 @Feed。
检查插件时,能够先禁用全部插件,检查网站重点部分的运行情况。若是没有问题,依次启用各个插件,直到发现致使问题的插件,不过这个方法很老实,可是至关耗费时间,并且每次出现问题都要这样排查一次。
上文说起的Browser Insight 把一个页面的加载分为了白屏时间、首屏时间、页面加载完成时间、资源加载完成时间,其中配合资源加载时间以及其刚刚上线的DNS耗时分析就能够较为清楚地定位插件的问题
缓存能够从事先准备好的存储区(缓存)检索数据,而无需在用到同一信息时从新生成之。所以,缓存能极大提高信息检索的速度,在多数现代应用中都普遍使用。
使用缓存的最简便方法,是使用缓存插件,固然了,若是你的博客存储在共享的主机上,这也是惟一的办法
最经常使用的缓存插件是 WP Super Cache,后起之秀 W3 Total Cache 也是一种强大的缓存插件,并且它天天都在更新,你们能够试试看。
MySQL 能够将查询结果保存在本身的缓存中。启用这一功能,需编辑 MySQL 配置文件(一般是在 /etc/my.cnf 路径下),在其中添加以下代码:
query_cache_type = 1 query_cache_limit = 1M query_cache_size = 16M
重启 MySQL 服务器后,就会建立大小为 16MB 的查询缓存(缓存大小取决于可用的 RAM 大小,在内存 4GB 的机器中,可以使用的缓存达250MB)。
检查 MySQL 运行是否正常,可运行如下查询:
SHOW STATUS LIKE 'Qcache%';
结果示例:
Qcache_free_blocks 718 Qcache_free_memory 13004008 Qcache_hits 780759 Qcache_inserts 56292 Qcache_lowmem_prunes 0 Qcache_not_cached 3711 Qcache_queries_in_cache 1715 Qcache_total_blocks 4344
若是你想进一步优化 MySQL ,你可使用的选项很是丰富。如下是个人 MySQL 配置文件,针对的是 4GB 内存的四核专用机。若是你使用开箱即用的机器,多半没法适用这样的配置,请仅做参考。
[mysqld] bulk_insert_buffer_size = 8M connect_timeout=10 interactive_timeout=50 join_buffer=1M key_buffer=250M max_allowed_packet=16M max_connect_errors=10 max_connections=100 max_heap_table_size = 32M myisam_sort_buffer_size=96M query_cache_limit = 4M query_cache_size = 250M query_cache_type = 1 query_prealloc_size = 65K query_alloc_block_size = 128K read_buffer_size=1M read_rnd_buffer_size=768K record_buffer=1M safe-show-database skip-innodb skip-locking skip-networking sort_buffer=1M table_cache=4096 thread_cache_size=1024 thread_concurrency=8 tmp_table_size = 32M wait_timeout=500 # for slow queries, comment when not used #log-slow-queries=/var/log/mysql-slow.log #long_query_time=1 #log-queries-not-using-indexes [mysqld_safe] nice = -5 open_files_limit = 8192 [mysqldump] quick max_allowed_packet = 16M [myisamchk] key_buffer = 64M sort_buffer = 64M read_buffer = 16M write_buffer = 16M
超级实用的 mysqlrepot 工具是 MySQL 调试的利器。Mysql tuner 是快速修复数据库的最佳选择。MySQL Tuning primer 与 MySQL Activity Report 也是值得一试的好工具。
Maatkit 则是有效管理 MySQL 的必备神器。
MySQL 慢查询日志是获取有问题的查询信息的有利工具,激活该日志你须要编辑 my.cof 文件:
log-slow-queries=/var/log/mysql-slow.log long_query_time=1 log-queries-not-using-indexes
这会建立一个查询日志,里面包含缓慢查询与缺乏索引的查询。你须要找出运行缓慢的查询,才能对其使用内部提供的慢日志过滤与解析工具。使用'EXPLAIN'能有效帮助你理解并优化复杂的查询语句。
使用更少的图片(或将全部图片用一张大图替代,再用 CSS 调整位置),更少的 JS,更少的 CSS 文件(一般意味着更少的插件),就能减小 HTTP 请求数量。
PHP speedy 插件能将全部的 JS 与 CSS 文件合为一个大文件,从而切实减小 HTTP 请求的数量。PHP Speedy 的惟一缺点是没法与其余插件 100% 兼容。
一样,你可使用 CSS Sprite generator 将全部图片整合为一张大图,再用 CSS background-position 进行展现。这也能极大地减小 HTTP 请求数量。
若是你有专属的服务器,能够将全部内容压缩后再传给浏览器。因为大多数 html 页面都容易压缩,这一招能大大下降加载时间。
在 .htaccess 中添加如下代码:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/x-httpd-php application/rss+xml application/atom_xml text/javascript
Expire (截止时间)头信息会告知浏览器内容缓存的保存时间。网站的大多数图片几乎不会改变,所以能够将它们保存在本地。
在 .htaccess 中添加如下代码(若是出现问题,请确保 mod_expires 已经在 Apache 中载入):
ExpiresActive on ExpiresDefault "access plus 30 days" Header unset ETag FileETag None
如下是另外一种设置方法:
Header unset Pragma FileETag None Header unset ETag # 1 YEAR Header set Cache-Control "public" Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" Header unset Last-Modified # 2 HOURS Header set Cache-Control "max-age=7200, must-revalidate" # CACHED FOREVER # MOD_REWRITE TO RENAME EVERY CHANGE Header set Cache-Control "public" Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" Header unset Last-Modified
使用 cacheability engine 检查缓存配置。
许多博客都使用 Gravatars(头像),也即靠在评论边上的小图片。然而,gravatars 对于网站优化有两大缺点:
咱们能够建立一个本地 gravatar 缓存,将全部网站须要的图片都存储在这儿。若是能将 gravatar 缓存保存在一个独立的自域中,就更好了。
我使用了 Zenpax.com 提供的插件,将全部 gravatars 头像本地化缓存。
本文主要从网站性能指标、优化缓存、MySQL 等方面给你们介绍了如何进行 WordPress 网站的性能优化,明天有时间的话再给你们介绍下从主题优化、图片压缩等角度如何来优化 WordPress 网站。
本文的原文做者为VLADIMIR PRELOVAC,由OneAPM产品运营编译整理。
原文连接:http://www.prelovac.com/vladimir/wordpress-optimization-guide/
Browser Insight 是一个基于真实用户的 Web 前端性能监控平台,可以帮你们定位网站性能瓶颈,网站加速效果可视化;支持浏览器、微信、App浏览 HTML 和 HTML5页面。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客