Web性能优化:从基础到高级

news2024/11/16 1:38:36
💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

Web性能优化:从基础到高级

Web性能优化:从基础到高级

  • Web性能优化:从基础到高级
    • 引言
    • 基础优化
      • 1. 减少 HTTP 请求
        • 文件合并
      • 2. 压缩资源
        • Gzip 压缩
      • 3. 使用 CDN
        • 内容分发网络
      • 4. 图片优化
        • 图片压缩
        • 使用现代图片格式
    • 高级优化
      • 1. 首屏加载优化
        • 优先加载关键资源
      • 2. 懒加载
        • 图片懒加载
      • 3. 代码分割
        • 动态导入
      • 4. 服务端渲染
        • SSR
      • 5. 缓存策略
        • HTTP 缓存
      • 6. 避免阻塞渲染的资源
        • 优化 CSS 和 JavaScript
    • 工具和框架
      • 1. Lighthouse
        • 性能审计工具
      • 2. Webpack
        • 模块打包工具
      • 3. React
        • 前端框架
      • 4. Vue.js
        • 前端框架
    • 实际案例
      • 1. 电商网站
      • 2. 新闻网站
      • 3. 企业级应用
    • 最佳实践
      • 1. 持续性能监测
      • 2. 用户体验优先
      • 3. 逐步优化
      • 4. 文档记录
    • 未来展望
      • 1. 技术创新
      • 2. 行业标准
      • 3. 普及应用
    • 结论
    • 参考文献
      • 代码示例
        • webpack.config.js
        • src/index.js

引言

随着互联网的快速发展,Web 应用的性能优化变得越来越重要。良好的性能不仅能够提升用户体验,还能提高搜索引擎排名,增加用户留存率。本文将详细介绍 Web 性能优化的方法,从基础到高级,涵盖各个方面,帮助开发者构建高效、流畅的 Web 应用。

基础优化

1. 减少 HTTP 请求

文件合并

通过合并 CSS 和 JavaScript 文件,减少 HTTP 请求次数。

<!-- 合并前 -->
<link rel="stylesheet" href="styles1.css">
<link rel="stylesheet" href="styles2.css">
<script src="script1.js"></script>
<script src="script2.js"></script>

<!-- 合并后 -->
<link rel="stylesheet" href="styles.min.css">
<script src="script.min.js"></script>

2. 压缩资源

Gzip 压缩

使用 Gzip 压缩可以显著减少文件大小,加快传输速度。

# Nginx 配置
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

3. 使用 CDN

内容分发网络

使用 CDN 可以将静态资源分发到全球各地的服务器,提高加载速度。

<!-- 使用 CDN 加载 jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

4. 图片优化

图片压缩

使用工具(如 TinyPNG)压缩图片,减少文件大小。

# 使用 ImageOptim 压缩图片
imageoptim image.png
使用现代图片格式

使用现代图片格式(如 WebP)可以进一步减少图片大小。

<img src="image.webp" alt="Example Image">

高级优化

1. 首屏加载优化

优先加载关键资源

通过预加载和预渲染技术,优先加载首屏所需的资源。

<!-- 预加载 -->
<link rel="preload" href="/css/styles.css" as="style">
<link rel="preload" href="/js/app.js" as="script">

<!-- 预渲染 -->
<link rel="prerender" href="/about">

2. 懒加载

图片懒加载

通过懒加载技术,延迟加载非首屏图片,减少初始加载时间。

<img src="placeholder.jpg" data-src="image.jpg" class="lazy">

<script>
document.querySelectorAll('.lazy').forEach(img => {
  img.addEventListener('load', function() {
    img.classList.remove('lazy');
  });
  img.src = img.dataset.src;
});
</script>

3. 代码分割

动态导入

使用动态导入技术,按需加载代码,减少初始加载时间。

// 动态导入组件
import('./components/header').then(module => {
  const Header = module.default;
  render(<Header />, document.getElementById('root'));
});

4. 服务端渲染

SSR

