首页 > 其他分享 >Qwik-能帮你移出项目中99%的JS代码

Qwik-能帮你移出项目中99%的JS代码

时间:2024-10-22 14:24:18浏览次数:1  
标签:Qwik FCP Fiber JS 99% TTI 页面

本文分享自天翼云开发者社区《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,FCP,Fiber,JS,99%,TTI,页面
From: https://www.cnblogs.com/developer-tianyiyun/p/18492623

相关文章

  • 【开源免费】基于SpringBoot+Vue.JS读书笔记共享平台(JAVA毕业设计)
    本文项目编号T029,文末自助获取源码\color{red}{T029,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS母婴商城系统 (JAVA毕业设计)
    本文项目编号T030,文末自助获取源码\color{red}{T030,文末自助获取源码}......
  • 基于Java+Jsp+Ssm+Mysql实现的零食商城系统功能设计与实现一
    一、前言介绍:1.1项目摘要随着电子商务的快速发展和消费者购物习惯的改变,线上购物已成为人们日常生活中不可或缺的一部分。零食作为日常生活中常见的消费品,其线上销售市场也呈现出快速增长的趋势。零食商城系统的设计与实现,旨在满足消费者对零食的多样化、个性化需求,提供......
  • 基于Java+Jsp+Ssm+Mysql实现的零食商城系统功能设计与实现二
    一、前言介绍:1.1项目摘要随着电子商务的快速发展和消费者购物习惯的改变,线上购物已成为人们日常生活中不可或缺的一部分。零食作为日常生活中常见的消费品,其线上销售市场也呈现出快速增长的趋势。零食商城系统的设计与实现,旨在满足消费者对零食的多样化、个性化需求,提供......
  • Nuxt.js 应用中的 build:manifest 事件钩子详解
    title:Nuxt.js应用中的build:manifest事件钩子详解date:2024/10/22updated:2024/10/22author:cmdragonexcerpt:build:manifest是Nuxt.js中的一个生命周期钩子,它在Vite和Webpack构建清单期间被调用。利用这个钩子,开发者可以自定义Nitro渲染在最终HTM......
  • Nuxt.js 应用中的 build:done 事件钩子详解
    title:Nuxt.js应用中的build:done事件钩子详解date:2024/10/21updated:2024/10/21author:cmdragonexcerpt:build:done是Nuxt.js的一个生命周期钩子,它在Nuxt应用的打包构建器完成运行后被调用。这个钩子为开发者提供了一个在构建过程结束后执行特定逻辑的......
  • Nuxt.js 应用中的 build:manifest 事件钩子详解
    title:Nuxt.js应用中的build:manifest事件钩子详解date:2024/10/22updated:2024/10/22author:cmdragonexcerpt:build:manifest是Nuxt.js中的一个生命周期钩子,它在Vite和Webpack构建清单期间被调用。利用这个钩子,开发者可以自定义Nitro渲染在最终HTML中的......
  • actix-web连接mysql并返回json
    toml[dependencies]actix-web="4"mysql="25.0.0"chrono="0.4"serde={version="1.0",features=["derive"]}rsuseactix_web::{get,post,web,App,HttpServer,Responder,HttpResponse,Error};......
  • JS中什么是回调函数
    JS中的回调函数是一种特殊类型的函数,它作为参数传递给另一个函数,并在该函数的执行过程中被调用执行。这种函数传递的机制使得异步编程成为可能,允许在某个操作完成后执行特定的操作或逻辑。一、JS中回调函数的概念在JavaScript中,回调函数是一种特殊类型的函数,它作为参数传递......
  • Node.js 创建MySql服务
    1.MySql服务1.安装依赖在终端执行如下脚本:npminstallmysql2npminstallcorsnpminstallexpress2.连接数据库并创建获取数据Apijs文件:index.jsconstexpress=require('express');constmysql=require('mysql2');constcors=require('cors');constap......