【大型网站性能优化实战】学习笔记(一)

news/2024/5/9 16:28:46/文章来源:https://blog.csdn.net/xiyu_webSE/article/details/113845522

【大型网站性能优化实战】学习笔记(一)

基于用户体验的性能优化要素

1.页面用户体验的要素介绍

用户体验:

抽象,带有强烈的主观意识

难以量化

我觉得这样会更好

我认为用户喜欢这样或者那样

......

从用户打开浏览器,浏览网页的感知过程,我们分解出了几个要素来衡量网站性能方面的用户体验,并尝试通过不同监控系统进行系统监控和指标量化

  1. 白屏。
  2. 首屏。
  3. 页面整体加载。
  4. 页面可交互。
  5. 功能交互响应

1.白屏

  • 白屏时间的重要性

白屏时间:用户打开浏览器输入网站的URL后,从屏幕空白到第一个画面出来的时间,这个时间的长短将直接决定网站页面给用户的第一印象.

重要性:页面渲染的时间越短,用户等待的时间就越短,用户感知页面的速度就越快,这样可以大大提高用户体验,减少新用户的跳出,提高留存率.反之,过长的等待时间,会让用户变得烦躁,更轻易跳出或关闭这个网站

  • 白屏过程详解

 

依次说明每个步骤.从中可以看到浏览器与服务器做了哪些交互,又在客户端经历了那些过程

1.DNS Lookup

DNS Lookup即浏览器从DNS服务器中进行域名查询,浏览器解析域名拿到对应的IP地址后,才能和服务器进行通信.通常浏览器在加载页面的过程中,会进行很多次DNS Lookup操作,其中包括页面本身的域名查询,以及浏览器在解析页面HTML代码过程中,需要加载JS,CSS,Image等资源产生的解析.

对大中型网站来说,通常在页面加载过程中会产生下列域名解析:

www.example.com,页面URL本身

style.example.com,JS\css等静态资源请求

img.example.com,静态图片请求

ajax.example.com,各种站内的Ajax请求

*.google.com其他不Google的站外请求

域名解析的过程,可短至几毫秒,也可能消耗几秒,所以解析过程的快慢直接影响页面整体加载的渲染速度,特别是对于每天访问量达千万级别的页面

DNS解析速度的优化策略有很多,通常我们会从以下几个方面思考细节的优化

  1. DNS缓存优化
  2. DNS预加载策略
  3. 页面中资源的域名的合理分配
  4. 稳定可靠的DNS服务器等

2.建立TCP/IP请求连接

基于不同的网络环境,优化数据包的大小,以减少数据因传输丢失或者被破坏产生的重传,从而提高传输效率

网络传输链路的优化,对于大部分企业来说,是需要很大投入的.

3.服务器端处理响应

4.客户端下载,解析,渲染显示页面

服务器返回HTTP Response后,浏览器陆续开始接受数据,进行HTML下载,解析,渲染显示等过程

具体步骤如下

  1. 如果是Gzip包,则先解压为HTML.
  2. 解析HTML的头部代码,下载头部样式代码中引用的资源样式或者脚本资源文件.
  3. 解析HTML代码和样式文件代码,这个过程会构造出两个树结构,即与HTML相关的DOM树,以及与CSS相关的CSSOM树.
  4. 通过遍历DOM树和CSSOM树,浏览器依次计算每个节点的大小,坐标,颜色等样式,构造出渲染树.
  5. 根据渲染过程完成绘制的过程.

关于浏览器下载,解析,渲染页面的优化策略,根据渲染步骤,大概可以从以下几个方面入手

  1. 优化HTML的代码和结构,缩短HTML下载时间,加快HTML解析速度.
  2. 优化CSS文件和结构,缩短CSS文件下载和解析时间
  3. 合理放置JS代码,避免前面第三种情况的出现

2.首屏

  • 首屏的定义

