”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 优化 Next.js 应用性能的经过验证的技巧 ⚡️

优化 Next.js 应用性能的经过验证的技巧 ⚡️

发布于2024-11-08
浏览:916

Proven Tips to Optimize Performance in Your Next.js App ⚡️

优化 Web 应用程序的性能对于提供快速、流畅的用户体验至关重要。

借助 Next.js 这个强大的 React 框架,您可以利用许多内置功能来提高应用程序的速度和效率。

以下是让 Next.js 应用获得最佳性能的十个关键策略:


1. 仅加载您需要的 JavaScript 和 CSS

为了避免不必要的文件使您的应用程序变得臃肿,请确保您仅加载所需的 JavaScript 和 CSS。

Next.js 默认情况下自动对 JavaScript 进行代码分割,这意味着每个页面仅加载其功能所需的 JS。

同样,避免全局导入大型 CSS 文件 - 使用模块化或范围内的 CSS 来减少每个页面上加载的未使用 CSS 的数量。

如何实施:

  • 根据需要动态导入组件。
  • 保持 CSS 模块导入的范围仅限于特定组件。
import styles from './button.module.css'; // CSS module

const Button = () => {
  return ;
};

2. 依赖的延迟加载

延迟加载是一种缩短加载时间的强大技术。它确保仅在需要时加载大型或不太关键的组件。

这会减少初始包大小,从而加快页面首次有意义的渲染速度。

如何实施:

Next.js 支持动态导入延迟加载非必需组件。

import dynamic from 'next/dynamic';

const HeavyComponent = dynamic(() => import('./HeavyComponent'), {
  ssr: false,
});

export default function Home() {
  return ;
}

3. 使用 Next.js 中的组件

Next.js 提供了内置的 组件,可以针对不同的屏幕尺寸和格式自动优化图像。

此组件可确保图像延迟加载,并在可用时以 WebP 等现代格式提供,从而显着提高性能。

如何实施:

import Image from 'next/image';

export default function Home() {
  return (
    An optimized image
  );
}

4. 更喜欢 CSS 而不是 JavaScript

尽可能使用 CSS 来实现动画和过渡,而不是 JavaScript。

CSS 动画通常性能更高,因为它们可以利用硬件加速,而基于 JavaScript 的动画可能会导致卡顿和性能瓶颈。

例子:

不要使用 JavaScript 来实现简单的淡入效果,而是使用 CSS 过渡。

.fade-in {
  opacity: 0;
  transition: opacity 0.5s ease-in;
}

.fade-in-visible {
  opacity: 1;
}

5.避免一开始就显示加载程序

加载旋转器或骨架屏幕可以给用户一种进步感,但它们也可能表明您的应用程序很慢。

不要一开始就显示加载程序,而是专注于优化您的应用程序以快速、渐进地加载内容。

如何实施:

  • 使用服务器端渲染 (SSR) 或静态站点生成 (SSG) 预先加载内容。
  • 主要内容呈现后,延迟加载页面中不太重要的部分。

6.使用Next.js字体优化

如果处理不当,字体会减慢加载时间。 Next.js 具有内置的字体优化功能,它会自动为您的应用选择最佳的字体加载策略以提高性能。

如何实施:

使用内置的 Google Fonts 集成以最佳性能加载字体。

import { Inter } from 'next/font/google';

const inter = Inter({ subsets: ['latin'] });

export default function Home() {
  return 
Hello, world!
; }

7. 脚本优化

仅在必要时加载外部脚本。如果脚本对于特定页面而不是整个应用程序至关重要,请避免全局加载它。

Next.js 允许您使用 组件控制脚本加载的方式和时间。

如何实施:

import Script from 'next/script';

export default function Home() {
  return (
    
      >
  );
}

优化策略:

  • 对非必要脚本使用strategy="lazyOnload"。
  • 对用户交互之前所需的关键脚本使用strategy="beforeInteractive"。

8. 删除未使用的包

随着时间的推移,随着项目的发展,您可能会积累未使用的依赖项,从而使您的包变得臃肿。

使用 depcheck 等工具定期检查并删除未使用的软件包。

如何实施:

在项目中运行 depcheck 以查找并删除未使用的依赖项。

npx depcheck

9. 检查当前捆绑包大小

密切关注包大小以防止性能下降非常重要。

@next/bundle-analyzer 工具可帮助您可视化包中每个模块的大小,从而更轻松地识别和优化大型依赖项。


10.使用服务器组件

Next.js 13 引入了服务器组件,它允许您在服务器上渲染页面的部分内容,并仅向客户端发送最少的 JavaScript。

这可以大大减少客户端 JavaScript 的数量,从而提高性能。


结论

优化 Next.js 应用程序的性能是一个持续的过程,但通过遵循这些最佳实践,您可以显着减少加载时间并改善用户体验。

实施这些策略可确保您的应用从一开始就快速、响应灵敏且高效!


快乐编码!

版本声明 本文转载于:https://dev.to/alisamir/proven-tips-to-optimize-performance-in-your-nextjs-app-lpc?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • OpenAI 在简化代码方面出奇地好
    OpenAI 在简化代码方面出奇地好
    While browsing the Internet for inspiration, I came across an interesting-looking component. I thought the block with the running ASCII art looked coo...
    编程 发布于2024-11-08
  • 与工人一起部署
    与工人一起部署
    按钮发生器 按钮生成器是一款旨在简化 GitHub 上托管项目的部署过程的工具。通过创建“部署到 Cloudflare Workers”按钮,您可以简化部署过程,让用户只需单击一下即可将您的应用程序部署到 Cloudflare Workers。 此按钮为用户提供了一种将项目直接部署...
    编程 发布于2024-11-08
  • 使用 PHP 操作字符串
    使用 PHP 操作字符串
    字符串是编程中用于表示字符序列的数据类型。这些字符可以是字母、数字、空格、符号等。在许多编程语言中,字符串用单引号 (') 或双引号 (") 括起来。 字符串连接 连接是将两个或多个字符串连接在一起的过程。 <?php $name = "John"; $lastname = ...
    编程 发布于2024-11-08
  • jQuery 可以帮助使用 Comet 模式进行服务器发送消息吗?
    jQuery 可以帮助使用 Comet 模式进行服务器发送消息吗?
    利用 Comet 通过 jQuery 进行服务器发送消息传递在 JavaScript 编程领域,服务器推送功能已经获得了突出地位,彗星设计模式正在成为一种流行的方法。本文探讨了构建在著名 jQuery 库之上的此类解决方案的可用性。基于 jQuery 的 Comet 实现尽管 Comet 模式很流行...
    编程 发布于2024-11-08
  • 如何在 Keras 中实现 Dice 误差系数的自定义损失函数?
    如何在 Keras 中实现 Dice 误差系数的自定义损失函数?
    Keras 中的自定义损失函数:实现 Dice 误差系数在本文中,我们将探讨如何创建自定义损失函数在 Keras 中,重点关注 Dice 误差系数。我们将学习实现参数化系数并将其包装以与 Keras 的要求兼容。实现系数我们的自定义损失函数将需要系数和一个包装函数。该系数测量 Dice 误差,该误差...
    编程 发布于2024-11-08
  • 为什么 MySQL 会抛出“警告:mysql_fetch_assoc 参数无效”错误?
    为什么 MySQL 会抛出“警告:mysql_fetch_assoc 参数无效”错误?
    MySQL 警告:mysql_fetch_assoc 的参数无效问题:尝试从 MySQL 检索数据时数据库时,遇到以下错误消息:mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource说明:mysql_fe...
    编程 发布于2024-11-08
  • 为什么在 Node.js 应用程序中连接到 MySQL 时出现“connect ECONNREFUSED”错误?
    为什么在 Node.js 应用程序中连接到 MySQL 时出现“connect ECONNREFUSED”错误?
    Node.js MySQL:解决“connect ECONNREFUSED”错误将 Node.js 应用程序部署到远程服务器时,您可以尝试建立与 MySQL 数据库的连接时遇到“connect ECONNREFUSED”错误。当 MySQL 连接参数中提供的主机配置不正确时,通常会出现此问题。在您的...
    编程 发布于2024-11-08
  • 用 Go 构建密码管理器
    用 Go 构建密码管理器
    作为一名软件开发人员,我一直对安全性和可用性的交集着迷。最近,我决定开始一个令人兴奋的项目:使用 Go 创建一个命令行密码管理器。我想与您分享这段旅程的开始,从第一次提交开始。 创世记 2023 年 11 月 27 日,我对我的项目进行了初步提交,我将其命名为“dost”(印地语中的...
    编程 发布于2024-11-08
  • 如何使用 HTML ruby​​ 元素在 HTML 中增强文本注释
    如何使用 HTML ruby​​ 元素在 HTML 中增强文本注释
    在本教程中,我们将探索如何有效地使用 HTML 元素来创建增强的文本注释。 HTML5 中的 元素旨在显示 ruby​​ 注释,这是东亚排版中常用的小文本组件。这些注释通常用于提供发音指南或附加信息。 元素对于需要在正文旁边或上方进行详细注释的文档至关重要,这使其在教育内容、语言学习资源和某些...
    编程 发布于2024-11-08
  • 如何实现跨域JavaScript的JSONP回调?
    如何实现跨域JavaScript的JSONP回调?
    跨域JavaScript的JSONP回调实现为了方便不同域之间的通信,引入了JSONP(JSON with Padding)。此技术涉及创建一个回调函数,该函数可用于包装 JSON 数据并使其可以从不同的域进行访问。下面是如何在 PHP 中实现 JSONP:接受回调参数首先,在 GET 请求中,我们...
    编程 发布于2024-11-08
  • 每周博客:本周我遇到的四件有趣的事情
    每周博客:本周我遇到的四件有趣的事情
    1. 避免 VS Code 中文件名混淆 在VS Code中编写C文件时,我将一个文件命名为first.c.cpp。完成程序后,我在执行过程中遇到了错误。经过30分钟的排查,我发现问题出在文件名: .c 扩展名导致 IDE 错误地将其识别为 C 程序,导致 VS Code 使用 g...
    编程 发布于2024-11-08
  • Python正则表达式中“\d”和“[0-9]”有什么区别?
    Python正则表达式中“\d”和“[0-9]”有什么区别?
    [字符]:正则表达式中的\dPython风格正则表达式中的“\d”字符类用于匹配数字。数字通常定义为数字字符 (0-9)。然而,值得注意的是,“\d”的行为可能会根据编程语言和实现的不同而有所不同。对于 Python,“\d”匹配满足 Unicode 的 \p{Nd} 的字符属性,其中包括以下内容:...
    编程 发布于2024-11-08
  • 如何在 Golang 中写入 Bytes.Buffer 的开头?
    如何在 Golang 中写入 Bytes.Buffer 的开头?
    Golang 中的前缀缓冲区写入在 Golang 中,bytes.Buffer 是一种为高效字符串连接和操作而设计的类型。然而,一些开发人员可能会遇到写入缓冲区开头的需要,这与仅附加到缓冲区的内置帮助器方法(例如 WriteString)不同。写入缓冲区开头虽然 bytes.Buffer 的底层 b...
    编程 发布于2024-11-08
  • 在 Laravel 中为本地文件创建临时 URL
    在 Laravel 中为本地文件创建临时 URL
    在 Laravel 中处理私有文件通常意味着涉及 S3 或 DigitalOcean 等第三方服务。但是如果您在本地开发环境中或者有一个轻量级项目怎么办?您可能不想依赖第三方云服务。 幸运的是,Laravel 可以轻松地为本地存储的文件提供临时 URL。这种方法可以加快开发速度并简化文件共享。 您只...
    编程 发布于2024-11-08
  • 了解如何创建 API 支持的 Zelda BOTW 怪物画廊 Web 组件
    了解如何创建 API 支持的 Zelda BOTW 怪物画廊 Web 组件
    模数教程回来了! 大家好!暑假结束后,我带着 Modulo 教程回来了。我正在制作更多教程 - 请继续关注。也就是说,如果您对我的下一个主题有任何具体想法,请务必在评论中告诉我! 我的上一篇教程是关于 API 驱动的 Pokémon Dance Party 组件的超级快速且有趣的“...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3