前段时间做了一个PHP(TP框架)的项目,同时整合了Ucenter与Discuz论坛打通,实现了同步注册与登录,开发过程中遇到的各种问题,好在一一解决,结果最终上结之后出现了意想不到的情况,访问速度奇慢,虽然当时服务器配置低了些(windows server 2012 1核 2G 1M带宽 phpstudy搭建的环境),但也不至于慢到如此地步,打开页面都要卡三秒,而访问论坛模块的速度却很快,于是在代码中找各种原因,去除所有非必须的SQL、启用GZIP压缩、压缩CSS/JS文件、启用CSS/JS/Image文件缓存、均没有太大的效果,只有在开启了静态页面缓存之后速度才有了提升,静态缓存是以空间换时间的一种方案,但也有一定的弊端,若公共页面中包含用户登录相关信息,若设置的缓存有效期过长就会出现会员信息混乱的现在,即我的账号登录了个人中心,会出现别人的信息。这种方案适用于一些网站文章页面及一些不常变化的页面,而不适合于个人中心这类页面。

解决了不常变化的页面速度问题,接着就是解决个人中心这类每个人访问页面信息都不相同的页面,在一些页面上启用了动态缓存这后第一次访问速度依然很慢,而在第二次打开页面时速度便有了明显的提升,在没有缓存的慢冲下再看打开链接的时间记录,仅网站链接做出响应所用的时间就占用了1S-2S的时间,于是将问题所在锁定到数据库上,在调整了所有的参数之后,速度依旧,尝试服务器本地访问速度依然不增,于是想到了配置文件,配置文件是在本地上传后修改了服务器的用户名和密码直接使用的,与Ucenter及Discuz的配置文件数据库链接部分对比,唯一的不同点就是ucenter与Discuz定义的host为127.0.0.1而TP网站定义的为localhost,在此之前看过一些文章也提过这种情况,说使用localhost与使用127.0.0.1在速度上的影响很大,于是我看了一下服务器的HOSTS文件,发现里面并没有将localhost定向到127.0.0.1的本地回环地址,正是由于DNS解析的时间造成了服务器响应慢的现象。这才找到真正的原因所在。将配置文件中的localhost换为127.0.0.1之后速度便恢复了正常。

在对网站的优化过程中收集了各路大神以及官方资料,在此稍做整理。

1.网站响应时间

网站响应时间一般使用首字节到达时间来计算。

一般来说访问网站是通过HTTP/HTTPS请求来完成的,HTTP协议是无状态的,同一客户端第二次访问同一个服务器上的页面时,服务器并不能通过访问链接或协议得知该客户端是否曾经访问过,这种不记录状态的方式使得服务器能支持大量的HTTP请求,HTTP是利用TCP协议来通过两台电脑之间的通讯的,而建立TCP连接需要经过三次握手,关闭TCP连接需要四次握手,因此作为无状态的HTTP连接来讲,建立连接所花费的时间是很大的。HTTP1.0使用的是非持久连接,每次请求都要重新建立新的链接,这使得页面下载变得很慢,同时也加重了网络负担;而HTTP1.1开始使用KeepAlive持久连接的,即在一定的时间段内保持连接,可以在一个连接中完成多次数据请求与响应,在这种情况下,服务器响应完成后并不会直接关闭连接。这样就减少了建立连接的次数,节省一部分时间,同时减少带宽的占用。

而要完成http请求,就需要DNS域名解析,DNS将域名解析成IP地址,再通过IP地址找到服务器,才能让服务器做出响应。一个快速的DNS解析服务器也是影响网站访问速度的重要因素,DNS解析越短,服务器接收到请求越快。

因此网站的响应时间(首字节时间)大致等于DNS解析的时间+TCP三次握手的时间+HTTP请求的时间+服务器处理响应时间+响应数据返回时间。

在这些因素中我们可以提高的有DNS解析时间,服务器处理时间。

2.优化DNS解析

一般经优化的网站DNS解析的时间可以控制在200MS左右,若带宽达到100M可以在50-100MS,对于DNS的优化这里不做重点,主要通过几个方面来控制:首先利用TTL,尽量让用户直接从运营商的DNS缓存中得到A记录,其次选择用户量大服务面积广的域名解析商;最后学会使用CNAME。

3.服务器处理时间

这里的服务器处理时间是我们主要要优化的地方,服务器处理可优化的地方主要包括:服务器硬件升级、服务器操作系统选择、服务器环境工具的搭建、数据库的优化等

3.1 服务器硬件升级

首先硬件升级的效果是立竿见影的,主要包括CPU、内存和带宽,选择一个适合自己的配置很重要。

3.2服务器操作系统的选择

常见的服务器类型有windows系统和Linux/Unix系统,其中Linux/Unix系统一般不安装图形界面,系统本身战胜资源较少,一般通过命令行来管理,这就要求开发人员对基本的shell命令有所了解。而windows操作系统默认是安装了图形界面的,系统占用的资源较大,同时其稳定性较Linux/Unix差一些,宕机的可能性较大,但图形界面管理比较容易。