从字面上理解,为”第一个屏幕”,而首屏时间即代码页面在”第一个屏幕”中的内容完全展示出来的时间.

与白屏不同的是,我们并不能从浏览器的系统API中获取首屏时间.在真实网络环境中,我们通过模拟的方法来获取首屏指标

  • 首屏时间的重要性
  1. 完善指标量化系统
  2. 更加真实的反馈用户体验

首屏的优化:不合理的HTML代码结构,页面资源下载序列等.最关键的是,要能够找到衡量各自页面首屏内容展示速度的方法,通过监控发现潜在的问题,然后做出调整.

3.页面整体加载

页面加载完成又称Pageload,顾名思义,即页面相关资源(CSS样式文件,JS脚本文件,图片等)全部加载完成的时间.当这个时间点被触发时,意味着当前页面对于用户来说是可以进行安全交互的.

8s规则

4s规则

4.页面可交互

5.功能交互响应

6.数据采集可行性分析

  • 终端环境数据采集分析
  • 页面性能数据采集分析

使用很多新版浏览器中已经被支持实现的HTML5 Perfomance API

  1. 基于H5 Performance Timing API,收集页面的基础性能信息

Performance Timing API主要包括一下3部分

  1. Navigation Timing :主要提供页面加载过程中的性能数据
  2. Resource Timing:主要提供页面所包含的脚本,样式表,图片等资源加载的性能数据
  3. User Timing:方便为在复杂脚本内部记录不同代码片段的执行时间提供API实现

通过Navigation Timing和Resource Timing两个部分的API,通过他们提供的属性数据,基本上可以获取从页面加载开始到结束涉及的网络加载及浏览器端渲染等待时间的消耗

  1. Navigation API

通过访问window.performance.timing对象中的属性,可以得到当前页面的相关性能信息。如下图在W3C规范定义的图可以看到Timing提供了那些属性

 

通过对照页面的加载顺序,可以清晰的了解页面的不同加载阶段。比如计算域名解析,TCP请求等处理过程中所需要的属性区间

    Timimg 口中提供的属性,都是UTC时间,即指定的时间距 GMT 时间 1970-0 1-01 午夜的毫秒数(在下面的介绍中,如果没有特殊说明 默认都是 UTC 时间)。一般我们都以NavigationStart或者 Fetch Start 的值作为页面加载的开始时间,以ResponseEnd作为分隔点,在它之前的时间一般归属到网络相关的消耗,而在它之后的时间一般归属到终端渲染的消耗,最后以 LoadEventEnd作为结束时间

  1.  Resource API

通过访问 window.performance.getEntriesByTpe reso urce”)返回的数组对象 可以遍历当前页面所包含 资源加载相关的性能信息,通过官方的例子发现,笔者获取某种特定资源的加载相关性能信息也非常方便,如图

 

  1. 页面白屏时间的监控

目前在 IE9+、 Chrome 浏览器中分别提供各自版本的 FirstPaint(即 StartRender)时间,可通过 JavaScript访问来获取

( I ) IE9+。

IE9+中,页面开始渲染的时间由 window.performance.timings. msFirstPaint来提供,即以毫秒为单位的 UTC 时间

( 2 ) Chrome

