Redian新闻
>
极致性能优化:前端SSR渲染利器Qwik.js

极致性能优化:前端SSR渲染利器Qwik.js

公众号新闻

作者:京东云开发者-京东创新零售 李健

链接:https://my.oschina.net/u/4090830/blog/10141047

引言

前端性能已成为网站和应用成功的关键要素之一。用户期望快速加载的页面和流畅的交互,而前端框架的选择对于实现这些目标至关重要。然而,传统的前端框架在某些情况下可能面临性能挑战且存在技术壁垒。
在这个充满挑战的背景下,我们引入了 Qwik.js 框架。Qwik.js 不仅是一个前端框架,更是一种前端性能的终极解决方案。它不仅提供了卓越的性能,还以其独特的特点和优势脱颖而出。
让我们一起深入探索 Qwik.js,发现它如何超越传统,成为前端性能优化的新标杆。

一、现有框架的问题

1. 传统 CSR 方案

慢加载时间: CSR 技术通常要求在浏览器中加载和渲染整个页面,这导致初始页面加载时间较长。用户必须等待页面完全加载才能进行交互。
搜索引擎优化(SEO)问题: 由于页面内容是在客户端生成的,搜索引擎爬虫可能无法正确解析和索引页面内容,这影响了网站的 SEO 效果。
不利于低带宽用户: 对于低带宽用户或网络条件较差的用户,CSR 页面加载时间更长,用户体验更差。
首屏渲染延迟: CSR 通常需要等待 JavaScript 文件的下载和执行,这导致了首屏渲染的延迟,影响了用户的第一印象。
问题分析
A. 渲染阶段耗时分析
B. 请求链路分析
C. 浏览器执行渲染分析

2. 传统 SSR 方案

复杂的水合过程: 涉及复杂的水合过程,包括将数据传输到客户端并在客户端重新渲染页面。这增加了页面加载时间和网络开销。
A. 请求链路分析
B. 浏览器执行渲染分析

什么是水合(Hydration)?

"hydration"(水合)是指通过客户端 JavaScript 将静态 HTML 网页转化为动态网页的过程,以实现对 HTML 元素的事件处理。这个过程可以通过将事件处理程序附加到 HTML 元素上来完成
深入了解水合(hydration)过程 水合的难点在于知道我们需要什么事件处理程序以及它们应该附加到哪里。
WHAT(什么):事件处理程序是一个封闭包,包含了事件处理程序的行为。它定义了当用户触发此事件时应该发生什么。
WHERE(哪里):指的是需要将 WHAT(事件处理程序)附加到的 DOM 元素的位置,这包括了事件类型。
更复杂的部分在于,WHAT(事件处理程序)是一个封闭包,它封闭了 APP_STATE(应用程序状态)和 FRAMEWORK_STATE(框架内部状态):
APP_STATE(应用程序状态):这是应用程序的状态。APP_STATE 通常是人们所说的状态。没有 APP_STATE,您的应用程序将无法向用户展示任何动态内容。
FRAMEWORK_STATE(框架内部状态):这是框架的内部状态。没有 FRAMEWORK_STATE,框架不知道应该更新哪些 DOM 节点以及何时应该更新它们。这包括组件树和对渲染函数的引用等内容。
那么,我们如何恢复 WHAT(APP_STATE + FRAMEWORK_STATE)和 WHERE 呢?方法是通过下载并执行当前 HTML 中的组件。在 HTML 中下载和执行已渲染的组件是水合的昂贵部分。
换句话说,水合是一种通过在浏览器中急切地执行应用程序代码来恢复 APP_STATE 和 FRAMEWORK_STATE 的方法,它涉及以下步骤:
  1. 下载组件代码。

  2. 执行组件代码。

  3. 恢复 WHAT(事件处理程序闭包)和 WHERE(DOM 元素),以获取事件处理程序闭包。

  4. 将 WHAT(事件处理程序闭包)附加到 WHERE(DOM 元素)。

这个过程的关键是将 APP_STATE 和 FRAMEWORK_STATE 从已渲染的组件中恢复,以确保应用程序在客户端获得正确的状态和行为。这对于实现前端与后端的协同工作以提供动态用户体验至关重要。

二、Qwik.js 框架的特点

