前端性能优化总结

这里写目录标题

  • 页面性能测试工具
    • 测试指标
  • 前端页面性能常见的问题
  • 前端页面性能优化常见策略及方案
    • dns优化------预解析域名(异步进行)
    • http请求优化
      • 减少请求次数
      • 同时多开持久连接
  • 前面面试
    • url从输入到确认搜索发生了什么
    • js介绍new一个对象的过程,示例代码如下:
    • 介绍一下this
      • 默认绑定
      • 隐式绑定
      • 显式绑定
    • 介绍一下promise
    • class继承的原理
    • diff算法
    • 事件循环
      • 旧说法先执行微任务
      • W3c新规范任务队列做了细分
      • 调用栈(Call Stack)
      • 事件队列 (Task Queue)

页面性能测试工具

lighthouse -----> Google内置
在这里插入图片描述

测试指标

在这里插入图片描述

webPageTest -----> 在线测试工具
可以选择服务器节点
Google ------> devTools

前端页面性能常见的问题

前端页面性能优化常见策略及方案

dns优化------预解析域名(异步进行)

在这里插入图片描述

http请求优化

减少请求次数

同时多开持久连接

Chrome支持同域名六个, 多域名访问,增加并行链接

http1.1默认就是长连接,Connection:keep-alive 请求头加入
Connection: close (http1.1设置获取资源后断开连接)
http1.1新增管道机制,客户端可以同时发送多个请求(并发请求)(响应不是并发,串行)
http2 没有响应串行限制

http2 多工
HTTP/2复用TCP连接,在-个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照
顺序一-对应,这样就避免了"队头堵塞"。
这样双向的、实时的通信,就叫做多工(Multiplexing)
在这里插入图片描述

前面面试

url从输入到确认搜索发生了什么

(1) 浏览器接收到URL, 到网络请求线程的开启。
(2) 一个完整的HTTP请求并的发出。(dns、tcp)
(3)服务器接收到请求并转到具体的处理后台。
(4)前后台之间的HTTP交互和涉及的缓存机制。
(5)浏览器接收到数据包后的关键渲染路径。
(6) JS引擎的解析过程.

1.用户输入URL,会使用浏览器默认搜索引擎加上搜索内容合成url;如果是域名会加上协议(如https)合成完整的url。

2.网络进程接收到url后,先查找有没有缓存。有缓存,直接返回缓存的资源。 没有缓存。(进入真正的网络请求)。

3.首先获取域名的IP,系统会首先自动从hosts文件中寻找域名对应的 IP 地址,一旦找到,和服务器建立TCP连接;如果没有找到,则系统会将网址提交 DNS 域名解析服务器进行 IP 地址的解析。

4.利用IP地址和服务器建立TCP连接(3次握手)

5.建立连接后,浏览器构建数据包(包含请求行,请求头,请求正文,并把该域名相关Cookie等数据附加到请求头),然后向服务器发送请求消息。

6.服务器接收到消息后根据请求信息构建响应数据(包括响应行,响应头,响应正文),然后发送回网络进程。

7.数据传输完成,TCP四次挥手断开连接。如果,浏览器或者服务器在HTTP头部加上如下信息,TCP就一直保持连接。保持TCP连接可以省下下次需要建立连接的时间,提示资源加载速度Connection:Keep-Alive 。

8.网络进程将获取到的数据包进行解析,根据响应头中的Content-type来判断响应数据的类型,如果是字节流类型,就将该请求交给下载管理器,该导航流程结束,不再进行;如果是text/html类型,就通知浏览器进程获取到文档准备渲染。

浏览器进程获取到通知之后。新建一个渲染进程。

渲染进程对文档进行页面解析和子资源加载。解析html生成DOM树,解析CSSOM树。合并生成render tree,
将每个节点的具体绘制方式转化到屏幕上的实际像素。

js介绍new一个对象的过程,示例代码如下:

function ClassA(){this.name = "123"
}
var p = new ClassA();

1、 创建空对象;
  var obj = {};
2、 设置新对象obj的constructor属性为构造函数的名称,设置新对象obj的__proto__属性指向构造函数的prototype对象;
  obj.proto = ClassA.prototype;
