」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 優化 Next.js 應用效能的經過驗證的技巧 ⚡️

優化 Next.js 應用效能的經過驗證的技巧 ⚡️

發佈於2024-11-08
瀏覽:451

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]刪除
最新教學 更多>
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-04-28
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-04-28
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-04-28
  • 哪種在JavaScript中聲明多個變量的方法更可維護?
    哪種在JavaScript中聲明多個變量的方法更可維護?
    在JavaScript中聲明多個變量:探索兩個方法在JavaScript中,開發人員經常遇到需要聲明多個變量的需要。對此的兩種常見方法是:在單獨的行上聲明每個變量: 當涉及性能時,這兩種方法本質上都是等效的。但是,可維護性可能會有所不同。 第一個方法被認為更易於維護。每個聲明都是其自己的語句,使...
    程式設計 發佈於2025-04-28
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-04-28
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-04-28
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-04-28
  • jQuery UI Datepicker排除週末及節假日設置
    jQuery UI Datepicker排除週末及節假日設置
    排除星期六,星期日和假期,從jQuery ui ui datepicker BeforeShowday選項接受一個將日期作為輸入並返回數組的函數。返回數組包含兩個值:一個布爾值,指示日期是否可用於選擇(true)是否可以(true)。週末可以防止選擇週六和周日的選擇,您可以利用jQuery ui...
    程式設計 發佈於2025-04-28
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-04-28
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-04-28
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-04-28
  • PHP與C++函數重載處理的區別
    PHP與C++函數重載處理的區別
    作為經驗豐富的C開發人員脫離謎題,您可能會遇到功能超載的概念。這個概念雖然在C中普遍,但在PHP中構成了獨特的挑戰。讓我們深入研究PHP功能過載的複雜性,並探索其提供的可能性。 在PHP中理解php的方法在PHP中,函數超載的概念(如C等語言)不存在。函數簽名僅由其名稱定義,而與他們的參數列表無關...
    程式設計 發佈於2025-04-28
  • 在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    在Java中使用for-to-loop和迭代器進行收集遍歷之間是否存在性能差異?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    程式設計 發佈於2025-04-28
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-04-28

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3