前端性能优化2

常见问题:
首屏速度,白屏时间等。操作速度以及渲染速度。

一打开网页时白屏,是因为还需要从服务器那边请求HTML、JS这些过来,加载下来后才有东西渲染
首屏速度参考两方面:白屏时间(资源加载时间、首屏js执行)、渲染页面(首屏数据请求、Dom渲染)
渲染页面是比较快的,所以大多数时间是花在了白屏时间上,而其中的资源加载时间是占比比较大的。
所以:
收效很大的操作
1,减少首屏资源体积(打包工具的压缩,异步加载,更新为体积更小的新版本,能不用第三方库就尽量不用第三方库,编写代码尽量减少体积,去除大的base64体积) 这一步能实现最大效果
收效不大或者特殊情况的优化操作:
1,首屏数据尽量并行,如果可行让小数据量接口合并到其他接口
2,页面包含大量dom可以分批随滚动渲染
骨架屏,loading,先让屏幕不白,减少用户焦虑

异步加载:得思考哪些适合做异步加载,哪些能做?
体积比较大、且不是马上需要用的功能适合。比如一个图片压缩的功能,因为使用了第三方库,导致体积比较大,并且它跟首屏渲染无关联,所以适合异步加载

更新为体积更小的新版本:这里就涉及到tree-shaking
例如引用了第三方库,里面有100个方法,但只用了20个,那么如果配合tree-shaking,那就可以只打包用到的20个方法,进而减少体积。把一些老版本的库替换成新版本的支持tree-shaking的可以有效减少体积,其实也就是按需引入的plus版按需引入:是指只加载和使用实际需要的代码,通常通过动态导入等方式实现。Tree-shaking:是一种在构建阶段通过静态分析移除未使用代码的技术,主要用于减小最终打包文件的体积。
假设你有一个库 math.js,其中包含多个数学函数:

// math.js
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

export function multiply(a, b) {
  return a * b;
}

export function divide(a, b) {
  return a / b;
}

在你的主文件 main.js 中,你只使用了 add 函数:

import { add } from './math.js';

console.log(add(2, 3)); // 输出 5

使用 Webpack 进行 Tree-shaking

  1. 使用 ES6 模块:确保你的项目使用 importexport 语法。

  2. 配置 Webpack:在 webpack.config.js 中启用 Tree-shaking。

    module.exports = {
      mode: 'production', // 生产模式会自动启用 Tree-shaking
      optimization: {
        usedExports: true, // 启用 Tree-shaking
      },
      // 其他配置...
    };
  3. 构建项目:运行 Webpack 构建命令。

    npx webpack

    在生产模式下,Webpack 会自动进行 Tree-shaking,移除 subtractmultiplydivide 函数,因为它们在 main.js 中没有被使用。
     

首屏数据尽量并行:像一些请求,Promise.then(()=>{}).then(()=>{}),可能有些不是非得等上一个完成再进行下一个,如果这样等下来,时间就会拉长
页面包含大量dom可以分批随滚动渲染:如果一个页面上的dom元素特别多,那么就先渲染第一屏,或者最上面的一些元素。例如首页是760px,那就先渲染900px的内容,当滚到900px的时候再去加载后面的,和虚拟滚动、大数据量加载一个思想
骨架屏,loading,先让屏幕不白,减少用户焦虑:有时候实在是太大了,减不下来,那就采取这样的方案,让用户体验感好一点
还有一些小知识:
1,频繁切换的显隐的内容用v-show也就是display来控制隐藏,只有打开就一次性决定显示与否的用v-if不去创建
2,循环,动态切换内容加好key值
3,keep-alive缓存
4,区分请求粒度,减少请求范围,也能减少更新

function getData(){
    //列表接口,更新到data
    axios('/api1').then(()=>{}
    // 分类接口,有哪些类目
    axios('/api2').then(()=>{})
}
onMounted(()=>getData()})
function deelte(){getData();}

// 以这个代码为例子,如果发生删除的时候,只需要更新api1,api2不需要更新,但是这样写,两个接口写在一块,那这样就有点请求多余了

数据缓存:
不变数据、定期时效的数据可以缓存在cookies或者localstorage中,比如token,用户名等
可以考虑做一个缓存队列,存于内存中(全局对象,vuex)这样能保证刷新就更新数据,也能一定程度上缓存数据

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

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

相关文章

AI笔筒操作说明及应用场景

AI笔筒由来: 在快节奏的现代办公环境中,我们一直在寻找既能提升效率、增添便利,又能融入企业文化、展现个人品味的桌面伙伴。为此,我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版,它集高科技与实用性于一身…

开源项目OpenVoice的本地部署

前言 本文介绍开源项目OpenVoice的本地部署,基于VsCode和Anaconda(提供python虚拟环境),来进行部署的。下述不介绍Anaconda的安装流程,要自行安装。且只截图演示关键部分图文演示。 官方项目介绍:OpenVoice:多功能即时…

【Vue 全家桶】2、Vue 组件化编程

目录 模块与组件、模块化与组件化 component模块组件 非单文件组件单文件组件 .vue 模块与组件、模块化与组件化 component 模块 组件 局部功能代码和资源的集合 非单文件组件 // 1、创建组件 const school Vue.extend({data(){return {}} }) const student Vue.extend(…