使用服务端渲染技术,提前生成 HTML 内容,提高首屏加载速度。

// Next.js 服务端渲染
import { useRouter } from 'next/router';
import { useEffect } from 'react';

function Home() {
  const router = useRouter();
  useEffect(() => {
    if (router.isFallback) {
      router.replace('/404');
    }
  }, [router]);

  return <div>Welcome to the Home Page!</div>;
}

export default Home;

5. 缓存策略

HTTP 缓存

通过设置 HTTP 缓存头,实现资源的长期缓存。

# Nginx 配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
  expires 30d;
  add_header Cache-Control "public, no-transform";
}

6. 避免阻塞渲染的资源

优化 CSS 和 JavaScript

通过内联关键 CSS 和异步加载 JavaScript,避免阻塞渲染。

<!-- 内联关键 CSS -->
<style>
  body { font-family: Arial, sans-serif; }
</style>

<!-- 异步加载 JavaScript -->
<script src="/js/app.js" defer></script>

工具和框架

1. Lighthouse

性能审计工具

Lighthouse 是一个开源的性能审计工具,可以帮助开发者发现和修复性能问题。

# 使用 Lighthouse 进行性能审计
lighthouse https://example.com --view

2. Webpack

模块打包工具

Webpack 是一个强大的模块打包工具,支持代码分割、懒加载等多种优化技术。

// webpack.config.js
module.exports = {
  entry: './src/index.js',
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  optimization: {
    splitChunks: {
      chunks: 'all',
    },
  },
};

3. React

前端框架

React 是一个流行的前端框架,支持服务端渲染和代码分割,有助于提升性能。

// React 服务端渲染
import React from 'react';
import ReactDOMServer from 'react-dom/server';

const App = () => <div>Hello, World!</div>;

const html = ReactDOMServer.renderToString(<App />);
console.log(html);

4. Vue.js

前端框架

Vue.js 是另一个流行的前端框架,支持服务端渲染和懒加载,有助于提升性能。

// Vue.js 服务端渲染
import { createSSRApp } from 'vue';
import { renderToString } from 'vue/server-renderer';

const app = createSSRApp({
  template: `<div>Hello, World!</div>`
});

renderToString(app).then(html => {
  console.log(html);
});

实际案例

1. 电商网站

电商网站通常包含大量静态资源和动态内容,通过优化图片、使用 CDN 和代码分割,可以显著提升性能。
新闻网站的性能优化案例

2. 新闻网站

新闻网站通常需要快速加载首屏内容,通过服务端渲染和懒加载,可以提高首屏加载速度。

3. 企业级应用

企业级应用通常包含复杂的业务逻辑和大量的数据交互,通过优化 CSS 和 JavaScript,避免阻塞渲染,可以提升用户体验。

最佳实践

1. 持续性能监测

通过持续性能监测工具(如 New Relic),定期检查应用性能,及时发现和解决问题。

2. 用户体验优先

在性能优化过程中,始终将用户体验放在首位,确保优化措施不会影响用户体验。

3. 逐步优化

性能优化是一个逐步的过程,不要一次性进行大量改动,逐步优化,每次只解决一个问题。

4. 文档记录

记录优化过程和结果,形成文档,便于后续参考和团队协作。

未来展望

1. 技术创新

随着 Web 技术的不断发展,新的性能优化技术和工具将不断涌现,提高 Web 应用的性能和用户体验。

2. 行业标准

通过行业合作,共同制定 Web 性能优化的标准和规范,推动 Web 技术的广泛应用和发展。

3. 普及应用

随着技术的成熟和成本的降低,Web 性能优化将在更多的企业和平台中得到普及,成为主流的 Web 开发解决方案。

结论

Web 性能优化是提高用户体验和业务成功的关键。通过从基础到高级的优化方法,开发者可以构建高效、流畅的 Web 应用。然而,要充分发挥性能优化的潜力,还需要持续监测和逐步优化,确保每一步都符合用户体验的要求。未来,随着技术的不断进步和社会的共同努力,Web 性能优化将在 Web 开发中发挥更大的作用。

