前端杂记1

2023-09-21 20:36:56

React是基于函数式编程的运行时框架,UI=fn(state),它的状态改变是通过发布订阅模式,单向数据流方式,更新是通过运行时diff,然后将变化的部分渲染,而vue 是通过响应式以组件为颗粒进行更新,因此它可以在预编译阶段进行动静态标记来优化更新比较过程

react scheduler会将组件根据优先级划分成更小颗粒的任务,每个任务执行完后会通过shouldYeid判断是否有优先级更高的任务要执行,有就中断后面链表节点的执行

react 源码解读比较好的例子

https://zhuanlan.zhihu.com/p/538096803

https://blog.csdn.net/weixin_42232156/article/details/129933030

https://zhuanlan.zhihu.com/p/343927857

https://zhuanlan.zhihu.com/p/343754137

https://zhuanlan.zhihu.com/p/357082574

https://zhuanlan.zhihu.com/p/586327404

https://article.juejin.cn/post/7225254242358558777

像 React 作者一样思考

React设计原理-卡颂

Vue是基于响应式来触发视图更新,而react是基于setState的单向数据流触发视图更新

react 并没有使用响应式来更新视图,而是大量采用发布订阅模式  单向数据流,当我们setState之后就触发组件更新,从而重新执行组件内定义的逻辑,因为浏览器对dom的重新渲染只要不超过16ms用户就是无感的内容替换,而不是刷新页面,这就是单页面组件刷新的根本

 jsx->babel-preset-react->createElement->reactElement->vdom->update->enqueueUpdate->workloop->beginWork/completeWork->currentFiber/workInprogessFiber->effectList->sheduler->reconcile->diff->render->commit->real dom

使用monorepo来管理大型前端项目 将多个业务模块拆分成子项目 将公共的组件和工具类抽离成package包

这样做有一定优点:1.可以抽离基础工程框架 比如CI配置、组件库、工具库等

2.简化各个项目的公共依赖管理

但是缺点也很明显:1.所有的项目都放一个仓库,权限控制不好控

2.子项目技术更新受制 比如一个项目要更新技术或者依赖版本,但是其他项目不需要

3.仓库代码过大,构建时间会很慢

4.对于新人来说增加了学习成本,以及本地调试成本

将一些常用并可以复用的简单逻辑抽离成一个带有状态的函数,叫做hooks目的是复用

前端异常监控+报警机制的一点思考

1.后台用什么存储及查看分析日志

2.什么类型用什么报警方式:核心业务组件渲染报错、核心接口报错采用短信报警,普通报错简单收集,其他邮箱

3.日志多久清除一次

4.前端用什么方式进行数据上报,上报什么数据、何时进行上报(项目信息、报错信息、模块信息、功能信息、页面信息、开发人员信息等)、上传频率、百分比

5.sourceMap解决报错源码定位

在做性能优化前我们要问几个问题:

1.为啥要做优化

2.优化的时机是什么时候

3.优化的时间、人力、财力的投入产出比

4.核心的性能指标是什么(TOC/TOB),有没有具体数据值

5.如何预防和兜底性能问题,获取性能指标数据并分析

6.如何找出影响性能的主要瓶颈

7.制定什么优化方案

8.验证并评估优化效果

9.优化经验是否可沉淀、是否形成工程化的解决方案等

一个React函数组件中,可以存在多个useState useEffect等hooks方法,这就是为啥可以引入其他带有状态的hooks一样,因为在函数的作用域里面,多个hooks,不管是引入,都会正常执行,这样就为代码逻辑的抽离提供了依据

React的setState是同步还是异步,得看情况,如果是在合成事件中比如生命周期函数里就是异步函数,要等同步执行完再执行异步队列,先进先出,同时还会因为性能优化合并每次的setState,最后再执行更新。而在原生事件比如定时器内,就是同步的,而且每次都会执行,不会优化合并

前端性能监控最合理的方式是  利用工程化的sdk先收集每个页面的大概性能指标数据:比如FCP/TTI/FP/LCP domComplte等 然后再具体到页面进行performance 快照分析(Main(找出慢task)/cpu(找出卡顿点)/memory(看是否存在内存泄露)) 以及 netWork资源加载情况分析(是否启用了压缩、使用了cdn 是否使用了首页拆分加载、懒加载、异步加载等)

https://juejin.cn/collection/6845242602665558024

reactfiber 是如何模拟requestIdeaCallback:

https://blog.csdn.net/LuckyWinty/article/details/121154921

浅谈MessageChannel

:https://zhuanlan.zhihu.com/p/432726048

因为raf是每一帧都执行,因此我们可以在里面设置每个任务标准的过期时间,比如进入时间加上16,然后当一个任务执行完下一个任务执行前进行过期对比,或优先级对比,如果都不符合继续执行,则标记当前中断节点信息,链表位置。利用message.channel的possmessage通知浏览器执行下一帧渲染,这样,就可以将浏览器主进程交给其他任务执行比如用户输入事件,滚动事件等。

