本文分享自天翼云开发者社区《Qwik-能帮你移出项目中99%的JS代码》,作者:尹****勇

什么是 Qwik

Qwik 是一款全栈SSR框架,它号称 -能帮你移出项目中99%的JS代码-

FCP

FCP (First Content Paint 首次内容绘制)测量 页面从开始加载到页面内容的任何部分在屏幕上完成渲染的时间

现在基本采用 react、vue 等框架进行开发,这就需要如下过程

1.下载框架代码

2.执行框架代码

3.由框架完成页面渲染

这无疑导致了FCP指标的下降

Qwik 采用了SSR,这就省去了上述三个步骤,无疑加快了FCP

但是TTI仍然需要优化

TTI

TTI (Time to Interactive 用户可交互时间)测量页面变得完全可交互所需要的时间

主要衡量如下指标

1.FCP

2.为页面所有元素绑定事件

3.事件相应时间在50ms内

框架hydrate(注水,即框架使页面能够相应交互) 对TTI有很大影响,性能瓶颈在JS。

React18的Selective Hydration通过 -让用户交互的部分优先hydrate- 来优化TTI指标。

Qwik 更极端,他的目标是——干掉所有不必要的 JS 耗时,包括两部分

1.JS 作为静态资源加载的耗时

2.JS 运行时的耗时

Selective Hydration

Fiber(题外话)

Fiber 是纤维的意思,就是比Process和Thread更细的东西。

在 Fiber 之前更新是同步的,一鼓作气运行到底,中途绝不停歇。

假如更新一个组件需要1ms,如果有200个需要更新就是200ms,在这期间就会导致用户输入无响应,体验很差。

在 Fiber 之后,就采用了 -分片- 的方法来破解同步操作时间过长的问题。

把一个耗时很长的任务分成很多小片,每一个小片的运行时间很短,虽然总时间依然很长,但是在每个小片执行完成之后,都给其他任务一个执行的机会,这样唯一的线程就不会被独占。

React Fiber 对现有代码的影响

因为是分片,所以完全有可能一个更新任务还没完成,就被另一个更高优先级的更新过程打断,这时候更高优先级的会完成,而低优先级的就会被完全作废,然后等待机会重头再来

因为更新可能被打断,所以React Fiber的一个更新过程分为两个阶段:

Reconciliation Phase 找出需要更新哪些DOM,这个过程可以被打断

Commit Phase 一鼓作气把DOM更新完,不会被打断

这两个部分和我们的生命周期函数息息相关。

比如说一个低优先级的任务A在执行,已经调用到了componentWillUpdate函数,接下来发现时间分片已经用完了,于是冒出水面,看看有没有紧急任务。等紧急任务执行完成之后任务A就会重新来一遍,所以componentWillUpdate就会再次被调用。

另外componentWillMount也是同样的效果。

所以要注意这两个函数的实现componentWillMount 和 componentWillUpdate.

