说起WordPress优化来算是一个老生常谈的话题了,WordPress很慢,这是很多人都在说的,我记得此论调也就是这几年才流行开的,据说是因为一个台湾的WordPress大咖在自己博客上宣称“因为WordPress性能太差放弃使用”类似的言论后才流行开的,于是乎WordPress很慢就成了指责 WordPress 的有力理论依据了。
那么WordPress效率问题主要是出在哪里呢?
根据个人实用WordPress建站和维护的经验,很多性能的问题都是WordPress使用不当造成的,下面就说说有哪些使用不当是影响访问速度的。
1、外链引用
你博客网站内引用外链过多,有时候是访问慢的主要罪魁祸首(外链就是http前缀域名非博客主域名的链接),至于说为啥有这些外链?原因有很多,比如:文章内的外链图片、插件内的外链http请求、主题代码里的外链请求等等。特别是文章内的外链图片,因为并不单单只在载入文章的时候影响文章的载入,首页、分类页的缩略图裁剪也要调用外链图片来裁剪,只要是显示缩略图的地方外链图片都会被调用多次。插件和主题内的外链一般影响比较大的是 WordPress 后台载入速度,对前端影响主要就看插件或者主题作者的开发水平和思路了。
2、插件影响
其实插件对访问速度的影响有时候并不单单是表现在前端,而是服务器端或者说是数据库服务器端,有些插件会产生大量的数据库查询读取次数比如著名的 WordPress “安全卫士”插件 Wordfence Security 就会对数据库进行大量的操作,其它的还有很多类似的插件都有这样的问题,比如:SEO类插件等等。所以在决定使用一个插件的时候,最好是启用插件后看看数据库里是不是多出了非 WordPress 系统WP开头的“表”,如果有就尽量不要使用,或者使用完后就停用插件,需要使用的时候再开启。
3、类似图片的静态文件过多的影响
图片现在几乎是博客文章里不可缺少的了,图文并茂的文章可以受到用户和搜索引擎的青睐是大家都知道的,那么图片多了后依然会影响访问速度,因为这等于说变相的加重了主机服务器硬盘的读写操作,每一个访问都会有读写操作的请求诞生,加上相应的CSS/JS这类起到美化炫酷的代码对服务器其实也是个不小的压力。
4、数据库服务器瓶颈影响
大家不要忽略了数据库性能瓶颈带来的影响,特别是博客文章数量或者是插件数量多了以后,数据库要承受很大的压力的,插件对wp_options表、博客文章对wp_post表的查询量是惊人的,主机宕机就两个因素,一个是主机负载过高,一个是数据库服务器锁死。
今天主要介绍通过减少数据库查询次数来优化WordPress性能这块的解决方案。希望可以帮助到大家有效提升博客的速度。
首先,先分享给大家一段可以在网页源代码底部显示当前运行时 WordPress 数据库查询次数和内存使用情况的代码:
[hide_cv]//显示数据库查询次数、查询时间及内存占用的代码
functionperformance($visible=false){
$stat=sprintf('%d次查询用时%.3f秒,耗费了%.2fMB内存',
get_num_queries(),
timer_stop(0,3),
memory_get_peak_usage()/1024/1024
);
echo$visible?$stat:"";
}
add_action('wp_footer','performance',20);
[/hide_cv]
上面的代码,直接放到主题function.php里既可。不过,还是建议大家采用将自己添加的代码独立于主题function.php之外,以防止主题更新、更换后自己添加的代码丢失和失效。代码不会增加过多的主机负担,仅仅是利用了 WordPress 的扩展机制的一个小技巧而已,以实现我们自定义代码以“插件”的形式独立出来。
上述代码建议大家都加上,这样在博客任意页面的“源代码”里都可以看到当前的数据库查询次数和内存使用情况,便于大家在优化时有个对比。同时在使用一些“插件”的时候也可以用来观察“插件”的内存占用和数据库调用情况。
要减少 WordPress 数据库查询次数,我们首先在 WordPress 的wp-config.php里进行一些基本的配置,这样就可以减少一些几乎多余的、每次都需要查询数据库的次数,我尽量都配上了中文注释,具体配置如下:define('COOKIE_DOMAIN','');
//设置地址而不是服务器检查,这将减少服务器查询
define('WP_HOME','');
define('WP_SITEURL','');
//优化文章修改历史:Post-Revisioning
define('AUTOSAVE_INTERVAL',120);//修改WordPress编辑器自动保存时间间隔为120秒保存一次
define('WP_POST_REVISIONS',5);//仅保留保留5个最近修改,也可以减小此数字,但不能太低了
define('EMPTY_TRASH_DAYS',7);//7天后自动清空回收站,这个自己根据情况设定
define('CORE_UPGRADE_SKIP_NEW_BUNDLED',true);//更新时跳过wp-content目录,增加更新效率
//通过剔除对模板路径和样式表路径的数据库查询,这样可提高站点的性能。
define('TEMPLATEPATH','/wp-content/themes/begin');
define('STYLESHEETPATH','/wp-content/themes/begin');
关于上述代码第一行指定cookies域小知识,由于很多原因你需要给站点指定cookies域。比较常见的就是阻止子域名上请求静态内容的cookies不必要的传输。这种情况下,你就可以使用此定义告知WordPress只向非静态域发送cookies,这将会大大提高网站的性能。
如果你的主机支持指定PHP使用的内存,还可以根据主机配置情况加入下面任一行代码:define('WP_MEMORY_LIMIT','64M');
define('WP_MEMORY_LIMIT','96M');
define('WP_MEMORY_LIMIT','128M');
如过你没有使用缓存插件一类的可以开启WP自带的缓存(Cache)功能,并设置缓存时间,是非常必要的事情。define('WP_CACHE,true);//打开WordPress自带的缓存功能
define('ENABLE_CACHE',true);//缓存开关
define('CACHE_EXPIRATION_TIME',3600);//缓存时间间隔
注:3.0后版本要开始缓存在/wp-includes/default-constants.php中开启,切记哦!
对于WordPress比较熟的站长可能会发现自己的网站会经常请求向的服务器发送请求传送数据,虽然我相信,WordPress不会对我的小站有什么兴趣,不过这样一来wordpress的运行效率就降低了很多。所以为了避免这类外部请求的发送,我们可以通过设置wp-config.php来屏蔽此类外部请求的发送,在wp-config.php添加如下代码:define('WP_HTTP_BLOCK_EXTERNAL',true);//禁止WordPress程序发出对外请求
值得注意的是我们在加入以上代码后你的网站将无法对任何一个外部服务器发出请求,如果站长朋友们为了加速网站收录使用了ping功能,加上以上代码后ping功能将会失效。解决方法:我们可以设置对外请求白名单即可解决ping失效问题,代码如下:(以百度ping为例)define('WP_ACCESSIBLE_HOSTS','');//仅允许WordPress向发送请求
这里要特别强调的是,如果你的博客本身已经集成了类似“微博同步”、“新浪博客同步发布博文”、“微信机器人”等等一些功能的请一定要慎重使用这个“禁止WordPress程序发出对外请求”,一旦使用了,所有这些都会失效的,明月目前没有使用这个的,特此强调一下哈!
至此,通过 WordPress 的wp-config.php配置优化和减少数据库查询次数也就这些了,配置完后大家 可以用本文开头分享的代码在源代码里查看和对比一下是不是数据库查询次数和内存使用量有所改善。大家一定要根据自己的主机配置和 WordPress 配置灵活的设定上述这些开关哦,还有最重要的一点,所有对wp-config.php的操作需要在纯文本编辑器里完成,完成后保存时一定要设定此文档的编码为UTF8,要不上传覆盖后会造成 WordPress “500错误”的,还有就是要养成提前备份好wp-config.php文档的习惯,否则后果自负了!