大型网站的灵魂——性能

news/2024/5/9 23:26:56/文章来源:https://blog.csdn.net/yaoyanzhu/article/details/84703515
摘要:有人说性能就是访问速度快慢,这是最直观的说法,也是用户的真实体验。一个用户从输入网址到按下回车键,看到网页的快慢,这就是性能。对于我们来说,需要去挖掘这个过程,因为这决定我们怎么去做性能优化。

【编者按】如果一个网站运行速度慢,即使它内容再丰富,UI设计更美观,也算不上一个好网站。因为它忽略了最重要的因素:性能。运行速度的快与慢是最直观的说法,也是用户的真实体验。本文转载博客园,讲述大型网站中一个重要的要素,性能。

在前一篇随笔 《大型网站系统架构的演化》中,介绍了大型网站的演化过程,期间穿插了一些技术和手段,我们可以从中看出一个大型网站的轮廓,但想要掌握设计开发维护大型网站的技术,需要我们一步一步去研究实践。所以我打算写一个系列,从理论到实践讲述大型网站的点滴,这也是一个共同学习的过程,希望自己能坚持下去。系列大概会分为两部分,理论和实践,理论部分尽量通俗易懂,也要讲一些细节。实践部分会抽取一些技术做实践,将方法、解决问题过程分享出来。

本文将讲述大型网站中一个重要的要素,性能。

什么是性能 

有人说性能就是访问速度快慢,这是最直观的说法,也是用户的真实体验。一个用户从输入网址到按下回车键,看到网页的快慢,这就是性能。对于我们来说,需要去挖掘这个过程,因为这决定我们怎么去做性能优化。 

这中间发生了什么? 


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

我们把整个过程,分为三段路径:

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

2、第二段在网络上,负责对请求数据、响应数据的传输;

3、第三段在网站服务器端,负责对请求数据进行处理(执行程序、访问数据库、文件等),并将结果返回;

第一路径

第一路径花费的时间包括输入域名发起请求的时间和浏览器收到响应后计算渲染的时间。

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

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

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

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

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

<meta http-equiv=”x-dns-prefetch-control” content=”on” />

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

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

2、浏览器创建DOM树;

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

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

5、显示给用户。

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

<meta http-equiv=”Cache-Control” content=”max-age=5″ />

该代码说明了浏览器启用了缓存并在5秒内不会再次访问服务器。注意缓存的设置需要结合你的业务特性来适当配置。

以下是京东商城的HTML简图:

CSS样式放在html前面,并且进行了合并。

 

大多数的JS文件放在页尾。 

 

第二路径

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

整个流程从传输方式看就是:用户发送请求数据(上传),网站服务器接受请求数据(下载),网站服务器返回响应数据(上传),用户接受响应数据(下载)。对于用户来说,上传数据是很小的(Url参数),而下载数据是较大的(响应数据);对于服务器来说,下载数据是很小的(url参数),上传数据是较大(响应数据)。理解了这个,我们可以解释为什么有时用户反映为什么自己的带宽足够,但打开某些网站仍然很慢,就是因为尽管用户的下载速度很快,但网站服务器的上传速度很慢,这就像一个抽水管和一个出水管,不管抽水管再大,但出水管很小,同样抽到的水量是有限的。了解了这个原理我们来看怎么提高数据传输的速度,首先用户的上传、下载速度我们是无法决定的,我们能决定的是网站服务器的上传、下载速度,所以我们可以做的是适当的增加服务器带宽(带宽是很贵的,盲目的增加只会增加不必要成本)。购买合适的带宽需要根据网站业务特性、规模以及结合运维人员的经验来选择。通常可以考虑的算法,即根据一次响应数据的大小,乘以PV数,除以对应的高峰时间段,从而大致估算出网站带宽的需求。

下面我们继续进一步研究第二路径:

 

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

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

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

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

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

第三路径

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

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

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

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

3、代码优化;

4、存储优化;

缓存

如果缓存数据较少,可以利用OSCache实现本地缓存:

当缓存数据过多时,利用Memcached实现分布式缓存:

Memcached实现分布式缓存,缓存服务器之间是互不通信的,也就是我们可以方便的通过增加Memcached服务器对系统进行扩展。

异步操作

使用同步请求的方式,在高并发的情况下,会对数据库造成很大的压力,也会让用户感觉响应时间过长。异步请求方式,则可以快速的对用户做出响应,而具体的数据库操作请求,则通过消息队列服务器发送给数据库服务器,做具体的插入操作。插入操作的结果则已其他方式通知客户端。例如一般在订票系统当中,出票行为就是异步完成,最终的出票结果会以邮件或其他方式告知用户。

代码优化

这里就不在详细描述,另一篇随笔《怎样编写高质量的java代码》对代码质量和风格做过大致的介绍,有兴趣可以看一下。

