WordPress后台登陆慢的原因分析和解决

记得上一篇文章的时候,我对于网站慢,特别是wordpress后台慢的事情十分的不爽。

单就我自己而言,快慢是无所谓的,后台慢,那就用Google的浏览器,真的不行就离线发布。但自己又是个脸皮比较薄的人,在QQ群里张贴了自己的地址之后,不少朋友都说没法注册用户,白屏。听到这个结果是一件十分尴尬的事情,我宁愿听到某某人捣乱而沾沾自喜的炫耀管理员密码,也不愿是一副苦瓜脸给我看。

晚上的时候,在一个好友的帮助下,进行了日本的连线测试,结果出乎意外的顺利。之后,我又找了山东、天津的朋友做测试,虽然不是秒开,但绝对没有到无法使用的地步。

不过,浙江的用户就没有那么幸运了,温州的、杭州的、绍兴的,基本都卡在注册页面上了。这也难怪我会一度觉得空间是否有问题。

抱怨结束,遇到问题总是要面对和克服的。

分析原因:

从数据的下载分析上看,前台卡壳的都处在2kb以下的png,gif,css文件上,而一些较大的文件反而十分的流畅。当时我的分析就是,网络存在严重丢包。

由于首页是静态化的,同时设置了1年的缓存,所以只要不清空缓存,1年内是不用再次读取js和css这些东西的,这也是不少之前打开过我网站的朋友说首页秒开的原因。因此,对于瞬间的网络测试,不具备参考性。

由于基本上都卡壳在注册页面,也就是/wp-damin/index.php上。所以,在出现白屏的时候,对于index.php进行了单独的下载分析。

通过分析,耗时最长的文件是load-scripts.php这个文件,基本上卡壳的原因就是它了。

昨天为了测试,将WP重新下载了一次,所以代码都没有动过,也没有上传任何插件。这样就排除了兼容性和设置的问题。接下来就要分析load-scripts.php的内容了。

load-scripts.php分为几块内容,初始化一些信息,同时调用下面的两个文件,另外还承担gzip的工作(好像是给wp-cache用的)

1
2
require(ABSPATH . WPINC . '/script-loader.php');
require(ABSPATH . WPINC . '/version.php');

version.php从名字上看和遇到的问题关系不大,忽略

找到script-loader.php,打开后,发现内容很长。

找到下面这段

1
2
3
4
5
6
7
8
9
10
/**
* Setup WordPress scripts to load by default for Administration Panels.
*
* Localizes a few of the scripts.
* $scripts->add_data( 'script-handle', 'group', 1 ); queues the script for the footer
*
* @since 2.6.0
*
* @param object $scripts WP_Scripts object.
*/

下方是密密麻麻的js调用语句,与这个类似的还有css的段落等等。总的来说,他的工作就是将后台所有的脚本和样式一口气载入。但因为开发的习惯问题,团队开发一般都会习惯将功能模块化,然后在细分到文件,一个后台初略的数了一下,算上图片大约要载入和执行166个文件才能显示。这也难怪很多人说wp后台卡,cpu高了。

好了,不必继续往下看了,结果很明确——大量的js拖慢了处理速度,同时由于网络丢包严重,js等小文件在传输时经常会传输失败,所以使得出现php在执行时无法连续,由于wp的js都是一环扣一环的,少了前面的,后面的也别想动,所以只能干等要不就是死循环(假死)。

这也解释了为什么google浏览器开后台特别快的原因,因为google浏览器的特色就是快速运行js。

解决方法:

既然问题出在js和网络波动,那么最简单的方法就是离线操作。

目前可以推广用的就是开启google的Gears。

同时,在尽可能的情况下,修改script-loader.php 精简与合并js(减少IO请求)。

当然,目前在线版本,为了提高速度,我将wp和插件内所有的php,js,css,html的注释与空格都进行清理;删除所有的语言文件(因为我的后台是英文的,用不到语言包);对于后台的css进行了合并与语句精简;后台强制开gzip;对于一些PHP主题里没有必要的if 语句进行清理和改写。

从目前看,这样做之后,似乎比以前快了3-4秒。

但并不推荐人人都这样做,因为如果需要进行代码修改的话,你面对黏在一起的代码可能会崩溃。我的做法是,本地做一个开发镜像,保留所有的原稿和修改稿,这样可以随意更改和本地化。

Related posts

《WordPress后台登陆慢的原因分析和解决》有10个想法

    1. 空行和注释会增大体积,但这个可以用gzip解决。影响速度的原因在与php和其他的解释引擎一样,都是读取文本的,所以读取注释的时间也会算在里面,积累起来也有0.5秒左右的偏差

  1. 后台强制开gzip
    这个没有必要,你没发现输出的CSS和页面等,其实已经默认是压缩过了的吗?你这样等于进行了二次压缩了,只要是DA控制面板的服务器,默认就对text类型的文件进行了压缩输出。

    1. 呵呵,有道理。这个我也发现了,似乎并没有提升速度。
      后台GZIP已经去掉了。
      CSS似乎没有压缩过,不过我找到了更好的解决方案——重写。css和js有不少语法是可以合并的,这几天我已经把后台重写后基本上秒开。

      谢谢您的指点~~之前还不知道DA是默认压缩的~~呵呵~

  2. @peter:

    是指php的修改么?

    你可以用zend进行加密压缩,目的并不是加密,而是通过压缩加快载入速度。

    不过,前期要询问一下你的服务商是否支持zend。

    zend工具你可以通过www.zend.com网站上去下载。

发表评论