本文分享自天翼云开发者社区《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. Spring MVC 3.2 技术预览(二):实时更新技术

    原文地址:http://blog.springsource.org/2012/05/08/spring-mvc-3-2-preview-techniques-for-real-time-updates ...

  2. .net core想到哪写道哪之asp.net core的机密

    我们往往需要在项目里使用一些机密数据,比如数据库的密码,再比如一些密钥.这些东西一般来说我们都会放到配置文件里. 但是这些东西是跟自己的账号相关的,我们在一些多人合作的项目中,尤其是开源项目肯定不能直 ...

  3. App中第三方登录和分享模块的实现

    @ 目录 1 流程 2 设计与实现 3 优化 本文目的:" 实现一套易于使用.维护的第三方登录和分享模块" 我们开发App有时为了吸引用户,会引入三方的授权登录降低用户的注册和登录 ...

  4. 强网杯2023 谍影重重2.0 wp

    题目描述 小明是某间谍组织的一员,他终日监听着我国某重点军事基地的飞行动态,妄图通过分析参数找到我国飞的最快的飞机.我国费尽千辛万苦抓住了他,并在他的电脑上找到了一段他监听的信息,请分析出这段信息中飞 ...

  5. Win10底部任务栏卡死的终极解决方法

    原因:微软自带的资讯和兴趣因国内网络限制,造成失效. 解决方案:底部右键->资讯和兴趣->关闭. 以上仅限WIn10操作系统,win11操作系统以上忽略.

  6. 腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库

    随着数字化进程不断深入,数据呈大规模.多样性的爆发式增长.为满足更多样.更复杂的业务数据处理分析的诉求,湖仓一体应运而生.在Gartner发布的<Hype Cycle for Data Mana ...

  7. manim边学边做--旋转

    本篇介绍Manim中的两个旋转类的动画,名称差不多,分别是Rotate和Rotating. Rotate类主要用于对图形对象进行指定角度.围绕特定点的精确旋转,适用于几何图形演示.物理模拟和机械运动展 ...

  8. NoSQL 述评

    作为主库的 nosql 只有 CockroachDB.TiKV 以及 MongoDB(从4.0后事务似乎可用了),CockrouchDB 已经收费,另外 YugabyteDB 也可选,但大家的反馈都不 ...

  9. 【Mybatis-Plus进阶学习(八)】SQL注入器

    使用SQL注入器就可以自定义例如selectById的默认方法. 实现步骤Step1:创建定义方法的类:Step2:创建注入器:Step3:在Mapper中加入自定义方法. 自定义注入器的简单使用 第 ...

  10. Qt/C++路径轨迹回放/回放每个点信号/回放结束信号/拿到移动的坐标点经纬度

    一.前言说明 在使用百度地图的路书功能中,并没有提供移动的信号以及移动结束的信号,但是很多时候都期望拿到移动的哪里了以及移动结束的信号,以便做出对应的处理,比如结束后需要触发一些对应的操作.经过搜索发 ...