大白话前端性能优化方法的分类与具体实现

大白话前端性能优化方法的分类与具体实现

一、资源加载优化

1. 压缩与合并文件
  • 大白话解释
    • 咱们的网页代码里,就像一个房间堆满了东西,有很多没用的“杂物”,比如代码里的空格、注释啥的。压缩文件就是把这些“杂物”清理掉,让文件变得更“瘦”,下载起来就快多啦。合并文件呢,就好比把好几个小包裹合成一个大包裹,这样浏览器下载的时候就不用一次又一次地去请求,节省时间。
  • 具体实现(使用 Webpack 压缩合并 JavaScript 和 CSS 文件)
    • 首先,确保你已经安装了 Webpack 和相关的加载器、插件。
    • 安装依赖:
npm install webpack webpack-cli css - loader style - loader terser - webpack - plugin mini - css - extract - plugin --save - dev
- 创建 `webpack.config.js` 文件:
const path = require('path');
const TerserPlugin = require('terser - webpack - plugin');
const MiniCssExtractPlugin = require('mini - css - extract - plugin');module.exports = {mode: 'production',entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'bundle.js'},module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css - loader']}]},optimization: {minimizer: [new TerserPlugin()]},plugins: [new MiniCssExtractPlugin({filename: 'styles.css'})]
};
- 在 `package.json` 里添加脚本:
{"scripts": {"build": "webpack"}
}
- 运行 `npm run build` 就可以压缩合并代码了。
2. 图片优化
  • 大白话解释
    • 图片就像一个个大胖子,特别占地方,下载起来可费劲了。选对图片格式,就像给胖子减肥,选个合适的方法让它变瘦。压缩图片呢,就是把胖子身上多余的“肥肉”去掉,让它更轻巧。
  • 具体实现(使用 TinyPNG 在线压缩图片)
    • 打开 TinyPNG 官网。
    • 点击上传图片按钮,选择你要压缩的图片。
    • TinyPNG 会自动帮你压缩图片,压缩完成后下载压缩后的图片,替换原来的图片就行。
3. 按需加载
  • 大白话解释
    • 有些东西不是一开始就需要的,就像你去超市买东西,有些东西等你要用的时候再去拿,没必要一开始就把所有东西都买回家。按需加载就是等用户需要用到某个功能或者资源的时候,再去加载它,这样能加快页面的初始加载速度。
  • 具体实现(Vue 路由懒加载)
// 原来的路由配置
// import Home from './views/Home.vue'
// import About from './views/About.vue'// 改为懒加载
const Home = () => import('./views/Home.vue');
const About = () => import('./views/About.vue');const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
];

二、代码优化

1. 防抖和节流
  • 大白话解释
    • 防抖就像坐电梯,你一直按开门按钮,电梯不会每次都开门,而是等你停了一会儿,确定你不按了,才会开门。节流呢,就像水龙头,不管你怎么拧,在一段时间内,水的流量是固定的,不会一直变大。
  • 具体实现(JavaScript 防抖和节流函数)
// 防抖函数
function debounce(func, delay) {let timer;return function () {const context = this;const args = arguments;clearTimeout(timer);timer = setTimeout(() => {func.apply(context, args);}, delay);};
}// 节流函数
function throttle(func, limit) {let inThrottle;return function () {const context = this;const args = arguments;if (!inThrottle) {func.apply(context, args);inThrottle = true;setTimeout(() => inThrottle = false, limit);}};
}// 使用示例
const input = document.getElementById('searchInput');
const searchFunction = () => {console.log('执行搜索');
};// 防抖
input.addEventListener('input', debounce(searchFunction, 300));// 节流
window.addEventListener('scroll', throttle(() => {console.log('滚动触发');
}, 200));
2. 减少重排和重绘
  • 大白话解释
    • 重排就像你重新布置房间里的家具,得把家具挪来挪去,很费时间。重绘就像给家具重新刷漆,也得花点时间。减少重排和重绘就是尽量少折腾房间里的家具,让页面加载和渲染更快。
  • 具体实现(批量修改样式减少重排)
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF - 8">
</head><body><div id="myDiv">这是一个 div</div><script>const div = document.getElementById('myDiv');// 先获取样式对象const style = div.style;// 批量修改样式style.width = '200px';style.height = '200px';style.backgroundColor = 'red';</script>
</body></html>

三、缓存优化

1. 浏览器缓存
  • 大白话解释
    • 浏览器缓存就像你的小仓库,把一些常用的东西放进去。下次要用的时候,直接从仓库里拿,不用再去外面买,这样就节省时间啦。
  • 具体实现(设置 HTTP 缓存头)
    • 如果你使用 Node.js 和 Express 框架,可以这样设置:
const express = require('express');
const app = express();app.get('/static/js/main.js', (req, res) => {res.set('Cache - Control', 'public, max - age=3600');res.sendFile(__dirname + '/public/js/main.js');
});const port = 3000;
app.listen(port, () => {console.log(`Server running on port ${port}`);
});
2. CDN 缓存
  • 大白话解释
    • CDN 就像在全国各地都有小仓库,你要的东西离你近的仓库就有,不用从很远的大仓库运过来,速度就快了。
  • 具体实现(使用阿里云 CDN)
    • 登录阿里云 CDN 控制台。
    • 添加域名,配置源站信息(就是你原来存放资源的服务器地址)。
    • 把网页里的资源链接替换成 CDN 分配的链接,比如把 <script src="http://your - server.com/js/main.js"></script> 换成 <script src="http://your - cdn - domain.com/js/main.js"></script>

四、服务器优化

1. 选择合适的服务器
  • 大白话解释
    • 服务器就像你的厨师,好的厨师做菜又快又好吃。选性能好、稳定的服务器,网页响应速度就快,用户体验就好。
  • 具体实现
    • 如果你是个人小网站,可以选择阿里云轻量应用服务器,配置简单,价格实惠。如果是大型网站,就选择性能更高的云服务器 ECS,根据网站的访问量和需求选择合适的配置。
2. 优化服务器配置
  • 大白话解释
    • 服务器配置就像厨师的厨房工具,工具好用,做菜效率就高。优化服务器配置能让服务器处理请求更快,就像给厨师换上更锋利的刀和更顺手的锅。
  • 具体实现(Nginx 调整并发连接数)
    • 打开 Nginx 配置文件(一般在 /etc/nginx/nginx.conf)。
    • 找到 worker_connections 配置项,把它的值调大,比如:
worker_processes  1;events {worker_connections  1024; // 可根据服务器性能调整
}
  • 保存配置文件,重启 Nginx 服务:
sudo systemctl restart nginx

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

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

相关文章

MySQL并发知识(面试高频)

mysql并发事务解决 不同隔离级别下&#xff0c;mysql解决并发事务的方式不同。主要由锁机制和MVCC(多版本并发控制)机制来解决并发事务问题。 1. mysql中的锁有哪些&#xff1f; 表级锁&#xff1a; 场景&#xff1a;表级锁适用于需要对整个表进行操作的情况&#xff0c;例如…

【Kubernets】K8S内部nginx访问Service资源原理说明

文章目录 原理概述**一、核心概念****二、Nginx 访问 Service 的流程****1. Service 的作用****2. Endpoint 的作用****3. Nginx Pod 发起请求****(1) DNS 解析****(2) 流量到达 kube-proxy****(3) 后端 Pod 处理请求** **三、不同代理模式的工作原理****1. iptables 模式****2…

HTML:自闭合标签简单介绍

1. 什么是自结束标签&#xff1f; 定义&#xff1a;自结束标签&#xff08;Self-closing Tag&#xff09;是指 不需要单独结束标签 的 HTML 标签&#xff0c;它们通过自身的语法结构闭合。语法形式&#xff1a; 在 HTML5 中&#xff1a;直接写作 <tag>&#xff0c;例如 …

《几何原本》公理

《几何原本》公理 等于同量的量彼此相等 即若 a b , b c ab,bc ab,bc 则 a c ac ac 等量加等量&#xff0c;其和仍相等 即若 a b ab ab 则 a c b c acbc acbc 等量减等量&#xff0c;其差仍相等 即若 a b ab ab 则 a − c b − c a-cb-c a−cb−c 彼此能够&a…

学习路程十一 langchain核心组件 Memory

前序 在最开始我们就通过实验知道LLM 本身是没有记忆的&#xff0c;每一次LLM的API调用都是一个全新的会话。但在某些应用程序中&#xff0c;如&#xff1a;聊天机器人&#xff0c;让LLM记住以前的历史交互是非常重要&#xff0c;无论是在短期的还是长期的。langchain中的“Me…

Spring-AI搭建企业专属知识库 一

环境介绍&#xff1a;Spring3.3.2 JDK 21 POM文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

C语言多级指针详解 - 通过实例理解一级、二级、三级指针

C语言多级指针详解 - 通过实例理解一级、二级、三级指针 文章目录 C语言多级指针详解 - 通过实例理解一级、二级、三级指针引言一、示例代码二、指针基础回顾&#xff08;先备知识&#xff09;1.生活中的类比2.指针变量定义3.关键操作符4.解引用本质 三、多级指针的本质1.层级关…

Difyにおけるデータベースマイグレーション手順

Difyにおけるデータベースマイグレーション手順 はじめに主要マイグレーションコマンドAlembic直接コマンドFlask-Migrate経由コマンド 標準マイグレーション作業フローデプロイ時の対応注意事項 はじめに Difyプロジェクトでのデータベースマイグレーションには、Alembicコマ…

