网站性能不佳?试试这十大前端性能优化技巧!

2023-06-29 0 909

网站性能不佳?试试这十大前端性能优化技巧!

1. 增加 HTTP 允诺的数目和大小不一,分拆、填充、内存动态天然资源,防止多次重复允诺和罢了允诺。

下列是两个采用 Node.jsGulp 智能化构筑辅助工具来分拆、填充和内存动态天然资源的实例:

1. 加装 Gulp 和有关倚赖:

$ npm install gulp gulp-concat gulp-uglify gulp-rename gulp-cache

2. 在工程项目产品目录下建立 gulpfile.js 文档,已经开始实用性:

const gulp = require(gulp); const concat = require(gulp-concat); const uglify = require(gulp-uglify); constrename =require(gulp-rename); const cache = require(gulp-cache); // 分拆、填充、重新命名 js gulp.task(scripts, function () { return gulp.src(src/js/*.js) .pipe(concat(main.js)) .pipe(gulp.dest(dist/js)) .pipe(rename({suffix: .min})) .pipe(uglify()) .pipe(gulp.dest(dist/js)) }); // 内存动态天然资源 gulp.task(cache, function() { return gulp.src(src/**/*.{js,css,png,jpeg,gif,svg}) .pipe(cache()) .pipe(gulp.dest(dist)) }); // 监听文档变化 gulp.task(watch, function () { gulp.watch(src/js/*.js, gulp.series(scripts)); gulp.watch(src/**/*.{js,css,png,jpeg,gif,svg}, gulp.series(cache)); }); // 执行所有任务gulp.task(default, gulp.parallel([scripts, cache, watch]));

3. 运行 Gulp 智能化构筑辅助工具:

$ gulp

4. 完成后,分拆、填充、重新命名后的动态天然资源将会保存到 dist 产品目录下,可以直接通过 HTML 中引用来采用它们。

通过上述代码案例,我们可以采用 Gulp 智能化构筑辅助工具对动态天然资源进行分拆、填充和内存,有效地增加 HTTP允诺的数目和大小不一,防止多次重复允诺和罢了允诺,强化网页操控性和用户体验。

2. 增加 JavaScript 和 CSS 文档的大小不一和数目,防止不必要的代码。

下列是两个采用 WebpackBabel 来增加 JavaScript 文档大小不一和数目的实例:

1. 加装 Webpack 和有关倚赖:

$ npminstall webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env

2. 建立两个 src 产品目录并添加 index.js 文档和 styles.css 文档:

// index.js const sum = (a, b) => a + b; console.log(sum(2, 2)); // styles.css body { background-color: #f0f0f0; }

3. 在工程项目产品目录下建立 webpack.config.js 文档,已经开始实用性:

const path = require(path); module.exports = { entry: ./src/index.js, output: { filename: main.js, path: path.resolve(__dirname, dist), }, module: { rules: [ { test: /\.js$/, exclude:/node_modules/, use: { loader: babel-loader, options: { presets: [@babel/preset-env] } } }, { test: /\.css$/, use: [style-loader, css-loader], }, ], }, };

4. 在 package.json 中添加命令:

“scripts”: { “build”: “webpack”, “dev”: “webpack-dev-server –open” },

5. 运行构筑命令:

$ npm run build

6. 完成后,输出的 main.js 文档大小不一将会更小,不必要的代码已经被自动去除。

通过采用 WebpackBabel 实现 JavaScript 文档的压缩和精简,可以有效增加文档大小不一和数目,提升网页操控性和用户体验。类似的,采用类似 CSS Nano 的辅助工具可以对 CSS 文档进行填充和精简,也可以进一步增加文档大小不一和数目。

3. 采用浏览器内存防止多次重复允诺。可以采用强内存和协商内存配合采用。

下列是两个采用 Express.jsETag 内存协商来增加不必要的允诺的实例:

1. 加装 Express.js 和有关倚赖:

$ npminstall express ejs

2. 在工程项目产品目录下建立 app.js 文档,已经开始实用性:

const express = require(express); const ejs = require(ejs); constapp = express();// 设置 EJS 模板引擎 app.set(views, ./views); app.set(view engine, ejs); // 定义路由 app.get(/, (req, res) => { // 设置强内存 res.setHeader(Cache-Control, public, max-age=60, immutable); // 生成 ETag const content = ` <h1>Hello, World!</h1> <p>This is a simple web page.</p> `; const hash = require(crypto).createHash(md5).update(content).digest(base64); const etag = `”${hash}“`; // 判断 ETag 是否匹配 if(etag === req.headers[if-none-match]) { // 返回 304 Not Modified res.status(304).end(); } else { // 返回页面内容和 ETag res.setHeader(ETag, etag); res.render(index, { content }); } }); // 启动服务器 app.listen(3000, () => { console.log(Server is running at http://localhost:3000); });

3. 在 views 产品目录下建立两个 index.ejs模板文档:

<!DOCTYPE html> <html> <head> <meta charset=“UTF-8”> <title>My Web Page</title> </head> <body> <%- content %> </body> </html>

4. 运行 Node.js 服务器:

$ node app.js

5. 访问 http://localhost:3000,页面内容会被内存,除非 ETag 发生变化,否则客户端会从内存中加载。

通过采用强内存和 ETag 内存协商机制,可以在服务器端防止不必要的允诺,增加带宽消耗和页面加载时间,强化网页操控性和用户体验。

4. 延迟加载图片和视频,采用图片和视频懒加载技术,只在需要时加载文档。

好的,下列是两个采用 Intersection Observer API 实现图片懒加载的实例:

1. 在 HTML 中标记需要延迟加载的图片,采用 data-src 属性替代 src 属性:

<img data-src=“image.jpg” alt=“My Image”>

2. 在 CSS 中定义占位符样式,确保页面布局不会因未加载的图片而发生变化:

img { width: 100%; height: 100%; object-fit: cover; background-color: #f0f0f0; }

3. 在 JavaScript 中采用 Intersection Observer API监视图片元素是否进入视口:

const images = document.querySelectorAll(img[data-src]); const options = { rootMargin: 0px, threshold:0.1 }; const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if(entry.isIntersecting) {const img = entry.target; const src = img.getAttribute(data-src); img.setAttribute(src, src); img.removeAttribute(data-src); observer.unobserve(img); } }); }, options); images.forEach(img => { observer.observe(img); });

4. 运行页面,当图片元素进入视口时,data-src 属性将会被替换成真正的 src 属性,图片将会被加载。

通过采用 Intersection Observer API 实现图片懒加载,可以延迟加载页面中的图片和视频,提高页面加载速度和用户体验,增加带宽消耗和服务器负载。

5. 强化 JavaScript 代码执行效率,尽可能防止长任务阻塞和 JavaScript 异常。

下列是两个采用 Web Worker 分离长任务的实例:

1. 在 JavaScript 中检查浏览器是否支持 Web Worker:

if (typeof(Worker) !== undefined) { // 浏览器支持 Web Worker } else { // 浏览器不支持 Web Worker }

2. 建立两个 worker.js 文档,包含长时间执行的任务逻辑:

console.log(Worker started); const doSomething = () =>{ const now = performance.now();while (performance.now() – now < 2000) {} console.log(Long task completed); }; onmessage = (event) => { if (event.data === start) { doSomething(); postMessage(completed); } };

3. 在主 JavaScript 中,通过new Worker() 建立两个 Web Worker:

if (typeof(Worker) !== undefined) { const worker = newWorker(worker.js); // 当 Web Worker 发送消息时,处理返回结果 worker.onmessage = (event) => { console.log(event.data); };// 向 Web Worker 发送两个消息,并已经开始长时间执行的任务 worker.postMessage(start); console.log(Main task continues); } else { console.log(Web Worker not supported); }

4. 运行代码时,长时间执行的任务将会在 Web Worker 中执行,主 JavaScript 不会阻塞,长时间执行的任务执行完成后,Web Worker 会将结果发送回主 JavaScript。

通过采用 Web Worker 把长时间执行的任务分离出来,主 JavaScript 可以继续执行其他的代码逻辑,提高 JavaScript 代码的执行效率。除了采用 Web Worker,还可以采用setTimeoutrequestAnimationFrame等方法,把长时间执行的任务分解成更短的时间段执行,以防止阻塞页面。此外,可以通过try-catch 合理地捕获 JavaScript 异常,以防止错误中断代码的执行。

6. 采用图片和视频的 WebP 和 AVIF 等新型图片格式,以强化文档大小不一和质量。

好的,下列是两个采用 <picture><source> 元素支持 WebP 和 AVIF 等新型图片格式的实例:

1. 准备好 WebP 和 AVIF 格式的图片文档,并采用 WebP 和 AVIF 兼容性检查辅助工具确认浏览器是否支持新格式。

2. 在 HTML 中采用 <picture><source> 元素替代 <img> 元素,增加 WebP 和 AVIF 格式图片的支持:

<picture> <!– 采用 WebP 格式时,浏览器支持 WebP 时显示 –> <source srcset=“image.webp” type=“image/webp”> <!– 采用 AVIF 格式时,浏览器支持 AVIF 时显示 –> <source srcset=“image.avif” type=“image/avif”> <!– 当浏览器不支持 WebP 和 AVIF 时,显示默认格式 –> <img src=“image.jpg” alt=“My Image”> </picture>

3. 运行页面时,如果浏览器支持 WebP 或 AVIF,将加载对应格式的图片,否则加载默认格式的图片。

通过采用新型图片格式如 WebP 和 AVIF,可以强化图片文档的大小不一和质量,从而提高页面加载速度和用户体验,增加带宽消耗和服务器负载。同时,为了让尽可能多的用户受益于新型图片格式,应该在保证用户体验的前提下,为不支持新格式的浏览器提供默认格式的图片。

7. 填充和分拆 HTML、CSS 和 JavaScript 的代码,以增加文档大小不一和网络允诺次数。

好的,下列是两个采用 Gulp 智能化构筑辅助工具填充和分拆文档的实例:

1. 加装 Gulp:

$ npm install gulp

2. 加装 HTML、CSS 和 JavaScript 填充和分拆插件:

$ npm installgulp-htmlmin gulp-csso gulp-uglify gulp-concat –save-dev

3. 在工程项目产品目录下建立 gulpfile.js 文档,已经开始实用性:

const gulp = require(gulp); const htmlmin = require(gulp-htmlmin); const csso = require(gulp-csso); const uglify = require(gulp-uglify); const concat = require(gulp-concat); gulp.task(minify-html, () => { return gulp.src(src/*.html) .pipe(htmlmin({ minifyCSS:true, minifyJS: true })) .pipe(gulp.dest(dist)); }); gulp.task(minify-css, () => { return gulp.src(src/*.css) .pipe(csso()) .pipe(gulp.dest(dist)); }); gulp.task(minify-js, () => { return gulp.src(src/*.js) .pipe(uglify()) .pipe(concat(app.min.js)) .pipe(gulp.dest(dist)); }); gulp.task(default, gulp.parallel(minify-html, minify-css, minify-js));

4. 在命令行中运行gulp 命令,执行智能化构筑:

$ gulp dist 产品目录下查看填充和分拆后的文档。

通过采用智能化构筑辅助工具如 Gulp,可以大大增加手工强化代码的工作量,提高工作效率和质量。除了上述插件,还可以使用其他的填充和分拆插件如 CleanCSS 和 Babel,进一步强化代码的大小不一和质量。在实际应用中,需要根据工程项目特点和实际需求,选择合适的插件和智能化构筑辅助工具,采取合理的工作流程,以达到最佳的代码优化和效益。

8. 采用浏览器内存技术来增加服务器允诺,例如采用 CDN 技术将动态天然资源部署到全球各地的服务器上。

下列是两个采用浏览器内存技术强化动态天然资源加载的实例:

1. 部署动态天然资源到 CDN 上,确保 CDN 的访问速度比本地服务器更快:

<link rel=“stylesheet” href=“https://cdn.example.com/app.css”> <script src=“https://cdn.example.com/app.js”></script> <img src=“https://cdn.example.com/image.jpg” alt=“My Image”>

2. 在服务器上配置动态天然资源的内存策略,通过设置Cache-ControlExpires 等 HTTP 响应头来控制天然资源如何被内存和过期:

app.use(express.static(public, { maxAge: 1d, setHeaders: (res, path, stat) => { res.set(Cache-Control, public, max-age=86400); res.set(Expires, new Date(Date.now() + 86400000).toUTCString()); } }));

3. 在 HTML 页面中添加版本号或时间戳等辅助信息,以确保每个版本的动态天然资源都有唯一的标识,以防止内存冲突和混淆。

通过采用浏览器内存技术和 CDN,可以大大增加服务器允诺和带宽消耗,提高动态天然资源的加载速度和用户体验,同时还可以降低服务器的负载和成本。在实际应用中,需要根据工程项目特点和实际需求,选择合适的内存策略和 CDN 服务提供商,采取合理的方案和措施,以达到最佳的效果和效益。

9. 强化网页布局和页面结构,防止重排和重绘。

好的,下列是两个强化网页布局和页面结构的实例,防止重排和重绘:

1. 采用 –tt-darkmode-color: #C7254E;”>position: fixed 定位元素,防止在文档流中移动和调整元素位置。

<div class=“wrapper”> <div class=“sidebar”></div> <div class=“main”></div> </div> .wrapper { position: relative; } .sidebar { position: absolute; top: 0; left: 0; width: 200px; } .main { margin-left: 200px; }

2. 采用 display: none 隐藏元素,而不是设置 visibility: hidden,防止影响布局和排版。

<button id=“btn”>Toggle</button> <div id=“content”> <p>Hello, World!</p> </div> const btn = document.querySelector(#btn); const content = document.querySelector(#content); btn.addEventListener(click, () => { if (content.style.display === none) { content.style.display =block; } else { content.style.display = none; } });

3. 在 CSS 中采用 transformopacity等属性进行动画效果的实现,而不是改变元素的位置和大小不一等属性。

.box { width: 100px; height: 100px; background-color: red; transition: all 0.3sease; }.box:hover { transform: scale(1.2); opacity: 0.8; }

通过强化网页布局和页面结构,尽可能防止重排和重绘操作,可以提高页面的操控性和体验,增加浏览器的负载和天然资源消耗。同时,还可以采用其他的强化措施如懒加载、CDN 加速、采用 WebP 等新型图片格式等,进一步提高页面的加载速度和用户体验。

10. 采用操控性检测辅助工具来发现并修复中文网站中的操控性瓶颈,例如 Google 的 PageSpeed Insights 和 WebPage Test 等。

下列是两个采用 GooglePageSpeed Insights 来检测页面操控性和发现瓶颈的实例:

进入 PageSpeed Insights 的中文网站,输入待检测的页面链接,选择对应的设备类型和网络速度。点击 “分析” 按钮,等待测试结果和分析报告的返回。在分析报告中,查找对应的操控性瓶颈和强化建议,例如页面加载速度、天然资源强化、内存策略等方面。根据分析报告中的建议和指引,采取相应的强化措施来提高页面操控性和用户体验。

下列是一些针对页面操控性强化的常用技术和方案:

图片强化:采用 WebP、填充图片大小不一、懒加载和延迟加载等技术CSS 和 JavaScript 强化:填充和分拆文档、降低 HTTP 允诺次数、采用内存和减小天然资源文档大小不一等服务器端强化:采用 Gzip 填充协议、启用 HTTP2 多路复用、采用 CDN 加速和负载均衡等尽可能少采用第三方库和组件,增加页面的代码量和倚赖关系。

通过采用操控性检测辅助工具如 PageSpeed InsightsWebPage Test,可以发现页面操控性瓶颈和强化建议,快速识别问题并采取相应的措施来提高页面的操控性和用户体验。

通过上述的强化措施,可以有效地提升 web 应用的操控性和用户体验。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务