相关背景:

Chrome 133 版本(将于 2 月 4 日发布稳定版)引入了一个新的 DOM 操作方法:Node.prototype.moveBefore。这一方法虽然看似简单,但其意义重大,因为它能够在移动 DOM 元素时保留元素的状态。传统的 DOM 移动操作通常需要先移除元素再重新插入,这会导致元素的状态重置,而 moveBefore 则避免了这一问题。

特性:

1、保留元素状态

moveBefore 方法能够在移动 DOM 元素时保留其状态,这意味着:内嵌框架 (iframe) 会保持加载状态,活动元素会保持焦点,弹出窗口、全屏模式、模态对话框会保持打开状态,CSS 过渡和动画会继续执行。

moveBefore 可以用于各种需要移动 DOM 元素并保留其状态的场景,例如:

  • 拖放操作
  • 动态排序列表
  • 创建动画效果
  • .....

2、语法简洁

moveBefore 的语法与 insertBefore 类似,开发者可以轻松替换现有的代码。例子:

传统上,开发者使用 Node.prototype.insertBefore 方法来替换 DOM 元素。然而,使用 insertBefore 方法会导致被替换的节点重新加载状态。

 document.querySelector('#classic').addEventListener('click', () => {
const $newSibling = getRandomElementInBody();
const $iframe = document.querySelector('iframe');
// document.body.insertBefore($iframe, $newSibling); //无状态替换,需要重新注册
document.body.moveBefore($iframe, $newSibling); //状态可保留
});

以下这个演示为我们展示了 moveBefore 的强大魔力:

state-preserving-atomic-move.glitch.me/?scenario=selection

意义解读:

  1. 性能更优,避免了传统无状态DOM操作中产生的重排消耗

  2. 从无状态的DOM操作提供了一个过渡到有状态的DOM操作的方法

  3. 为前端MVVM机制提供了更优的性能保障

未来展望:

  1. diff 将或与成为历史, 随着更多现代浏览器和更多先进的 DOM-API 加入后, 以react,vue为代表的现代前端框架设计理念或许将会被修正; 包括数据流,vdom的概念

  2. moveBefore 为里程碑或许未来将会加入更多的带状态操作的 DOM API.

    在这里就不得不提到 C39 Signal 提案 , 如果对前端前沿技术比较关注的同学,对状态管理的Signal解决方案想必是已经熟悉了,useSignal 的核心概念基于 TC39 的信号提案,这是一个旨在标准化 JavaScript 中响应式状态管理的提案。

    类似于 useSignal 的概念早在十年前就已经出现,例如在 Knockout 框架中就已经使用了类似的信号机制。然而,由于当时的编译技术和开发体验的限制,这种机制并未广泛流行。

    该提案的目标是通过信号(Signal)机制,提供一种细粒度的响应式状态管理方式,允许开发者更高效地管理状态变化。如果这一标准能够无缝集成到浏览器中或许复杂的前端"框架"也将成为历史,一切回归到本真,从简出发

  3. 驱动开源社区提供更优质的MVVM架构设计, 简化现代MVVM架构中冗余和糟粕的部分,让开发学习成本更低,也让机器学习的成本更低,为未来的自动化应用的落地成为更现实的可能.

当然最终结果还是取决于开源社区和开发者是否积极向上的去拥抱新特性,就让历史见证一切