存储优化

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

性能的指标和测试

上面通过解析用户访问网站的过程来思考怎么提高用户感知的性能,对于用户来言性能就是快和慢。但对于我们来说,不能这样简单描述,我们需要去量化他,用一些数据指标去衡量它。这里讲到几个名词:响应时间、并发量、吞吐量。

响应时间:就是用户发出请求到收到响应数据的时间;

并发量:就是系统同时能处理多少用户请求;

吞吐量:就是单位时间内系统处理的请求数量;

为了通俗的了解这三个概念,我们以高速公路的收费站为例子:响应时间是指一辆车经过收费站的时间,也就是车辆从进入收费站、付钱、开闸、离开收费站的时间;并发量是指这个收费站同时能通行多少辆车,可以理解为收费站的出口数量。吞吐量是指:在一段时间内,这个收费站通往了多少了车。

这个例子不晓得恰不恰当。

对于性能测试来说,基本也是围绕这些方面来测试,下图说明了性能测试的过程:

 

 

左图表示响应时间和并发用户量的二维坐标图,从图上可以看出,并发用户量在一定量增加时,响应时间很短,并且没有太大的起伏,这表示系统目前处于日常运行期,可以很快处理用户请求(A点之前);随着并发量的增加,系统处于请求高峰期,但仍然可以有序的处理用户请求,响应时间较日常有所增加(A、B之间);当并发量增加到一定数量时,超过了系统的负载能力,系统处于濒临崩溃的边缘(B、C之间),响应时间严重过长,直到系统崩溃。

右图表示吞吐量与并发用户量的二维坐标图,可以看出,随着并发用户量的增加,吞吐量逐渐增加;在并发量到达一定量时,由于系统处理能力达到最大,吞吐量增加放缓;当并发量超过系统负载时(E点),系统处理能力开始下降,不能再请求增加的用户请求,吞吐量反而降低。

小结

本文通过用户访问网站的过程,分析了三个路径过程中提高性能的想法和手段,最后介绍了描述性能的指标,并对性能测试做了简要说明。

 

本文摘自:http://www.csdn.net/article/2015-02-26/2824026

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_858718.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站系统架构的演化

前言 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0c;在这个过程中&#xff0c;开发模式、技术架构、设计…

用PS去设计食品网站的展示

首先点击PS,进入PS以后我们先CtrlN创建一个宽度为25cm,高度135cm分辨率为300的图层, 创建以后我们就往图层里面放东西或者是自己已经做好的网页,还有不能让背景太过于单调,我们就往图层里面做装饰,至于放什么装饰就要看自己做的东西或者是网页是什么类型的,颜色不能太过于鲜艳还…

食品网站和学校官网的对比

首页我把食品的网页和学校的网页放进来进行对比和区分,学校官网都是严谨的规规矩矩的,而食品官网呢可以各式各样,如果食品官网和学校官网一样的话就不怎么好看了,而且食品类型的官网或者是网站都是主题性和偏人喜欢的类型,如果学校官网和食品类型的官网一样的话就会给人觉得学校…

分析自己做的后台网站

一, 布局 首先布局要有规整&#xff0c;然后界面要整洁还有要统一画板的大小&#xff0c;再然后就要适配在设计中&#xff0c;要清楚明白布局然后根据布局去添加东西或者是文字&#xff0c;然后就是排版在设计中排版也是非常重要的&#xff0c;还有排的版要根据具体情况判断是…

总结分析icon和食品网站

icon总结&#xff1a; 设计思路&#xff08;灵感来源于漫威电影里面的蜘蛛侠&#xff09;我利用了休息时间的时候因为当时没事做我自己也不知道要干嘛&#xff0c;然后就去网上玩了一下突然看到了蜘蛛侠的图片&#xff0c;上课的时候就开始了一系列的想跟设计最后就选定了做蜘蛛…

后台网站总结

后台网站也是我们的最后一个课程了&#xff0c;在学习后台的时候有点懵不知道是什么&#xff0c;然后老师就给了我们一些临摹的后台网站让我们去临摹&#xff0c;临摹的时候挺有意思的&#xff0c;然后老师还叫我们去收集后台网站的图片让我们去学习别人做的后台网站的优秀的地…

制作金融后台网站

首先进去PS,下面的话就不多说了,新建一个画板,画板的大小为:宽1024px,高1152px,分辨率为:72.然后把画板的颜色白色改为灰色.灰色的数字为:ebebeb. 2.下面把顶部和旁边的做出来,画一个宽164px和高590px的矩形颜色为蓝色,颜色的数字为:ebebeb.上面的顶部也是一样的,长1026和高56p…

Laravel+Nginx轻松实现读写分离、负载均衡,网站并发能力提升N倍

