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

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

网站性能不佳?试试这十大前端性能优化技巧!(一)https://developer.aliyun.com/article/1426475


5. 优化 JavaScript 代码执行效率,尽可能避免长任务阻塞和 JavaScript 异常。

以下是一个使用 Web Worker 分离长任务的示例:

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

if (typeof(Worker) !== 'undefined') {
  // 浏览器支持 Web Worker
} else {
  // 浏览器不支持 Web Worker
}
• 1
• 2
• 3
• 4
• 5

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');
  }
};
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14

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

if (typeof(Worker) !== 'undefined') {
  const worker = new Worker('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');
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15

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>
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10

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

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

7. 压缩和合并 HTML、CSS 和 JavaScript 的代码,以减少文件大小和网络请求次数。

好的,以下是一个使用 Gulp 自动化构建工具压缩和合并文件的示例:

1. 安装 Gulp:

$ npm install gulp
• 1

2. 安装 HTML、CSS 和 JavaScript 压缩和合并插件:

$ npm install gulp-htmlmin gulp-csso gulp-uglify gulp-concat --save-dev
• 1

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'));
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18
• 19
• 20
• 21
• 22
• 23
• 24
• 25
• 26

4. 在命令行中运行 gulp 命令,执行自动化构建:

$ gulp
• 1
  1. 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">
• 1
• 2
• 3

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());
  }
}));
• 1
• 2
• 3
• 4
• 5
• 6
• 7

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

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

9. 优化网页布局和页面结构,避免重排和重绘。

好的,以下是一个优化网页布局和页面结构的示例,避免重排和重绘:

1. 使用 position: absoluteposition: fixed 定位元素,避免在文档流中移动和调整元素位置。

<div class="wrapper">
  <div class="sidebar"></div>
  <div class="main"></div>
</div>
• 1
• 2
• 3
• 4
.wrapper {
  position: relative;
}
.sidebar {
  position: absolute;
  top: 0;
  left: 0;
  width: 200px;
}
.main {
  margin-left: 200px;
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14

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

<button id="btn">Toggle</button>
<div id="content">
  <p>Hello, World!</p>
</div>
• 1
• 2
• 3
• 4
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';
  }
});
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10

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

.box {
  width: 100px;
  height: 100px;
  background-color: red;
  transition: all 0.3s ease;
}
.box:hover {
  transform: scale(1.2);
  opacity: 0.8;
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11

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

10. 使用性能检测工具来发现并修复网站中的性能瓶颈,例如 Google 的 PageSpeed Insights 和 WebPage Test 等。

以下是一个使用 GooglePageSpeed Insights 来检测页面性能和发现瓶颈的示例:

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

以下是一些针对页面性能优化的常用技术和方案:

  • 图片优化:使用 WebP、压缩图片大小、懒加载和延迟加载等技术
  • CSS 和 JavaScript 优化:压缩和合并文件、降低 HTTP 请求次数、使用缓存和减小资源文件大小等
  • 服务器端优化:采用 Gzip 压缩协议、启用 HTTP2 多路复用、使用 CDN 加速和负载均衡等
  • 尽可能少使用第三方库和组件,减少页面的代码量和依赖关系。

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

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

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
6月前
|
机器学习/深度学习 前端开发 算法
利用深度学习技术提升前端图像处理性能
本文将探讨如何利用深度学习技术在前端图像处理中提升性能。通过结合深度学习算法和前端技术,我们可以实现更高效的图像处理功能,提升用户体验和系统性能。
|
6月前
|
前端开发 数据可视化 JavaScript
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
262 6
|
6月前
|
缓存 前端开发 JavaScript
前端性能优化:高在性能,大在范围,必要前置知识一网打尽!(下)
在上一篇 前端性能优化:高在性能,大在范围,必要前置知识一网打尽!(上) 一文中介绍了和前端性能优化相关的一些前置知识,那么本篇就针对优化方案进行总结,核心的方向还是上篇文章中提到的内容:
|
6月前
|
缓存 前端开发 JavaScript
如何优化前端页面性能
前端性能优化是网站开发中非常重要的一部分,它直接关系到用户体验和网站的流量以及排名。本文将介绍一些优化前端页面性能的方法,包括减少HTTP请求、压缩代码、使用CDN等。
|
6月前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
268 0
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
3月前
|
缓存 前端开发 JavaScript
超时空加速秘籍:揭秘JavaScript前端开发中的性能魔法,让您的Web应用瞬间穿越到未来!
【8月更文挑战第27天】本文介绍了一系列实用的JavaScript性能优化方法并提供了示例代码,包括减少DOM操作、使用事件委托、避免阻塞主线程、异步加载资源、利用浏览器缓存、代码分割以及使用Service Worker等技术,帮助开发者有效提升Web应用性能和用户体验。
49 2
|
3月前
|
缓存 编解码 前端开发
优化Web应用性能的前端技巧:从加载时间到用户体验
在现代Web开发中,提升前端性能不仅仅是为了缩短页面加载时间,更是为了提供更流畅的用户体验。本文将探讨几种有效的前端优化技术,包括懒加载、代码拆分、资源压缩以及浏览器缓存策略。通过具体实例和最佳实践,读者将能够掌握如何系统地提高Web应用的响应速度,减少资源消耗,并最终改善用户的整体体验。
|
3月前
|
前端开发 JavaScript API
一场前端框架的“武林大会”,三大主流框架之间的性能比较!!!
一场前端框架的“武林大会”,三大主流框架之间的性能比较!!!
|
3月前
|
前端开发 UED 开发者
React组件优化全攻略:深度解析让你的前端应用飞速运行的秘诀——从PureComponent到React.memo的彻底性能比较
【8月更文挑战第31天】在构建现代Web应用时,性能是提升用户体验的关键因素。React作为主流前端库,其组件优化尤为重要。本文深入探讨了React组件优化策略,包括使用`PureComponent`、`React.memo`及避免不必要的渲染等方法,帮助开发者显著提升应用性能。通过实践案例对比优化前后效果,不仅提高了页面渲染速度,还增强了用户体验。优化React组件是每个开发者必须关注的重点。
63 0
|
3月前
|
前端开发 JavaScript 开发者
掌握Web前端事件处理精髓:从事件冒泡到事件委托,轻松优化你的交互体验与代码性能!
【8月更文挑战第23天】在Web前端开发中,事件处理是实现用户交互的关键机制。其中,事件冒泡与事件委托是优化页面性能、简化代码的重要手段。事件冒泡是指事件从触发它的元素开始,沿着DOM树向上逐层传播至根节点的过程。通过阻止事件冒泡,可以控制事件的影响范围。而事件委托则是利用事件冒泡特性,在父元素上设置监听器来响应子元素的事件,这种方法减少了监听器的设置数量,特别适用于动态添加的子元素,提高了代码的可维护性和性能。掌握这两种技术,能帮助开发者构建更高效、更简洁的应用程序。
51 0