任务的中断是相对于大任务的小任务而言的,比如一个大组件的渲染,它里面有多个子组件任务,当子任务被中止,也就是其他子任务没有执行时就意味着这个大组件任务被中断

尽管react的fiber借助链表的schedule 和浏览器分片实现了大任务的异步可中断,防止了更高优先级任务被阻塞,但是它毕竟是以应用作为单位进行重构,而vue是借助响应式将重构控制到了具体组件的颗粒度,也就是说它可以很清楚的知道哪个组件发生了变化,从而只重新diff这个组件就可以了,再加上预编译阶段的动静节点标记,使得它在大组件更新上看起来性能更优

前端监控优秀SDK开源项目:

https://github.com/xy-sea/web-see

https://github.com/LuciferHuang/heimdallr-sdk

https://github.com/bombayjs/bombayjs

https://github.com/woai3c/monitor-demo

https://github.com/lycarrot/apply-monitor

https://github.com/alex1504/femonitor-web

更多推荐

接口自动化测试框架搭建【附详细搭建视频】

如果遇到什么问题建议观看下面视频:【敢称全站第一】B站最全的Python自动化测试深度学习教程!学完即就业,小白也能信手拈来!帮你少走99%的弯路~一、原理及特点参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过x

电信卡一个月内申请几张?只能申请一张吗?

很多朋友在申请了一张电信卡后,再申请的话就会提示重复申请,这种情况是怎么回事儿呢?可能大家对于线上的流量卡申请规则还不太清楚,下来搜卡之家小编给大家普及一下。​根据运营商规定,在线上办理流量卡规则是:一个身份证、一个收货电话、一个地址、同一个人、一个运营商30天内只能申请一张卡,不能办理第2张电信卡。一个身份证、一个收

Ubuntu下运行adb devices找不到设备的问题

问题描述Windows下安装Androidstudio,里面含有AndroidSDK,自动包含了adb在内的很多工具包;因开发需要,在WSL中安装了Ubuntu,分别是18和22的,其中也分别安装了AndroidSDK,官网下载,可以运行adb命令。本来在Windows下和Ubuntu下都可以直接使用,但是今天上来在U

SQL 注入攻击的原理是什么

什么是SQL注入攻击,SQL注入攻击的原理是什么SQL注入攻击是一种常见的网络安全漏洞,攻击者可以通过注入恶意SQL语句来攻击Web应用程序。本篇文章将介绍SQL注入攻击的原理和如何防范SQL注入攻击,并提供一些代码示例。什么是SQL注入攻击SQL注入攻击是一种利用Web应用程序中的SQL语句输入漏洞的攻击方式。攻击者

10.12广州见 | 第十六届智慧城市大会报名通道全面开启

第十六届中国智慧城市大会将于10月12日至13日在广州举办智慧城市是数字中国、智慧社会的核心载体,是数字时代城市发展的高级形态。由中国服务贸易协会、中国测绘学会、中国遥感委员会主办的第十六届中国智慧城市大会,将以“数实融合·开放创新·智引未来”为主题,拟邀请行业主管单位和智慧城市规划建设管理单位领导、两院院士、业内知名

标准C++中string类函数总结

标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用=进行赋值操作,==进行比较,+做串

EFK代替ELK方案7.17.3

文章目录一.传统的ELK二.EFK2.1安装elasticsearch2.2服务端安装fileBeats2.2.1.安装`该也没有必要安装docker`,直接下载yum或官网jar包启动即可.2.2.2.编辑配置文件filebeat-java-logback.yml2.2.3.es配置`common_log_pipel

Linux文件编程(open read write close函数)

文章目录前言一、open函数二、read函数三、write函数四、openreadwrite函数本质五、close函数总结前言本篇文章我们来讲解Linux中的文件编程,这篇文章会先介绍openreadwrite函数。一、open函数open函数是一个在POSIX标准中定义的函数,用于打开文件或者创建新文件。它是文件操作

Java入门级简单定时任务TimerTask

如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK入门级的定期器Timer来执行重复任务。一、原理JDK中,定时器任务的执行需要两个基本的类:java.util.Timer;java.util.TimerTask;要运行一个定时任务,最基本的步骤如下:1、建立一个要执行的任务Tim

《软件方法》第1章2023版连载(03)建模工作流

DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集1.2建模工作流1.2.1建模工作流ABCD如何能做好需求和设计,达到“低成本制造好卖的系统”的目标?并非喊喊口号就可以,需要静下心来学习和实践一些必要的建模技能。软件开发是增量、迭代进行的,每一个迭代周期都需要依次思考这么几个事情:A

四川玖璨电子商务有限公司培训可靠吗?

四川玖璨电子商务有限公司是一家在抖音平台上进行培训的电商公司。如今,随着抖音带货的火热,越来越多的人加入到这个行业中。然而,对于消费者来说,选择一个可靠的抖音培训公司并不容易。在这个领域中,四川玖璨电子商务有限公司是一个备受瞩目的公司。公司致力于为消费者提供高品质的商品和良好的服务。他们在抖音上拥有大量的粉丝,并且他们

热文推荐