【前端】性能优化和分类

news2025/6/6 20:34:53

本页知识点参考:https://zhuanlan.zhihu.com/p/514222781

1. 加载性能优化

1.1 网站性能优化
  1. content方法:
    1)减少HTTP请求:合并文件,CSS精灵,inline Image
    2)减少DNS查询:DNS缓存,将资源分布到恰当数量的主机名
    3)减少DOM元素数量

  2. server方法
    1)使用CDN
    2)配置ETag
    3)组件使用Gzip压缩

  3. cookie方法:减少cookie大小

  4. css方法
    1)样式表放到页面顶部
    2)不使用css表达式
    3)使用<link>不使用@import

  5. javascript方法
    1)脚本放到页面底部
    2)将jscss从外部引入
    3)压缩javascript和css
    4)删除不需要的脚本
    5)减少DOM访问

  6. 图片
    1)优化图片:根据实际颜色选择色深、压缩
    ① HTTP规范(Hypertext Transfer Protocol):TCP报文,对
    ② HTTP报文:HTTP报文主体和Web标准,
    ③ HTTP通信:Hypertext Transfer Protocol 超文本传输协议。
    ④ HTTP-Web:
    2)优化css精灵:
    3)不要在html中拉伸图片
    4)隐式转换规则
    ① undefined, null:==下互相等且自身等
    ② ==值:只需要值相等,无需类型

    ③ 值相等,无需
    ToNumber(A), ToNumber(B), ToPrimitive(A)
    ④ HTTP, TCP, 网络接口

    IP分组
    TCP

    ⑤ 套接字API调用

    
    

    ⑥ 描述

1.2 用过前端性能优化
  1. 减少http请求次数:CSS Sprites, JS, CSS源码,图片大小控制合适;网络Gzip,CDN托管,data缓存,图片服务器
  2. 前端模板JS+数据:减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果;不用请求,减少请求次数
  3. 构建CSSOM树
    1. Tokenizing:字符流转为标记流
    2. Node根据标记创建节点
    3. CSSOM节点创建CSSOM树
  4. 根据DOM树和CSSOM树构建
    1. Tokenizing:DOM树的根节点遍历节点,不可见节点包括
    2. Lexing:词法分析将
    3. DOM construction:根据HTML标记关系将对象组成DOM树
  5. 解析过程中遇到图片、样式表、js文件,启动下载
    1. 构建CSSOM树
      1.
      2. 灵活的语法,表达能力强
      function fn() {
         console.log('我是具名函数')
         console.log('看,我有名字')
         console.log('我的名字叫fn')
      }
      fn() 
      fn()
      
      
      
      1. 数据库操作
      
      
      1. 移动开发平台
      
      
    2. 使用
  6. js解析如下
    1. 浏览器创建Document
1.3 前端静态化

https://blog.csdn.net/xxc_yc/article/details/131570307

1.4 懒加载,虚拟列表(虚拟滚动)和分页

三者都是减少长列表中无用资源的加载,总结如下

-技术-懒加载虚拟列表分页
优点用户体验好虚拟列表能够快速跳转,方便回溯定位
场景C端产品B端产品
缺点不能快速跳转,不方便回溯定位。一定程度上没有解决长列表DOM带来的性能问题用户体验差;需要后端支持
1.4.1 懒加载

