首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在切换其可见性之前检查DOM元素的可见性是否值得?或者这是不成熟的优化?

在云计算领域,DOM元素的可见性通常是指DOM元素在页面上是否可见。在页面渲染时,浏览器会按照HTML文档的结构生成DOM树,然后按照CSS的样式计算出每个DOM元素的几何属性(如位置、大小、颜色等),最后将这些属性应用到DOM元素上。因此,DOM元素的可见性取决于其几何属性是否被正确计算和显示。

在页面滚动、缩放、旋转等操作中,如果DOM元素的几何属性发生变化,其可见性也可能随之发生变化。因此,在处理这些操作时,需要重新计算DOM元素的几何属性,并相应地更新DOM元素的可见性。

因此,在切换DOM元素的可见性之前检查其可见性是值得的,因为这有助于确保页面在切换可见性时能够正确显示。此外,检查DOM元素的可见性还可以帮助避免一些常见的错误,如元素被错误地隐藏或显示,或者页面在滚动时出现闪烁等问题。

至于这是不成熟的优化,这个问题的答案取决于具体的情况。虽然检查DOM元素的可见性可能会增加一些计算开销,但是在大多数情况下,这个开销是可以接受的,尤其是在页面需要动态地切换可见性时。当然,如果页面中的DOM元素数量非常庞大,并且可见性的切换非常频繁,那么检查DOM元素的可见性可能会导致性能问题。在这种情况下,可以考虑使用其他方法来优化页面的渲染性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

手把手教你搭建一个无框架埋点体系

调用该方法后,DOM 再发生变动则不会触发观察器 标记需要监听元素 为了众多 DOM 元素中找到需要监听元素,我们需要一个方法来标记这些元素。...monitor-tracer SDK 扫描 DOM 元素后,会同时收集所有 标签中元素信息,并对包裹元素进行监控。...判断 DOM 元素见性 对组件可见性判断可分为三个维度: 组件是否浏览器 viewport 中 - 使用 IntersectionObserver API 判断; 组件样式是否可见 - 根据元素...而 IntersectionObserver API 会注册一个回调函数,每当被监视元素进入或者退出另外一个元素时(或者 viewport),或者两个元素相交部分大小发生变化时,该回调方法会被触发执行...这样,我们网站主线程不需要再为了监听元素相交而辛苦劳作,浏览器会自行优化元素相交管理。

2.5K20

v-show 与 v-if 有什么区别?

v-if:由于条件为假,该元素初始渲染时不会被创建,所以 DOM 中也不存在。...this.show; } } v-show:通过修改 CSS display 属性来切换元素见性,开销较小。 v-if:切换元素见性时,需要动态地创建或销毁元素,开销较大。...观察到行为如下: 对于 v-show:无论 show 值是 true 还是 false,元素始终存在于 DOM 中,只是通过修改 CSS display 属性来控制见性。...对于 v-if:当 show 值从 true 切换到 false 时,与 v-if 相关元素将从 DOM 中移除,因此页面上不再显示。...当 show 值从 false 切换到 true 时,与 v-if 相关元素将重新创建并渲染到 DOM 中。 这个例子展示了 v-show 和 v-if 在编译时机上区别。

