浏览器渲染流程
由于渲染机制过于复杂,所以渲染模块在执行过程中会被划分为很多子阶段,输入的 HTML 经过这些子阶段,最后输出像素。我们把这样的一个处理流程叫做渲染流水线,其大致流程如下图所示:
🐼按照渲染的时间顺序,流水线可分为如下几个子阶段:
- 构建 DOM 树
- 样式计算
- 布局阶段
- 分层
- 绘制
- 分块
- 光栅化
- 合成。
我们可以把渲染流水线当作一个车间流水线,我们只关注输入输出,中间的处理当作黑盒即可;不去关注过程
由于渲染机制过于复杂,所以渲染模块在执行过程中会被划分为很多子阶段,输入的 HTML 经过这些子阶段,最后输出像素。我们把这样的一个处理流程叫做渲染流水线,其大致流程如下图所示:
🐼按照渲染的时间顺序,流水线可分为如下几个子阶段:
我们可以把渲染流水线当作一个车间流水线,我们只关注输入输出,中间的处理当作黑盒即可;不去关注过程
再看react ssr 之前,我们先来看一个使用react ssr 实现的应用,感受一下它飞一般的渲染速度 https://m.xin.com/ 看过之后我们再来看文章。
关于服务端渲染(SSR)、客户端渲染(CSR)和 同构渲染,我在next.js从入门到实战这篇文章中开头有详细的介绍,还不了解这三种渲染方式的可以简单了解一下。
但只实现 SSR 没什么意义,技术上没有任何改进,否则 SPA 技术就不会出现😀。
但是单纯的 SPA 又不够完美,所以最好的方案就是这两种技术和体验的结合。但是要实现两种技术的结合,同时可以最大限度的重用代码(同构),减少开发维护成本,那就需要采用 react 或者 vue 等前端框架和node(ssr)相结合的方式来实现。
如果我们使用react ssr 来实际开发项目,我们就需要一个完整的开发框架,next.js其实就是这种框架,类似的还有nuxt.js。那这种框架的实现原理是什么呢?
设计模式是我们在 解决问题的时候针对特定问题给出的简洁而优化的处理方案,这里我跟大家简单聊一下前端中常用的三个设计模式
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。 —— Christopher Alexander
设计模式出现的背景,是软件设计的复杂度日益飙升。软件设计越来越复杂的“罪魁祸首”,就是变化。比如我们写一个应用,这个应用以后完全不会发生迭代和优化,那么我们可以随便写,反正实现功能就行了,根本不用去考虑它的维护和升级。
但在实际开发中,不发生变化的代码可以说是不存在的。我们能做的只有将这个变化造成的影响最小化 —— 将变与不变分离,确保变化的部分灵活、不变的部分稳定。
这个过程,就叫“封装变化”;这样的代码,就是我们所谓的“健壮”的代码,它可以经得起变化的考验。而设计模式出现的意义,就是帮我们写出这样的代码。