文档章节

性能优化总结

warrior_by
 warrior_by
发布于 2015/10/27 18:31
字数 1842
阅读 204
收藏 17

性能:对于用户来说,就是访问你网站快还是慢。对于我们来说,还是有很多细节和东西的。

用户访问网站的整个过程:

用户输入网址,通过DNS解析,找到目标服务器IP,请求数据通过互联网达到目标服务器,目标服务器收到请求数据,进行处理(执行程序、访问数据库、文件服务器等);处理完成,将响应的数据又通过互联网返回给用户的浏览器,浏览器将得到的结果进行渲染显示给用户。

 

我们可以分为三段,逐个分析:

一、第一段在用户和浏览器端,主要负责发出用户请求,以及接受响应数据进行渲染显示给用户;

二、第二段是数据传输在互联网的路上面;

三、第三代是web服务器方面,对于数据的处理。

 

用户和客户端

花费的时间包括输入域名后发起请求的时间和客户端收到响应后计算渲染的时间。

输入域名发起请求的实质过程是:

1.用户在浏览器输入要访问的网站域名;

2.本地DNS请求网站授权的DNS服务器对域名进行解析,得到解析结果即IP地址(并将IP地址缓存起来)。

3.向目标IP地址发出请求。

 

这个过程中我们可以看到,优化的地方是减少DNS解析次数,如果用户的浏览器设置了缓存,则第二次访问相同域名的时候就不会去请求DNS服务器,直接用缓存中的IP地址发出请求。因此这个过程中主要取决于用户的浏览器设置。现在主流的浏览器默认设置了DNS的预取功能(DNS Prefetch),你也可以主动告诉浏览器我的网站需要做DNS预取:

<meta  http-equiv=x-dns-prefetch-controlcontent=on/>

 

浏览器将数据进行计算渲染的过程:

1.浏览器解析响应数据;

2.浏览器创建DOM树;

3.浏览器下载CSS样式,并应用到DOM树,进行渲染;

4.浏览器下载JS文件,开始解析执行;

5.显示给用户;

 

这个过程中,我们能找出不少优化的地方。首先我们可以尽量控制页面的大小,使得浏览器解析的时间更短;并且将多个css文件、js文件合并压缩,减少文件的下载次数和大小;另外注意将CSS放在页面前面,JS文件放在页面后面,这样便于页面首先能渲染出来,再执行JS脚本,最后我还可以设置浏览器缓存,下次访问时从缓存中读取内容,减少http请求。

<meta http-equiv = Cache-controlcontent=max-age=5/>

 

数据在网络上

花费的时间同样包括请求数据的时间和响应数据的时间,这两个时间取决于数据传输的速度,也就是带宽。我们经常说的带宽10M,20M是什么意思?我们知道带宽速度分为上行、下行速度,也就是上传和下载速度。带宽20M对于用户来说则是下载速度20M(20*1024*1024比特率),换算成字节20M/8=2.5M。也就是说20M的带宽下载速度理论上可达2.5M/s,而对于家庭用户而言上传速度一般比下载速度小的多,大约是不打十分之一。而对于网站服务器(企业用户)来说,则是一般上传速度等于下载速度。这也是运营商根据实际需求分配的,毕竟用户的主要需求是下载数据,而不是上传数据。

整个流程从传输方式看就是:用户发送请求数据(上传),网站服务器接收请求数据(下载),网站服务器返回响应数据(上传),用户接收响应数据(下载)。

对于用户来说,上传数据是很小的(url参数),而下载数据是较大的(响应数据);而对于服务器来说,下载数据是很小的(url参数),上传数据是较大的(响应数据)。 理解了这个,我们可以解释为什么有时用户反映为什么自己的带宽足够,但打开某些网站任然很慢,就是因为尽管用户的下载速度很快,但网站服务器的上传速度很慢。

了解了这个原理我们来看怎么提高数据传输的速度,首先用户的上传、下载速度我们无法决定,我们能决定的是网站服务器的上传、下载速度,所以我们能决定的是网站服务器的上传、下载速度,所以我们可以做的是适当的增加服务器带宽(带宽是很贵的,盲目的增加只会增加不必要的成本)。购买合适的带宽需要根据网站业务特性、规模以及结合运维人员的经验来选择。


我们可以继续研究第二路径:

 



 