28240
  • 你可能不知道 21 个 Web API

    为前缀属性集合) URLSearchParams(查询参数) hidden(隐藏元素) contenteditable(使元素可以被编辑) spellCheck(检查拼音) classList(类名控制器...name=蜘蛛侠&age=16": new URLSearchParams(location.search).get("name"); // 蜘蛛侠 - hidden 这是一个html属性,规定元素是否隐藏...:contenteditable跟style标签可真是天生一对 - speelcheck 也是一个html属性,规定输入内容是否检查英文拼写: 效果如下: 设置不检查: <textarea spellcheck="false...✅ - page visibility 顾名思义,这个API是用来监听页面可<em>见性</em>变化<em>的</em>,<em>在</em>PC端标签栏<em>切换</em>、最小化会触发、<em>在</em>移动端程序切到后台会触发,简单说就是页面消失了?‍

    1.4K20

    这些Web API真的有用吗?别问,问就是有用

    为前缀属性集合) URLSearchParams(查询参数) hidden(隐藏元素) contenteditable(使元素可以被编辑) spellCheck(检查拼音) classList(类名控制器...name=蜘蛛侠&age=16": new URLSearchParams(location.search).get("name"); // 蜘蛛侠 - hidden 这是一个html属性,规定元素是否隐藏...:contenteditable跟style标签可真是天生一对 - speelcheck 也是一个html属性,规定输入内容是否检查英文拼写: 效果如下: 设置不检查: <textarea spellcheck="false...✅ - page visibility 顾名思义,这个API是用来监听页面可<em>见性</em>变化<em>的</em>,<em>在</em>PC端标签栏<em>切换</em>、最小化会触发、<em>在</em>移动端程序切到后台会触发,简单说就是页面消失了?‍

    1.2K31

    网页元素相交监测:Intersection Observer API

    过去,要检测一个元素是否可见或者两个元素是否相交并不容易,很多解决办法不可靠或性能很差。...Observer 第一次监听目标元素时候 通常,您需要关注文档最接近滚动祖先元素交集更改,如果元素不是滚动元素后代,则默认为设备视窗。...这是目标 (target) 元素相对于根 (root) 交集百分比表示,它取值 0.0 和 1.0 之间。...4.options root,指定根 (root) 元素,用于检查目标的可见性。必须是目标元素父级元素。如果未指定或者为null,则默认为浏览器视窗。...如果你只是想要探测当 target 元素 root 元素见性超过 50% 时候,你可以指定该属性值为 0.5。

    89720

    并发Bug之源有三,请睁大眼睛看清它们

    小提示 从上图中你也可以看出, Java 中,所有的实例域,静态域和数组元素都存储堆内存中,堆内存在线程之间共享,这些在后续文章中都称之为「共享变量」,局部变量,方法定义参数和异常处理器参数不会在线程之间共享...a = 1; System.out.println(a); System.out.println(b); 这个情况,编译器调整了语句顺序没什么影响,但编译器 擅自 优化顺序,就给我们埋下了雷,比如应用双重检查方式实现单例...方法,当执行到指令 2 时,恰好发生了线程切换 线程 B 刚进入到 getInstance 方法,判断 if 语句 instance 是否为空 线程 A 已经将 M 地址赋值给了 instance...用 volatile 或者 final 修饰(涉及到类加载机制,可看我之前文章: 双亲委派模型:大厂高频面试题,轻松搞定),问题就解决了....总结 你所看到程序并不一定是编译器优化/编译后 CPU 指令,大象装冰箱是是个程序,但隐含三个步骤,学习并发编程,你要按照 CPU 思维考虑问题,所以你需要深刻理解 可见性/原子性/有序性 ,这是产生并发

    44510

    【JS】327- javascript api 设计原则

    因为声明时候,你会根据具体业务预先决定参数缺省值。 四、扩展性 软件设计最重要原则之一:永远不修改接口,而是去扩展它!扩展性同时会要求接口职责单一,多职责接口很难扩展。...见性味程序接口提供健壮性,为保证你代码顺利执行,必须为它考虑到非正常预期情况。...return zepto.Z(dom, selector) } 以上是 zepto 源码,可以看见,作者预见传入参数时做了很多处理。...其实见性是为程序提供了若干入口,无非是一些逻辑判断而已。zepto 在这里使用了很多是非判断,这样做好处当然是代码比之前更健壮,但同时导致了代码冗长,不适合阅读。...总之,见性真正需要你做事多写一些对位置实物参数。把外部检测改为内部检测。是的使用的人用起来舒心放心开心。呐!做人嘛最重要就是海森啦。

    66120

    Chrome 浏览器现在会显示每个活动标签页内存使用情况了

    Chrome使用诸如标签可见性、标签是否正在播放音频以及页面生命周期事件等信号来判断一个标签是否处于非活动状态。...摘要视图按 DOM 节点、JS 对象等类别显示总体内存使用情况。对多个快照进行比较可以发现内存泄漏。 分配时间轴显示交互过程中实时分配活动。峰值可能表明操作效率低下。筛选特定组件隔离影响。...function scheduleMeasurement() { // 检查测量API是否可用。 if (!...一些常见来源包括: DOM分离时忘记移除事件侦听器 闭包中无意中捕获对DOM元素引用 增长数据结构,如 map 或数组,不进行清理 未能正确关闭 Web Workers 父 iframe 和...例如,后来从页面中删除闭包内添加DOM元素保持引用。 内存泄漏往往是无意中引入,通常随着时间推移逐渐增长。但即使修复小泄漏也可以提高性能。

    49310

    这些不常用Web API真的有用吗? 别问,问就是有用🈶

    (使元素可以被编辑) spellCheck(检查拼音) classList(类名控制器) getBoundingClientRect(元素空间结构详细信息) contains(判断是否包含指定元素) online...name=蜘蛛侠&age=16" new URLSearchParams(location.search).get("name"); // 蜘蛛侠 6. hidden 这是一个html属性,规定元素是否隐藏...也是一个html属性,规定输入内容是否检查中文拼音: <!...✅ 15. page visibility 顾名思义,这个API是用来监听页面可见性变化PC端标签栏切换、最小化会触发、移动端程序切到后台会触发,同属理解就是页面消失了‍♂️ document.addEventListener...w=814&h=360&f=gif&s=43331] 或者将当前DOM转换成图片进行下载,常用于生成海报: html2canvas 18. customEvent 自定义事件,就跟vue里面的on跟emit

    90230

    vue条件渲染

    v-if指令Vue.js中最常用条件渲染方式是使用v-if指令。这个指令用于DOM中插入或删除元素,基于一个表达式结果来决定元素是否应该显示。...如果表达式结果为真,则元素会被渲染;如果结果为假,则元素会被从DOM中移除。...v-show指令也根据一个表达式结果来决定元素显示与隐藏,但是它不会将元素DOM中移除,而是使用CSSdisplay属性来控制元素见性。...v-if是“真正”条件渲染,它会根据条件DOM中插入或移除元素。而v-show只是控制元素见性,使用CSSdisplay属性来隐藏或显示元素。...而v-show则适用于需要频繁切换见性情况,因为它只是使用CSS来控制元素显示与隐藏,不会涉及DOM插入与移除。

    65100

    深入理解Java内存模型

    内存模型对并发影响主要是: 缓存导致见性问题; 线程切换导致原子性问题; 编译优化带来有序性问题; 不管是增加缓存还是jvm进行编译优化,无非都是为了提升性能。...而普通变量不能做到这一点,普通变量值在线程间传递均需要通过主内存来完成;注意,可见性可以说是相比原子性弱一点存在,原子性是通过synchronized或者其他加锁手段实现,它执行是不会被打断,...禁止指令重排序优化执行程序时,为了提高速度,编译器和处理器常常会对指令做重排序。指令重排序指CPU采用了允许将多条指令不按程序规定顺序分开发送给各相应电路单元处理策略。...则它一旦被初始化(逃逸除外),就天然地对其他线程可见; 锁 同volatile,其实锁见性是由“对一个变量执行unlock操作之前,必须先把此变量同步回主内存中(执行store、write操作)”这条规则实现...;主线程A执行过程中,子线程B终止,那么线程B终止之前对共享变量修改结果在线程A中可见。

    38710

    那些关于DOM常见Hook封装(二)

    判断是否是全屏。 .isEnabled。判断当前环境是否支持全屏。 来看该 hook 封装: 首先是 onChange 事件中,判断是否是全屏,从而触发进入全屏函数或者退出全屏函数。...(); } }; useHover 监听 DOM 元素是否有鼠标悬停。...先简单看下这个 API: Document.visibilityState (只读属性), 返回document见性, 即当前可见元素上下文环境。...由此可以知道当前文档 (即为页面) 是背后, 或是不可见隐藏标签页,或者 (正在) 预渲染。可用值如下: 'visible' : 此时页面内容至少是部分可见....典型用法是防止当页面正在渲染时加载资源,或者当页面背景中或窗口最小化时禁止某些活动。

    87120

    Java面试官最爱问volatile关键字

    经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关问题?而对于你,如果作为面试官,是否也会考虑采用volatile关键字作为切入点呢?...不过值得庆幸是,如果你已经学习了微信公众号“程序新视界”JVM系列文章,上面的知识点已经不是什么问题了,权当是复习了。...Java内存模型是通过变量修改后将新值同步回主内存,变量读取前从主内存刷新变量值,将主内存作为传递媒介。举例说明内存可见性过程。 ? 本地内存A和B有主内存中共享变量x副本,初始值都为0。...volatile标记变量不会被编译器优化;synchronized标记变量可以被编译器优化。...面试官:还能举出其他例子说明volatile作用吗 举单例模式实现,典型双重检查锁定(DCL): class Singleton{ private volatile static Singleton

    69921

    你还不懂可见性、有序性和原子性吗?

    并发编程幕后 进入主题之前,我们先来了解一下并发编程幕后。 随着CPU、内存和I/O设备不断升级,它们之间一直存在着一个矛盾,就是速度不一致问题。...单核时代,其实是不存在可见性问题,因为所有的线程都是一个CPU中工作,一个线程写操作对于其他线程一定是可见。 ? 不会吧?你还不懂可见性、有序性和原子性吗?...你还不懂可见性、有序性和原子性吗? 现在操作系统任务切换一般指的是更轻量级线程切换,java并发编程是基于多线程,自然也会存在线程切换。...这就是线程切换导致数据错误问题,我们把一个或者多个操作 CPU 执行过程中不被中断特性称为原子性,CPU 能保证原子操作是 CPU 指令级别的,而不是高级语言操作符,这是违背我们直觉地方。... Java 领域一个经典案例就是利用双重检查创建单例对象,代码如下: public class Singleton { static Singleton instance; static

    52920

    使用 Synchronized 关键字

    可以看到,执行 count++ 指令之前,编译器加了一条 monitorenter 指令,count++ 指令执行结束时又加了一条 monitorexit 指令。...这样,每个线程调用该方法之前都会检查这个状态位是否为 1,如果状态为 1 说明这是一个同步方法,需要首先执行 monitorenter 指令去尝试获取当前实例对象内置锁,并在方法执行结束执行 monitorexit...先不去管什么是,轻量锁,重量锁,偏向锁,自旋锁,这是虚拟机一种锁优化机制,通过锁膨胀来优化性能,这一点细节我们以后再介绍,你先把它们统一理解为一把锁。...总结一下,被 synchronized 修饰代码块或者方法在编译器会被额外插入两条指令,monitorenter 会去检查对象头锁信息,对应到一个 Monitor 结构,如果该结构 Owner 字段已经被占用了...synchronized 几个特性 1、重入性 一个对象往往有多个方法,这些方法有的是同步,有的是非同步,那么如果一个线程已经获得了某个对象锁并进入了某个同步方法,而这个同步方法中还需要调用同一实例另一个同步方法

    42230

    java内存模型理解

    java内存模型理解 并发问题产生源头 缓存导致见性问题 线程切换导致原子性问题 编译优化带来有序性问题 小结 Java内存模型: 解决可见性和有序性问题 Java内存模型与JVM内存模型区别...在下面场景中,线程B访问未初始化过instance,可能会触发空指针异常: ---- 小结 java并发编程问题三大根本来源: 可见性,原子性,有序性 缓存导致见性问题 线程切换导致原子性问题...第二是volatile字段,volatile字段可以看成是一种不保证原子性同步但保证可见性特性,性能往往是优于锁操作。...java中,Happens-Before规则本质还是一种可见性,A Happens-Before B,意味着A事件对B事件来说是可见,无论A事件和B事件是否发生在同一个线程里,例如: 事件A发生在线程...jmm 是一个规范,它用于指导编译器行为。但它本身不会限制编译器所使用具体编译技术。所以, jmm 规范中,不会提到 “指令重排” 或者 "内存屏障” 这些具体实现技术。

    31250

    Java面试:2021.05.17

    虽然都要睡眠和交替,但是select和poll“醒着”时候要遍历整个fd集合,而epoll“醒着”时候只要判断一下就绪链表是否为空就行了,这节省了大量CPU时间。...锁分类 乐观锁:读时候不加锁,之后时候才加锁。并且时候,会比较当前值跟预期值是否一致,只有一致才会去执行写操作。...虽然需要用户态和内核态切换,但是避免了死循环自旋,大大降低了cpu使用。...java提供又简单方便,性能优化又非常好功能,建议大家常用;CAS的话,线程数大于一定数量的话,多个线程 循环调用CAS接口,虽然不会让其他线程阻塞,但是这个时候竞争激烈,会导致CPU到达100%...synchronized关键字 使用synchronized代码块或者synchronized方法也可以保证共享变量见性

    45530

    HTML5这些api你知道吗?

    以下是之前学习一些HTML5 API总结,HTML5中有许多功能和接口很值得我们去了解和学习。...--link Prefetching Page Visibility 页面可见性API 该API可以用来检测页面对于用户见性,即返回用户当前浏览页面或标签tap状态变化。...最小化浏览器、切换tap页面时生效.(如需对app中几个webview进行切换操作时,可使用pageVisibility接口进行相应事件监听和处理。)...可有三个值得可能: 【visible】 表示该page是处于最前面的页面并且不是处于一个最小化窗口 【hidden】 表示该page不是处于最前面的页面或者是处于一个最小化窗口 【prerender...第一次见到这个API是在看一些手机小说和移动端漫画网站时,发现有全屏观看功能。

    1.4K60

    深入理解synchronized底层原理,一篇文章就够了!

    可以看到add方法flags里面多了一个ACC_SYNCHRONIZED标志,这标志用来告诉JVM这是一个同步方法,进入该方法之前先获取相应锁,锁计数器加1,方法结束后计数器-1,如果获取失败就阻塞住...从反编译同步代码块可以看到同步块是由monitorenter指令进入,然后monitorexit释放锁,执行monitorenter之前需要尝试获取锁,如果这个对象没有被锁定,或者当前线程已经拥有了这个对象锁...四、synchronized锁底层实现 在理解锁实现原理之前先了解一下Java对象头和Monitor,JVM中,对象是分成三部分存在:对象头、实例数据、对填充。 ?...自旋锁:许多情况下,共享数据锁定状态持续时间较短,切换线程不值得,通过让线程执行循环等待锁释放,不让出CPU。如果得到锁,就顺利进入临界区。...自适应自旋锁:这种相当于是对上面自旋锁优化方式进一步优化,它自旋次数不再固定,自旋次数由前一次同一个锁上自旋时间及锁拥有者状态来决定,这就解决了自旋锁带来缺点。

    40.1K3133

    HTML5这些api你知道吗?

    本文作者:IMWeb coverguo 原文出处:IMWeb社区 未经同意,禁止转载 以下是之前学习一些HTML5 API总结,HTML5中有许多功能和接口很值得我们去了解和学习。...--link Prefetching Page Visibility 页面可见性API 该API可以用来检测页面对于用户见性,即返回用户当前浏览页面或标签tap状态变化。...最小化浏览器、切换tap页面时生效.(如需对app中几个webview进行切换操作时,可使用pageVisibility接口进行相应事件监听和处理。)...可有三个值得可能: 【visible】 表示该page是处于最前面的页面并且不是处于一个最小化窗口 【hidden】 表示该page不是处于最前面的页面或者是处于一个最小化窗口 【prerender...第一次见到这个API是在看一些手机小说和移动端漫画网站时,发现有全屏观看功能。

    88070
    领券