Next.js 和 SSR:建立高效能伺服器渲染應用程式
1. 建立項目
使用 create-next-app 腳手架建立一個新的 Next.js 專案:
npx create-next-app my-app cd my-app
2. 自動SSR
在 Next.js 中,.js 或 .jsx 檔案的每個元件都會自動處理為 SSR 頁面。例如,建立一個pages/index.js檔案:
// pages/index.js import React from 'react'; function Home() { return ( <div> <h1>Welcome to Next.js with SSR!</h1> <p>This is rendered on the server.</p> </div> ); } export default Home;
執行 npm run dev 啟動開發伺服器,造訪http://localhost:3000,你會發現HTML已經包含了伺服器渲染的內容。
3. 動態路由和資料採集
Next.js支援動態路由,例如pages/posts/[id].js。在 getStaticPaths 和 getStaticProps 或 getServerSideProps 中取得資料:
// pages/posts/[id].js import { useRouter } from 'next/router'; import { getPostById } from '../lib/api'; // Custom API to obtain data export async function getServerSideProps(context) { const id = context.params.id; const post = await getPostById(id); return { props: { post, }, }; } function Post({ post }) { const router = useRouter(); if (!router.isFallback && !post) { router.push('/404'); return null; } return ( <div> <h1>{post.title}</h1> <p>{post.content}</p> </div> ); } export default Post;
4.靜態最佳化和預渲染
Next.js 也支援靜態最佳化和預渲染(靜態站點生成,SSG)。在 getStaticPaths 和 getStaticProps 中配置:
// pages/posts/[id].js export async function getStaticPaths() { // Get all possible dynamic paths const paths = await getPostIds(); return { paths: paths.map((id) => `/posts/${id}`), fallback: false, // Or 'true' to return 404 for non-prerendered paths }; } export async function getStaticProps(context) { const id = context.params.id; const post = await getPostById(id); return { props: { post, }, }; }
6. 動態導入和程式碼分割
Next.js 支援動態導入,有助於按需載入程式碼並減少初始載入時間:
// pages/index.js import dynamic from 'next/dynamic'; const DynamicComponent = dynamic(() => import('../components/Dynamic'), { ssr: false, // Avoid rendering on the server }); function Home() { return ( <div> <h1>Welcome to Next.js with SSR!</h1> <DynamicComponent /> </div> ); } export default Home;
7.優化圖片和資源
使用 next/image 元件最佳化圖片載入、自動壓縮和調整大小:
// pages/index.js import Image from 'next/image'; function Home() { return ( <div> <h1>Welcome to Next.js with SSR!</h1> <Image src="/example.jpg" alt="Example Image" width={500} height={300} /> </div> ); } export default Home;
8. 自訂伺服器
如果您需要更細緻的控制,可以建立自訂伺服器:
// server.js const { createServer } = require('http'); const { parse } = require('url'); const next = require('next'); const dev = process.env.NODE_ENV !== 'production'; const app = next({ dev }); const handle = app.getRequestHandler(); app.prepare().then(() => { createServer((req, res) => { // Be sure to pass `true` as the second argument to `url.parse`. // This tells it to parse the query portion of the URL. const parsedUrl = parse(req.url, true); const { pathname } = parsedUrl; if (pathname === '/api') { // Custom API route handling // ... } else { handle(req, res, parsedUrl); } }).listen(3000, (err) => { if (err) throw err; console.log('> Ready on http://localhost:3000'); }); });
9. 整合第三方函式庫和框架
Next.js 可以讓你輕鬆整合第三方函式庫和框架,例如 Redux、MobX、Apollo 等:
// pages/_app.js import React from 'react'; import App from 'next/app'; import { Provider } from 'react-redux'; import store from '../store'; function MyApp({ Component, pageProps }) { return ( <Provider store={store}> <Component {...pageProps} /> </Provider> ); } export default MyApp;
10.優化搜尋引擎優化
Next.js 的 SSR 功能對 SEO 友好,但您也可以透過元標記對其進行最佳化:
// pages/index.js import Head from 'next/head'; function Home() { return ( <> <Head> <title>My Next.js App</title> <meta name="description" content="This is an example of using Next.js with SEO." /> </Head> <h1>Welcome to Next.js with SEO!</h1> </> ); } export default Home;
11.國際化(i18n)
Next.js 10 引入了內建 i18n 支持,可以輕鬆實現多語言網站:
// next.config.js module.exports = { i18n: { locales: ['en', 'fr'], defaultLocale: 'en', }, };
12.無伺服器模式
Next.js 支援 Serverless 模式,該模式在 Vercel 上預設為啟用。在這種模式下,您的應用程式將按需運行,從而節省資源成本。
13. 網路工作者
在 Next.js 中使用 Web Workers 處理密集型運算任務,以避免阻塞主執行緒:
// components/Worker.js import { useEffect } from 'react'; import { createWorker } from 'workerize-loader!./my-worker.js'; // Use workerize-loader to load worker files function MyComponent() { const worker = createWorker(); useEffect(() => { const result = worker.calculate(100000); // Calling worker methods result.then(console.log); return () => worker.terminate(); // Cleaning up workers }, []); return <div>Loading...</div>; } export default MyComponent;
14.TypeScript 集成
Next.js 支援 TypeScript,為您的專案新增型別安全性:
安裝 typescript 和 @types/react。
建立 tsconfig.json 設定檔。
修改 next.config.js 以啟用 TypeScript 支援。
15. 自訂錯誤頁面
建立pages/_error.js自訂錯誤頁面:
npx create-next-app my-app cd my-app
16. 部署到 Vercel
Next.js 與 Vercel 完美整合。您只需幾個簡單的步驟即可部署它:
建立帳戶或登入 Vercel 網站。
授權 Vercel 存取您的 GitHub 或 GitLab 儲存庫。
選擇要部署的項目,Vercel 會自動偵測 Next.js 配置。
設定項目網域名稱和環境變數(如有需要)。
點擊「部署」按鈕,Vercel 將自動建置並部署應用程式。
17. 效能監控與最佳化
使用Next.js內建的Lighthouse外掛程式或Google PageSpeed Insights等第三方工具進行效能評估。根據報告優化程式碼、圖片等資源,提高載入速度和使用者體驗。
以上是Next.js 和 SSR:建立高效能伺服器渲染應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。