3、 使用新对象调用函数,函数中的this被指向新实例对象:
  ClassA.call(obj);  //通过 call(),obj能够使用属于另一个对象的方法。
4、 将初始化完毕的obj返回,赋给变量p

介绍一下this

默认绑定

默认绑定的字面意思就是,不满足其他的绑定方式,而执行的绑定规则。默认绑定会把this绑定到全局对象(是一个危险的操作,文章后面会说为什么) 看代码

function foo(){var num=2;this.num++console.log(this.num)}var num=0;foo()//1

在foo方法的代码块中操作的是window.num++

隐式绑定

函数被调用的位置有上下文,或者是该函数的引用地址是不是被某个对象的属性引用,并通过对象的属性直接运行该函数。如果出现上述的情况,就会触发this的隐式绑定,this就会被绑定成当前对象 看代码

function foo(){console.log(this.name)
}
var bar={name:'shiny',foo:foo
}
bar.foo()//shiny

显式绑定

call、apply绑定

介绍一下promise

class继承的原理

diff算法

事件循环

首先,JavaScript是一门单线程的语言,意味着同一时间内只能做一件事,但是这并不意味着单线程就是阻塞,而实现单线程非阻塞的方法就是事件循环。
JavaScript中的任务分为同步任务和异步任务:
同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行,
异步任务:异步执行的任务,比如ajax网络请求,setTimeout定时函数等。异步任务进入任务队列。

旧说法先执行微任务

I/O、定时器、事件绑定、ajax等都是宏任务
Promise的then、catch、finally和process的nextTick都是微任务

W3c新规范任务队列做了细分

分为微队列、延时队列、交互队列等,先执行微队列的任务,依次是交互、延时。

调用栈(Call Stack)

是一种后进先出的数据结构。当一个脚本执行的时候,js引擎会解析这段代码,并将其中的同步代码按照执行顺序加入调用栈中,然后从头开始执行。

事件队列 (Task Queue)

js引擎遇到一个异步事件后并不会一直等待其返回结果,而是会将这个事件挂起(其他模块进行处理),继续执行执行栈中的其他任务。当一个异步事件返回结果后,js会将这个事件加入到事件队列。

Google浏览器是多进程的在这里插入图片描述

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

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

相关文章

Linux 进程等待

在2号手册里查wait()。wait()等待任意一个子进程的状态。 wait()等待成功会返回该子进程的id,返回失败会返回-1: 小实验 子进程的退出码 子进程执行work(),父进程wait子进程。 子进程跑完5秒之后就e…

GCANet_Gated context aggregation network for image dehazing and deraining

2019、中科大港科、有代码 Chen D, He M, Fan Q, et al. Gated context aggregation network for image dehazing and deraining[C]//2019 IEEE winter conference on applications of computer vision (WACV). IEEE, 2019: 1375-1383. GitHub - cddlyf/GCANet: Implementation…

丢掉破解版,官方免费了!!!

哈喽!大家好。 几天不见,今天给大家带来一款海外的神器,官方宣布完全免费,但仅限于个人与教育用途,切勿商用噢! 不要看这个软件名字普普通通,实际上内蕴乾坤! 接下来看我给大家炫一…

队列的实现和OJ练习(c语言)

目录 概念 队列的实现 利用结构体存放队列结构 为什么单链表不使用这种方法? 初始化队列 小提示: 队尾入队列 队头出队列 获取队头元素 获取队尾元素 获取队列中有效元素个数 检测队列是否为空 销毁队列 最终代码 循环队列 队列的OJ题 …

元素清空操作clear与选择操作check

元素清空操作clear与选择操作check clear() 作用 清空输入框的所有内容.clear() 等价于 .type("{selectall}{backspace}") 语法 .clear() .clear(options)option选项 元素选中操作check与uncheck check 语法 // 所有匹配到的选择框都会被选中一遍 .check()/…

三、防火墙-源NAT

学习防火墙之前,对路由交换应要有一定的认识 源NAT基本原理1.1.NAT No-PAT1.2.NAPT1.3.出接口地址方式(Easy IP)1.4.Smart NAT1.5.三元组 NAT1.6.多出口场景下的源NAT 总结延伸 ——————————————————————————————…

部署你的第一个应用

