Next.js 独立开发教程(四):字体与图像优化指南

系列文章目录

Next.js 开发教程(一):入门指南-CSDN博客

Next.js 开发教程(二):从零构建仪表盘应用-CSDN博客

Next.js 开发教程(三):CSS 样式的完整指南-CSDN博客

Next.js 独立开发教程(四):字体与图像优化指南

Next.js 独立开发教程 (五):创建布局和页面-CSDN博客

有兴趣的可以蹲个后续,我会陆续发布一系列的文章。

以建设独立开发能力为目标,精选一些实用的技术和非技术的内容跟大家分享。


目录

引言

1. 字体优化:提升文本呈现性能

1.1 Web 字体的加载挑战

1.2 使用 Next.js 内置的 Google 字体优化

步骤 1:安装必要的包

步骤 2:引入 Google 字体

步骤 3:配置字体选项

1.3 自定义字体的加载

2. 图像优化:高效加载与展示

2.1 图像优化的重要性

2.2 使用 next/image 组件

步骤 1:引入 next/image

步骤 2:配置图像优化选项

2.3 响应式图像

2.4 图像占位符为了提升用户体验,可以为延迟加载的图像设置占位符,避免加载过程中的空白区域。

3. 在仪表盘应用中实践字体与图像优化

3.1 全局字体优化

3.2 高效图像展示

4. 总结与最佳实践

4.1 字体优化

4.2 图像优化


引言

在现代 Web 应用中,字体和图像的优化是影响用户体验和页面性能的关键因素。Next.js 提供了开箱即用的优化工具,使开发者能够轻松管理和提升字体与图像的加载性能。在这篇文章中,我们将基于 Next.js 的特性,详细介绍如何优化字体和图像,并应用到实际的仪表盘项目中。

1. 字体优化:提升文本呈现性能

1.1 Web 字体的加载挑战


传统的 Web 字体加载方式可能导致以下问题:

  • 闪烁的无样式文本(FOIT):在字体加载完成前,页面显示为空白或默认字体。
  • 闪烁的样式化文本(FOUT):加载完成后,页面的字体突然改变。

Next.js 提供了内置的字体优化功能,通过减少网络请求、提供延迟加载选项等方式优化字体加载性能。

1.2 使用 Next.js 内置的 Google 字体优化

Next.js 集成了 Google 字体服务,允许开发者直接使用优化后的字体加载。以下是应用 Google 字体的步骤。

步骤 1:安装必要的包

Next.js 内置的 Google 字体优化功能无需额外配置,但推荐通过以下方式快速使用:

npm install next/font

步骤 2:引入 Google 字体

以下是在 `pages/_app.js` 中引入字体的示例:

// pages/_app.js
import { Roboto } from 'next/font/google';const roboto = Roboto({subsets: ['latin'],weight: ['400', '700'],style: ['normal', 'italic'],display: 'swap', // 避免 FOIT
});export default function MyApp({ Component, pageProps }) {return (<div className={roboto.className}><Component {...pageProps} /></div>);
}

步骤 3:配置字体选项

Next.js 的 Google 字体 API 支持多个选项:

weight:定义不同的字重(如 400、700)。

subsets:指定语言子集(如 `latin`、`cyrillic`)。

display:设置字体显示策略(推荐使用 `swap`)。

使用 `display: swap` 可以避免 FOIT,确保用户在字体加载时看到回退字体。

---

1.3 自定义字体的加载

如果项目中需要使用自定义字体(例如公司品牌字体),可以通过以下方式实现:
1. 将字体文件放置在 `public/fonts` 目录中。
2. 使用 CSS 或 CSS 模块加载字体。

以下是一个示例:

/* styles/globals.css */
@font-face {font-family: 'MyCustomFont';src: url('/fonts/MyCustomFont.woff2') format('woff2'),url('/fonts/MyCustomFont.woff') format('woff');font-weight: normal;font-style: normal;
}body {font-family: 'MyCustomFont', sans-serif;
}

此方法可以确保字体文件随应用一起部署,并通过 Next.js 的内置优化工具自动提升性能。

2. 图像优化:高效加载与展示

2.1 图像优化的重要性

未优化的图像可能导致以下问题:

  • 页面加载缓慢:较大的图像文件会显著增加加载时间。
  • 高数据消耗:对移动设备用户来说,未优化的图像会消耗更多流量。
  • 低质量展示:在高分辨率屏幕上,低质量的图像可能显得模糊。

Next.js 内置的 `next/image` 组件提供了强大的优化功能,包括延迟加载、自适应尺寸、和自动压缩。

2.2 使用 next/image 组件

next/image 是 Next.js 提供的默认图像优化组件,它通过以下功能提升图像性能:

  • 自动优化:图像会根据设备尺寸自动调整分辨率。
  • 延迟加载:默认情况下,图像在进入视窗时才加载。
  • 内置响应式:通过设置尺寸属性,图像可以根据屏幕大小自适应。

