Bom 和 Dom 区别 ----- 真是DOM 和 虚拟Dom区别-程序员宅基地

技术标签: 前端  vue 问题  面试啊  javascript  开发语言  

DOM和BOM的区别  我们都指代,javascript由三个部分组成:

ECMAScript:描述了JS的语法和基本对象
BOM(浏览器对象):与浏览器交互的方法和对象
DOM(文档对象模型):处理网页内容的方法和接
ps:根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其他浏览器风格迥异;

DOM是文档对象模型,它指的是把文档当作一个对象来对待,这个对象主要定义了处理网页的内容和接口

BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript 扩展都被看做 BOM 的一部分。这些扩展包括:

弹出新的浏览器窗口 移动、关闭浏览器窗口以及调整窗口大小 提供 Web 浏览器详细信息的定位对象 提供用户屏幕分辨率详细信息的屏幕对象 对 cookie 的支持 IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象

javacsript是通过访问BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器),由于BOM的window包含了document,window对象的属性和方法是直接可以使用而且被感知的,因此可以直接使用window对象的document属性,通过document属性就可以访问、检索、修改XHTML文档内容与结构。因为document对象又是DOM(Document Object Model)模型的根节点。可以说,BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。其中

BOM是浏览器对象模型,它指的是将浏览器当作一个对象来对待,这个对象主要定义了与浏览器进行交互的方法和接口;
BOM的核心是window,而window对象具有双重角色,它既是js访问浏览器窗口的一个接口,又是一个全局对象(Global);
这就意味着网页中定义的任何对象、变量和函数,都会作为全局对象的一个属性或者方法存在;

Window对象包含属性:document、location、navigator、screen、history、frames Document根节点包含子节点:forms、location、anchors、images、links

从window.document已然可以看出,DOM的最根本的对象是BOM的window对象的子对象。

区别:DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口。

3.使用标准

1)DOM是W3C的标准,所有浏览器公共遵守的标准
2)BOM是各个浏览器厂商根据DOM在各自浏览器上的实现(表现为不同浏览器定义有差别,实现方式不同)
3)window为BOM对象,而非js对象

4.包含属性:

BOM: location、navigato、document
DOM:document也是BOM的window的子对象;
PS:DOM的最根本的对象是BOM的window对象的子对象


DOM 

bom

 

真是Dom   和     虚拟Dom

参考: 虚拟DOM和实际的DOM有何不同?_虚拟dom和真实dom的区别-程序员宅基地

虚拟DOM与真实DOM的区别(注意:需不需要虚拟DOM,其实与框架的DOM操作机制有关):


1.执行效率:由于真实DOM的操作需要涉及浏览器的布局计算和渲染,执行效率比虚拟DOM低。
2.性能优化:虚拟DOM通过 diff 算法比较新旧DOM节点差异,最终只更新部分节点,可以减少页面渲染的开销,提高性能。
 3.开发效率:虚拟DOM可以通过JS对象对DOM进行操作,比直接操作真实DOM更加方便和灵活,同时也可以借助React等框架提供的组件化机制,使得开发效率更高。

什么是虚拟DOM:  

  虚拟DOM(Virtual Document Object Model)是指用JS对象来描述DOM节点及其属性和内容的层次结构,它是对真实DOM的一种抽象表示,并不是真正的DOM节点。当页面需要更新时,虚拟DOM首先进行比较,找出需要更新的部分,然后批量更新至真实DOM,最终只会引起页面的局部重排和重绘,可以减少页面渲染的开销,提高性能。

真实DOM:

    真实DOM(Document Object Model)是指浏览器中的渲染树,由HTML元素、属性、文本和事件组成,当页面中的元素发生变化时,浏览器会重新构建渲染树,此过程会引起页面的重排和重绘,对性能影响较大。
 

虚拟dom(VNode),假的,不是真实的dom

真实的DOM在浏览器通过dom.api操作的,复杂的对象

虚拟DOM:可以通过this.$slots.default查看

真实的dom是一个对象,它的属性非常多,在浏览器中做dom操作,会比较消耗性能

虚拟dom是一个对象,它的属性相比较于真实的dom就比较少---用少量的属性描述一个dom,无法在浏览器中直接显示

为什么在vue中会用到虚拟dom?
有两点好处:

1.虚拟dom比真实dom体积小,操作是相对来说消耗性能少,如果在页面中删除一个dom,会引起重绘,影响后边元素的布局

1):虚拟Dom不会进行回流和重绘操作

2):虚拟dom进行频繁的修改,然后一次性比较并修改真实DOM中需要改的部分,最后并在真实DOM中进行回流和重绘,减少过多DOM节点的回流和重绘

3)真实Dom频繁的回流和重绘效率非常低

虚拟dom展示

真实dom展示 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_68266812/article/details/135539361

智能推荐

“Beyond Compare 许可证密钥被撤销” 的解决方案_bcompare许可证密钥已被撤销-程序员宅基地