React + TypeScript 实现 SQL 脚本生成全栈实践

React TypeScript 实现数据模型驱动 SQL 脚本生成全栈实践 引言&#xff1a;数据模型与 SQL 的桥梁革命 在现代化全栈开发中&#xff0c;数据模型与数据库的精准映射已成为提升开发效率的关键。传统手动编写 SQL 脚本的方式存在模式漂移风险高&#xff08;Schema Drift&#…

Python 高精度计算利器:decimal 模块详解

Python 高精度计算利器&#xff1a;decimal 模块详解 在 Python 编程中&#xff0c;处理浮点数时&#xff0c;标准的 float 类型往往会因二进制表示的特性而产生精度问题。decimal 模块应运而生&#xff0c;它提供了十进制浮点运算功能&#xff0c;能让开发者在需要高精度计算…

freertos 学习5--链路状态设置

以下三个函数都是针对网卡netif的操作。1 netif_set_up函数(netif_set_down) 特点 直接操作网络接口&#xff0c;不通过 netifapi 机制。 适用于单线程环境&#xff0c;或者在多线程环境中需要额外加锁。1.1 netif_set_up 对比windows下面&#xff0c;相当于是在资源管理器中…

基于大数据的民宿旅馆消费数据分析系统

【大数据】基于大数据的民宿旅馆消费数据分析系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统可以揭示民宿市场的消费模式和价格分布情况&#xff0c;帮助理解消费者偏好、价格走势及…

线程池的介绍

线程池的分类 FixedThreadPool: 固定线程池&#xff1a;线程池中的线程数量固定&#xff0c;这些线程会一直存在&#xff0c;不会随任务的增 加或减少而动态调整&#xff0c;超出的任务会在队列中等待。 使用场景&#xff1a;任务量比较固定但耗时较长的任务。 CachedThreadPo…

[特殊字符]【CVPR2024新突破】Logit标准化:知识蒸馏中的自适应温度革命[特殊字符]

文章信息 题目&#xff1a;Logit Standardization in Knowledge Distillation论文地址&#xff1a;paper代码地址&#xff1a;code年份&#xff1a;2024年发表于CVPR 文章主题 文章的核心目标是改进知识蒸馏&#xff08;KD&#xff09;中的一个关键问题&#xff1a;传统KD方…

CAM350_安装

版本&#xff1a;V14.5 一、安装 打开.exe文件 选择不重启&#xff0c;然后再打开这个.exe 再来一次类似的操作 二、配置 复制patch文件夹中的这三个 &#xff0c;粘贴到掉安装目录中 设置ACT_INC_LICENSE_FILE用户环境变量来设置license管理 打开电脑的环境变量 破解完毕&am…

「Selenium+Python自动化从0到1②|2025浏览器操控7大核心API实战(附高效避坑模板))」

Python 自动化操作浏览器基础方法 在进行 Web 自动化测试时&#xff0c;操作浏览器是必不可少的环节。Python 结合 Selenium 提供了强大的浏览器操作功能&#xff0c;让我们能够轻松地控制浏览器执行各种任务。本文将详细介绍如何使用 Python 和 Selenium 操作浏览器的基本方法…

mysqldump 参数详解

mysqldump 是一个用于备份 MySQL 数据库的工具。它可以生成一组 SQL 语句,这些语句可以用来重现原始数据库对象定义和表数据。以下是一些常用的 mysqldump 参数及其详细解释: 常用参数 基本参数 --host=host_name, -h host_name: 指定 MySQL 数据库主机地址,默认为 localh…

【AD】3-9 物料BOM表的设置与导出

1.报告—… 2.筛选导出内容 3.进行选择导出格式 官方模板 亦可以自行修改其模板&#xff0c;AD官方的BOM表模板在安装目录下的Templates文件夹下&#xff08;C:\Users\Public\Documents\Altium\AD24\Templates&#xff09;

数据结构——布隆过滤器

目录 布隆过滤器概念 布隆过滤器实现 哈希函数 布隆过滤器类 加入到布隆过滤器 判断在不在 测试一下 为啥不写删除&#xff1f; 测试一下误判率 布隆过滤器概念 布隆过滤器也是一种位图结构&#xff0c;它可以快速的判断字符串在不在位图中。它的优点是节省空间。 …

C++题解(31) 2025顺德一中少科院信息学创新班(四期)考核:U537296 青蛙的距离 题解

&#xff08;本人参与了这次考核&#xff09; 题目背景 有n个池塘&#xff0c;每个池塘中有m只青蛙。这里的青蛙很奇怪&#xff0c;同一个池塘的青蛙喜欢排成一列&#xff0c;并且他们的位置都是有序的。 对于第i列的青蛙&#xff0c;他们分别在第a[i]个位置。 青蛙的距离定义…