Chrome 133 里程碑式更新 - moveBefore, 或开启前端框架未来新纪元?的更多相关文章

  1. 前端框架对于未来web移动端的影响

    现在前端框架市场比较乱,各种各样的框架参差不齐,这给我带来了很多困惑,同样是很多朋友的困惑吧!因为前端框架有很多种,对于程序员来说选择学习是非常困难的,不可能有几十上百种都要学习吧,不过最好的办法就是 ...

  2. macaca运行报错之chrome-driver问题处理,关闭 Chrome 的自动更新

    由于chrome浏览器自动更新,导致 macaca运行报错,重新安装和更新chrome-driver 之后,还需要把chrome浏览器降级到50版本: 但是chrome会自动更新,所以需要禁止.找到这 ...

  3. 0前端 框架 库_千万别去碰js呀 混合APP_webAPP_美工 选有类型的语言,比如TypeScript

    常用知识点,技巧 添加库到本地: (举例 element-ui) 用npm命令行把包下载到本地 在电脑里找到资源文件,比如 C:\Users\XiaoCong\AppData\Roaming\npm\ ...

  4. 2015 年开源前端框架盘点 TOP 20

    1.名称:Bootstrap 类别/语言:HTML.CSS.JavaScript 创建者: Twitter 人气:在Github上有91007 stars 描述:主流框架中毋庸置疑的老大,Bootst ...

  5. 前端框架之Vue.js

    前言: 前端主流框架有Vue.react.angular,目前比较火因为Vue比较容易学习,运营起来比较快速: Vue是什么呢? 是一个基于MVVM架构的,前端框架: 如果你之前已经习惯了用jQuer ...

  6. (转)2018几大主流的UI/JS框架——前端框架 [Vue.js(目前市场上的主流)]

    https://blog.csdn.net/hu_belif/article/details/81258961 2016年开始应该是互联网飞速发展的几年,同时也是Web前端开发非常火爆的一年,Web ...

  7. 前端框架 Vue 初探

    一.前言 前几日使用微信网页版时,好奇这个网页用了什么前端框架.用Chrome的开发人员模式一探到底,发现原来用了一个名叫 Angular 的框架.好吧,既然微信用了.那我也最好还是看看.等等,你这篇 ...

  8. 可能是目前最完整的前端框架 Vue.js 全面介绍

    Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架. 摘要 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angul ...

  9. 2015年开源前端框架盘点TOP20

    2015年,榜单根据github上star数作为排名依据.(榜单中大部分为组件式框架, react.Angular等基础框架不在此篇讨论) 1.Bootstrap 类别/语言:HTML.CSS.Jav ...

  10. 14个优秀 JS 前端框架、库、工具及其使用时机

    这篇文章主要描述现今流行的一些 Javascript web 前端框架,库以及它们的适用场景. 新的 Javascript 库层出不穷,从而Web 社区愈发活跃.多样.在多方面快速发展.详细去描述每一 ...

随机推荐

  1. Spring Boot 2.4 中文

    Spring Boot 2.4 中文 https://runebook.dev/zh-CN/docs/spring_boot/spring-boot-features

  2. Unable to find Mach task port for process-id : (os/kern) failure (0x5). (please check gdb is codesi

    (gdb) runStarting program: /Users/lurongming/test/cpptest/mainUnable to find Mach task port for proc ...

  3. java double转string去除科学计数法"E" 非tostring()和valueOf()

    在遇到需要将double类型转换string类型时,会出现转成科学计数法的形式,希望字符串能原样输出.直接使用会报java.lang.Double cannot be cast to java.lan ...

  4. 【转载】Spring Cloud Gateway排错、调试技巧总结

    http://www.imooc.com/article/290824 本文总结Spring Cloud Gateway的排错.调试技巧.欢迎留言补充! 第一式:Actuator监控端点 借助Actu ...

  5. DevNow x Notion

    前言 Notion 应该是目前用户量比较大的一个在线笔记软件,它的文档系统也非常完善,支持多种文档格式,如 Markdown.富文本.表格.公式等. 早期我也用过一段时间,后来有点不习惯,就换到了 O ...

  6. Qt/C++监控推流设备推流/延迟极低/实时性极高/rtsp/rtmp推流/hls/flv/webrtc拉流/调整分辨率降低带宽

    一.前言 算下来这个推流的项目作品写了有四年多了,最初第一个版本只有文件点播的功能,用的纯QTcpSocket通信实现,属于比较简单的功能.由于文件点播只支持文件形式的推流,不支持网络流或者本地设备采 ...

  7. 浅说c/c++ coroutine

    浅说c/c++ coroutine 从上面我们可以得到关于协程的几个关键信息, 1.打破传统(regular)函数调用的限制. 2.stackful协程实现方式,基于独立栈,上下文切换. 3.stac ...

  8. Python学习(四)——配套《PyTorch深度学习实战》

    1. Python中字符串的相加和相乘 在Python中,字符串可以通过加号(+)进行相加(连接),也可以通过乘号(*)进行相乘(重复).以下是这两种操作的详细说明和示例: 字符串的相加(连接) 字符 ...

  9. 第四章 对称加密算法--DES--AES--IDEA--PBE

    10.1.DES 已破解,不再安全,基本没有企业在用了 是对称加密算法的基石,具有学习价值 密钥长度56(JDK).56/64(BC) 10.2.DESede(三重DES) 早于AES出现来替代DES ...

  10. ChatRoom pg walkthrough Intermediate

    NMAP ┌──(root㉿kali)-[~/lab] └─# nmap -p- -A 192.168.189.110 Starting Nmap 7.94SVN ( https://nmap.org ...