如何选择服务器操作系统要在满足自身需求的同时考虑到环境是否真正适合自己。

3.3 服务器环境的搭建

环境的搭建与配置也十分重要,如果使用Linux系统可以搭建LAMP或者LNMP甚至LNAMP的环境,如果选择windows系统则可以使用IIS或者另外搭建Apache/Nginx的服务环境,nginx的并发性较apache要好,而且节省资源,apache的rewrite稳定性较nginx要好,而且模块较多,一般来说需要性能则选择nginx需要稳定选择apache.(观点较为片面)

环境搭建的同时要考虑到影响网站访问速度的一些配置信息,包括js/css缓存文件的配置,将不常修改的信息设定一个较长的缓存时间,这样用户二次访问的时候不必再次请求相关文件,只需加载新的数据即可;配置GZIP压缩,通过GZIP扩展启用GZIP压缩可以将CSS/JS/IMAGE等较大的文件压缩到较小的体积,减少带宽的占用,提高访问速度。

配置缓存,如memcache,Xcache, redis等。Thinkphp自带S函数可实现动态缓存,这些缓存的配置最好在开发初期就考虑到使用哪种,以免后期添加对代码的发动较大。

3.4 数据库的优化

避免开篇提到的那种情况 上线配置一定要定义为IP地址。

3.4.1 尽量使用存储过程,存储过程属于预编译语句,经过一次编译之后不需再次编译,只要传入相应的字段值即可,减少了SQL语句编译的过程。为常用操作添加存储过程可减少大量SQL执行时间,提高执行效率。

3.4.2 为搜索字段建立索引,在有索引的情况下能大量减少查询时间

3.4.3 尽可能使用NOT NULL来填充字段,并减少使用WHERE判断NULL值。通过Mysql官方文档得知NULL值要比正常值多占用1bit的存储空间。

3.4.4 数据库表的大字段剥离,保证单条记录的数据量很小,可将表分区或拆分,将一些常用经常更改的信息存放到一张表中,不常修改的信息存放到另外的表中,并减少JOIN语句的使用。

3.4.5 减少字段冗余。

3.4.6 可使用NoSQL

3.4.7 减少全局扫描

3.4.8 尽量避免or来连接条件,可使用UNION语句来代替

3.4.9 用exists代替In

3.4.10 避免使用游标

3.5 PHP中需注意的几点

3.5.1 用单引号包含字符要比双引号快,用双引号时PHP会搜索字段周围的变量。

3.5.2 用foreach 代替for 或遍历前计算好遍历长度,避免每次都要计算。

3.5.3 地访问链接若为目录后面加上反斜杠"/",若不加反斜杠服务器会先判断要访问的是目录还是文件,再定向到目录下的index.php或index.html等文件中

3.6 前端需注意的几点

3.6.1 减少页面请求,合并CSS/JS文件,尽量将所有的CSS代码放到一个CSS文件中,JS也是同理,上线后应压缩相关文件

3.6.2 将CSS放在头部,JS放在尾部,在加载完样式的前提下再去提高用户体验

3.6.3 使用CDN加速,对于常用的如JQuery等相关文件使用CDN加速

3.6.4 图片尽量使用height width属性,避免图片加载完成后界面二次渲染

3.6.5 适当使用AJAX,并不是AJAX使用越多越好,要根据实际情况选择使用AJAX

附:apache开启 GZIP 相关配置

http.conf文件中找到

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
去掉前面的#号,并在conf文件或.haccess文件中加入如下代码
<IfModule mod_deflate.c>
DeflateCompressionLevel 6
SetOutputFilter DEFLATE 
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题
</IfModule>

apache 开启图片JS/CSS等文件缓存

加载mod_expires模块,conf文件中找到如下代码并去掉前面的#号

LoadModule deflate_module modules/<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px;">mod_expires</span>.so
在.haccess文件中加入如下代码

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A604800
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType text/plain A86400
ExpiresByType application/x-shockwave-flash A2592000
ExpiresByType video/x-flv A2592000
ExpiresByType application/pdf A2592000
ExpiresByType text/html A600
</IfModule>

关于memcached提供一个链接 Install, configure, verify memcached on CentOS
--------------------- 
作者:Eric__Cui 
来源:CSDN 
原文:https://blog.csdn.net/eric__cui/article/details/52918160 
版权声明:本文为博主原创文章,转载请附上博文链接!

