【前端】性能优化和分类
本页知识点参考:https://zhuanlan.zhihu.com/p/514222781
1. 加载性能优化
1.1 网站性能优化
-
content
方法:
1)减少HTTP请求:合并文件,CSS精灵,inline Image
2)减少DNS查询:DNS缓存,将资源分布到恰当数量的主机名
3)减少DOM元素数量 -
server
方法
1)使用CDN
2)配置ETag
3)组件使用Gzip压缩 -
cookie
方法:减少cookie
大小 -
css
方法
1)样式表放到页面顶部
2)不使用css
表达式
3)使用<link>
不使用@import
-
javascript
方法
1)脚本放到页面底部
2)将js
和css
从外部引入
3)压缩javascript和css
4)删除不需要的脚本
5)减少DOM
访问 -
图片
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 用过前端性能优化
- 减少http请求次数:CSS Sprites, JS, CSS源码,图片大小控制合适;网络Gzip,CDN托管,data缓存,图片服务器
- 前端模板JS+数据:减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果;不用请求,减少请求次数
- 构建CSSOM树
- Tokenizing:字符流转为标记流
- Node根据标记创建节点
- CSSOM节点创建CSSOM树
- 根据DOM树和CSSOM树构建
- Tokenizing:DOM树的根节点遍历节点,不可见节点包括
- Lexing:词法分析将
- DOM construction:根据HTML标记关系将对象组成DOM树
- 解析过程中遇到图片、样式表、js文件,启动下载
- 构建CSSOM树
1.
2. 灵活的语法,表达能力强function fn() {console.log('我是具名函数')console.log('看,我有名字')console.log('我的名字叫fn') } fn() fn()
- 数据库操作
- 移动开发平台
- 使用
- 构建CSSOM树
- js解析如下
- 浏览器创建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
-
概念
即延迟加载,优先加载可视区域的内容、其他部分等进入可视再加载。 -
使用原因
- 减少无用资源的加载
- 提升用户体验
- 防止加载过多图片而影响其它资源文件的加载
-
原理
由于图片的加载是由 src 引起的,当对 src 赋值时,浏览器就会请求图片资源。根据这个原理,我们使用 HTML5 的 data-xxx 属性来储存图片的路径,在需要加载图片的时候,将 data-xxx 中图片的路径赋值给 src,这样就实现了图片的按需加载,即懒加载 -
具体使用:
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"/>
-
原生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 虚拟列表
-
概念
是对于列表形态数据展示的一种按需渲染,以提高无限滚动的性能 -
和懒加载的区别
- 懒加载的应用场景偏向于网络资源请求,解决网络资源请求过多时,造成的网站响应时间过长的问题
- 虚拟列表是对长列表渲染的一种优化,解决大量数据渲染时,造成的渲染性能瓶颈的问题
-
原理
根据容器元素的高度 clientHeight 以及列表项元素的高度 offsetHeight 来显示长列表数据中的某一个部分,而不是去完整地渲染整个长列表。 -
第三方库
vue-virtual-scroll
包:目前发现只能在vue2的export default
情况下使用,vue3
会遇见很多错误(官网)
Step 1 安装
Step 2 全局导入yarn add vue-virtual-scroll
在main.js中添加以下代码
Step 3 在页面中使用import App from './App.vue' import VueVirtualScroller from "vue-virtual-scroller" import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' app.use(VueVirtualScroller)
<virtual-scroller :items="items" :item-height="40" class="scroll-container"> <template slot-scope="{ item }"><div class="list-item">{{ item }}</div> </template> </virtual-scroller>
vue-virtual-scroll-list
包:使用vue-virtual-scroll-list
-
实现
- 使用React
(怎么使用React+TS+IntersectionObserver实现视频懒加载和自动播放功能)https://www.27ka.cn/134728.html
(React虚拟滚动的三种方法)
https://blog.csdn.net/xgangzai/article/details/131179466 - 使用Vue
- 相信
- 使用React
浏览器的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 概念
- 防抖:强制函数再次被调用和调用间需相隔一定时间,如“仅当100ms过去没被调用才执行”
- 节流:强制执行一个函数在一段时间内可以被调用的最大次数。如“最多每 100 毫秒执行一次此函数”
2.1.2 区别
- 2
2.1.3 调用
-
防抖Throttle
-
节流Debounce
2.1.4 手撕
- 防抖Throttle
function throttle(func, play){// 定义计时器timerlet timer = null// 防抖核心:每次触发事件计时器会重新计时(递归调用,timer)return function(){const that = thisconst args = arguments// 开始重置timer}
}
- 节流Debounce
- 1
3. 浏览器安全
3.1 XSS攻击:代码注入攻击
- XSS是跨站脚本攻击。攻击者通过注入恶意脚本,用户浏览器上运行,从而盗取用户的信息如cookie等
- 储存性
- 反射
- DOM:前端的漏洞,
3.2 CSRF:跨站请求伪造攻击
用户进入一个第三方网站
3.3 1
3.4 浏览器同源策略(跨域)
同源策略:protocol(协议),domain(域名),port(端口)网页只能与同源的进行交互
- cors:服务断配置cors
- jsop:通过
<script>
标签src,发送带有callback参数的get, - nginx:配置
- 本地开启代理服务器:React Vue都有对应的配置
4. vue中key的原理
- 1
- 1
5. Vue常用的修饰符有哪些,应用场景?
- 1
- 1
- 1
- 1
相关文章:

【前端】性能优化和分类
本页知识点参考:https://zhuanlan.zhihu.com/p/514222781 1. 加载性能优化 1.1 网站性能优化 content方法: 1)减少HTTP请求:合并文件,CSS精灵,inline Image 2)减少DNS查询:DNS缓存&…...

PPO和GRPO算法
verl 是现在非常火的 rl 框架,而且已经支持了多个 rl 算法(ppo、grpo 等等)。 过去对 rl 的理解很粗浅(只知道有好多个角色,有的更新权重,有的不更新),也曾硬着头皮看了一些论文和知…...
ceph 对象存储用户限额满导致无法上传文件
查看日志 kl logs -f rook-ceph-rgw-my-store-a-5cc4c4d5b5-26n6j|grep -i error|head -1Defaulted container "rgw" out of: rgw, log-collector, chown-container-data-dir (init) debug 2025-05-30T19:44:11.573+0000 7fa7b7a6d700...

rk3588 上运行smolvlm-realtime-webcam,将视频转为文字描述
smolvlm-realtime-webcam 是一个开源项目,结合了轻量级多模态模型 SmolVLM 和本地推理引擎 llama.cpp,能够在本地实时处理摄像头视频流,生成自然语言描述, 开源项目地址 https://github.com/ngxson/smolvlm-realtime-webcamhttps…...
某航参数逆向及设备指纹分析
文章目录 1. 写在前面2. 接口分析3. 加密分析4. 算法还原5. 设备指纹风控分析与绕过【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究…...
SQL思路解析:窗口滑动的应用
目录 🎯 问题目标 第一步:从数据中我们能直接得到什么? 第二步:我们想要的“7天窗口”长什么样? 第三步:SQL 怎么表达“某一天的前六天”? 🔍JOIN 比窗口函数更灵活 第四步&am…...

Rust 学习笔记:Box<T>
Rust 学习笔记:Box Rust 学习笔记:Box<T\>Box\<T> 简介使用 Box\<T\> 在堆上存储数据启用带有 box 的递归类型关于 cons 列表的介绍计算非递归类型的大小使用 Box\<T\> 获取大小已知的递归类型 Rust 学习笔记:Box<…...
C# 从 ConcurrentDictionary 中取出并移除第一个元素
C# 从 ConcurrentDictionary 中取出并移除第一个元素 要从 ConcurrentDictionary<byte, int> 中取出并移除第一个元素,需要结合 遍历 和 原子移除操作。由于 ConcurrentDictionary 是无序集合,"第一个元素" 通常是指最早添加的元素&…...

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

NLP学习路线图(二十二): 循环神经网络(RNN)
在自然语言处理(NLP)的广阔天地中,序列数据是绝对的核心——无论是流淌的文本、连续的语音还是跳跃的时间序列,都蕴含着前后紧密关联的信息。传统神经网络如同面对一幅打散的拼图,无法理解词语间的顺序关系,…...

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

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

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

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

SPI通信协议(软件SPI读取W25Q64)
SPI通信协议 文章目录 SPI通信协议1.SPI通信2.SPI硬件和软件规定2.1SPI硬件电路2.2移位示意图2.3SPI基本时序单元2.3.1起始和终止条件2.3.2交换一个字节(模式1) 2.4SPI波形分析(辅助理解)2.4.1发送指令2.4.2指定地址写2.4.3指定地…...
PostgreSQL-基于PgSQL17和11版本导出所有的超表建表语句
最新版本更新 https://code.jiangjiesheng.cn/article/368?fromcsdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 1. 基于pgsql 17.4 研究 查询psql版本:SELECT version(); 查看已知1条建表语句和db中数据关系 SELECT create_hypert…...