Chrome 中, 页面开始渲染的时间由 window .chrome. loadTimes().firstPaintTime 提供,但Chrome 中返回的 FirstPaintTime 以特殊的秒、 毫秒( seconds millseconds 单位的 UTC时间。所以在使用他之前需要做简单的处理

 

  • 页面性能数据加工计算

从浏览器获取原始的性能数据后,开始对数据进行加工计算,来映射前面定义的和用户体验相关的各种体验指标

  • StartTime基准计算

StarTime的定义非常重要,因为后面所有的指标都需要以此时间为基准进行计算。基于我们的经验,如果NavigationStart不为0,则使用NavigationStart作为页面Start基数。

7.计算实例-demo

1.前端优化-如何计算白屏和首屏时间

https://www.cnblogs.com/longm/p/7382163.html

2.前端速度性能统计

https://segmentfault.com/a/1190000005869953

通常一个网站,如果首屏时间在2秒以内是比较优秀的,5秒以内是可以接受的,5秒以上就不可容忍了。用户会选择刷新页面或立刻离开。

8.附录

<高性能网站建设指南>

  1. 尽量减少HTTP请求
  2. 使用CDN
  3. 静态资源使用cache
  4. 启用Gzip压缩
  5. js脚本尽量放在页面底部
  6. CSS样式表放在顶部
  7. 减少内联js和css的使用,尽可能使用外部的CSS文件
  8. 减少DNS查询
  9. 精简js
  10. 避免重定向
  11. 删除重复的脚本

这些规则能够帮助开发者快速的发现页面性能问题,一个页面如果遵守了以上规则进行前端开发,那么抛开网络因素,至少可以保证它在页面加载阶段的性能不会出现问题

性能指标

1.并发数

并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

2.响应时间(RT)

响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间。

RT ( Response Time)表示响应时间,它是从接收请求开始到服务器处理完成的时间差值。RT的长短取决于应用的特点,对于大型网站而言,所有应用都通过RPC(远程接口调用)服务化的接口得到需要的数据,大部分时间消耗都在网络和远程接口的处理上。减少 RT 的方较简单,要么合并请求,将多次调用合并成一次调用,要么减少调用,减少远程接口调用,可以通过缓存架构升级或者去除多余调用来实现。应用本身的时间大部分部依赖于CPU的处理时间,CPU的处理时间一般较短,当然应用本身仍然有很多瓶颈,例如锁等待和线程池连接等待。

对于大型网站而言,由于需要大量的服务器资源,其性能优化的目标通常是针对QPS来进行的,大型网站通常跨地区,跨国家,甚至跨洲,网络时间消耗占据90%的时间总消耗,所以优化服务器QPS目的是提升处理能力.优化PT通常不会在服务器上下功夫.通常以浏览器端(减少HTTP请求\预加载\延迟加载\异步化)和网络处理架构(如DNS\TCP\CDN)的优化作为主要方案

3.吞吐量(Throughput)

吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。

QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常用量化指标,另外还有HPS(每秒HTTP请求数)。

跟吞吐量有关的几个重要是:并发数响应时间

QPS(TPS),并发数、响应时间它们三者之间的关系是:

QPS(TPS)= 并发数 / 平均响应时间

4.页面浏览量(PV)

PV即Page View的简写, 即页面浏览量或点击量,用户每次刷新即被计算一次。

单台服务器每天PV计算:

公式1:每天总PV = QPS * 3600 * 6

公式2:每天总PV = QPS * 3600 * 8

 

5.网站独立访客(UV)

UV即Unique Visitor的简写,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次

服务器数量。

机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

机器:ceil( 每天总PV / 单台服务器每天总PV )

  1. 峰值QPS和机器计算公式

QPS ( Query per Second )表示每秒处理完成的请求数,是衡量系统吞吐量大小或者系统处理能力的指标,服务器的 QPS 越高,提供服务需要的机器就越少。每个系统都有自己的峰值QPS 表示系统最大的吞吐量。在做容量规划时,峰值 QPS 作为容量规划的主要因子,来计算需要多少台机器。可以根据一定的数学计算得出业务访问需要多少QPS 再除以 Peak QPS, 就可以得出需要机器的数量。

原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间

公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

例子:

每天300万PV的在单台机器上,这台机器需要多少QPS?

答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

如果一台机器的QPS是58,需要几台机器来支持?

答:139 / 58 = 3

 

7.关键帧时间

关键帧时间是一个时间指标——关键帧技术测算而来,关键帧技术结合图像分析、人脑视觉感知、统计学,把页面加载过程中最符合用户视觉意识中“该网站加载完成了”的时间点定义出来,该时间点就是关键帧时间。

8.页面首字节时间

TTFB (Time To First Byte)-首字节时间,是指网络请求从被发起到从服务器接收到第一个字节这段时间,它包含了 TCP连接时间,发送HTTP请求时间和获得响应消息第一个字节的时间,是能够反映服务端响应速度的重要指标。

First Byte表示首字节响应时间,该时间可以综合反映出当前连接的网络状况和服务器的响应处理速度

9.资源请求数

资源请求数(Total number of Requests)是指:一个页面加载完成时,向服务器端发起的请求的总数。

80%的响应时间花在下载网页内容(images,stylesheets, javas, s, flash等)。合并文件以减少请求次数可以减少网络建立连接的耗时,提高传输效率,从而加快页面渲染进度。

 

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

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

相关文章

网站注册邮件发送功能实现

摘抄自狂神笔记 电子邮件 要在网络上实现邮件功能&#xff0c;必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局&#xff0c;它主要负责接收用户投递过来的邮件&#xff0c;并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址&#xff1a;一般是 smtp…

《时代》评出50个最酷网站 25个网站非上不可

从2003年开始&#xff0c;《时代》周刊每年都会评选出一系列最受欢迎的网站&#xff0c;在这些网站身上我们不难看出互联网的变革与发展&#xff0c;同时清楚的认识到什么样的网站能够引领潮流。北京时间7月10日&#xff0c;美国《时代》周刊近日公布了2007年50个最受欢迎的网站…

转载:LAMP网站架构方案分析

LAMP&#xff08;Linux-Apache-MySQL-PHP&#xff09;网站架构是目前国际流行的Web框 架&#xff0c;该框架包括&#xff1a;Linux操作系统&#xff0c;Apache网络服务器&#xff0c;MySQL数据库&#xff0c;Perl、PHP或者Python编程语言&#xff0c;所有组成产品均是开源软 件…

高并发网站的演变和优化

一&#xff0c;什么是高并发 高并发是互联网分布式系统架构设计中必须考虑的因素之一&#xff0c;通常指&#xff1a;通过设计保证能够同时并行处理很多请求。 高并发指标&#xff1a; 响应时间&#xff1a;系统对请求做出响应时间。例如系统处理一个HTTP请求需要200ms,这个200…

iis网站报错:您试图从目录中执行CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序...

本人使用WIN2003 INTERNET信息服务&#xff08;IIS&#xff09;管理器建立一个网站虚拟目录&#xff0c;结果浏览网页时出现错误&#xff0c;错误提示信息大体如此&#xff1a; 该页无法显示 您试图从目录中执行 CGI、ISAPI 或其他可执行程序&#xff0c;但该目录不允许执行程…

值得收藏!最佳26个国外 CSS 酷站推荐网站

这个列表收集的最佳26个国外 CSS 酷站推荐网站对于网页设计师和 Web 开发人员都非常有用。设计师可以从下面列出的这些网站获取优秀的设计理念和流行的设计趋势&#xff0c;获取大量的创作灵感&#xff0c;进而设计出更有创意的作品。如果你有收藏这个列表中遗漏的网站&#xf…

网站统计中的数据收集原理及实现(转)

本文转自codinglabs&#xff0c;原文地址&#xff1a;http://www.codinglabs.org/html/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些…

数据获取网站分享

内容来自悟空智能科技公众号&#xff0c;侵权删。 1公开的数据库 &#xff0d; 国家数据 &#xff0d; http://data.stats.gov.cn/index.htm 数据来源于中国国家统计局&#xff0c;包含了我国经济民生等多个方面的数据&#xff0c;并且在月度、季度、年度都有覆盖&#xff0…

浅谈前端中的onmouseover 事件

修改别人的模板遇到一个问题&#xff0c;分类图的切换默认是五个&#xff0c;我想增加四个&#xff0c;一直没有增加成功。它使用的onmouseover 事件。 去查了一下&#xff1a; 定义和用法 onmouseover 事件会在鼠标指针移动到指定的对象上时发生。 语法 οnmοuseοver"…

Docker系列器十:docker-compose和网站的负载均衡

Docker应用中&#xff0c;为了达到高可用&#xff0c;可以做很多的web服务&#xff0c;保持服务的稳定性&#xff0c;在web的出口处是haproxy等负载应用。 命令&#xff1a; 在和yml文件的同文件下&#xff0c;执行任何的docker-pose的命令&#xff0c;否则是提示找不到文件的…

大型网站系统架构的演化

http://www.cnblogs.com/leefreeman/p/3993449.html 前言 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0…

软件体系结构---优酷网站架构分析

1.web环境下架构特性 可扩展、可靠、简单核心、模块化 2.优酷网站分析 1)前端框架 模块分离、前端可扩展、分层UI分离 2&#xff09;存储结构 在体系结构上&#xff0c;优酷网采用分布式的结构&#xff0c;服务器和存储设备分布在全国各地&#xff0c;用户就近访问&#xff0c;…

