前端如何优化工程

文章目录

    • 使用CDN
      • 1. 请求定位:
      • 2.内容缓存:
      • 3.负载均衡:
      • 4.边缘计算:
    • 优化Webpack
      • 1.合理配置Loader:
      • 2.优化代码分割:
      • 3.压缩和优化输出文件:
      • 4.利用Tree Shaking:
      • 5.优化解析速度:
      • 6.利用多线程和并行处理:
      • 7.优化Dev Server性能:
      • 8.监控和分析构建性能:
      • 9.保持Webpack版本更新:
      • 10.自定义插件和扩展:
    • 优化代码
      • 1.防抖节流
      • 2.图片懒加载和预加载
      • 3.骨架屏
      • 4.减少定时器的使用以及及时删除定时器

使用CDN

cdn是通过互联网相互连接的电脑网络系统,通过确定用户地址,用离用户最近的服务器,传输声音,图片,视频等资源给用户。加快用户数据的响应。
原理:

1. 请求定位:

当用户发起请求时,CDN系统会根据用户的IP地址和DNS解析结果,将请求定位到距离用户最近的服务器节点。这种定位机制确保用户可以从最近的网络节点获取内容,从而大大减少传输延迟。

2.内容缓存:

CDN服务器节点会缓存用户请求的内容。当收到用户请求时,节点会首先检查是否已经缓存了该内容。如果内容已缓存,则直接返回给用户,避免了从源服务器获取内容的过程,从而大大提高了响应速度。
动态内容加速:对于动态生成的内容,CDN服务器会与源服务器建立连接,将用户请求转发给源服务器进行处理,并将处理结果缓存到CDN节点上。这样,对于后续的相同请求,CDN节点可以直接从缓存中提供内容,从而实现对动态内容的加速。

3.负载均衡:

CDN系统会自动监控各节点的负载情况。当某个CDN节点的负载过高或出现故障时,系统会自动将用户请求转发到其他可用节点上,确保用户始终获得最佳的访问体验。

4.边缘计算:

CDN节点不仅可以缓存内容,还可以部署计算资源,对内容进行实时加工处理,如图片压缩、视频转码等。这种边缘计算的方式进一步减少了传输的数据量和延迟。

优化Webpack

1.合理配置Loader:

根据项目需求,选择适当的Loader,并避免不必要的Loader。
利用include和exclude属性,指定Loader处理的文件范围,减少不必要的转换。
使用cache-loader或Webpack 5的持久化缓存功能,缓存Loader的转换结果,提高构建速度。

2.优化代码分割:

使用optimization.splitChunks进行代码分割,将公共代码提取到单独的文件中,实现代码的复用和懒加载。
利用动态导入(import())实现组件级别的代码分割,减少首屏加载时间。

3.压缩和优化输出文件:

使用TerserPlugin压缩JavaScript代码。
利用OptimizeCSSAssetsPlugin或cssnano压缩CSS代码。
通过compression-webpack-plugin对输出文件进行Gzip或Brotli压缩,减少文件大小和网络传输时间。

4.利用Tree Shaking:

确保项目中使用的库支持ES6模块语法,以便利用Tree Shaking功能去除未使用的代码。
在package.json中设置sideEffects属性,告知Webpack哪些文件具有副作用,以便更准确地去除未使用的代码。

5.优化解析速度:

通过配置resolve.modules和resolve.extensions,减少Webpack在解析模块时的搜索范围。
使用resolve.symlinks设置为false,避免解析符号链接,提高解析速度。

6.利用多线程和并行处理:

使用thread-loader或happypack将Loader的执行过程分散到多个子进程中,提高构建速度。
利用Webpack 5的持久化缓存和并行处理功能,进一步提高构建性能。

7.优化Dev Server性能:

配置Dev Server使用热模块替换(HMR),实现快速更新而不需要重新加载整个页面。
调整Dev Server的compress和hot选项,根据项目需求进行优化。

8.监控和分析构建性能:

使用Webpack Bundle Analyzer分析构建结果,找出可能的优化点。
监控构建过程中的性能瓶颈,针对瓶颈进行优化。

9.保持Webpack版本更新:

关注Webpack的更新日志和发布说明,及时将项目中的Webpack版本升级到最新版本,以便利用最新的优化和功能。

10.自定义插件和扩展:

如果需要,可以编写自定义的Webpack插件或扩展,针对特定需求进行性能优化。

优化代码

1.防抖节流

主要业务场景:1.防抖,输入框的检索功能,多次改变input的值,延迟时间不断刷新,最后一次调用接口。2.节流,滚动获取数据列表,再次的滚动请求接口,只有等待前面接口调用结束之后才可以。

2.图片懒加载和预加载

主要原理:
懒加载:img标签只有展示在可视区域才会加载图片。之前使用默认图片占位。
预加载:前端项目中的图片预加载是指在页面加载时,提前加载页面中需要使用的图片资源,并将它们缓存在浏览器中。这样,当用户需要查看这些图片时,就可以直接从缓存中获取,减少等待时间,提升用户体验。

3.骨架屏

骨架屏(Skeleton Screen)是一种前端技术,它在页面数据加载完成前,先给用户展示出页面的大致结构(通常是以灰色或其他颜色填充的占位图)。当接口数据加载完成后,这些占位图会被实际的内容所替换。骨架屏本质上是界面加载过程中的过渡效果,它可以在一定程度上降低用户的等待焦虑,使界面加载过程变得更加自然和流畅。

4.减少定时器的使用以及及时删除定时器

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

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

相关文章

井字棋源码(网络线程池版)

源码链接&#xff1a;game 效果可能没有那么好&#xff0c;大家可以给点建议。 效果展示 game.h #include <stdio.h> #include <stdlib.h> #include <time.h>#define ROW 3 #define COL 3void InitBoard(char board[ROW][COL], int row, int col) {int i…

如何在linux服务器上用Nginx部署Vue项目,以及如何部署springboot后端项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、打包Vue项目二、安装Nginx1.更新系统的软件包信息&#xff1a;2.安装Nginx&#xff1a;3.启动 Nginx 服务&#xff1a;安装完成后&#xff0c;Nginx 服务会…

C语言进阶:指针的进阶(上)

首先 在学习新知识之前 我们先来回顾下之前的学习的内容 1 指针是个变量 用来存放地址 地址唯一标识的一块内存空间 2 指针的大小是固定的4/8字节&#xff08;32位平台/64位平台&#xff09; 3 指针有类型的 指针的类型决定了两点 一个是指针操作的权限以及整数的步长 4 指针的…

「deepin生态共建小组」正式启动招募!三大生态共建项目,速来 !

基于社区开源精神&#xff0c;为提高大家对deepin生态建设的参与感&#xff0c;应用商店将正式开放众多软件给广大开源爱好者进行维护。参与小组工作可获得多项专属小组福利&#xff0c;工作项目分为玲珑格式迁移、wine应用打包、deb原生应用维护。 招募条件 1&#xff09;不限…

vivado Versal 串行 I/O 硬件调试流程、使用 Vivado Serial I/O Analyzer 来调试设计

Versal 串行 I/O 硬件调试流程 Versal ™ ACAP 无需再生成 IBERT IP &#xff0c; 因为使用系统内串行 I/O 调试所需的必要逻辑现已集成到 GTY 收发器架构内。使 用 GTY 收发器的任何设计均可用于串行 I/O 硬件调试。 Versal 串行 I/O 硬件调试流程具有 2 个不同阶…

蓝桥杯python考级整理

4_1:算术运算符 4_2:基本语法 4_3:基本语法 4_4:列表 4_5:函数 4_6:字符串 4_7:列表 4_8:逻辑运算符 4_9:字典 4_10:函数

CSS中的 5 类常见伪元素详解!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

InternLM2-lesson5

目录 大模型部署挑战常用大模型部署方式模型剪枝(Pruning)知识蒸馏量化 LMDeploy核心功能性能表现支持部署的模型 作业配置 LMDeploy 运行环境以命令行方式与 InternLM2-Chat-1.8B 模型对话 大模型部署 大模型部署就是将大模型在特定的环境种运行&#xff01;可以部署到服务器…

day13 ts后端持久层框架(java转ts全栈/3R教室)