参考文献

  • Google Developers. (2021). Web Fundamentals.
  • Addy Osmani. (2019). Performance Patterns.
  • Steve Souders. (2013). High Performance Websites.
  • Paul Irish. (2019). 10 Tips for Better Web Performance.

代码示例

下面是一个简单的 Web 性能优化代码示例,演示如何使用 Webpack 进行代码分割和懒加载。

webpack.config.js
const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  optimization: {
    splitChunks: {
      chunks: 'all',
    },
  },
};
src/index.js
import React from 'react';
import ReactDOM from 'react-dom';

const App = () => {
  const loadComponent = async () => {
    const { default: LazyComponent } = await import('./LazyComponent');
    ReactDOM.render(<LazyComponent />, document.getElementById('root'));
  };

  return (
    <div>
      <button onClick={loadComponent}>Load Lazy Component</button>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));

这个示例通过使用 Webpack,展示了如何进行代码分割和懒加载,实现按需加载代码,减少初始加载时间。

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

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

相关文章

MATLAB实战 利用1D-DCGAN生成光谱或信号数据

0.前言 在光谱学或信号处理领域&#xff0c;获取大量高质量的数据可能是一项挑战。利用DCGAN进行“迁移学习”&#xff0c;对抗性地生成光谱或信号数据&#xff0c;具有强化、泛化样本特征的应用潜力。 该实战项目提供了所有源代码与测试数据&#xff0c;旨在帮助学者快速地掌握…

react + ts定义接口类型写法

接口&#xff08;未进行ts定义&#xff09; export async function UserList(params: {// keyword?: string;current?: number;pageSize?: number;},// options?: { [key: string]: any }, ) {return request<API1.UserList>(http://geek.itheima.net/v1_0/mp/artic…

uniapp luch-request 使用教程+响应对象创建

1. 介绍 luch-request 是一个基于 Promise 开发的 uni-app 跨平台、项目级别的请求库。它具有更小的体积、易用的 API 和方便简单的自定义能力。luch-request 支持请求和响应拦截、全局挂载、多个全局配置实例、自定义验证器、文件上传/下载、任务操作、自定义参数以及多拦截器…

RHCE-DNS域名解析服务器

一、DNS简介 DNS &#xff08; Domain Name System &#xff09;是互联网上的一项服务&#xff0c;它作为将域名和 IP 地址相互映射的一个分布式 数据库&#xff0c;能够使人更方便的访问互联网。 DNS 系统使用的是网络的查询&#xff0c;那么自然需要有监听的 port 。 DNS 使…

Unity中HDRP设置抗锯齿

一、以前抗锯齿的设置方式 【Edit】——>【Project Settings】——>【Quality】——>【Anti-aliasing】 二、HDRP项目中抗锯齿的设置方式 在Hierarchy中——>找到Camera对象——>在Inspector面板上——>【Camera组件】——>【Rendering】——>【Pos…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

Redis下载历史版本

Linux版本&#xff1a; https://download.redis.io/releases/ Windows版本&#xff1a; https://github.com/tporadowski/redis/releases Linux Redis对应gcc版本

Mysql篇-三大日志

概述 undo log&#xff08;回滚日志&#xff09;&#xff1a;是 Innodb 存储引擎层生成的日志&#xff0c;实现了事务中的原子性&#xff0c;主要用于事务回滚和 MVCC。 redo log&#xff08;重做日志&#xff09;&#xff1a;是 Innodb 存储引擎层生成的日志&#xff0c;实现…

MFC工控项目实例三十实现一个简单的流程

启动按钮夹紧 密闭&#xff0c;时间0到平衡 进气&#xff0c;时间1到进气关&#xff0c;时间2到平衡关 检测&#xff0c;时间3到平衡 排气&#xff0c;时间4到夹紧开、密闭开、排气关。 相关代码 void CSEAL_PRESSUREDlg::OnTimer_2(UINT nIDEvent_2) {// if (nIDEvent_21 &am…