大型网站架构系列:分布式消息队列(一)

以下是消息队列以下的大纲&#xff0c;本文主要介绍消息队列概述&#xff0c;消息队列应用场景和消息中间件示例&#xff08;电商&#xff0c;日志系统&#xff09;。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务&#xff08;见第二篇&#xff1a;大型网…

JS基础17-网站效果

一、鼠标移入触发显示框和更改属性 要实现的效果 window.οnlοadfunction(){ //获取到div框里的li数组var oToplistdocument.getElementById(top-list);var oToplistlioToplist.getElementsByTagName(li);var oPulldocument.getElementById(pull-down);//鼠标移入时&#xff0…

Python_记一次网站数据定向爬取实现

记一次网站数据定向爬取实现 by:授客 QQ&#xff1a;1033553122 测试环境&#xff1a; Python版本&#xff1a;Python 3.4 Win7 请勿用于商业及非法用途&#xff0c;仅供学习研究用&#xff0c;否则后果自负 数据爬取场景 如下&#xff0c;打开网站查询页面&#xff0c;输入关…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

v2013调试无法访问此网站 localhost 拒绝了我们的连接请求

问题描述&#xff1a; 别人给的服务器代码&#xff0c;在本地部署以后调试的&#xff0c;localhost&#xff1a;8080 可以访问&#xff0c;localhost:2524访问不了需要改什么配置吗 解决思路&#xff1a; 这种只能在服务器上访问&#xff0c;可能端口号2524…

如何优化您的网站以提高速度

大家好&#xff01; 今天&#xff0c;我们有一个来宾帖子&#xff0c;介绍有关如何加快网站速度的一些提示&#xff01; 他目前正在一家电子商务网站上工作&#xff0c;他的任务之一是使网站快速加载。 因此&#xff0c;请在下面阅读&#xff01; 〜迈克 网站速度已成为诸如Go…

如何优化程序提高运行速度_如何优化您的网站以提高速度

如何优化程序提高运行速度大家好&#xff01; 今天&#xff0c;我们有一个来宾帖子&#xff0c;介绍有关如何加快网站速度的一些提示&#xff01; 他目前正在一家电子商务网站上工作&#xff0c;他的任务之一是使网站快速加载。 因此&#xff0c;喜欢在下面阅读&#xff01; 〜…

网站托管平台_托管Kubernetes平台综述

网站托管平台在容器协调器的竞争中&#xff0c;Kubernetes不断前进。 但是&#xff0c;就像我在Docker主机上撰写我的文章时一样&#xff0c;人们经常被困在将基础架构投入生产的步骤上。 与我最初写这篇文章时不同&#xff0c;该行业取得了长足的发展&#xff0c;正如您将看到…