61阅读

网站打开速度优化-优化WordPress的网站开发人员指南

发布时间:2017-08-08 所属栏目:dns域名解析过程

一 : 优化WordPress的网站开发人员指南

如果你准备做一个网站,你的版面,栏目都考虑好了,那么你应该考虑到网站的性能问题,这不仅是给用户良好的体验感,在seo的范围内,更是必不可少的一部分。当然市面上性能不错的源码非常多,像dedecms、帝国cms、WordPress等等。今天专职讲下WordPress的优化及运行等相关问题。

WordPress的好是有目可睹的,它给用户提供出色的用户体验,并给优化人员确保网站的性能及网站的优化可再扩展化的功能。让我们来看看如何优化WordPress网站,让网站能提高更优秀的性能。

MySQL

查询缓存是你最好证明MySQL是一个可扩展的关系数据存储,没有任何理由WordPress为什么不能在未来几年内继续努力。

你会想,为您的网站以确保启用查询缓存和执行。这将确保MySQL正在做尽可能少的工作,更重要的事情比冗余查询腾出资源。

您还需要确保您使用工具像mysqltuner或相似的,以确保你的表性能(缓冲等)是最佳的。交换引擎InnoDB的,现在有支持全文搜索,推荐用于高流量的网站。你不会危及本地WordPress的搜索质量。我建议Percona的分布,尤其是如果MySQL的功能,如分片,读副本等,允许其规模随着需求的增长。

MySQL的数据存储区是不是一个瓶颈,需要分析你的主题和插件生成的查询优化(减少响应时间),减少其数量,通过重构代码或不同的缓存技术。

请记住,默认情况下,使用WordPress的瞬态问题缓存像一个耗时的API请求(API请求变得昂贵,因为它们阻止执行,同时等待处理响应从第三方)移动,并把它放到数据库(wp_options表)。这也许不是一件坏事,如果这个数据没有被序列化并存储在同一表中的其他各种设置在WordPress。

PHP

PHP是缓慢的。这不是WordPress的故障,也不是任何人的过错,技术不断向前发展。我们该怎么办呢?使用NewRelic的跟踪优化可以得到一个经验:

• 较大的内存使用情况,更大的执行时间。

• 利用PHP的自动加载,以减少内存使用。

使用记忆和尽可能避免环路,以减少执行时间和内存使用情况。

避免打开比必要更多的文件,磁盘和内存的使用,以减少呼叫。

使用需要,而不是include_once和require_once。

操作码缓存

APC是一个自由,开放和强大的框架用于缓存和优化PHP中间代码。这意味着,当添加到您的Web服务器,可以实现显着的速度提升(尤其是具有良好的代码)。APC保持解释(可执行文件)版本的代码在内存中,因此,它的请求没有被重新解释。

APC还提供对象存储,使存储在内存中创建的对象隔壁脚本需要他们。这个级别的缓存,唯一的缺点就是它的地方你有各自的应用服务器。这意味着每台服务器上重建对象缓存(浪费CPU时间),而且更重要的是,清除的对象是棘手的。

数据库和架构优化后,可以进行微调你的WordPress安装。

这里有一些任务可以完成,以确保您以峰值性能运行:

插件

这可能会明显被发现的,但它是往往被忽视的东西。请确保您的WordPress插件是最新的。开发人员总是在寻找方法来提高他们的插件,这些方法之一是他们与每一个版本的代码以提高性能。这是一个非常简单的方式,以确保你的插件始终运行最新版本的。

应禁用未使用的插件,让出他们不使用宝贵的资源,加载了不必要的代码。这不仅节省空间。在服务器上,这些没有使用的插件会使你的网站速度很慢,有必要应该更新到最新版本、下载补丁或不再不再支持插件代码以保护漏洞不被利用。

使用WordPress的缓存

最有名的WordPress的缓存工具是W3的总缓存,但也有其他。这些缓存插件加快您的网站,让更多的用户重新访问您的网站从而保护到访问者用户利益。