参考:https://blog.csdn.net/muzidigbig/article/details/115376889

  1. 概念
    即延迟加载,优先加载可视区域的内容、其他部分等进入可视再加载。

  2. 使用原因

    1. 减少无用资源的加载
    2. 提升用户体验
    3. 防止加载过多图片而影响其它资源文件的加载
  3. 原理
    由于图片的加载是由 src 引起的,当对 src 赋值时,浏览器就会请求图片资源。根据这个原理,我们使用 HTML5 的 data-xxx 属性来储存图片的路径,在需要加载图片的时候,将 data-xxx 中图片的路径赋值给 src,这样就实现了图片的按需加载,即懒加载

  4. 具体使用:vue-lazyload
    Step 1 安装vue-lazyload

    # npm
    npm install vue-lazyload --save
    # yarn
    yarn add vue-lazyload --save
    

    如果yarn中遇到“certificate has expired”错误,则在控制台使用以下命令或者在C:\User\.yarnrc中设置strict-ssl false忽略证书限制

    yarn config set "strict-ssl" false -g
    

    Step 2 全局导入
    在main.js中使用,以下是Vue的使用方法

    import App from './App.vue'
    import VueLazyload from 'vue-lazyload'
    const app = createApp(App)
    app.use(VueLazyload, {
     preload: 1.5, // number:表示lazyload的元素, 距离页面底部距离的百分比。计算值为(preload - 1)
     error: "./asstes/img/lazyLoad/图片ERROR.png", // string:加载失败后图片地址
     loading: "./assets/img/lazyLoad/图片LOADING.jpg", // string: 加载时图片地址
     attempt: 1, // number:加载错误后最大尝试次数
     // listenEvents['scroll','wheel','mousewheel','resize','animationend','	transitionend','touchmove'],  //想让vue监听的事件
    })
    

    Step 3 直接使用在img标签中使用 v-lazy,如果后端要使用分页则必须加入:key

    <img v-lazy="videoOverview.imgUrl" :key="videoOverview.imgUrl" class="video-content"/>
    
  5. 原生JS实现
      1)
    window.innerHeight:浏览器可视区高度
    document.body.scrollTop || document.documentElement.scrollTop:浏览器滚动的区域
    imgs.offsetTop
      图片加载条件:img.offsetTop < window.innerHeight + document.body.scrollTop

    具体实现的HTML部分

    <img src="loading.gif"  data-src="pic.png">
    <img src="loading.gif"  data-src="pic.png">
    

    具体实现的JS部分

    function lazyLoad(){
     var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
     var winHeight= window.innerHeight;
     for(var i=0;i < imgs.length;i++){
         if(imgs[i].offsetTop < scrollTop + winHeight ){
             imgs[i].src = imgs[i].getAttribute('data-src');
         }
     }
    }
    // window.onscroll是个事件处理器,指定滚动页面时执行的函数,lazyLoad是事件发生时调用的
    window.onscroll = lazyLoad
    

  2)
  3)

1.3.2 虚拟列表
  1. 概念
    是对于列表形态数据展示的一种按需渲染,以提高无限滚动的性能

  2. 和懒加载的区别

    1. 懒加载的应用场景偏向于网络资源请求,解决网络资源请求过多时,造成的网站响应时间过长的问题
    2. 虚拟列表是对长列表渲染的一种优化,解决大量数据渲染时,造成的渲染性能瓶颈的问题
  3. 原理
    根据容器元素的高度 clientHeight 以及列表项元素的高度 offsetHeight 来显示长列表数据中的某一个部分,而不是去完整地渲染整个长列表。

  4. 第三方库

    1. vue-virtual-scroll包:目前发现只能在vue2的export default情况下使用,vue3会遇见很多错误(官网)
      Step 1 安装
      yarn add vue-virtual-scroll
      
      Step 2 全局导入
      在main.js中添加以下代码
      import App from './App.vue'
      import VueVirtualScroller from "vue-virtual-scroller"
      import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
      app.use(VueVirtualScroller)
      
      Step 3 在页面中使用
      <virtual-scroller :items="items" :item-height="40" class="scroll-container">
      <template slot-scope="{ item }">
         <div class="list-item">{{ item }}</div>
      </template>
      </virtual-scroller>
      
    2. vue-virtual-scroll-list包:使用vue-virtual-scroll-list
  5. 实现

    1. 使用React
      (怎么使用React+TS+IntersectionObserver实现视频懒加载和自动播放功能)

      https://www.27ka.cn/134728.html
      (React虚拟滚动的三种方法)
      https://blog.csdn.net/xgangzai/article/details/131179466

    2. 使用Vue
      1. 相信

浏览器的5种观察模式:https://zhuanlan.zhihu.com/p/482144072
《IntersectionObserver》
https://developer.mozilla.org/zh-CN/docs/Web/API/IntersectionObserver#%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0
《交叉观察器API》
https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API
《什么是Intersection Observer》
https://zhuanlan.zhihu.com/p/554549262

1.3.3 分页

2. 渲染性能优化

2.1 防抖(Throttle)和节流(Debounce)

用于节省性能,均是基于DOM事件限制正在执行的JS数量的方法

2.1.1 概念
  1. 防抖:强制函数再次被调用和调用间需相隔一定时间,如“仅当100ms过去没被调用才执行”
  2. 节流:强制执行一个函数在一段时间内可以被调用的最大次数。如“最多每 100 毫秒执行一次此函数”
2.1.2 区别
  1. 2
2.1.3 调用
  1. 防抖Throttle

  2. 节流Debounce


2.1.4 手撕
  1. 防抖Throttle
function throttle(func, play){
    // 定义计时器timer
    let timer = null
    // 防抖核心:每次触发事件计时器会重新计时(递归调用,timer)
    return function(){
        const that = this
        const args = arguments
        // 开始重置timer

    }
}
  1. 节流Debounce
  1. 1