JavaWeb:前后端分离开发-部门管理
今日内容 前后端分离开发 准备工作 页面布局 整体布局-头部布局 Container 布局容器 左侧布局 资料\04. 基础文件\layout/index.vue <script setup lang"ts"></script><template><div class"common-layout"><el-containe…...
ArcGIS计算多个栅格数据的平均栅格
3种方法计算多个栅格数据的平均栅格 1->使用“ 栅格计算器”工具 原理就是把多幅影像数据相加,然后除以个数,就能得到平均栅格。 2-> 使用“像元统计数据”工具,如果是ArcGIS pro,则是“像元统计”工具。使用这个工具可以…...

字节开源FlowGram:AI时代可视化工作流新利器
字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器 字节FlowGram创新性地融合图神经网络与多模态交互技术,构建了支持动态拓扑重构的可视化流程引擎。该系统通过引入 f ( G ) ( V ′ , E ′ ) f(\mathcal{G})…...
如何选择合适的分库分表策略
选择合适的分库分表策略需要综合考虑业务特点、数据规模、访问模式、技术成本等多方面因素。以下是系统性的选择思路和关键决策点: 一、核心决策因素 业务需求分析 数据规模:当前数据量(如亿级)、增长速度(如每日新增百…...

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

GPIO的内部结构与功能解析
一、GPIO总体结构 总体构成 1.APB2(外设总线) APB2总线是微控制器内部连接CPU与外设(如GPIO)的总线,负责CPU对GPIO寄存器的读写访问,支持低速外设通信 2.寄存器 控制GPIO的配置(输入/输出模式、上拉/下拉等&#x…...
Python训练打卡Day42
Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 在深度学习中,我们经常需要查看或修改模型中间层的输出或梯度。然而,标准的前向传播和反向传播过程通常是一个黑盒,我们很难直接访问中间层的信…...
深度学习中的负采样
深度学习中的负采样 负采样(Negative Sampling) 是一种在训练大型分类或概率模型(尤其是在输出类别很多时)中,用来加速训练、降低计算量的方法。 它常用于: 词向量训练(如 Word2Vecÿ…...

php7+mysql5.6单用户中医处方管理系统V1.0
php7mysql5.6中医处方管理系统说明文档 一、系统简介 ----------- 本系统是一款专为中医诊所设计的处方管理系统,基于PHPMySQL开发,不依赖第三方框架,采用原生HTML5CSS3AJAX技术,适配手机和电脑访问。 系统支持药品管理、处方开…...
Java 大视界 — Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制
/*Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制(简化示例)*/// 1. Event.java - 异常事件模型 package com.security.model;public class Event {private String id;private String type; // 如: "入侵", "火警"pr…...

智慧物流园区整体解决方案
该智慧物流园区整体解决方案借助云计算、物联网、ICT 等技术,从咨询规划阶段介入,整合供应链上下游资源,实现物流自动化、信息化与智能化。方案涵盖智慧仓储管理(如自动化立体仓储系统、温湿度监控)、智慧物流(运输管理系统 TMS、GPS 监控)、智慧车辆管理(定位、调度、…...
审批流程管理系统开发记录:layui前端交互的实践
一、需求拆解与技术选型 本次开发围绕企业审批流程管理场景,需实现以下核心功能: 前端申请表单与流程进度可视化底部滑动审批弹窗交互多版本MySQL数据库支持流程数据的增删改查与状态管理技术栈选择: 前端采用LayUI框架,利用其时间线组件(lay-timeline)实现流程进度展示…...

【会员专享数据】1960—2023年我国省市县三级逐年降水量数据(Shp/Excel格式)
之前我们分享过1960-2023年我国0.1分辨率的逐日、逐月、逐年降水栅格数据(可查看之前的文章获悉详情),是研究者Jinlong Hu与Chiyuan Miao分享在Zenodo平台上的数据,很多小伙伴拿到数据后反馈栅格数据不太方便使用,问我…...
2025年精通MVCC
今年找工作,无一例外又问到了MVCC这个知识点。几乎每次换工作都会被问到这个面试有用,工作毫无 * 用的知识。但是环境就是这样,既然如此,我们用一篇文章彻底搞懂MVCC 1.MVCC是什么 MVCC(Multi-Version Concurrency C…...