浏览器缓存

浏览器高速缓存可以帮助减少服务器负载限制每页的请求数量。例如,通过设置正确的文件头不改变的文件(静态文件,如图片,CSS,Java等)的浏览器然后将这些文件缓存在用户的计算机上。这种技术可以让浏览器进行检查,看文件是否已经改变,而不是简单地要求他们。其结果是,您的Web服务器可以更多的出现304回应,而不是200响应,要求要发送的文件。

看看到HTTP缓存控制和Expires头,以及实体标签获取更多信息。

CDN

使用CDN,可以让你存储的图像和文字,让访问者访问过后的内容从页保存在第三方群集服务器上,从而加快网页下载时间。

小工具

可疑的所有部件(或侧边栏内容),将强制用户轮流查询DNS服务器。例如用第三方工具将连结到各种各样的网站,这可能会延迟加载,直到信息传递给用户,这明显让你的信息在网络转了好几手,让用户直接感受到你网站的速度真的慢了。

此外,如果你的主题是使用自定义部件绘制最近的评论文章。如果这是不正确处理,它会查询数据库,每加一次查询将大大增加服务器的负担。

如果您使用的是大量的Widgets,是一个好主意,将使用WP的Widget缓存插件(除了标准缓存),以减少其输出的处理时间。

通过将尽可能多的这些变化,并尽可能微调的东西可以大大增加你的WordPress加载时间,让您的访客将在网站上有更好的体验。本文由YiMuu@宇晖提供,网址http://www.yimuu.com/ 欢迎转载或与我交流。

注:相关网站建设技巧阅读请移步到建站教程频道。

二 : 优化Apache,让网站速度更快

Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性能的选择。

MPM(Multi -Processing Modules,多道处理模块)是Apache2.0中影响性能的最核心特性。

毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要好处:

  ◆ Apache可以更简洁、有效地支持多种操作系统;

  ◆ 服务器可以按站点的特殊需要进行自定制。

在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中。

下面以Linux RedHat AS3为平台,演示一下在Apache 2.0中如何指定MPM。

# wget
http://archive.apache.org/dist/httpd/httpd-2.0.52.tar.bz2
# tar jxvf httpd-2.0.52.tar.bz2
# cd httpd-2.0.52
# ./configure --help|grep mpm

显示如下:

--with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}

上述操作用来选择要使用的进程模型,即哪种MPM模块。Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM, perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM。

prefork的工作原理
  如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
   prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

worker的工作原理
   相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。
   worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

# 下面我以worker模式进行编译安装
# ./configure --prefix=/usr/local/apache --with-mpm=worker --enable-so(让它支持DSO功能,这样以后可以动态加载模块)
# make
# make install
# cd /usr/local/apache/conf
# vi httpd.conf


<IfModule worker.c> StartServers 2 MaxClients 150 ServerLimit 25 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 25 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)

需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段:
<IfModule worker.c> StartServers 3 MaxClients 2000 ServerLimit 25 MinSpareThreads 50 MaxSpareThreads 200 ThreadLimit 200 ThreadsPerChild 100 MaxRequestsPerChild 0 </IfModule>
# 保存退出。
# /usr/local/apache/bin/apachectl start
# 可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。

二、限制Apache并发连接数
我们知道当网站以http方式提供软件下载时,若是每个用户都开启多个线程并没有带宽的限制,将很快达到http的最大连接数或者造成网络阻塞,使得网站的许多正常服务都无法运行。下面我们添加mod_limitipconn模块,来控制http的并发连接数。

# wget <IfModule mod_limitipconn.c> <Location />   #所限制的目录所在,此处表示主机的根目录 MaxConnPerIP 2  #所限制的每个IP并发连接数为2个 </Location> </IfModule>
# 保存退出。
# /usr/local/apache/bin/apachectl start
# 下面我们用蚂蚁或快车测试一下,如图1:

如出现上述图所示,则表明配置成功。

三、防止文件被盗链
我们刚才已经限制了IP并发数,但如果对方把链接盗链到别的页面,我们刚才做的就毫无意义了,因为他完全可以通过蚂蚁或快车进行下载。所以就这种情况,我们要引用mod_rewrite.so模块。这样,当他盗链了文件,通过mod_rewrite.so模块把页面引到了一个事先我们制定好的错误页面里,这样就防止了盗链。
# /usr/local/apache/bin/apxs -c -i -a /opt/httpd-2.0.52/modules/mappers/mod_rewrite.c
# 编译好后会自动把mod_rewrite.so拷贝到/usr/local/apache/modules下,并修改你的httpd.conf文件。
# vi /usr/local/apache/conf/httpd.conf
RewriteEngine onRewriteCond %{HTTP_REFERER} !^http://www.squall.cn/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://www.squall.cn$ [NC]RewriteCond %{HTTP_REFERER} !^http://squall.cn/.*$ [NC]RewriteCond %{HTTP_REFERER} !^http://squall.cn$ [NC]RewriteRule .*.(jpg|gif|png|bmp|tar|gz|rar|zip|exe)$ [R,NC]
# 我们打开浏览器测试一下
http://dominia.org/djao/limit/mod_limitipconn-0.22.tar.gz
# tar zxvf mod_limitipconn-0.22.tar.gz
# cd mod_limitipconn-0.22
# /usr/local/apache/bin/ apxs -c -i -a mod_limitipconn.c
# 编译好后会自动把mod_rewrite.so拷贝到/usr/local/apache/modules下,并修改你的httpd.conf文件。
# vi /usr/local/apache/conf/httpd.conf
# 在最后一行加入

三 : 优化DNS解析和拆分域名 让网站打开速度更快技巧

其他不再赘述,发挥二的性格,我们直奔主题。

用户打开网站的整个流程中,DNS解析时第一环,当用户输入域名并敲回车后,windows系统调用DNS client,寻找到用户配置或者自动分配的DNS IP,之后就开始整个解析过程。

DNS解析,变快有意义吗?

有,呵呵,很多小型网站,DNS解析时间都接近0.5s,甚至我见过一个网站,需要1.2s才可以解析出结果的。这是个非常令人吃惊的数据,因为对于一般网站打开时间超过8s用户即将放弃访问,而对于电子商务网站,4s就是用户忍耐极限。而一般经过优化的小型网站,DNS解析时间都可以控制在200MS左右,而带宽在100M左右的网站,经过优化,DNS解析时间可以控制在50-100ms。

如何优化呢?

首先利用好TTL,因为要尽量多的让用户直接从运营商的DNS缓存中拿到A记录,这样才能保证最快,但是也要保证,当你的服务器出问题时,需要尽快的切换,所以,这个TTL设置也是有一些情况需要综合研究的。

1、 你肯定清楚,自己的服务器有没有多台或者备份。如无备份,那服务器宕机时,你只能生抗,所以,TTL时间对于你来说是越长越好,因为TTL短的目的是服务器发生问题时,可以及时切换,这个对于没有备份的网站基本利用不上。所以,你的TTL设置就是越长越好,当然了,也不能无限长,一般设置TTL 3600即可。

2、 如有备份或者多台服务器,会发生由于服务器宕机需要及时做切换,TTL时间越短,切换越及时,但是TTL时间越短,也就意味着运营商DNS经常缓存不住,一般用户,设置为TTL 600即可,如果对及时切换,要求特别苛刻的网站,设置TTL 120即可。

其次寻找足够热的域名解析商。很多网站,都是自己做一个域名解析服务器,看着自己掌控方便了,但是大错特错,因为你的域名解析服务器,基本上都不被缓存,每次从根服务器询问一圈,绕了大半个地球,才给出最后的结果,那自然会效果很差。所以,要寻找足够热的域名解析商。什么叫热,就是被访问的次数特别多。足够热的话,域名解析服务器的A记录基本上会被各地运营商的DNS一直缓存着。如何判断域名解析商够不够热呢?其实,也很简单,看看这个域名解析商的客户够不够多,他们客户网站够不够热门,访问的人够不够多。

