{"id":530,"date":"2025-12-05T19:43:17","date_gmt":"2025-12-05T11:43:17","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=530"},"modified":"2025-12-05T19:43:17","modified_gmt":"2025-12-05T11:43:17","slug":"next-js%e5%ba%94%e7%94%a8%e5%8f%98%e6%85%a2%e7%9a%848%e4%b8%aa%e5%8e%9f%e5%9b%a0%e5%8f%8a%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2025\/12\/05\/next-js%e5%ba%94%e7%94%a8%e5%8f%98%e6%85%a2%e7%9a%848%e4%b8%aa%e5%8e%9f%e5%9b%a0%e5%8f%8a%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95\/","title":{"rendered":"Next.js\u5e94\u7528\u53d8\u6162\u76848\u4e2a\u539f\u56e0\u53ca\u89e3\u51b3\u529e\u6cd5"},"content":{"rendered":"\n<p>\u4e0b\u9762\u6574\u7406\u4e00\u4efd <strong>Next.js \u5e94\u7528\u6027\u80fd\u53d8\u6162\u7684\u5e38\u89c1 8 \u4e2a\u539f\u56e0\u53ca\u5bf9\u5e94\u89e3\u51b3\u65b9\u6848<\/strong>\uff0c\u6db5\u76d6 SSR\u3001CSR\u3001\u9759\u6001\u751f\u6210\u3001API\u3001\u524d\u7aef\u8d44\u6e90\u7b49\uff0c\u9002\u5408\u4e2d\u5927\u578b\u9879\u76ee\u4f18\u5316\u53c2\u8003\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 Next.js \u5e94\u7528\u53d8\u6162\u7684 8 \u4e2a\u539f\u56e0\u53ca\u89e3\u51b3\u529e\u6cd5<\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 SSR \u6e32\u67d3\u963b\u585e<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bcf\u6b21\u8bf7\u6c42\u90fd\u9700\u8981\u670d\u52a1\u7aef\u6e32\u67d3\u9875\u9762<\/li>\n\n\n\n<li>SSR \u4e2d\u7684 API \u8bf7\u6c42\u3001\u6570\u636e\u5e93\u67e5\u8be2\u8fc7\u6162<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u53ef\u9759\u6001\u5316\u9875\u9762\u4f7f\u7528 <strong>getStaticProps \/ getStaticPaths<\/strong><\/li>\n\n\n\n<li>\u4f7f\u7528 <strong>ISR\uff08Incremental Static Regeneration\uff09<\/strong> \u7f13\u5b58\u9759\u6001\u9875\u9762<\/li>\n\n\n\n<li>\u4f18\u5316\u670d\u52a1\u7aef API\u3001\u6570\u636e\u5e93\u67e5\u8be2<\/li>\n\n\n\n<li>\u4f7f\u7528 <strong>\u7f13\u5b58\u5c42<\/strong>\uff08Redis\u3001Varnish \u7b49\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 \u5ba2\u6237\u7aef JS \u5305\u8fc7\u5927<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f15\u5165\u5927\u578b\u4f9d\u8d56\uff08\u5982 lodash\u3001moment\u3001chart.js\uff09<\/li>\n\n\n\n<li>\u9875\u9762\u672a\u62c6\u5206 bundle\uff0c\u5bfc\u81f4\u9996\u5c4f\u52a0\u8f7d\u6162<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u52a8\u6001 import<\/strong> \u6309\u9700\u52a0\u8f7d\u7ec4\u4ef6\uff1a<code>const Chart = dynamic(() => import('chart.js'))<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528 <strong>next\/dynamic<\/strong> \u5ef6\u8fdf\u52a0\u8f7d<\/li>\n\n\n\n<li>\u4f7f\u7528 <strong>webpack \u5206\u5305\u7b56\u7565<\/strong>\uff08\u62c6\u5206\u5927\u5e93\uff09<\/li>\n\n\n\n<li>\u4f18\u5316\u4f9d\u8d56\uff1amoment \u2192 dayjs\uff0clodash \u2192 lodash-es<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 \u56fe\u7247\u8d44\u6e90\u672a\u4f18\u5316<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528\u539f\u59cb\u5927\u56fe\uff0c\u672a\u538b\u7f29<\/li>\n\n\n\n<li>\u672a\u4f7f\u7528 Next.js Image \u7ec4\u4ef6<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 <strong>next\/image<\/strong> \u7ec4\u4ef6\uff0c\u81ea\u52a8\u4f18\u5316<\/li>\n\n\n\n<li>\u5bf9\u56fe\u7247\u8fdb\u884c <strong>WebP\/AVIF<\/strong> \u683c\u5f0f\u538b\u7f29<\/li>\n\n\n\n<li>\u5f00\u542f <strong>lazy loading<\/strong>\uff08<code>loading=\"lazy\"<\/code>\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4\ufe0f\u20e3 \u4e0d\u5fc5\u8981\u7684 re-render<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>React \u7ec4\u4ef6\u9891\u7e41\u66f4\u65b0<\/li>\n\n\n\n<li>Context \/ Redux \/ Zustand \u72b6\u6001\u53d8\u5316\u5bfc\u81f4\u6574\u6811\u91cd\u6e32\u67d3<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 <strong>React.memo<\/strong> \u6216 <strong>useMemo \/ useCallback<\/strong> \u7f13\u5b58\u7ec4\u4ef6\u548c\u51fd\u6570<\/li>\n\n\n\n<li>\u4f18\u5316\u72b6\u6001\u7ba1\u7406\uff0c\u53ea\u66f4\u65b0\u5fc5\u8981\u7ec4\u4ef6<\/li>\n\n\n\n<li>\u62c6\u5206\u5927\u7ec4\u4ef6\uff0c\u51cf\u5c11\u6e32\u67d3\u8303\u56f4<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5\ufe0f\u20e3 API \u8bf7\u6c42\u8fc7\u591a \/ \u672a\u7f13\u5b58<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9875\u9762\u5728 SSR \u6216\u5ba2\u6237\u7aef\u9891\u7e41\u8bf7\u6c42 API<\/li>\n\n\n\n<li>\u8bf7\u6c42\u91cd\u590d\uff0c\u54cd\u5e94\u6162<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7f13\u5b58\u8bf7\u6c42\u7ed3\u679c<\/strong>\uff08SWR \/ React Query \/ Apollo Cache\uff09<\/li>\n\n\n\n<li>\u5408\u5e76\u6216\u6279\u91cf\u8bf7\u6c42<\/li>\n\n\n\n<li>\u5bf9 SSR API \u6dfb\u52a0 <strong>\u7f13\u5b58\u5934<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6\ufe0f\u20e3 Webpack \/ \u6784\u5efa\u4f53\u79ef\u8fc7\u5927<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u5fc5\u8981\u7684 polyfill<\/li>\n\n\n\n<li>\u672a Tree Shaking<\/li>\n\n\n\n<li>CSS \/ JS \u6253\u5305\u672a\u4f18\u5316<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Next.js \u9ed8\u8ba4\u5f00\u542f Tree Shaking<\/li>\n\n\n\n<li>\u4f7f\u7528 <strong>next\/script<\/strong> \u6309\u9700\u52a0\u8f7d\u7b2c\u4e09\u65b9\u811a\u672c<\/li>\n\n\n\n<li>CSS \u4f7f\u7528 <strong>Module CSS \/ Tailwind<\/strong>\uff0c\u51cf\u5c11\u5168\u5c40\u6837\u5f0f<\/li>\n\n\n\n<li>\u5f00\u542f <strong>Bundle Analyzer<\/strong> \u68c0\u67e5\u5927\u5305<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnpm run analyze\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7\ufe0f\u20e3 SSR \/ ISR \u7f13\u5b58\u7b56\u7565\u4e0d\u5408\u7406<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSR \u9875\u9762\u6bcf\u6b21\u90fd\u91cd\u65b0\u751f\u6210\uff0c\u5bfc\u81f4\u6162<\/li>\n\n\n\n<li>ISR \u91cd\u5efa\u65f6\u95f4\u8fc7\u957f<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8bbe\u7f6e\u5408\u9002\u7684 <strong>revalidate<\/strong> \u65f6\u95f4<\/li>\n\n\n\n<li>\u5bf9\u70ed\u95e8\u9875\u9762\u4f7f\u7528 <strong>\u9759\u6001\u751f\u6210 + ISR<\/strong><\/li>\n\n\n\n<li>\u5bf9\u975e\u5173\u952e\u9875\u9762\u91c7\u7528 <strong>CSR<\/strong> \u6e32\u67d3<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8\ufe0f\u20e3 CDN \/ \u7f51\u7edc\u5ef6\u8fdf<\/h2>\n\n\n\n<p><strong>\u539f\u56e0\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9759\u6001\u8d44\u6e90\u672a\u901a\u8fc7 CDN \u5206\u53d1<\/li>\n\n\n\n<li>API \u670d\u52a1\u5668\u5ef6\u8fdf\u9ad8<\/li>\n<\/ul>\n\n\n\n<p><strong>\u89e3\u51b3\u529e\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u90e8\u7f72 <strong>Vercel \/ Netlify \/ CloudFront<\/strong> \u7b49 CDN<\/li>\n\n\n\n<li>\u9759\u6001\u8d44\u6e90\u653e\u5728 CDN<\/li>\n\n\n\n<li>API \u52a0\u901f\uff0c\u51cf\u5c11\u8de8\u533a\u57df\u5ef6\u8fdf<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1 \u989d\u5916\u4f18\u5316\u6280\u5de7<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f7f\u7528 Lighthouse \u6216 WebPageTest<\/strong> \u68c0\u6d4b\u74f6\u9888<\/li>\n\n\n\n<li><strong>\u5f00\u542f gzip \/ brotli \u538b\u7f29<\/strong><\/li>\n\n\n\n<li><strong>\u4f7f\u7528 HTTP\/2 \u6216 HTTP\/3<\/strong> \u52a0\u901f\u8d44\u6e90\u52a0\u8f7d<\/li>\n\n\n\n<li><strong>\u5f00\u542f Next.js \u81ea\u52a8\u9759\u6001\u4f18\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd25 \u603b\u7ed3<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u95ee\u9898\u7c7b\u522b<\/th><th>\u4f18\u5316\u65b9\u5f0f<\/th><\/tr><\/thead><tbody><tr><td>SSR \u963b\u585e<\/td><td>ISR \/ \u9759\u6001\u751f\u6210 \/ \u7f13\u5b58 API<\/td><\/tr><tr><td>JS \u5305\u8fc7\u5927<\/td><td>\u52a8\u6001 import \/ bundle \u5206\u5272 \/ \u7cbe\u7b80\u4f9d\u8d56<\/td><\/tr><tr><td>\u56fe\u7247\u8d44\u6e90<\/td><td>next\/image \/ WebP \/ lazy loading<\/td><\/tr><tr><td>\u9891\u7e41 re-render<\/td><td>React.memo \/ useMemo \/ \u72b6\u6001\u62c6\u5206<\/td><\/tr><tr><td>API \u8bf7\u6c42\u6162<\/td><td>SWR \/ React Query \/ \u7f13\u5b58 \/ \u5408\u5e76\u8bf7\u6c42<\/td><\/tr><tr><td>\u6784\u5efa\u4f53\u79ef\u5927<\/td><td>Tree Shaking \/ next\/script \/ \u5206\u6790\u5927\u5305<\/td><\/tr><tr><td>\u7f13\u5b58\u7b56\u7565\u4e0d\u5408\u7406<\/td><td>ISR revalidate \/ \u9759\u6001 + CSR \u6df7\u5408<\/td><\/tr><tr><td>CDN \/ \u7f51\u7edc\u6162<\/td><td>CDN + \u9759\u6001\u8d44\u6e90\u5206\u53d1 + API \u52a0\u901f<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u9762\u6574\u7406\u4e00\u4efd Next.js \u5e94\u7528\u6027\u80fd\u53d8\u6162\u7684\u5e38\u89c1 8 \u4e2a\u539f\u56e0\u53ca\u5bf9\u5e94\u89e3\u51b3\u65b9\u6848\uff0c\u6db5\u76d6&#8230; <a class=\"more-link\" href=\"https:\/\/www.52runoob.com\/index.php\/2025\/12\/05\/next-js%e5%ba%94%e7%94%a8%e5%8f%98%e6%85%a2%e7%9a%848%e4%b8%aa%e5%8e%9f%e5%9b%a0%e5%8f%8a%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[],"class_list":["post-530","post","type-post","status-publish","format-standard","hentry","category-javascript"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=530"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/530\/revisions"}],"predecessor-version":[{"id":531,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/530\/revisions\/531"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}