Qwik 是什么Qwik 是来源于社区的一个新的 SSR 前端研发框架,作者即为原 angularJs 框架的作者,其核心理念是页面启动时通过 HTML 直出和尽可能少的 js 实现秒开的页面体验以及无 hydrate(水合)过程以达到最快的页面可交互时间(TTI)。

Qwik 核心想解决的问题是什么在当前的 web 世界中,前端页面主要有两类技术实现 - CSR 和 SSR

CSR 即客户端渲染,页面的渲染过程为先请求页面的诸多 js 资源,当 js 资源加载完成后开始执行,在执行过程中拉取服务端数据再依据这些数据完成页面渲染。主要的缺陷是页面白屏时间长,在互联网前期主要关注业务扩张的时候大量业务采用该方案。在当下业务进入存量竞争,性能体验成为主要矛盾的当下,大部分大厂已经逐步开始废弃该方案,转而纷纷接入 SSR 架构。

SSR 即服务端渲染,页面的渲染过程为先在服务器上完成页面 HTML 的生成,然后返回给浏览器去渲染,但为了同步组件树的结构以及执行事件绑定让页面具备可交互能力,诸多前端框架比如 React,Vue 等,都会在浏览器端再全量执行一次 js,该过程称之为 hydrate。该方案的优点是用户能更快的看到页面内容,但是由于有 hydrate 过程的存在,会导致 TTI 时间拉长以及如果 hydrate 过程与服务器渲染生成的 html 结构不一致还会有额外的重排和重绘的性能损耗。

但无论是上述哪个渲染方式,都不可避免的是在页面初始化时会大量依赖 js 资源的加载和执行。随着业务持续迭代,加上站点所依赖使用的其他 js sdk,整个站点的 js bundle 量会非常庞大,而这会严重拖慢整个 web 页面,对于 js 资源的执行成本,可以看这篇文章the cost of js(需翻墙)。

此外,在 SSR 渲染架构下,为了减少页面可交互时间,提升页面的交互性,也需要解决 hydrate 的执行成本问题。

Qwik 是如何解决的Qwik 解决上述两个问题主要的策略是:

对 js 资源采用尽可能的懒加载和执行,页面启动时仅需小于 1kb 的初始化 js 资源。

在服务器端渲染完成后,将页面的渲染状态信息(包括组件树,事件绑定等)序列化到 HTML dom 中一并返回给浏览器端。这样在浏览器端就可以直接消费这些信息,而不需要像传统的 SSR 框架一样需要依赖整个应用的 JS 资源的下载和执行,这个特性在 Qwik 中称之为 Resumable.

关于懒加载在当前的诸多前端框架中,对于资源的代码分割和懒加载处理是需要占用开发者大量心智负担的。以 React 为例:

12345678910111213141516import { lazy, Suspense } from 'react';const LazyComponent = lazy(() => import('../lazy-component'));export default function Entry() { return (

Loading...
}>