前言&#xff1a; 随着互联网应用的广泛普及&#xff0c;海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用&#xff0c;每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。 为此&#xff0c;我们需要…

生成网站后,在浏览器中浏览时只能出现网页中的内容,不能与数据库相连接的部分?

生成网站&#xff0c;在浏览器中输入http://localhost/oa后&#xff0c;出现以下内容&#xff1a; &#xff0c;解决办法&#xff1a; &#xff0c;解决这个问题后&#xff0c;继续浏览又出现下面的错误&#xff1a; &#xff0c;而他的解决方案是&#xff1a; 连接字符串&am…

在发布网站后,出现“未将对象引用设置到对象的实例”的错误时,是什么原因?

这个有两个原因&#xff1a;一、在IIS中没有设置“默认文档”&#xff1b;二、session没有赋值。 这两个原因是在做项目时发现的&#xff0c;可能还有其它的。

博客网站软件需求分析说明书-软件工程作业

1.导言 1.1编写目的 该文档描述了个人博客网站的功能和性能的要求&#xff0c;将作为对该项目在概要设计阶段的设计输入。 本文档的预期读者包括: 1.设计开发人员 2.项日管理人员 3.测试人员 4.用户 1.2项目范围 该文档的月的是解决整个项月系统中“做仁么”的问题。对于开…

【学习笔记】分布式爬虫打造搜索引擎|笔记02|scrapy爬取博客网站

scrapy框架 Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 其可以应用在数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c; 也可以应用在获取API所返回的数据(例…

Nginx配置SSL证书部署HTTPS网站

一、什么是 SSL 证书&#xff0c;什么是 HTTPS SSL 证书是一种数字证书&#xff0c;它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道&#xff0c;从而实现&#xff1a; 1、数据信息在客户端和服务器之间的加密传输&#xff0c;保证双方传递信息的安…

兄弟们,我打算抠100个网站JS加密代码召唤,一个也跑不掉,这次轮到小虎牙

本次研究虎牙登录密码加密JS代码&#xff0c;难度不大&#xff0c;依然建议各位读者参考文章独自完成&#xff0c;实在抠不出来再参考这里的完整代码&#xff1a;从今天开始种树 准备 打开网站虎牙&#xff0c;点击登录标签&#xff0c;跳到登录界面&#xff1a; 按下F12&am…

服务端编程(三)- 背景知识 - web服务器 HTTP服务器 application 服务器 动态网站 静态网站 域名 URL 详解

文章目录 前言 &#xff65;ᴗ&#xff65;概述web serverHTTP serverapplication server 应用服务器动态网站 静态网站总结 ◡ 前言 &#xff65;ᴗ&#xff65; 本篇将简化的几个简单却又容易混淆的概念 网站 网页 搜索引擎 web服务器 本文可以带给你… 网页的概念网站的概念…

服务端编程(九)- Django - 创建网站的基本骨架 创建你的主页

文章目录 前言 &#xff65;ᴗ&#xff65;url参数制定url规则制定url规则什么时候需要获取url&#xff1f;为什么我们操作catalog的url 而不是根目录的url&#xff1f;服务器如何响应——view.py模板的制作render函数的运用彩蛋总结 ◡ 前言 &#xff65;ᴗ&#xff65; 本节…

服务端编程(十)- Django -创建网站页面

文章目录 前言 &#xff65;ᴗ&#xff65;ListviewListView 的细节修改编辑每本书的详情页detailView分页的编辑结语&#xff08;&#xffe3;︶&#xffe3;&#xff09;↗ 前言 &#xff65;ᴗ&#xff65; 上一节我们建立了主页 这里我们来创建一些别的网页 比如关于books…

网站优化问题:雅虎网站优化35条

1. Make fewer HTTP requests 尽可能少的http请求。。我们有141个请求&#xff08;其中15个JS请求&#xff0c;3个CSS请求&#xff0c;47个CSS background images请求&#xff09;&#xff0c;多的可怕。思考了下&#xff0c;为什么把这个三种请求过多列为对页面加载的重要不利…

用phpstudy正确配置阿里服务器 网站就是不能浏览原因

用phpstudy 配置PHPMYSQL阿里云服务器&#xff0c; 所有配置都正确&#xff0c;服务器本地上也正常浏览&#xff0c; 但是用绑定服务器的域名打开浏览就是不行。 原因是阿里云服务器上的安全设置问题 阿里云服务器默认不能访问的&#xff0c;需要在阿里云服务器上增加安全规…

2017 年最受欢迎的 10个编程挑战网站

热文导读 | 点击标题阅读 如何看待中通讯42岁员工坠楼事件&#xff1f;背后深层原因剖析&#xff01; 吊炸天&#xff01;74款APP完整源码&#xff01; 成为 Android 大牛的10大独门秘籍 原文&#xff1a;The 10 most popular coding challenge websites for 2017 https://med…