🗓️实验环境 OS名称Microsoft Windows 11 家庭中文版系统类型x64-based PCDocker版本Docker version 24.0.6, build ed223bcminikube版本v1.32.0 🤓FastAPI 构建应用 #基于fastapi快速创建一个项目 rkun1LAPTOP-TUS5FU0D MINGW64 / $ mkdir k8s-appr…

数学建模之拟合及其代码

发现新天地,欢迎访问Cr不是铬的个人网站 引言 与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合…

基于跳蛛算法优化概率神经网络PNN的分类预测 - 附代码

基于跳蛛算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于跳蛛算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于跳蛛优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组(一)数组的定义(二)二维数组(三)多维数组的存储(四)多维数组的下标的相关计算 二、矩阵(一)特殊矩阵和稀疏矩阵(二)…

hp惠普Victus Gaming Laptop 15-fa1025TX/fa1005tx原装出厂Win11系统ISO镜像

光影精灵9笔记本电脑原厂W11系统22H2恢复出厂时开箱状态一模一样 适用型号:15-fa1003TX,15-fa1005TX,15-fa1007TX,15-fa1025TX 链接:https://pan.baidu.com/s/1fBPjed1bhOS_crGIo2tP1w?pwduzvz 提取码&#xff1a…

解决vue中引入天地图显示不全问题,设置setTimeout即可解决!

index.html中引入天地图api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地图 //初始化天地图 initTMap() {const T window.T;// 3.初始化地图对象this.tMap new…

LeetCode 2304. 网格中的最小路径代价:DP

【LetMeFly】2304.网格中的最小路径代价&#xff1a;DP 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-path-cost-in-a-grid/ 给你一个下标从 0 开始的整数矩阵 grid &#xff0c;矩阵大小为 m x n &#xff0c;由从 0 到 m * n - 1 的不同整数组成。你可以…

redis五种基本数据类型

redis存储任何类型的数据都是以key-value形式保存&#xff0c;并且所有的key都是字符串&#xff0c;所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是&#xff1a;String、List、Set、Zset、Hash 一) 字符串(String) String是redis最基本的类型&#xff0c;v…

地图导航测试用例,你get了吗?

地图导航是我们经常使用的工具&#xff0c;能帮助我们指引前进的方向。 接下来&#xff0c;会从功能测试、UI测试、兼容测试、安全测试、网络测试、性能测试、易用性测试、文档和国际化语言测试8个方面来编写地图导航测试用例。 一 功能测试 输入起点和终点&#xff0c;验证…

优先级队列(priority_queue)

文章目录 优先级队列的定义定义&#xff1a;接口头文件优先队列和堆的关系使用&#xff1a;排序的规则容器 仿函数应用 队列存指针问题&#xff1a; 优先级队列的定义 定义&#xff1a; 黄色部分是仿函数 接口 头文件 这里不需要包含其他的头文件只需要使用队列的头文件就可以…

LeetCode算法题解(动态规划)|LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树

一、LeetCode343. 整数拆分 题目链接&#xff1a;343. 整数拆分 题目描述&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入…

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了&#xff0c;因为太忙的原因就一直跳票&#xff0c;正好最近两件事的出现&#xff0c;又触发了想写这篇文章的冲动。 两件事主要是&#xff1a; 一&#xff0c;10 月份各家陆续公布了单月销量以及累计销量&#xff1b; 二&#xff0c;极氪在北京正式发布了 …

【GUI】-- 10 贪吃蛇小游戏之静态面板绘制

GUI编程 04 贪吃蛇小游戏 4.1 第一步&#xff1a;先绘制一个静态的面板 首先&#xff0c;需要新建两个类&#xff0c;一个StartGame类作为游戏的主启动类&#xff1b;一个GamePanel类作为游戏的面板类。此外&#xff0c;再新建一个Data类作为数据中心(存放了小蛇各部分图像的…

微信朋友圈全新玩法,轻松互动,引爆你的社交圈

随着社交媒体的普及&#xff0c;越来越多的人开始利用朋友圈来展示自己的生活和与朋友互动。而在这个数字时代&#xff0c;定时发圈、跟圈和朋友圈互动已经成为了一种社交习惯。本文将介绍这些功能的概念和一键转发朋友圈的实现方法。 什么是定时发圈、跟圈、朋友圈互动和一键转…