步骤 1:引入 next/image


在仪表盘页面中使用优化后的图像:

// pages/dashboard.js
import Image from 'next/image';export default function Dashboard() {return (<div><h1>仪表盘</h1><Image src="/images/dashboard.png" alt="Dashboard Image" width={600} height={400} priority // 提高页面加载时的优先级/></div>);
}

步骤 2:配置图像优化选项

默认情况下,Next.js 只允许优化来自同一域的图像。如果需要加载外部图像,可以通过 `next.config.js` 进行配置:

// next.config.js
module.exports = {images: {domains: ['example.com'], // 添加允许加载的图像域名},
};

2.3 响应式图像

通过设置 `layout` 属性,`next/image` 可以轻松实现响应式图像:

<Image src="/images/responsive.jpg" alt="Responsive Image" layout="responsive" width={16} height={9} 
/>

此示例中,`layout="responsive"` 根据宽高比调整图像尺寸,确保在不同设备上始终显示最佳比例。

2.4 图像占位符
为了提升用户体验,可以为延迟加载的图像设置占位符,避免加载过程中的空白区域。

<Image src="/images/dashboard.png" alt="Dashboard Image" width={600} height={400} placeholder="blur" blurDataURL="/images/blur-placeholder.png" 
/>

此方法会在图像加载完成前显示模糊效果,占位符可通过 `blurDataURL` 指定。

3. 在仪表盘应用中实践字体与图像优化

结合字体与图像优化的技术,我们将在仪表盘页面实现高性能加载。

3.1 全局字体优化

在 `_app.js` 中使用 Google 字体 "Inter" 并设置全局样式:

// pages/_app.js
import { Inter } from 'next/font/google';const inter = Inter({ subsets: ['latin'], weight: ['400', '700'] });export default function MyApp({ Component, pageProps }) {return (<div className={inter.className}><Component {...pageProps} /></div>);
}

3.2 高效图像展示

在仪表盘页面中展示动态图像列表:

// pages/dashboard.js
import Image from 'next/image';const images = [{ src: '/images/graph1.png', alt: 'Graph 1', width: 600, height: 400 },{ src: '/images/graph2.png', alt: 'Graph 2', width: 600, height: 400 },
];export default function Dashboard() {return (<div><h1>仪表盘</h1>{images.map((img, index) => (<Image key={index} src={img.src} alt={img.alt} width={img.width} height={img.height} placeholder="blur" />))}</div>);
}

4. 总结与最佳实践

4.1 字体优化

  • 优先使用 Next.js 的 Google 字体集成工具,以减少网络请求并提高加载速度。
  • 对于自定义字体,确保文件格式兼容性(推荐使用 WOFF/WOFF2)。

4.2 图像优化

  • 使用 `next/image` 实现延迟加载、响应式布局和自动优化。
  • 对于静态资源,使用占位符效果提升用户体验。
  • 配置 `next.config.js` 支持第三方图像源。

通过结合字体和图像优化,开发者可以显著提升 Next.js 应用的加载性能和视觉质量,使其更贴合现代 Web 的高性能需求。

有兴趣的可以蹲个后续,我会陆续发布一系列的文章。

相关内容

TBD

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

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

相关文章

C++设计模式行为模式———中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…

泥石流灾害风险评估与模拟丨AI与R语言、ArcGIS、HECRAS融合,提升泥石流灾害风险预测的精度和准确性

目录 第一章 理论基础 第二章 泥石流风险评估工具 第三章 数据准备与因子提取 第四章 泥石流灾害评价 第五章 HECRAS软件的应用 第六章 操作注意事项与模型优化 泥石流灾害的频发与严重后果&#xff0c;已成为全球范围内防灾减灾工作的重大挑战。随着科技的不断进步&…

HarmonyOS:使用ArkWeb构建页面

一、简介 页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景&#xff0c;包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。 页面加载过程中&#xff0c;若涉及网络资源获取&#xff0c;需要配置ohos.permission.INTERNET网络访问权限。 二、…

MATLAB的语音信号采集与处理分析

1、基本描述 本文描述的系统是一个全面而精细的语音信号处理平台&#xff0c;核心组件由MATLAB的高级功能模块构建而成。系统的核心交互界面&#xff0c;借助于MATLAB的uifigure函数搭建&#xff0c;为用户提供了一个直观且响应迅速的操作环境。通过设计的GUI按钮&#xff0c;如…

opencv undefined reference to `cv::noarray()‘ 。window系统配置opencv,找到opencv库,但连接不了

之前都是在ubuntu里用opencv&#xff0c;今天为了方便在平时用Window10系统也用下c版的cv&#xff0c;就想配置一下vscode的cv环境&#xff0c;直接下载了一个编译好的opencv库&#xff08;带build文件夹的&#xff09;&#xff0c;刚开始用的是visual studio的编译器&#xff…

经典游戏:飞机大战游戏python设计与实现

《飞机大战》是一款经典的二维飞行射击游戏&#xff0c;其核心玩法是控制玩家飞机与敌机作战&#xff0c;通过击落敌机获取分数并尽量避免被敌机击中。根据提供的代码&#xff0c;飞机大战的设计和实现可以分为以下几个主要部分&#xff1a;游戏初始化、游戏界面设计、玩家控制…

填补覆盖空白,小型机器人让智能清洁再“净”一步!

尽管不同商用场景的大多区域都十分相似&#xff0c;但非标准化的场景属性无法避免的导致了不少corner case。面对狭窄场景&#xff0c;“强悍”的商用清洁机器人迎来了自己的“职业危机”。 随着城市化进程的推进和服务业比重提升&#xff0c;商场、写字楼等细分场景不断扩容&a…

【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写

文章目录 &#x1f4dd;前言&#x1f320; 步骤&#x1f309;测试同步 &#x1f6a9;总结 &#x1f4dd;前言 本文目的是讲使用Vscode连接Ubantu,与本地Xshell建立通信同步文件编写。 查看本机系统相关信息&#xff1a; cat /etc/lsb*DISTRIB_IDUbuntu: 表示这是 Ubuntu 发行…

Hadoop的MapReduce详解

文章目录 Hadoop的MapReduce详解一、引言二、MapReduce的核心概念1、Map阶段1.1、Map函数的实现 2、Reduce阶段2.1、Reduce函数的实现 三、MapReduce的执行流程四、MapReduce的使用实例Word Count示例1. Mapper类2. Reducer类3. 执行Word Count 五、总结 Hadoop的MapReduce详解…

c#:winform引入bartender

1、vs新建项目 ①选择Windows窗体应用&#xff08;.NET Framework&#xff09; 2、将bartender引入vs中 ①找到bartender的安装目录&#xff0c;复制Seagull.BarTender.Print.dll文件 ②粘贴到项目->bin->Debug文件&#xff0c;并可创建Model文件夹&#xff1a;为了存放…

基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

详细描述一下Elasticsearch更新和删除文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch更新和删除文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch更新和删除文档的过程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 E…

关于相机选型的一些参数说明

上一篇&#xff1a;关于相机的一些参数计算&#xff08;靶面、视野等&#xff09; 目录 1.卷帘快门和全局快门1.1 卷帘快门1.2 全局快门PS&#xff1a;视觉伺服与快门选择 2.黑白和彩色3.CCD和CMOS3.1 CCD3.2 CMOSCCD VS CMOS 4.面阵和线扫4.1 面阵4.2 线扫4.3 面阵 VS 线扫 5.…

ctfshow

1,web21 Basic认证采用Base64加密方式&#xff0c;Base64解码字符串发现是 用户名:密码 的格式进行Base64编码。 密码shark63 2,web22 用 子域名扫描器 扫出flag.ctf.show拿到flag&#xff0c;但这个域名已经没了所以就直接交的官方提供的flag。 3,web23 这段PHP代码是一个简单…

条件编译(手绘)

大家好&#xff0c;今天给大家分享一下条件编译&#xff0c;由于符号有点难写&#xff0c;我已经将内容记在笔记本中&#xff0c;现在供大家学习。 那么我们来看看代码的实现

前端和后端

前端和后端 前端、后端的编程语言/服务器前端定义前端技术栈后端定义后端技术栈 web服务器数据库浏览器URL 前端、后端的编程语言/服务器 前端定义 前端指的是用户在使用软件时所看到的那部分&#xff0c;是与用户直接进行交互的部分。主要负责展示信息或数据&#xff0c;并将…

大数据技术之SparkCore

RDD概述 什么是RDD RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象。代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 RDD五大特性 RDD编程 RDD的创…

MacOS通过VMware Fusion安装windows 11问题汇总

环境 虚拟机&#xff0c;VMware Fusion 13.6.1本地机器&#xff0c;ARM芯片的Mac&#xff0c;系统版本14.5Windows系统镜像&#xff0c;Window11 ARM 64 bit 安装卡在WiFi连接界面 适合我本地环境的解决步骤为&#xff1a; 1、系统设置网络共享 我开启的是en5&#xff0c;这…

高度统一:极大和极小如何统于一

英语里有两个单词&#xff1a; min n.最小值max n.最大值 min和max其实是缩略值&#xff0c;它们词源上的本质&#xff0c;min来自于“极小”&#xff0c;max来自于“极大”&#xff0c;都来自于“极&#xff0c;极限&#xff0c;极度”的概念 那么&#xff0c;问题来了&…

Python 快速入门(上篇)❖ Python基础知识

Python 基础知识 Python安装**运行第一个程序:基本数据类型算术运算符变量赋值操作符转义符获取用户输入综合案例:简单计算器实现Python安装** Linux安装: yum install python36 -y或者编译安装指定版本:https://www.python.org/downloads/source/ wget https://www.pyt…