Qwik-能帮你移出项目中99%的JS代码的更多相关文章

  1. win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件

    win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件 我杀过 w3wp.exe和asp.net_state的进程,重启 iis admin的服务,都还是不行. 只是把 ...

  2. 在 Ionic2 TypeScript 项目中导入第三方 JS 库

    原文发表于我的技术博客 本文分享了在Ionic2 TypeScript 项目中导入第三方 JS 库的方法,供参考. 原文发表于我的技术博客 1. Typings 的方式 因在 TypeScript 中 ...

  3. VS Code项目中共享自定义的代码片段方案

    VS Code项目中共享自定义的代码片段方案 一.问题背景 项目中注释风格不统一,如何统一注释风格 一些第三方组件库名称太长,每次使用都需要找文档,然后复制粘贴 部分组件库有自己的Snippets插件 ...

  4. 1.在项目中使用D3.js

    在项目中使用D3.js D3.js(全称:Data-Driven Documents)是一个基于数据操作文档的JavaScript库.D3帮助您使用HTML.SVG和CSS使数据生动起来.D3对web ...

  5. vue2项目中引用外部js文件

    vue2项目目录如下(utils文件夹是自己手工建的,然后在utils里新建js文件): 使用import导入文件时,注意路径,路径不对会报错: 导入之后使用外部js函数时,直接写导入时的名字加小括号 ...

  6. Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南

    Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南 因为平时都是使用 VSCode ESLint + Prettier 检测格式化不规范代码,但是随着接手的项目越来越多 ...

  7. 在Java中直接调用js代码(转载)

    http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...

  8. 在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...

  9. iOS中UIWebView执行JS代码(UIWebView)

    iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被 ...

  10. 在wxml中直接写js代码(wxs)

    我们在h5开发中,很多时候要在html中写到js代码,这个很容易实现.但是在微信小程序开发中,是不能直接在wxml中写js代码的,因此就有了wxs.在wxml中用wxs代码,有以下几种方式(在小程序文 ...

随机推荐

  1. lua中table中null的表示方法以及判断redis返回null

    今天遇到一个麻烦的问题,查询redis时候,查到数据的时候正常返回,查询不到数据时,返回了null,然而在lua中,常见的nil,但不常见null,这时候lua中对redis返回的null如何做判断呢 ...

  2. kafka之介绍

    Kafka 由于高吞吐量.可持久化.分布式.支持流数据处理等特性而被广泛应用.但当前关于Kafka原理及应用的相关资料较少,在我打算编写本文时,还没有见到中文版本的Kafka相关书籍,对于初学者甚至是 ...

  3. Winform Tab增加关闭标签页

    Winform的Tab控件,有新增有移除,但是呢,缺了一个标签页上的关闭按钮,这个东西说重要也重要,说不重要也不重要. 这里就说一下怎么添加这玩意. 这玩意需要重绘tab控件,所以我们需要处理Draw ...

  4. m4 mac mini本地部署ComfyUI,测试Flux-dev-GGUF的workflow模型10步出图,测试AI绘图性能,基于MPS(fp16),优点是能耗小和静音

    m4 mac mini已经发布了一段时间,针对这个产品,更多的是关于性价比的讨论,如果抛开各种补贴不论,价位上和以前发布的mini其实差别不大,真要论性价比,各种windows系统的mini主机的价格 ...

  5. C#中 自定义验证规则ValidationAttribute的使用

    C#中 自定义验证规则ValidationAttribute的使用 迷恋自留地 进行接口请求的时候难免会对请求字段进行验证,验证对象的所有字段的值是否合乎要求,如进行非空检测,长度检测等等. Requ ...

  6. Ant Design Pro项目ProTable怎么实现单元格合并效果

    前情 公司有经常需要做一些后台管理页面,我们选择了Ant Design Pro,它是基于 Ant Design 和 umi 的封装的一整套企业级中后台前端/设计解决方案. 产品效果图 最新接到的一个后 ...

  7. IO介绍-上

    IO IO系统管理的主要对象是IO设备和相应的设备控制器.其主要任务是,完成用户提出的IO请求,提高IO效率,以及提高设备的利用率.并能为更高层的进程方比那使用这些设备提供手段. IO系统的基本功能 ...

  8. ksmbd 条件竞争漏洞挖掘:思路与案例

    ksmbd 条件竞争漏洞挖掘:思路与案例 ksmbd 条件竞争漏洞挖掘:思路与案例.drawio 本文介绍从代码审计的角度分析.挖掘条件竞争.UAF 漏洞思路,并以 ksmbd 为实例介绍审计的过程和 ...

  9. Simple FOC内置通信接口学习(一):实时监控电机状态

    本文参(zhao)考(chao)至官方文档https://docs.simplefoc.com/docs_chinese/monitoring 引言 在使用Simple FOC控制电机的过程中,尤其是 ...

  10. 06C++顺序结构与程序IPO模式

    一.程序IPO模式 编程 IPO 是指输入.处理和输出(Input, Process, Output)的概念.在计算机编程中,IPO 是一种常用的设计模式,用于描述程序的基本流程.具体来说,IPO 指 ...