前端性能优化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-shakingoptimization: {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(){//列表接口,更新到dataaxios('/api1').then(()=>{}// 分类接口,有哪些类目axios('/api2').then(()=>{})
}
onMounted(()=>getData()})
function deelte(){getData();}// 以这个代码为例子,如果发生删除的时候,只需要更新api1,api2不需要更新,但是这样写,两个接口写在一块,那这样就有点请求多余了

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

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

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

相关文章

基于backtrader实现人工智能LOF的择时,optstrategy实现最优参数搜索(年化从9%提升至15.4%)

原创内容第695篇,专注量化投资、个人成长与财富自由。 今日策略 今天的策略是基于backtrader实现人工智能LOF的择时,通过backtrader的参数优化功能,找到最优参数。 策略主体: 策略有三个参数,一是动量周期&#xff…

autodl怎么清理数据盘垃圾缓存

首先进入到root/autodl-tmp文件夹下,然后执行这个命令 du -h --max-depth1 .查看当前目录下各个子目录占用的内存 可以看到,./.Trash-0 目录下有太多垃圾了。清理 ./.Trash-0 目录,可以使用以下命令来删除该目录中的所有内容 rm -rf ./.Tr…

ctfshow(162)--文件上传漏洞--远程文件包含

Web162 进入界面: 思路 先传个文件测试一下过滤: 过滤了特别多符号,注意过滤了点. 我们的思路还是要先上传.user.ini文件: //修改前 GIF89a auto_prepend_fileshell.png//由于过滤了点,所以修改为 GIF89a auto_prepend_file…

开源IM即时通讯源码 / Java仿微信即时通讯APP源码 + 红包 + 客服 + 禁言 / WebSocket + uniapp框架开发

即时通讯应用已经成为现代社交和工作环境中的重要工具,而IM(即时通讯)系统的设计与开发也逐渐成为开发者关注的重点。本文将介绍一个基于Java开发的开源IM即时通讯系统,模拟微信的即时通讯功能,涵盖了红包、客服、禁言…

拒绝事后背锅:测试项目中的风险管理一定要知道

在博主的公司中,测试经理除了要管理产品线的质量保障和日常部门事务工作外,另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展,而是想聊一聊在同行中比较高频出现的一个字眼:风险管理。 什么是风…

4.1 WINDOWS XP,ReactOS对象与对象目录----1

系列文章目录 文章目录 系列文章目录4.1 对象与对象目录OBJECT_HEADERObpLookupEntryDirectory()NtCreateTimer() 4.1 对象与对象目录 “对象(Object)”这个词现在大家都已耳熟能详了,但是对象到底是什么呢?广义地说,对象就是“目标”,行为…

数据结构——栈

栈 1. 栈的概念和结构2. 栈的实现2.1 原型声明2.2 初始化和销毁2.3 入栈 出栈2.4 取栈顶数据2.5 判空2.6 获取数据个数 3. 总结 🔥 博客主页: 偷心编程 🎥 系列专栏: 《Java学习》 《C语言学习》 《数据结构C语言版》 ❤️ 感谢大家点赞👍收…

谷歌浏览器中编辑并重发请求

文章目录 1、直接重发请求2、修改传参后重发请求3、可能的报错 有时候,需要调整请求参数后,重新发送请求,查看响应,从浏览器搬到Postman太繁琐,可直接在浏览器进行编辑并重发 1、直接重发请求 F12 > Network >…

day19作业

注册登录 #include "log.h" void reg() {char name[20],pwd[20];printf("请输入账号:");fgets(name,sizeof(name),stdin);printf("请输入密码:");fgets(pwd,sizeof(pwd),stdin);//name[strlen(name)-1]\0;printf("账…

[LitCTF 2023]ez_XOR

文件无壳 拖入ida 查看主函数伪c代码 继续跟进xor函数 函数遍历输入的字符串 Str,对每个字符执行异或操作,并将字符与 3 * a2 异或 所以题目的加密过程是将字符串E}J]OrQF[V8zV:hzpV}fVF[t与3异或 写出脚本 def XOR_encrypt(input_str, a2):encrypted_…

[数据结构从小白到大牛]第五篇:3分钟带你吃透双链表并用C语言模拟实现

目录 1->前言 2->链表的概念和结构 2.1链表概念 2.2->带头双向循环链表结构 3->模拟实现带头双向循环链表 3.1定义链表结点 struct ListNode 3.2创建链表结点 CreateLTNode 函数 3.3链表初始化函数 ListInit函数 3.4链表打印函数 ListPrint函数 3.5链表…

心觉:如果做不到“道生一”,能做到“一生道”也不得了

Hi,我是心觉,带你用潜意识化解各种焦虑、内耗,建立无敌自信;教你财富精准显化的实操方法;关注我,伴你一路成长! 每日一省写作222/1000天 想学的东西太多,想练的能力太多,想重塑的负…

基于BP神经网络的手写体数字图像识别

基于BP神经网络的手写体数字图像识别 摘要 在信息化飞速发展的时代,光学字符识别是一个重要的信息录入与信息转化的手段,其中手写体数字的识别有着广泛地应用,如:邮政编码、统计报表、银行票据等等,因其广泛地应用范围…

SpringBoot项目中获取resources下静态文件时遇到的坑

文章目录 问题解决方法1. 上传到服务器指定的文件夹下2. 使用ClassPathResource读取 问题 在项目中需要使用到静态图片,将静态图片放在resources文件夹下。 本地使用this.getClass().getResource()读取静态图片一切正常,成功读取到静态图片。但是将项目…

树莓派AI视觉小车——2.小车蜂鸣器控制实验

如下图所示,蜂鸣器为板载元器件,所以不需要外接其他设备。 将机器人打开电源开机,运行程序代码即可。 import RPi.GPIO as GPIO import timeBuzzer 11CL [0, 131, 147, 165, 175, 196, 211, 248] # Frequency of Low C notes CM [0, 262…

【C++刷题注意事项】bfs?单源bfs?多源bfs?bfs解决拓扑排序?

一、bfs是个什么? 简单而言bfs就是个广度优先遍历,其根本就是我把与跟我当前点相邻的题目中所要求的点都统计出来并进行处理,再去遍历下一个满足的点的邻接的点的信息即可,最大的优势就是只需要不停的入队和出队即可。 那么我们就…

三、Java并发 Java 线程池 ( Thread Pool )

一、前言 本文我们将讲解 Java 中的线程池 ( Thread Pool ),从 Java 标准库中的线程池的不同实现开始,到 Google 开发的 Guava 库的前世今生 注:本章节涉及到很多前几个章节中阐述的知识点。我们希望你是按照顺序阅读下来的,不然…

string模拟实现迭代器

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 string模拟实现迭代器 迭代器的实现 主要实现的两种迭代器 这里我们实现迭代器我们主要…

推荐一款C盘清理工具:360清理Pro

360清理Pro是一款专门用于解决电脑C盘空间不足问题的清理工具。它旨在简化C盘清理过程,让用户能够轻松释放磁盘空间,提高电脑性能。与其它版本不同,这个独立版的360清理Pro无需依赖360安全卫士,是一个独立运行的工具。 软件特点 …

《scientific discovery in the age og artificial intelligence》文献阅读翻译

人工智能时代的科学发现 人工智能(AI)正日益被整合到科学发现中,以增强和加速研究,帮助科学家生成假设、设计实验、收集和解释大数据集,并获得使用传统科学方法可能无法获得的见解。在此,我们探讨了过去十…