3. 浏览器安全

3.1 XSS攻击:代码注入攻击
  1. XSS是跨站脚本攻击。攻击者通过注入恶意脚本,用户浏览器上运行,从而盗取用户的信息如cookie等
  2. 储存性
  3. 反射
  4. DOM:前端的漏洞,
3.2 CSRF:跨站请求伪造攻击

用户进入一个第三方网站

3.3 1
3.4 浏览器同源策略(跨域)

同源策略:protocol(协议),domain(域名),port(端口)网页只能与同源的进行交互

  1. cors:服务断配置cors
  2. jsop:通过<script>标签src,发送带有callback参数的get,
  3. nginx:配置
  4. 本地开启代理服务器:React Vue都有对应的配置

4. vue中key的原理

  1. 1
  2. 1

5. Vue常用的修饰符有哪些,应用场景?

  1. 1
  2. 1
  3. 1
  4. 1

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

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

相关文章

PPO和GRPO算法

verl 是现在非常火的 rl 框架&#xff0c;而且已经支持了多个 rl 算法&#xff08;ppo、grpo 等等&#xff09;。 过去对 rl 的理解很粗浅&#xff08;只知道有好多个角色&#xff0c;有的更新权重&#xff0c;有的不更新&#xff09;&#xff0c;也曾硬着头皮看了一些论文和知…

rk3588 上运行smolvlm-realtime-webcam,将视频转为文字描述

smolvlm-realtime-webcam 是一个开源项目&#xff0c;结合了轻量级多模态模型 SmolVLM 和本地推理引擎 llama.cpp&#xff0c;能够在本地实时处理摄像头视频流&#xff0c;生成自然语言描述&#xff0c; 开源项目地址 https://github.com/ngxson/smolvlm-realtime-webcamhttps…

Rust 学习笔记:Box<T>

Rust 学习笔记&#xff1a;Box Rust 学习笔记&#xff1a;Box<T\>Box\<T> 简介使用 Box\<T\> 在堆上存储数据启用带有 box 的递归类型关于 cons 列表的介绍计算非递归类型的大小使用 Box\<T\> 获取大小已知的递归类型 Rust 学习笔记&#xff1a;Box<…

操作系统学习(十三)——Linux

一、Linux Linux 是一种类 Unix 的自由开源操作系统内核&#xff0c;由芬兰人 Linus Torvalds 于 1991 年首次发布。如今它广泛应用于服务器、桌面、嵌入式设备、移动设备&#xff08;如 Android&#xff09;等领域。 设计思想&#xff1a; 原则描述模块化与可移植性Linux 内…

NLP学习路线图(二十二): 循环神经网络(RNN)

在自然语言处理&#xff08;NLP&#xff09;的广阔天地中&#xff0c;序列数据是绝对的核心——无论是流淌的文本、连续的语音还是跳跃的时间序列&#xff0c;都蕴含着前后紧密关联的信息。传统神经网络如同面对一幅打散的拼图&#xff0c;无法理解词语间的顺序关系&#xff0c…

每日一C(1)C语言的内存分布

目录 代码区 常量区 全局/静态区 初始化数据段&#xff08;.data&#xff09; 未初始化数据段&#xff08;.bss&#xff09; 堆区 栈区 总结 今天我们学习的是C语言的内存分布&#xff0c;以及这些分区所存储的内容和其特点。今天的思维导图如下。 C语言作为一款直接处…

Photoshop使用钢笔绘制图形

1、绘制脸部路径 选择钢笔工具&#xff0c;再选择“路径”。 基于两个点绘制一个弯曲的曲线 使用Alt键移动单个点&#xff0c;该点决定了后续的曲线方向 继续绘制第3个点 最后一个点首尾是同一个点&#xff0c;使用钢笔保证是闭合回路。 以同样的方式绘制2个眼睛外框。 使用椭…

应用层协议:HTTP

目录 HTTP&#xff1a;超文本传输协议 1.1 HTTP报文 1.1.1 请求报文 1.1.2 响应报文 1.2 HTTP请求过程和原理 1.2.1 请求过程 1、域名&#xff08;DNS&#xff09;解析 2、建立TCP连接&#xff08;三次握手&#xff09; 3、发送HTTP请求 4、服务器处理请求 5、返回H…

复习——C++

1、scanf和scanf_s区别 2、取地址&#xff0c;输出 char ba; char* p&b; cout<<*p; cout<<p; p(char*)"abc"; cout<<*p; cout<<p; cout<<(void*)p; 取地址&#xff0c;把b的地址给p 输出*p&#xff0c;是输出p的空间内的值…

