网站提速之WordPress篇

封神陵里,句芒对刚拿到射日弓的云天河说“今日始,后羿射日弓尊你为主,力量挥放多寡,决于主人!”wordpress也一样,跑不跑得快,决于主人。今天从框架层来聊聊wordpress博客的提速优化。

Nginx的优化

如今有很多HTTP server软件可供选择,每一款都有其优缺点,目前最为流行的两款当数Nginx和Apache了。如果说Apache是阿帕奇的话,Nginx就是su37了(当然不是电影绝密飞行里面被无人机EDI秒杀的su37),阿帕奇的机动性能跟su37不在同一个次元,Apache的性能跟Nginx也有一定差距。所以今天我们选择Nginx做为HTTP服务器。Nginx对网页速度影响较大的就三个相关配置——http/2、Gzip、Keep-alive。

nginx启用http/2

启用方法看这里

Gzip

Gzip对文本文件的加载速度有质的飞跃,甚至直接影响首屏速度,而且能节省至少40%的流量成本。

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;

系统CPU负载不重的话,gzip_comp_level的值可以设为6,一般设为4,值越大压缩效果越好,不过越占CPU。

Keep-alive

Keep-alive又叫HTTP持久链接,表示一条TCP/IP链接上承载着多个上下行请求。相对于传统的单链接模式(一次请求需要创建一条单独的BS链接的模式)来说,Keep-alive技术有着大幅度的性能提升。下面是Keep-alive技术的优点。
➤CPU和内存的负载会减轻,因为同一时刻打开的TCP链接数变少了,后续请求和响应无须打开新链接,可以继续基于这些TCP链接发送上下行数据。
➤当TCP链接建立后,请求的等待时间将会减少,TCP建立链接时的三次握手发生在用户侧与server之间。当握手成功时,一条TCP链接就被建立起来了。在Keep-alive模式下,握手环节是一次性的,即在链接建立时便会发生。链接建立后发生的数据传递不产生握手环节,这部分的开销就被省了下来,所以说可以有效的提升请求上下行数据的性能。
➤网络阻塞情况减轻。因为同一时刻只会有少数的链接保持着。

keepalive_timeout 100;

MySQL的优化

存储引擎的选择

存储引擎又称表类型是MySQL的核心部分,负责处理表的操作。MySQL提供了多个存储引擎,使用的最多的是MyISAM和InnoDB。MyISAM和InnoDB都有各自的优缺点,MySQL从5.5版本开始使用InnoDB作为默认存储引擎。这说明InnoDB比MyISAM要好吗?其实不然,术业有专攻而已。
我们先来看看MyISAM的优点:
➤MyISAM为速度而设计,和SELECT搭配起来使用更好。
➤如果表的数据偏向静态,即表中的数据不经常更新/删除,大多数仅仅是查询操作,那么使用MyISAM是最好的选择。
我们回过头来看看wordpress使用数据库的场景:主要是写博文给网友看,打开一篇博文对应数据库的查询操作。那么MyISAM简直就是为wordpress而生的啊,而InnoDB是为高可靠性和高写性能而设计的,跟wordpress博客关系不大。而且还有一点MyISAM备份数据库,恢复数据库、或者恢复单个数据表都非常方便,直接操作文件.MYD文件就行了。再有一点就是MyISAM因为功能少,所以轻量,所以比InnoDB节省系统资源。
修改默认存储引擎为MyISAM,在my.cnf里写入

default-storage-engine = MyISAM     #是设定默认的存储引擎
key_buffer_size = 256M    #MySQL5.7里面默认只有8M,太小
query_cache_type = 1    #开启查询缓存
query_cache_size = 256MB    #分配给查询缓存的内存大小
query_cache_limit = 2MB    #若查询缓存结果的体积大于2MB,将不会缓存。

上面的设定,可以通过下面的MySQL语句查看设定结果:

show variables like 'default_storage_engine%';
show variables like 'key_buffer_size%';
show variables like 'query_cache_%';

PHP的优化

PHP7较之于PHP5的性能提升可不止一星半点,所以先升级到7吧,安装方法看这里
OpCache对php性能的加成很大,但发现很多小白都是安装了OpCache却没有启用,他们以为在configure的时候加上了--enable-opcache就行了。复制下面的内容直接在终端里面执行。

cat >> /usr/local/php/etc/php.ini<<EOF
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/opcache.so"
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
EOF

都是PHP官方提供的获得高性能的建议值,值得注意的是zend_extension后面的路径最好写绝对路径,相对路径好像有问题。修改php.ini后得重启php-fpm才能生效。

以下是危险操作,小白勿试,大白请在备份数据库或者磁盘快照后尝试

InnoDB转到MyISAM

InnoDB 转到 MyISAM 方法一

用root登录数据库后,use切换到wordpress数据库,执行如下语句:

ALTER TABLE wp_commentmeta ENGINE=myisam;
ALTER TABLE wp_comments ENGINE=myisam;
ALTER TABLE wp_links ENGINE=myisam;
ALTER TABLE wp_options ENGINE=myisam;
ALTER TABLE wp_postmeta ENGINE=myisam;
ALTER TABLE wp_posts ENGINE=myisam;
ALTER TABLE wp_terms ENGINE=myisam;
ALTER TABLE wp_termmeta ENGINE=myisam;
ALTER TABLE wp_term_relationships ENGINE=myisam;
ALTER TABLE wp_term_taxonomy ENGINE=myisam;
ALTER TABLE wp_usermeta ENGINE=myisam;
ALTER TABLE wp_users ENGINE=myisam;

若你的MySQL版本高于5.7,会报错“invalid default value for”,因为5.7 里 MySQL 不允许时间戳的值为 0,就像这样子:

datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

,所以你想这样转的话,只能用5.6以下版本。

InnoDB 转到 MyISAM 方法二

MySQL官方有提供一个专门从InnoDB转到MyISAM的perl脚本,脚本下载地址。脚本里面有详细的使用指南。

InnoDB 转到 MyISAM 方法三

用mysqldump把整个wordpress库导出来,然后用Notepad++修改导出的wordpress.sql文件,把InnoDB全部替换为MyISAM,注意勾选上“匹配大小写”。此操作的原理是在修改建表语句,建表时指定数据库引擎为MyISAM。改好后再导入数据库。导入后用show table status from wordpress;确认修改情况。
我做了下对比,InnoDB的时候,数据库体积为23M,MyISAM的时候,数据库体积3M。给他256M的缓存,让数据库撒着欢地跑。

原创文章,转载请注明: 转载自笛声

本文链接地址: 网站提速之WordPress篇

28 条评论

  • 明月登楼 2017年12月10日 回复

    不错,赞一个先!

  • 姜辰 2017年12月10日 回复

    这波可以~

  • 狂放 2017年12月10日 回复

    最后,扔掉WordPress,带上typecho飞吧

  • 龙笑天 2017年12月11日 回复

    文章太高端,不敢随便整啊~~~

  • 小萝博客 2017年12月14日 回复

    向大佬学习

  • he 2017年12月15日 回复

    小型应用MyISAM完全够了,轻量,查询效率高。

    • dige 2017年12月16日 回复 作者

      但很多技术资料却一味的说InnoDB有多强,MyISAM已经是过去式。

  • 明月清风 2017年12月15日 回复

    那不能写一个关于zblog提速的呀

    • dige 2017年12月16日 回复 作者

      不好意思,Zblog没用过,不过本文的Nginx的优化、MySQL的优化、PHP的优化同样适用于Zblog.

  • 绿软库 2017年12月26日 回复

    不明觉厉,一下子明白群里问的两个格式区别

  • 米粒博客 2018年1月2日 回复

    反正用了评论邮件通知后,提交评论就慢得想撞墙

    • dige 2018年1月3日 回复 作者

      我这也有评论邮件通知啊,提交评论很快的。

  • 西枫里博客 2018年1月3日 回复

    很详细。回头我也写一篇我所理解的网页速度问题

    • dige 2018年1月7日 回复 作者

      坐等大作问世。

  • 水云间 2018年1月7日 回复

    你的博客速度确实很快,明显的感觉

  • 咖啡机水泵 2018年1月9日 回复

    请问,其他网站也可以这样来提速吗?

    • dige 2018年1月11日 回复 作者

      可以,文章写得很简单,以后写一篇详细的出来。

  • 菊部 2018年1月17日 回复

    感谢分享

  • 枫叶 2018年2月1日 回复

    谢谢分享

  • 张戈 2018年2月4日 回复

    MySQL后来的版本(具体版本没深究— —!),innodb引擎的性能已不输于MyISAM了,而且更安全。。。有空可以发挥一下你的钻研精神,分享给大家。

    • 张戈 2018年2月4日 回复

      属于==》输于

      Ps:发出去不能反悔重新编译呢。。

      • dige 2018年2月4日 回复 作者

        我帮你改了,网站做减法,能减的不能减的功能都减掉了,对了,那个推荐域名的邮件是我发的。。。

        • 张戈 2018年2月4日 回复

          原来是你发的,很有意思的,可惜贼贵,如果是公司那肯定毫不犹豫买了

  • 好推博客 2018年2月19日 回复

    狗年汪汪汪,好推博客祝博主新的一年家庭幸福,身体健康!每天开开心心

  • 电炖锅的那些事 2018年3月25日 回复

    没有一定的技术实力,还真不敢这样搞啊。
    不过会多来学习的。

  • 广州网站建设 2018年8月1日 回复

    学习学习

  • pythoner 2018年8月13日 回复

    非常有用,感谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注