上图表示用户访问网站服务器时网络的大致情况,从图上可以看出假设网站服务器从电信网络接入,而用户A作为电信的宽带用户,则可以通过电信骨干网快速的访问到网站服务器。用户B,用户C作为移动和联通用户需要通过运营商的互联互通经过较长的路径才能访问到服务器。

针对这种情况,我们可以采取以下方法来优化:

1.在各运营商发达的地区的IDC(互联网数据中心,可以理解为机房)部署网站的服务器,个运营商的用户即可通过各自的骨干网访问服务器。

2.购买代理服务,也就是原来联通用户需要通过联通骨干网-->联通互联互通路由器-->电信骨干网-->网站服务器的过程。通过代理服务,代理服务器直连到电信骨干网,访问网站服务器。

3.在主要地区城市购买CDN服务,缓存对应的数据,用户可先从最近的CDN运营商获取请求数据。

 

第三路径-web服务器

主要是网站服务器内部处理的过程,当中包括执行程序、访问文件、数据库等资源。

对于我们来说最可以发挥的地方:

1.使用缓存,根据需要使用本地缓存或分布式缓存;

2.使用异步操作,这种方式不仅可以提高性能,也提高了系统的扩展性;

3.代码优化;

4.存储优化;

 

缓存:

Memcached实现分布式缓存;

代码优化:

存储优化:

大型网站中海量的数据读写对磁盘造成很大压力,系统最大的瓶颈还是在磁盘的读写。可以考虑使用磁盘阵列、分布式储存来改善存储的性能。


(整理自程序员日志)


© 著作权归作者所有

共有 人打赏支持
上一篇: 第一篇博客
warrior_by
粉丝 6
博文 43
码字总数 18354
作品 0
浦东
程序员
私信 提问
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho
2018/05/30
0
0
MySQL数据库的性能的影响分析及其优化

MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数据库的参数配置的不同 六. (重点)数据库的...

Panda_Jerry
2017/11/04
0
0
golang: Baa框架文章列表

database: mongodb服务启动脚本 golang: Baa框架中的依赖注入(DI)是个什么鬼? golang go get出现unrecognized import path 微服务实践 - golang Thrift 开发一个月的感受 Algorithm: 移动...

d_watson
2016/06/13
33
0
三张图看遍Linux 性能监控、测试、优化工具

Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的、简单的小工具。系统性能专家 Brendan D. Gregg 在最近的 LinuxCon NA 2014 大会上更新了他那个有...

foodon
2015/11/24
183
2
SQL 常用优化手段总结 - 小技巧

中国有句古话叫做:欲速则不达。在一口气学完了分析 SQL 语句的一般步骤与索引的正确运用方式后小憩片刻。搭配上红茶与白兰地轻松享用下面这些小技巧吧! 系列文章回顾 SQL 常用优化手段总结...

给你添麻烦了
2018/01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sql根据日期查询,本周,本月,本年,今日相关统计

sql根据日期查询,本周,本月,本年,今日相关统计 昨天 select * from tb where datediff(day, 时间字段 ,getdate()) = 1 今天 select * from tb where datediff(day, 时间字段 ,getdate()) = ...

BraveLN
35分钟前
3
0
Delphi 折叠代码编译变量$REGION

编译变量$REGION,用于在delphi2006以后版本的折叠代码显示,非常方便。 procedure TForm1.Button1Click(Sender: TObject); var uStr: UnicodeString; begin {$REGION '显示uStr变量内容'} ......

dillonxiao
36分钟前
1
0
【更新】SyntaxEditor发布v2018.1,可共享相同代码库

SyntaxEditor最新版本下载 SyntaxEditor是一款强大的代码语法检验控件,采用了当今最前沿的代码编辑的技术,可以为你代码编辑提供强大的管理功能。最新版支持Visual Studio 2013和Windows 8...

电池盒
36分钟前
3
0
如何在基于Bytom开发过程中集成IPFS

本文介绍了基于Bytom开发过程中集成IPFS。 step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建bytom节点有很多方式,然后开启RPC调用模式。这里推荐用...

比原链Bytom
41分钟前
1
0
sqlyog注册码

sqlyog注册码 1.方式一 用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417 a56ea5da-f30b-4fb1-8a05-95f346a9b20b a0fe8645-3916-45d4-9976-cb6b88fecc6c b70d7f66-dac2-4462-......

dragon_tech
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部