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

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

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

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]删除
最新教程 更多>
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-28
  • 在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8表中将latin1字符转换为utf8 ,您遇到了一个问题,其中含义的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致电。为了解决此问题,您正在尝试使用“ mb_convert_encoding”和“ iconv”转换受...
    编程 发布于2025-04-28
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-04-28
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-28
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-28
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 的 ...
    编程 发布于2025-04-28
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-28
  • 输出缓冲如何提升PHP网页性能及开发效率?
    输出缓冲如何提升PHP网页性能及开发效率?
    Exploring the Efficacy of Output Buffering in PHPOutput buffering is a crucial programming technique in PHP that enables the manipulation of HTML as a...
    编程 发布于2025-04-28
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-04-28
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-28
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-04-28
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-04-28
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-04-28
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html posite:sticky; sticky; .Sticky-1 {[ top:1em; z-index:1; 1; { display:gr...
    编程 发布于2025-04-28
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-04-28

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

Copyright© 2022 湘ICP备2022001581号-3