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

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

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

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]刪除
最新教學 更多>
  • 用 Go 建構密碼管理器
    用 Go 建構密碼管理器
    作为一名软件开发人员,我一直对安全性和可用性的交集着迷。最近,我决定开始一个令人兴奋的项目:使用 Go 创建一个命令行密码管理器。我想与您分享这段旅程的开始,从第一次提交开始。 创世记 2023 年 11 月 27 日,我对我的项目进行了初步提交,我将其命名为“dost”(印地语中的...
    程式設計 發佈於2024-11-08
  • 如何使用 HTML ruby​​ 元素在 HTML 中增強文字註釋
    如何使用 HTML ruby​​ 元素在 HTML 中增強文字註釋
    在本教程中,我們將探索如何有效地使用 HTML 元素來建立增強的文字註解。 HTML5 中的 元素旨在顯示 ruby​​ 註釋,這是東亞排版中常用的小文字元件。這些註釋通常用於提供發音指南或附加資訊。 元素對於需要在正文旁邊或上方進行詳細註釋的文檔至關重要,這使其在教育內容、語言學習資源和某...
    程式設計 發佈於2024-11-08
  • 如何使用 RequestAnimationFrame 來穩定動畫的幀速率 (FPS)?
    如何使用 RequestAnimationFrame 來穩定動畫的幀速率 (FPS)?
    RequestAnimationFrame Fps 穩定RequestAnimationFrame (rAF) 已在動畫中變得流行,可提供流暢且高效的執行。然而,控制幀速率 (FPS) 以確保一致性可能具有挑戰性。 將 rAF 限制為特定 FPS要將 rAF 限制為特定 FPS,您可以自上一幀執行以...
    程式設計 發佈於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 的底層 bu...
    程式設計 發佈於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
  • 如何將 jQuery 函數套用到具有相同 ID 的多個元素?
    如何將 jQuery 函數套用到具有相同 ID 的多個元素?
    使用 jQuery 存取具有相同 ID 的元素在 HTML 中,每個元素都應該有一個唯一的 ID。但是,在某些情況下,您可能需要將 jQuery 函數套用到具有相同 ID 的多個元素。在本文中,我們將探討如何處理這種情況。 根據提供的程式碼片段,jQuery 的 jcarousel() 函數僅應用於...
    程式設計 發佈於2024-11-08
  • 查找包和 CLASSPATH
    查找包和 CLASSPATH
    依目錄鏡像包: Java 套件對應到檔案系統上的目錄。 Java在運行時尋找套件的三種方式: 目前工作目錄:運行時系統使用工作目錄作為起點。如果包在目前目錄的子目錄中,則會找到它。 CLASSPATH 變數:您可以設定 CLASSPATH 環境變數以包含套件路徑。 -classpath選項:在...
    程式設計 發佈於2024-11-08
  • PHP 中的 PATH_INFO 是什麼?
    PHP 中的 PATH_INFO 是什麼?
    PHP 中的 PATH_INFO:揭開神秘面紗PATH_INFO 變數已在各種上下文中遇到過,但其真正本質仍然難以捉摸。為了清楚了解 PATH_INFO,我們必須深入研究它的起源。 Apache Web Server 和 PATH_INFOPATH_INFO 不只是一個 PHP 概念,而且與Apac...
    程式設計 發佈於2024-11-08
  • javaScript 中的方法重載
    javaScript 中的方法重載
    JavaScript 不直接支援方法重載(如 Java 或 C# 等語言),因為函數只能有一個定義。然而,JavaScript 是動態的,允許我們使用以下技術來模擬重載: 檢查參數數量或類型。 使用預設參數。 使用參數或剩餘參數。 以下是一些實作重載行為的方法。 1. 使用參...
    程式設計 發佈於2024-11-08
  • Linux環境下如何使用pthreads有效提升執行緒優先權?
    Linux環境下如何使用pthreads有效提升執行緒優先權?
    增強pthread 中的執行緒優先權:綜合指南在Linux 環境中使用pthread 時,通常需要將執行緒優先權調整為優化性能。本指南解決了執行緒優先權範圍和描述的不確定性,以及與設定過高優先順序相關的潛在風險。 Linux 中的執行緒優先權Linux採用各種排程策略,每種策略都有自己的優先權系統。...
    程式設計 發佈於2024-11-08
  • 使用早期 AI 生成單元測試
    使用早期 AI 生成單元測試
    加速單元測試產生並提高程式碼品質 最近,我有機會深入研究 Early,一個專為自動單元測試生成而設計的 AI 代理。作為一個經常使用 TypeScript 和 ExpressoTS Framework 的人,我很想知道 Early 如何簡化我的工作流程。我決定測試他們在我正在開發的...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3