网站访问慢?如何优化网站访问速度?相关推荐

  1. 网站推广——网站推广专员在优化网站中都有哪些技巧呢?

    众所周知,在当前的网络市场中想要通过网站外链提升网站关键词排名是有一定难度的,因此,站长们在通过相关的网站优化措施帮助网站留住用户,吸引流量,提升网站在搜索引擎中的权重和排名.那么在这些网站优化技巧中 ...

  2. 让你的网站提速:图片优化网站推荐

    页面的加载时间是每一个设计师都担心的数据,或者至少是每个设计师都应该担心的问题.图片的大小肯定是一个需要留意的问题.这就是为什么在这里写了几个有助于优化页面中的图片的小技巧,这些小技巧将有助于大家解决 ...

  3. 网站html标签如何优化,网站HTML标签优化教程

    真正需要SEOer掌握并经常使用的HTML标签也就那么几个,本小节丈哥seo带来的是页面HTML标签优化. title标签 – 标题标签 1)title标签用法 网站SEOHTML标签优化教程 – 丈 ...

  4. 如何优化网站的响应时间

    Web应用中访问数据库的开销比较大,要提高Web应用的性能就要避免过多地访问数据库.尽管频繁地访问数据库会降低应用性能,但是,有时大量的数据库访问依然在所难免,原因在于: 虽然使用缓存(如Memcac ...

  5. 优化网站性能 提高网站速度访问速度的14条实践

    相信互联网已经越来越成为人们生活中不可或缺的一部分.ajax,flex等等富客户端的应用使得人们越加"幸福"地体验着许多原先只能在C/S实现的功能.比如Google机会已经把最基本 ...

  6. 优化网站性能 提高网站速度访问速度的14条实践(转)

    相信互联网已经越来越成为人们生活中不可或缺的一部分.ajax,flex等等富客户端的应用使得人们越加"幸福"地体验着许多原先只能在C/S实现的功能.比如Google机会已经把最基本 ...

  7. 进阶篇:如何优化网站提升访问速度

    网站的稳定是运营的首要条件,这也是网站运行不可或缺的,如果客户发现网站打不开,这时就会影响网站的 效果,从而也会让客户产生一定想法,不利于企业形象.因此网站快速稳定运行,可以给客户一个好印象,这也是开 ...

  8. java优化上传速度慢怎么办_网站建设中影响网站优化的一些因素

    一个网站建设的后期运营,要想网站能够有更好的排名.有更多的流量.有更好的推广效果,那么对网站进行优化是必不可少的一件事情.所以企业开始对网站优化越来越重视,那么在网站制作过程中应该考虑哪些因素对网站优 ...

  9. 网站链接被微信屏蔽禁止访问的解决办法

    最近网站链接被微信屏蔽禁止访问,微信内打开网址显示如下提醒:已停止访问该网页,网页包含诱导分享.关注等诱导行为内容,被多人投诉,为维护绿色上网环境,已停止访问. 出现这种情况的原因是此域名(包括主域名 ...

  10. 优化网站速度的几种方式

    优化网站速度的几种方式 在业界有篇很经典的文章,来源于yahoo的开发者社区,它讲述的是如果优化自己的网站的速度,包括从服务器端到客户端.这篇文章影响了很多人,原文可以参照这里:Best Practi ...

最新文章

  1. 利用python+seleniumUI自动化登录获取cookie后再去测试接口,今天终于搞定了
  2. 剑指offer06.从尾到头打印链表
  3. 周志华《机器学习》课后习题(第三章):线性模型
  4. oracle建job
  5. 学习笔记-----关于VS中使用模板类出现无法解析的外部符号问题
  6. JQ 全选后获取选中的值_JQ完全学习版本
  7. python爬虫面试题
  8. LeetCode LCS 02. 完成一半题目(计数+排序)
  9. 如何通过map文件优化代码
  10. 月薪11.5K 土木人零基础转行软件测试工程师,他都经历了什么?
  11. python 12306登录_Python Selenium自动登录12306官网
  12. linux下添加三菱触摸屏usb驱动,[转载]三菱触摸屏GT Works3和PLC GX Works2编程软件下载...
  13. C我语言编程老鼠寻路,数据结构课设-走迷宫游戏.doc
  14. java pdf 水印_java 如何给pdf文件加水印
  15. Spring Kafka消费模式(single, batch)及确认模式(自动、手动)示例
  16. Fabric - chaincode开发模式
  17. PS图层混合模式MATLAB实现
  18. 人生是一场盛大的修行
  19. Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains valu...
  20. 朱萧木首谈独立创业,与罗老师总会相逢

热门文章

  1. NPOI iTextSharp导出Excel并加水印
  2. python电商项目介绍_django打造电商项目
  3. matlab中linspace函数用法
  4. mpa和pis_压力单位MPa/psi/bar之间的换算?
  5. opencv-图像平滑处理
  6. 【JavaP6大纲】MySQL篇:为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分
  7. 微信小程序弹窗(提示框和确认框)
  8. java生成点阵图_点阵字库在JAVA中的实现
  9. [乐意黎原创]云南省红河州泸西县各乡镇及村委会区划代码和城乡划分代码
  10. 褚霸:阿里云数据库要放大招!