也给大家推荐一个更好的方法,就是找CDN厂商做域名解析。因为CDN厂商服务的客户,有很多是很热很大用户群很多的,所以,这些CDN厂商的域名解析服务器,服务效果那是岗岗的好。

最后是进阶技巧---巧用CNAME。不少网站拥有者,在同样的一个或多个服务器上运营很多小网站;或者自己运营一个网站,但是拆分了很多个二级域名。针对这些情况,严重需要善用CNAME,把所有的这些小网站的域名或者二级域名,cname到一个自己定义的统一域名。然后设置这个cname对应的TTL时间足够长。这样的话,保证网站的第一次解析,可以直接从运营商的DNS缓存中拿到,也就是直接拿到cname后的记录。然后,第二个cname记录,再设置一个相对合理的TTL值。通过这样,变相加热了第二级域名,通过加热的第二级和缓存时间足够长的第一级,最大化的优化DNS解析时间。该技巧,一定要确保,最后A记录得到的IP,可以服务这些原始域名。

例子:

www.abc.com. 7200 IN CNAME hot.abc.com.

hot.abc.com. 600 IN A 127.0.0.1

什么叫拆分域名?

很多网站,在搭建网站的时候,只是申请和购买了一个域名,然后所有内容:图片、js、css、html、php等等,都放在一个域名下。

而拆分域名,指的就是根据不同的应用,而将域名拆分出来。

拆分域名有什么好处?

使用IE6和IE7内核的浏览器,针对同个域名,只会同时发起2个连接。

使用IE8内核的浏览器,针对同个域名,可以同时发起6个连接。

很重要吗?

非常重要,请看图示。

使用IE6打开一个所有内容均在同个域名下的网站

使用IE8打开一个所有内容均在同个域名下的网站

我们看到的是,在IE6的情况下,请求第7个元素,需要0.7s,而在IE8的情况下,0.277就开始请求第7个元素。

由此可以看到,并发连接更多的时候,网页打开速度会更快。

由以上数据可以看到,多个域名,不管是在IE6和IE8的情况下,拆分域名,都会使网站的打开速度变快。

现实中也是如此,新浪、淘宝等大型网站,他们无一不是在拆分域名。

另外,要纠正一个IT人的误区。因为IT人一般都热衷技术,很多人的操作系统等版本都很新,用的都是IE8甚至以上的浏览器。但是整个中国,到目前为止,使用IE6和IE7的用户,仍然非常另IT人震惊的80%左右。所以,拆分域名,基本上可以缩减你20%以上的打开速度。

一个简单的操作,就能带来巨大的效果提升,何乐不为?

当然了,肯定会有人问,拆分域名,那不就会导致域名热度不够,DNS缓存不住的问题吗?这个问题,请看我上一篇博文,已经给出了答案。

按照什么原则拆分域名呢?

个数多少合适?

一般50M以下网页类网站,域名保持在4、5个即可,过多后范围会导致你的维护和使用变得复杂。

100-500M以下网页类网站,域名保持在8-10个左右。

1G以上的网页类网站,域名无所谓个数,保持10个以上,具体个数根据自己的业务和管理特点随心制定。

什么内容放到同个域名下?

页面类:html、htm等

样式类:js、css等

图片类:jpg、png、gif等

动态类:php、asp等

这样的分配方式,将来有利于你进一步优化你的网站,并且在你需要寻找加速工具时,也可以针对性的选择不同的加速方式。

作者:王康

文章来源:xmw2.blog.chinaunix.net

本文标题:网站打开速度优化-优化WordPress的网站开发人员指南
本文地址: http://www.61k.com/1072554.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1