SPI通信协议(软件SPI读取W25Q64)

SPI通信协议 文章目录 SPI通信协议1.SPI通信2.SPI硬件和软件规定2.1SPI硬件电路2.2移位示意图2.3SPI基本时序单元2.3.1起始和终止条件2.3.2交换一个字节&#xff08;模式1&#xff09; 2.4SPI波形分析&#xff08;辅助理解&#xff09;2.4.1发送指令2.4.2指定地址写2.4.3指定地…

JavaWeb:前后端分离开发-部门管理

今日内容 前后端分离开发 准备工作 页面布局 整体布局-头部布局 Container 布局容器 左侧布局 资料\04. 基础文件\layout/index.vue <script setup lang"ts"></script><template><div class"common-layout"><el-containe…

字节开源FlowGram:AI时代可视化工作流新利器

字节终于开源“扣子”同款引擎了&#xff01;FlowGram&#xff1a;AI 时代的可视化工作流利器 字节FlowGram创新性地融合图神经网络与多模态交互技术&#xff0c;构建了支持动态拓扑重构的可视化流程引擎。该系统通过引入 f ( G ) ( V ′ &#xff0c; E ′ ) f(\mathcal{G})…

(LeetCode 每日一题)3403. 从盒子中找出字典序最大的字符串 I (贪心+枚举)

题目&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 题目&#xff1a;贪心枚举字符串&#xff0c;时间复杂度0(n)。 最优解的长度一定是在[1,n-numFriends]之间。 字符串在前缀都相同的情况下&#xff0c;长度越长越大。 C版本&#xff1a; class Solution { public:st…

GPIO的内部结构与功能解析

一、GPIO总体结构 总体构成 1.APB2(外设总线) APB2总线是微控制器内部连接CPU与外设&#xff08;如GPIO&#xff09;的总线&#xff0c;负责CPU对GPIO寄存器的读写访问&#xff0c;支持低速外设通信 2.寄存器 控制GPIO的配置&#xff08;输入/输出模式、上拉/下拉等&#x…

php7+mysql5.6单用户中医处方管理系统V1.0

php7mysql5.6中医处方管理系统说明文档 一、系统简介 ----------- 本系统是一款专为中医诊所设计的处方管理系统&#xff0c;基于PHPMySQL开发&#xff0c;不依赖第三方框架&#xff0c;采用原生HTML5CSS3AJAX技术&#xff0c;适配手机和电脑访问。 系统支持药品管理、处方开…

智慧物流园区整体解决方案

该智慧物流园区整体解决方案借助云计算、物联网、ICT 等技术,从咨询规划阶段介入,整合供应链上下游资源,实现物流自动化、信息化与智能化。方案涵盖智慧仓储管理(如自动化立体仓储系统、温湿度监控)、智慧物流(运输管理系统 TMS、GPS 监控)、智慧车辆管理(定位、调度、…

【会员专享数据】1960—2023年我国省市县三级逐年降水量数据(Shp/Excel格式)

之前我们分享过1960-2023年我国0.1分辨率的逐日、逐月、逐年降水栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;是研究者Jinlong Hu与Chiyuan Miao分享在Zenodo平台上的数据&#xff0c;很多小伙伴拿到数据后反馈栅格数据不太方便使用&#xff0c;问我…

OpenCV C++ 心形雨动画

❤️ OpenCV C 心形雨动画 ❤️ 本文将引导你使用 C 和 OpenCV 库创建一个可爱的心形雨动画。在这个动画中&#xff0c;心形会从屏幕顶部的随机位置落下&#xff0c;模拟下雨的效果。使用opencv定制自己的专属背景 目录 简介先决条件核心概念实现步骤 创建项目定义心形结构…

Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结

Fullstack 面试复习笔记&#xff1a;Java 基础语法 / 核心特性体系化总结 上一篇笔记&#xff1a;Fullstack 面试复习笔记&#xff1a;操作系统 / 网络 / HTTP / 设计模式梳理 目前上来说&#xff0c;这个系列的笔记本质上来说&#xff0c;是对不理解的知识点进行的一个梳理&…

安卓Compose实现鱼骨加载中效果

安卓Compose实现鱼骨加载中效果 文章目录 安卓Compose实现鱼骨加载中效果背景与简介适用场景Compose骨架屏与传统View实现对比Shimmer动画原理简介常见问题与优化建议参考资料 本文首发地址 https://h89.cn/archives/404.html 背景与简介 在移动应用开发中&#xff0c;加载中占…