11.6 校内模拟赛总结

打的很顺的一场 复盘 7:40 开题,看到题目名很interesting T1 看起来很典,中位数显然考虑二分,然后就是最大子段和;T2 构造?一看数据范围这么小,感觉不是很难做;T3 神秘数据结构;T…

nacos本地虚拟机搭建切换wiff问题

背景 在自己的电脑上搭建了vm虚拟机,安装上系统,设置网络连接。然后在vm的系统上安装了中间件nacos,mysql,redis等,后续用的中间件都是在虚拟机系统上安装的,开发在本地电脑上。 我本地启动项目总是请求到…

深入探讨钉钉与金蝶云星空的数据集成技术

钉钉报销数据集成到金蝶云星空的技术案例分享 在企业日常运营中,行政报销流程的高效管理至关重要。为了实现这一目标,我们采用了轻易云数据集成平台,将钉钉的行政报销数据无缝对接到金蝶云星空的付款单系统。本次案例将重点介绍如何通过API接…

Rust 力扣 - 3090. 每个字符最多出现两次的最长子字符串

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 本题使用滑动窗口进行求解,使用左指针和右指针分别表示窗口的左边界和窗口的右边界,使用哈希表记录窗口内的字符及其对应数量 我们首先向右移动右指针,将字符加入到哈希表中进…

Jekins篇(搭建/安装/配置)

目录 一、环境准备 1. Jenkins安装和持续集成环境配置 2. 服务器列表 3. 安装环境 Jekins 环境 4. JDK 环境 5. Maven环境 6. Git环境 方法一:yum安装 二、JenKins 安装 1. JenKins 访问 2. jenkins 初始化配置 三、Jenkins 配置 1. 镜像配置 四、Mave…

uniApp使用canvas制作签名板

插件市场大佬封装好的 组件 可以直接拿过去 <template><viewclass"whole canvas-autograph flexc"touchmove.prevent.stopwheel.prevent.stopv-show"modelValue"><canvasclass"scroll-view"id"mycanvas"canvas-id&quo…

解决Knife4j 接口界面UI中文乱码问题

1、查看乱码情况 2、修改 编码设置 3、删除 target 文件 项目重新启动 被坑死了

FFmpeg 4.3 音视频-多路H265监控录放C++开发八,使用SDLVSQT显示yuv文件 ,使用ffmpeg的AVFrame

一. AVFrame 核心回顾&#xff0c;uint8_t *data[AV_NUM_DATA_POINTERS] 和 int linesize[AV_NUM_DATA_POINTERS] AVFrame 存储的是解码后的数据&#xff0c;&#xff08;包括音频和视频&#xff09;例如&#xff1a;yuv数据&#xff0c;或者pcm数据&#xff0c;参考AVFrame结…

【算法】递归+深搜+哈希表:889.根据前序和后序遍历构造二叉树

目录 1、题目链接 相似题目: 2、题目 ​3、解法&#xff08;针对无重复值&#xff0c;哈希表递归&#xff09; 函数头-----找出重复子问题 函数体---解决子问题 4、代码 1、题目链接 889.根据前序和后序遍历构造二叉树&#xff08;LeetCode&#xff09; 相似题目: 105.…

基于SpringBoot的“乐校园二手书交易管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“乐校园二手书交易管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 二手…

“高效开发之路:用Spring MVC构建健壮的企业级应用”

一、SpringMVC框架概念&#xff1a; &#xff08;一&#xff09;概述 SpringMVC是Spring框架的一个模块&#xff0c;Spring和SpringMVC无需中间整合层整合。该模块是一个基于MVC的web框架。 作用&#xff1a;只要需要前后端通信&#xff0c;就需要springMVC帮我完成&#xff…

练习LabVIEW第四十一题

学习目标&#xff1a; 编写一个程序测试自己在程序前面板上输入一段文字“CSDN是一个优秀的网站”所用的时间。 开始编写&#xff1a; 前面板放置一个数值显示控件&#xff0c;程序框图添加顺序结构共三帧&#xff0c;第一帧放一个获取日期/时间&#xff08;秒&#xff09;函…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛&#xff0c;简称蓝桥杯&#xff0c…

Cofounder:全栈 AI 应用开发 Agent,基于单一提示生成完整的应用程序

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

神奇!KMeans也可以进行图像语义分割?基于k-Means的遥感图像语义分割实战

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

2.2、软件生命周期模型介绍

软件生命周期模型 1. 传统软件过程模型1.1 瀑布模型Waterfall model1.2 V模型1.3 原型模型&#xff08;降低需求不明确的风险&#xff09;1.4 增量模型&#xff08;降低需求变化风险&#xff09;1.5 螺旋模型1.6 喷泉模型 2. 现代模型2.1 基于构件的开发模型2.2 统一过程RUP:Ra…

推荐程序员好用的浏览器插件

推荐程序员好用的浏览器插件 1. 网页颜色控制&#xff1a;Dark Reader安装效果 2. 前端助手&#xff1a;FeHelper安装效果 3. markdown可视化&#xff1a;Markdown Reader安装效果 4. ES插件&#xff1a;Multi Elasticsearch Heads安装效果 1. 网页颜色控制&#xff1a;Dark Re…