可恢复性(Resumability):一种无开销的水合替代方案 那么,如何设计一个没有水合且没有开销的系统呢?
为了消除开销,框架不仅必须避免恢复(RECOVERY),还必须避免上述所提到的第四步。第四步是将 WHAT 附加到 WHERE,这是可以避免的成本。
要避免这种成本,您需要三样东西:
  1. 将所有所需的信息序列化为 HTML 的一部分。序列化的信息需要包括 WHAT、WHERE、APP_STATE 和 FRAMEWORK_STATE。

  2. 一个全局事件处理程序,依赖事件冒泡来拦截所有事件。事件处理程序需要是全局的,这样我们就不需要急切地在特定的 DOM 元素上单独注册所有事件。

  3. 一个工厂函数,可以延迟恢复事件处理程序(WHAT)。

这种方法的关键是在 HTML 中序列化所有必需的信息,以及使用全局事件处理程序来拦截和处理事件,而不必显式将事件处理程序附加到特定的 DOM 元素上。这样可以避免昂贵的步骤四,从而提供无开销的可恢复性,同时仍能实现前端的互动性和性能优化。
A. 渲染阶段耗时分析
B. 请求链路分析
C. 浏览器执行渲染分析

四、效果和成果

五、挑战

Qwik.js 无水合方案可能会带来一些挑战,其中包括以下几个方面:
  1. 新技术的学习曲线:采用新的前端架构或技术,如 Qwik.js,通常需要团队成员学习和适应新的工作流程和最佳实践。这可能需要一些时间和培训来确保团队熟练掌握新技术。

  2. 服务器开销增加:在无水合方案中,服务器可能需要更多的计算资源来序列化和提供所需的信息,以及处理全局事件处理程序。这可能会导致服务器开销的增加,特别是在大量并发请求的情况下。

  3. Node.js 并发挑战:对于 Node.js 服务器,处理大量并发请求可能会带来挑战。在无水合方案中,服务器可能需要同时处理多个请求,因此需要考虑服务器的并发性能和扩展性。

往期推荐



继VS Code被倒卖后,开源软件OBS Studio又被卖43元
承载微软跨平台生态之梦的UWP,死的透透的
周热点 | VS Code史上呼声最高的特性终于实现;vivo发布自研操作系统蓝河 (BlueOS)



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Linux 性能优化的全景指南,都在这一篇里了,建议收藏~极致性能还是平衡功耗 骁龙8Gen3再提频,天玑9300单核略差?【宏观市场】房地产政策优化:这次不一样[旅游] 旅行第15季085城 - 冰岛Keflavík小镇 蓝湖温泉 地热发电站治好智能驾驶的「精神内耗」,要靠「极致性价比」Fish Shell 采用 Rust 重写会导致性能下降[旅游] 旅行第15季088城 冰岛首都 Reykjavík 的冬天DHH锐评 “打包工具”:前端根本不需要构建 (No Build)前端技术探秘 - Nodejs的CommonJS规范实现原理TypeScript 被放弃!又一知名前端利器决意转回JS,社区不满:这在开倒车!小程序编译器性能优化之路“根本不需要TypeScript,JS+JSDoc够了”,大佬说我想多了《中国节日歌》&《千年等一回》《时代周刊》上的毛泽东JS三大运行时对比:Deno、Bun和Node.js四维图新,以「极致性价比」助力车企赢得自动驾驶下一战接口性能优化十倍,来了解一下 Arthas 的强大!阿里云通义千问140亿参数Qwen-14B发布;TCL中环签约首个绿电园区项目|绿研院日报又一单SoC行泊一体域控发布!这家厂商将性能和成本“卷”到极致大规模神经网络优化:神经网络损失空间“长”什么样?接口性能优化的11个小技巧,大家务必掌握!毫末 200 天:DriveGPT 再升级,三款极致性价比产品剑指量产王者不止于极致性能,接下来要发布的安卓旗舰,堪称神仙打架。。。麒麟软件虚拟 GPU 方案 V2.0 发布,3D 渲染性能提升至 80% 以上unique juxtapositions: Light and Shadow in Photography:在巴黎,任意识流俄罗斯科技巨头Yandex创建大模型YandexGPT,声称性能优于ChatGPTNext.js支持在前端代码中写SQL,开倒车还是遥遥领先?从服务网格看,如何做好通用的网络性能优化?The Missing Driver: How a Tragedy Sparks Kindness Across China极致优化SSD并行读调度马自达这款车型获得最高安全评级!拥有极高安全性能,打造极致安全性!40个小技巧,帮你Java性能优化CPU程序性能优化深圳依法公布“北极鲶鱼”调查结果:依法不予公布
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。