通过 SSH 隧道将本地端口转发到远程主机

由于服务器防火墙,只开放了22端口,想要通过5901访问服务器上的远程桌面,可以通过下面的方式进行隧道转发。 一、示例命令 这条代码的作用是通过 SSH 创建一个 本地端口转发,将你本地的端口(5901)通过加密的 SSH 隧道连接到远程服务器上的端口(5901)。这种方式通常用于在…

docker——项目部署

什么是Docker&#xff1f; Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器完全使用沙盒机制&#xff0c;相互之间不会存在任何接口。几…

LabVIEW-TestExec SL

文章目录 新建LabVIEW .llb库链接vi至TestExec SLTestPlan调用调用自定义动作创建变量配置动作参数 注意事项 新建LabVIEW .llb库 创建一个文件夹用来存放文件。在此文件夹下创建两个文件夹&#xff0c;分别命名为Actions和Bin。其中&#xff0c;Actions用于存放动作&#xff…

数据结构--数组

一.线性和非线性 线性&#xff1a;除首尾外只有一个唯一的前驱和后继。eg&#xff1a;数组&#xff0c;链表等。 非线性&#xff1a;不是线性的就是非线性。 二.数组是什么&#xff1f; 数组是一个固定长度的存储相同数据类型的数据结构&#xff0c;数组中的元素被存储在一…

NFS-Ganesha 核心架构解读

NFSv4 简要概述 NFS 这个协议( NFSv2 )最初由 Sun Microsystems 在 1984 年设计提出&#xff0c;由于存在一些不足&#xff0c;因此在随后由几家公司联合推出了 NFSv3。到了 NFSv4 时&#xff0c;开发完全由 IETF 主导&#xff0c;设计目标是&#xff1a; 提高互联下的 NFS 访…

Simulink对仿真数据进行FFT频谱分析

1 问题引入 在仿真阶段&#xff0c;经常会遇到有些仿真结果的数据需要进行频谱分析&#xff0c;如何快速便捷地操作&#xff0c;这里介绍其中一种简单的方法。主要利用 Simulink 中 Scope 显示的数据进行保存并进行 FFT 频谱分析&#xff0c;按下文操作即可。 2 实战 2.1 将…

Python实现贪吃蛇 经典解压小游戏!附源码

大家应该都玩过诺基亚上面的贪吃蛇吧&#xff0c;那是一段美好的童年回忆&#xff0c;本文将带你一步步用python语言实现一个snake小游戏&#xff01; 基础环境必备 版本&#xff1a;Python3 ●系统&#xff1a;Windows ●相关模块&#xff1a;pygame pip install pygame安…

Taro React-Native IOS 打包发布

http网络请求不到 配置 fix react-native facebook::flipper::SocketCertificateProvider‘ (aka ‘int‘) is not a function or func_rn运行debug提示flipper-CSDN博客 Xcode 15&#xff08;iOS17&#xff09;编译适配报错_no template named function in namespace std-CS…

Chrome使用IE内核

Chrome使用IE内核 1.下载扩展程序IE Tab 2.将下载好的IE Tab扩展程序拖拽到扩展程序界面&#xff0c;之后重启chrome浏览器即可

C++基础:Pimpl设计模式的实现

2024/11/14: 在实现C17的Any类时偶然接触到了嵌套类的实现方法以及Pimpl设计模式&#xff0c;遂记录。 PIMPL &#xff08; Private Implementation 或 Pointer to Implementation &#xff09;是通过一个私有的成员指针&#xff0c;将指针所指向的类的内部实现数据进行隐藏。 …

深入理解AIGC背后的核心算法:GAN、Transformer与Diffusion Models

深入理解AIGC背后的核心算法&#xff1a;GAN、Transformer与Diffusion Models 前言 随着人工智能技术的发展&#xff0c;AIGC&#xff08;AI Generated Content&#xff0c;人工智能生成内容&#xff09;已经不再是科幻电影中的幻想&#xff0c;而成为了现实生活中的一种新兴力…