简介&#xff1a;如果说TS全栈后端开发最重要的两个框架&#xff0c;除了nestjs就是持久层框架了&#xff0c;这里主要看下Typeorm&#xff08;java中常用的就是mybatis&#xff0c;springdatajpa&#xff0c;hebernite了&#xff09; 先回顾下ORM的概念&#xff1a;ORM就是建…

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程&#xff0c;包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步&#xff1a;需求分析和系统设计。演示&#xff1a;ym.fzapp.top 第一步&#xff1a;需求分析 确…

Linux:进程创建 进程终止

Linux&#xff1a;进程创建 & 进程终止 进程创建fork写时拷贝 进程终止退出码strerrorerrno 异常信号exit 进程创建 fork fork函数可以用于在程序内部创建子进程&#xff0c;其包含在头文件<unistd.h>中&#xff0c;直接调用fork()就可以创建子进程了。 示例代码&…

暴雨亮相CCBN2024 助力广电行业数智化转型

4月23日&#xff0c;第三十届中国国际广播电视信息网络展览会&#xff08;简称CCBN2024&#xff09;在北京开展&#xff0c;本次展览会由国家广播电视总局指导、广播电视科学研究院主办&#xff0c;作为国内广电视听领域首个综合性、专业化、引领性、国际化科技产业盛会&#x…

【树莓派】如何用电脑连接树莓派的远程桌面,灰屏解决

要使用VNC桌面连接到树莓派&#xff0c;你需要确保已经安装并启动了VNC服务器。以下是连接到树莓派的步骤&#xff1a; 在树莓派上启动VNC服务器&#xff1a; 打开终端或SSH连接到你的树莓派。输入以下命令以安装RealVNC的VNC服务器&#xff1a;sudo apt update sudo apt insta…

第十讲:C语言指针(4)

目录 1、回调函数是什么&#xff1f; 2、qsort使⽤举例 2.1、使⽤qsort函数排序整型数据 2.2、使⽤qsort排序结构数据 3、qsort函数的模拟实现 4、sizeof和strlen的对⽐ 4.1、sizeof 4.2、strlen 4.3、sizeof 和 strlen的对⽐ 5、数组和指针笔试题解析 5.1、⼀维数组…

java-反射

简介 获取class对象的API // 1. 通过类名.class Class<Student> clazz Student.class; System.out.println(clazz.getName());// 2. 通过Class.forName()方法 Class<?> clazz2 null; try {clazz2 Class.forName("com.reflect.Student");System.out.p…

B2B企业如何做好谷歌Google广告推广营销布局?

当今全球化的商业环境中&#xff0c;B2B企业要想在激烈的市场竞争中脱颖而出&#xff0c;拓展海外市场成为了必经之路。而谷歌Google广告&#xff0c;作为全球最大的在线广告平台&#xff0c;无疑是企业触达全球潜在客户的黄金钥匙。云衔科技通过专业服务助力企业轻松开户与高效…

【ai相关】人工智能的概念

一、人工智能的定义 人工智能&#xff0c;简称AI&#xff0c;是指由机器或计算机系统所展现出的类似于人类智能的行为和能力。其核心在于使机器能够像人类一样进行思考和行动&#xff0c;而这些思考和行动都是基于理性的决策和判断。 什么是机器学习&#xff1f; 机器学习的核…

【蓝桥杯省赛真题40】python摘苹果 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python摘苹果 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python摘苹果 第十三届蓝桥杯青少年组python编程省赛真题 一、题目要求 &…

二维码如何分享照片?3步在线生成相册二维码

拍摄的照片怎样快速分享给其他人呢&#xff1f;传统的图片传输方式多通过微信、QQ、空间、微博等方式来实现分享&#xff0c;当需要分享给指定人员时或者需要分享的图片数量较多时&#xff0c;这些方式传递起来并不是特别的方便。想要实现大量图片的分享&#xff0c;选择生成相…

docker教程(详细)

0 背景 软件开发最大的麻烦事之一&#xff0c;就是环境配置。环境配置如此麻烦&#xff0c;换一台机器&#xff0c;就要重来一次&#xff0c;旷日费时。很多人想到&#xff0c;能不能从根本上解决问题&#xff0c;软件可以带环境安装&#xff1f;也就是说&#xff0c;安装的时…
最新文章