<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>静态生成 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E9%9D%99%E6%80%81%E7%94%9F%E6%88%90/</link><description>Recent content in 静态生成 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E9%9D%99%E6%80%81%E7%94%9F%E6%88%90/index.xml" rel="self" type="application/rss+xml"/><item><title>Next.js核心功能与场景</title><link>https://fe-interview.pangcy.cn/docs/framework/react/react-34/</link><pubDate>Wed, 05 Mar 2025 12:28:17 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/react/react-34/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>该题主要考察候选人对现代SSR框架的&lt;strong>场景化架构能力&lt;/strong>和&lt;strong>渲染策略决策能力&lt;/strong>，重点评估：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>渲染模式原理理解&lt;/strong>：SSR(服务端渲染)与SSG(示例场景：商品详情页访问量100万/天)&lt;/li>
&lt;/ol>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>SSR &amp;gt; SSG &amp;gt; ISR &amp;gt; API Routes &amp;gt; 混合渲染策略&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>SSR (Server-side Rendering)&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>工作流程：请求到达时Node.js服务器执行&lt;code>getServerSideProps&lt;/code>，获取实时数据生成完整HTML&lt;/li>
&lt;li>适用场景：用户相关数据(如个性化推荐)、高频更新的资讯类页面、需要首屏性能但无法预生成的内容&lt;/li>
&lt;li>性能消耗：TTFB时间受数据接口响应速度影响&lt;/li>
&lt;/ul>
&lt;ol start="2">
&lt;li>&lt;strong>SSG (Static Site Generation)&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>工作原理：构建阶段通过&lt;code>getStaticProps&lt;/code>生成静态HTML，可托管CDN&lt;/li>
&lt;li>强化模式：通过&lt;code>revalidate&lt;/code>实现ISR（增量静态再生），在指定时间间隔后重新生成&lt;/li>
&lt;li>适用场景：产品文档、营销落地页、电商商品详情页等相对静态内容&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>&lt;strong>API Routes&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>本质：基于Vercel Serverless的BFF层(Backend for Frontend)&lt;/li>
&lt;li>核心能力：直接访问数据库/第三方API，解决浏览器跨域问题&lt;/li>
&lt;li>典型应用：身份验证、支付回调、敏感操作&lt;/li>
&lt;/ul>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>在SSG页面中调用浏览器API（如localStorage）&lt;/li>
&lt;li>误将&lt;code>getServerSideProps&lt;/code>用于可缓存内容导致服务器压力过大&lt;/li>
&lt;li>未处理SSG的&lt;code>fallback&lt;/code>状态导致404体验不佳&lt;/li>
&lt;/ol>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>Next.js的渲染策略选择需综合考量内容时效性、流量规模和数据源特性：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>SSR适用场景&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>电商首页：需要实时库存状态和个性化推荐&lt;/li>
&lt;li>用户仪表盘：包含敏感数据的动态仪表盘&lt;/li>
&lt;li>配置示例：&lt;/li>
&lt;/ul>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="9e9d0ab" class="language-javascript ">
 &lt;code>export async function getServerSideProps(context) {
 const res = await fetch(&amp;#39;https://api.com/realtime-data&amp;#39;)
 return { props: { data: await res.json() } }
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;ol start="2">
&lt;li>&lt;strong>SSG最佳实践&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>文档网站：内容更新频率低于1次/小时&lt;/li>
&lt;li>产品介绍页：营销活动页面&lt;/li>
&lt;li>强化配置：&lt;/li>
&lt;/ul>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="be4a49d" class="language-javascript ">
 &lt;code>export async function getStaticProps() {
 return { 
 props: { /* ... */ },
 revalidate: 3600 // 启用ISR，每小时再生
 }
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;ol start="3">
&lt;li>&lt;strong>API Routes典型用例&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>支付回调处理：&lt;code>/api/payment-callback&lt;/code>&lt;/li>
&lt;li>数据库直连：避免前端暴露连接字符串&lt;/li>
&lt;li>代理层：封装第三方API调用&lt;/li>
&lt;/ul>
&lt;h2 id="解决方案">解决方案 &lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="混合渲染示例">混合渲染示例 &lt;a href="#%e6%b7%b7%e5%90%88%e6%b8%b2%e6%9f%93%e7%a4%ba%e4%be%8b" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="eae04f4" class="language-javascript ">
 &lt;code>// 商品详情页（SSG&amp;#43;CSR）
export async function getStaticProps() {
 const product = await getProductFromCMS() // 基础数据预取
 return { props: { product }, revalidate: 60 }
}

function ProductPage({ product }) {
 // 客户端获取实时库存
 const [stock, setStock] = useState(product.stock)
 useEffect(() =&amp;gt; {
 fetchStock(product.id).then(setStock)
 }, [])
 
 return &amp;lt;div&amp;gt;{stock}件剩余&amp;lt;/div&amp;gt;
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="性能优化">性能优化 &lt;a href="#%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>CDN缓存策略&lt;/strong>：SSG页面设置Cache-Control: public, max-age=31536000&lt;/li>
&lt;li>&lt;strong>流式SSR&lt;/strong>：结合Suspense边界逐步发送HTML片段&lt;/li>
&lt;li>&lt;strong>边缘计算&lt;/strong>：通过Middleware实现按地域SSR&lt;/li>
&lt;/ol>
&lt;h2 id="深度追问">深度追问 &lt;a href="#%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;ol>
&lt;li>&lt;strong>如何实现SSG页面的多语言支持？&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>答案提示：基于&lt;code>getStaticPaths&lt;/code>的locale参数生成静态版本&lt;/li>
&lt;/ul>
&lt;ol start="2">
&lt;li>&lt;strong>SSR场景下如何避免服务器过载？&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>答案提示：结合Redis缓存+请求限流&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>&lt;strong>如何监控SSR的TTFB指标？&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>答案提示：使用&lt;code>next-ax&lt;/code>或自定义APM埋点&lt;/li>
&lt;/ul></description></item></channel></rss>