文章浏览阅读1.9w次,点赞3次,收藏5次。由于在数据库发布经常需要进行文件对比,最近在使用文件比较器时,该软件不能够使用。弹出框的消息为许可证秘钥被撤销,解决该问题的方法如下: 1、找到“C:\Users\[Your User Name]\AppData\Roaming\Scooter Software\Beyond Compare 3\”目录 2、将这个目录下的所有文件都删除掉,重新打开“B..._bcompare许可证密钥已被撤销

SQL 入门指南:从零开始学习 SQL-程序员宅基地

文章浏览阅读1k次,点赞19次,收藏10次。SQL是结构化查询语言(Structured Query Language)的缩写,是一种用于管理关系型数据库系统的语言。SQL允许用户通过特定的命令来创建、查询、更新和删除数据库中的数据。SQL的起源可以追溯到20世纪70年代,当时IBM的研究员Edgar F. Codd提出了关系数据库模型的概念,并在1970年发表了一篇题为“A Relational Model of Data for Large Shared Data Banks”的论文。

html简单网页源代码表格,HTML 表格-程序员宅基地

文章浏览阅读2.8k次。HTML 表格HTML 表格实例:First NameLast NamePointsJillSmith50EveJackson94JohnDoe80AdamJohnson67在线实例表格这个例子演示如何在 HTML 文档中创建表格。(可以在本页底端找到更多实例。)HTML 表格表格由 标签来定义。每个表格均有若干行(由 标签定义),每行被分割为若干单元格(由 标签定义)。字母 td 指表格数..._简易表单网站源码

css样式 中 /deep/ 的含义 以及用法-程序员宅基地

文章浏览阅读1.4w次,点赞17次,收藏39次。首先 /deep/ 深度选择的意思一、先来聊聊scope这个大家应该都不陌生,使用场景为在vue中,我们为了避免父组件的样式影响到子组件的样式,会在style中加<style scoped>,这样父组件中如果有跟子组件相同的class名称或者使用选择器的时候,就不会影响到子组件的样式。父组件<template> <div> <h1 class="title">{{ name }}</h1> <_/deep/

利用gradle shadowjar构建包含依赖的JAR包-程序员宅基地

文章浏览阅读1w次。正常情况下,gradle构建的jar包是不包含依赖的,只包含项目源码。可是有些情况下我们希望JAR包中也包含相关依赖,譬如说向SPARK集群提交作业的时候,运行JAVA命令的时候。这篇文件介绍一种方便的构建assemble jar的方法[plain] view plain copyapply plugin :'java' apply plugin :'scala' apply plugin: ..._gradle shadow

Python中Matplotlib模块绘图方法总结(基础版)_matplotlib绘图-程序员宅基地

文章浏览阅读381次。本文粗浅的描述了Matplotlib绘图的方法以及各个参数信息后续将针对上述两种绘图方式出详尽版的文档具体统计各个参数所包含的内容,敬请期待。_matplotlib绘图

随便推点

DRF JWT认证进阶

实际的案例中,登录的方式有很多种,既可以是用户名,还可以是手机号,还可以是邮箱等,并且他们的登录输入入口都是一个,所以这里将实现这种接口用户表用普通的表创建一个数据表用于侧式认证功能username = models.CharField(max_length=64, verbose_name='用户名')password = models.CharField(max_length=64, verbose_name='密码')

C++-10

C++

sql server查看表大小_查看sql表的大小-程序员宅基地

文章浏览阅读3.9k次。sql server查看表大小查看SqlServer 数据库中各个表多少行:SELECT A.NAME ,B.ROWS FROM sysobjects A JOIN sysindexes B ON A.id = B.id WHERE A.xtype = 'U' AND B.indid IN(0,1) ORDER BY B.ROWS DESC数据库磁盘占用量:select name, CAST(convert(float,size) * (8192.0/1024.0)/1024 AS .._查看sql表的大小

【C语言】初阶指针(指针及其类型以及野指针)_c %zu-程序员宅基地

文章浏览阅读395次,点赞16次,收藏13次。指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。比如:char* 的指针解引用就只能访问一个字节,而int* 的指针解引用就能访问四个字节。_c %zu

F460 CLK配置功能模块说明_f460 tmera-程序员宅基地

文章浏览阅读1.4k次。F460CLK配置功能模块说明目录F460CLK配置功能模块说明CLK配置:1. DDL_ICG——初始化配置2. DDL_UTILITY——基础功能函数3.DDL_PRINT-待细化4.DDL_ADC5.DDL_AES——AES 加解密算法处理器6.DDL_CAN7. DDL_CLK8. DDL_CMP——电压比较器9. DDL_CRC10. DDL_DCU——数据计算单元11. DDL_DMAC——DMA 控制器..._f460 tmera

vue+electron一键入门_vue 集成electron-程序员宅基地

文章浏览阅读456次。1.sqlite3数据库安装、使用2.打包配置,注意点就是要开启科学上网。_vue 集成electron

推荐文章

热门文章

相关标签