页面渲染原理

推荐阅读:原来 CSS 与 JS 是这样阻塞 DOM 解析和渲染的

 

废话少说,先来看个图:

1.浏览器先解析HTML产生一个 DOM Tree。

2.解析 CSS 会产生 CSS Rule Tree。

3.解析完成后,浏览器引擎会通过 DOM Tree 和 CSS Rule Tree 来构造 Rendering Tree。

(ps:Rendering Tree 渲染树并不等同于 DOM 树,因为一些像 Header 或 display:none 的东西就没必要放在渲染树中了。)

4.浏览器调用绘制API来渲染出页面

转载于:https://www.cnblogs.com/amiezhang/p/7802468.html

### Next.js 渲染原理详解 #### 服务端渲染 (Server-Side Rendering, SSR) 在 Next.js 中,服务端渲染是指当请求到达服务器时,在服务器上执行组件并生成 HTML 字符串发送给客户端[^1]。这种方式可以提高首屏加载速度和 SEO 效果。 对于采用服务端渲染的应用来说,每当有新的请求到来,都会触发一次完整的页面构建过程。这意味着每次访问都将重新计算整个页面的内容,从而确保数据是最新的。为了实现这一点,Next.js 提供了一个特殊的函数 `getServerSideProps` 来获取每页所需的数据[^5]: ```javascript export async function getServerSideProps(context) { const res = await fetch(`https://.../data`) const data = await res.json() return { props: { data, }, } } ``` #### 静态生成 (Static Generation with and without Data) 静态生成允许开发者提前创建好所有的 HTML 文件,并将其部署到 CDN 上面去分发。这不仅加快了用户的首次访问时间,而且减少了服务器的压力。有两种形式的静态生成:一种是在编译期间就准备好所有必要的资源;另一种则通过 API 请求来填充具体的数据[^3]。 如果要基于固定的数据集预先制作多个版本,则可以直接利用 `getStaticPaths` 和 `getStaticProps` 函数组合完成多条路径下的内容定制化处理: ```javascript // pages/posts/[id].js import { useEffect } from 'react'; export async function getStaticPaths() { // Fetch list of possible values for id. } export async function getStaticProps({ params }) { // Fetch necessary data for the blog post using params.id. } function Post({ postData }) { useEffect(() => {}, []) return ( <Layout> <Head> <title>{postData.title}</title> </Head> <h1>{postData.title}</h1> <p>{postData.body}</p> </Layout> ); } export default Post; ``` #### 动态导入与按需加载 除了上述两种主要的方式外,Next.js 还支持动态导入模块以及懒加载功能,使得应用程序可以根据实际需求逐步加载所需的 JavaScript 资源而不是一次性全部下载下来。这对于提升用户体验非常有用,特别是针对大型单页应用(SPA)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值