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

为什么操作DOM影响WEB应用性能?

此时,你给自己刨了个可以把自己埋住大坑。 因为面试官可能追问你:“为什么减少DOM操作可以提高性能?” 为什么呢? _______ 1、dom是什么?ES和 DOM是什么关系?...导致DOM元素位置、面积改变。【计算消耗CPU能力】 页面渲染器初始化(这算重走流程吧,肯定要重排) 浏览器窗口尺寸改变(位置信息会被迫调整,发生重排。...这种情况就发生在我们获取DOM信息时候: 打断浏览器优化,强迫触发重排属性: offsetTop、offsetLeft、offsetWidth、offsetHeight scrollTop、scrollLeft...单独触发重绘情况: 除元素尺寸、位置发生改变以外情况,(比如字体颜色、背景色等发生改变)。(怀疑文字加粗也触发重排,但是没有证据。...(想到一个验证只发生重绘情况,那就是后边也加点元素,如果重排了,后边元素在控制台检测下也闪绿光。) 9、为什么不提倡重排和重绘? 既然知道了这个dom操作触发重排、重绘。

1.9K20

刚按下666,计算机发生了神奇事情···

毋庸置疑,这是一个好问题,也看到不下100篇文章在探讨这个问题答案。 而今天,想跟大家探讨是另外一个问题:从你在键盘上按下一个“6”,到屏幕上显示出来,计算机发生了什么? ?...0x01: 按下按键,键盘做了什么 早期计算机,大部分都是PS2接口,就是这玩意: ? 但这种接口插起来不方便,也不通用,近些年USB接口键盘越来越多了,所以咱们就以USB键盘为研究对象。...但现在请忘记它,这玩意已经是上个世纪作古产物,保证你拆开你计算机,一定找不到它。...来自USB控制器电信号输入到IOAPIC之后,IOAPIC根据事先编程配置信息,通过对应表项RTE格式化出一条中断消息,然后通过总线系统发出去。...但机器没有记忆思维,在打断去干别的事情之前,必须把原来做事情保存起来,这样一会儿才能回来继续做剩下事。 这个保存过程,就叫执行上下文保存。那保存在哪里呢? 答案就是线程栈。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

为什么if-else影响代码复杂度

关于if-else争议 之前写了一篇文章《用规则引擎消除if语句,提高了代码可扩展性》,这篇文章想阐述观点是复杂if语句可能影响代码阅读和代码扩展性,会将非业务条件逻辑与业务逻辑混合在一起...时间长了代码越来越臃肿,因此这种情况下推荐使用一些设计模式例如策略模式,责任链模式等去优化if语句带来问题,文中发现使用规则引擎也能实现类似效果,因此介绍了怎么使用规则引擎Easy Rules去取代...if-else增加了代码复杂度 文章发布后,有很大一部分读者认为只用设计模式增加代码阅读性,还是觉得if-else好,就算if写得再复杂,也要使用if-else。...condition1 && condition2 && condition3 && condition4) { do4(); } 其实if-else 以及类似的switch控制语句,本质上是一种硬编码行为,这种硬编码问题在于当需求发生改变时...即使在代码还在起步阶段,我们也要能够看到将来代码发展趋势。 真的不要觉得设计代码是一件费时费力事情,到了多次项目迭代后,我们会发现好设计可以提高工作效率和代码质量。

1.4K10

奇怪Java题:为什么128 == 128返回为false,而127 == 127返回为true?

奇怪Java题:为什么128 == 128返回为false,而127 == 127返回为true? 在回答这个问题之前,我们先来看看int和Integer对比,一步步揭开问题答案。...Integer i = new Integer(100); int j = 100; System.out.print(i == j); //true 因为包装类Integer和基本数据类型int比较时,java自动拆包装为...而在JDK 5.0中,这种表达式是可以!因为编译器成为Integer j = Integer.valueOf(100),后面会有更详细讲解。 3....// 直接在堆中new一个对象 Integer k = new Integer(100); } } java在编译Integer x = yyy ;时,翻译成为...而java API中对Integer类型valueOf定义如下,对于-128到127之间数,进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127

2.2K31

为什么建议大家一定 C 语言

在如今 Python 和 Java 大火市场前景下,还是建议,如果你还在学校读书,或者你有大把空闲时间,不着急去找工作,那就静下心来,好好学习一下 C 语言,让你受益终生,也让你编程之路走更远...其设计精髓,其内涵思想,都是值得当下我们学习与借鉴 2、C 语言作为接触编程开始,对影响很大,带入了 IT 这行,本人也是极其喜欢 C 语言,C 语言涉及了很多底层知识,比如:内存...,很激励自己,之后自己就豁然开朗,对编程认知提升了一个层次,在理解其他知识点就感觉轻松,容易多了,那次经历真的很玄学 之后自己在编程路上,也遇到了种种困难,但是每每想起指针那件事情就信心满怀...,由一名后台转算法,仅仅用了 3 个月时间,但是为什么能这么快成功转型呢 扎实基础功底、快速学习能力、解决问题能力、以及个人潜力 扎实基础功底很重要,基础是什么:数据结构 + 算法,操作系统...,才能体现你价值,而你就必须具备这种能力 C 世界 一定对自己有清晰定位,自己目前是一个什么样处境,只有全面的认识自己,才能针对当下,做出战略性方案,深度 > 广度,在互联网行业,对于我们来说

1.4K50

为什么做分享时候感觉大脑空白

大鱼日更第 47 篇原创 不知道你有没有遇到这种情况,公司需要你做一个分享交流会,你自我感觉准备很充分,写了 PPT ,也在脑子里构建了要怎么讲,但是到了真正要讲会上,你发现自己总语无伦次、磕磕绊绊...这也是最近遇到问题,这两个月做了两次技术分享,第一次就遇到上面的情况,有的点因为紧张怎么都想不起来,只能尴尬说,回头再重新捋一下发给大家。 为了避免每次遇到这种问题,得想办法解决。...再从大脑结构来说,你可以理解它们分布在这个位置: 从距离上说,本能脑和情绪脑距离心脏更近,一旦出现紧急情况,它们就会优先得到供血,这就是为什么紧张时候感觉大脑空白,因为最上方理智脑供血不足了。...而且因为它年龄小,在遇到危险时候,本身也竞争不过其他两重脑,所以就能解释,为什么人在遇到危险时候都靠本能反应而不是靠理智。 02 那怎么解决这个问题呢? 其实很简单,就是打稿子,然后自己多练。...前几天和阿常聊天,她说起将要和小林连麦,想想都觉得紧张,后来把默默把内容在脑子里过了几遍之后感觉踏实不少。

52040

MySQL实战第十二讲-为什么MySQL“抖”一下?

SQL 语句为什么变“慢”了 在本栏第 2 篇文章《MySQL深入学习第二篇 - 一条SQL更新语句是如何执行?》中,我为你介绍了 WAL 机制。...第二种场景是:这一天生意太好,要记住事情太多,掌柜发现自己快记不住了,赶紧找出账本把孔乙己这笔账先加进去。 这种场景,对应就是系统内存不足。...如果你从监控上看,这时候更新数跌为 0。 第二种是“内存不够用了,要先将脏页写到磁盘”,这种情况其实是常态。...在文章里,也给你介绍了控制刷脏页方法和对应监控方式。 文章最后,给你留下一个思考题吧。...但如果你在配置时候不慎将 redo log 设置成了 1 个 100M 文件,会发生什么情况呢?又为什么会出现这样情况呢?

43820

React面试题精选

为了达到这个目的,React构建一个React元素树(你可以把这个想象成一个表示UI一个对象)。...Refs是你访问DOM元素或者组件实例一个安全门。为了使用它们,你可以在组件加上一个ref属性,ref值是一个回调函数,这个回调函数接受底层DOM元素或者被挂载组件实例作为它第一个参数。...在这种模式下,组件接受某个函数作为它元素。注意一下里面包含东西。...主要原因就是受控组件有助于进行表单验证,控制按钮是否可点击,强制输入格式,并且它也更符合“React way” ---- 在生命周期哪个阶段发生ajax请求而且为什么?...上面我们了解了reconciliation这个过程和调用setState发生事情. shouldComponentUpdate是一个允许我们自行决定某些组件(以及他们子组件)是否进行更新生命周期函数

2.7K42

一文掌握React 渲染原理及性能优化

每次数据更新后,重新计算 Virtual Dom ,并和上一次生成 virtual dom 做对比,对发生变化部分做批量更新。...虚拟元素可以理解为真实元素对应,它构建与更新都是在内存中完成,并不会真正渲染到 dom 中去。 回到我们计数器 counter 组件: ?...现在我们来点击改变标题, 看看会发生些什么。 ? 奇怪事情发生了,为什么只改了标题, 为什么不相关 ListItem 组件也重新渲染呢? 我们可以回到组件生命周期看看为什么。 ?...回到组件 再次回到我们组件中, 这次点击按钮, 把第二条数据换掉: ? 奇怪事情发生了,为什么只改了第二个 listItem, 还是全部 10 个都重新渲染了呢?...那么我们怎么能避免这种情况发生呢? 其中一个方法是做深比较,但是如果对象或数组层级比较深和复制,那么这个代价就太昂贵了。

4.3K30

【React】393 深入了解React 渲染原理及性能优化

虚拟元素可以理解为真实元素对应,它构建与更新都是在内存中完成,并不会真正渲染到 dom 中去。 回到我们计数器 counter 组件: ?...UI中DOM节点跨节点操作特别少,可以忽略不计。 2. 拥有相同类组件拥有相似的DOM结构。拥有不同类组件会生成不同DOM结构。 3. 同一层级子节点,可以根据唯一ID来区分。...现在我们来点击改变标题, 看看会发生些什么。 ? 奇怪事情发生了,为什么只改了标题, 为什么不相关 ListItem 组件也重新渲染呢? 我们可以回到组件生命周期看看为什么。 ?...回到组件 再次回到我们组件中, 这次点击按钮, 把第二条数据换掉: ? 奇怪事情发生了,为什么只改了第二个 listItem, 还是全部 10 个都重新渲染了呢?...那么我们怎么能避免这种情况发生呢? 其中一个方法是做深比较,但是如果对象或数组层级比较深和复制,那么这个代价就太昂贵了。

1.2K10

深入了解React 渲染原理及性能优化

虚拟元素可以理解为真实元素对应,它构建与更新都是在内存中完成,并不会真正渲染到 dom 中去。 回到我们计数器 counter 组件: ?...UI中DOM节点跨节点操作特别少,可以忽略不计。 2. 拥有相同类组件拥有相似的DOM结构。拥有不同类组件会生成不同DOM结构。 3. 同一层级子节点,可以根据唯一ID来区分。...现在我们来点击改变标题, 看看会发生些什么。 ? 奇怪事情发生了,为什么只改了标题, 为什么不相关 ListItem 组件也重新渲染呢? 我们可以回到组件生命周期看看为什么。 ?...回到组件 再次回到我们组件中, 这次点击按钮, 把第二条数据换掉: ? 奇怪事情发生了,为什么只改了第二个 listItem, 还是全部 10 个都重新渲染了呢?...那么我们怎么能避免这种情况发生呢? 其中一个方法是做深比较,但是如果对象或数组层级比较深和复制,那么这个代价就太昂贵了。

69610

掌握React 渲染原理及性能优化

虚拟元素可以理解为真实元素对应,它构建与更新都是在内存中完成,并不会真正渲染到 dom 中去。 回到我们计数器 counter 组件: ?...UI中DOM节点跨节点操作特别少,可以忽略不计。 2. 拥有相同类组件拥有相似的DOM结构。拥有不同类组件会生成不同DOM结构。 3. 同一层级子节点,可以根据唯一ID来区分。...现在我们来点击改变标题, 看看会发生些什么。 ? 奇怪事情发生了,为什么只改了标题, 为什么不相关 ListItem 组件也重新渲染呢? 我们可以回到组件生命周期看看为什么。 ?...回到组件 再次回到我们组件中, 这次点击按钮, 把第二条数据换掉: ? 奇怪事情发生了,为什么只改了第二个 listItem, 还是全部 10 个都重新渲染了呢?...那么我们怎么能避免这种情况发生呢? 其中一个方法是做深比较,但是如果对象或数组层级比较深和复制,那么这个代价就太昂贵了。

75220

精读《深入了解现代浏览器三》

概述 本篇宏观介绍 renderer process 做了哪些事情。...布局最难地方在于,需要对所有奇奇怪布局定式做一个尽量合理处理,而很多时候布局定式间规则是相互冲突。而且这还不考虑布局引擎修改在数亿网页上引发未知 BUG 风险。...所以站在浏览器开发者角度,可以轻松理解为什么这种优化不是奇技淫巧了,因为本身浏览器实现就把布局、绘图与合成层行为分离开了,不同代码底层方案不同,性能肯定会不同。...而隐式合成是指元素没有被特别标记,但也被提升到合成层情况,这种情况常见发生在 z-index 元素产生重叠时,下方元素显示申明提升到合成层,则浏览器为了保证 z-index 覆盖关系,就要隐式把上方元素提升到合成层...浏览器也支持层自动合并,比如隐式提升到合成层时,多个元素自动合并在一个合成层里。但这种方式也并不总是靠谱,自动处理毕竟猜不到开发者意图,所以最好优化方式是开发者主动干预。

45220

MySQL深入学习第十二篇-为什么MySQL“抖”一下?

SQL 语句为什么变“慢”了 在本栏第 2 篇文章《MySQL深入学习第二篇 - 一条SQL更新语句是如何执行?》中,我为你介绍了 WAL 机制。...第二种场景是:这一天生意太好,要记住事情太多,掌柜发现自己快记不住了,赶紧找出账本把孔乙己这笔账先加进去。 这种场景,对应就是系统内存不足。...如果你从监控上看,这时候更新数跌为 0。 第二种是“内存不够用了,要先将脏页写到磁盘”,这种情况其实是常态。...在文章里,也给你介绍了控制刷脏页方法和对应监控方式。 文章最后,给你留下一个思考题吧。...但如果你在配置时候不慎将 redo log 设置成了 1 个 100M 文件,会发生什么情况呢?又为什么会出现这样情况呢?

48130

一篇包含了react所有基本点文章

去年,写了一本关于学习React.js小书,原来是大约100页。 今年要挑战自己,把它归纳为一篇文章。 本文不会涵盖什么是React,或者为什么要学习它。...我们可以使用这种方法做一些事情,例如,在DOM上做一些我们现在知道在浏览器中支持处理东西。 在此生命周期方法之前,我们处理DOM全部是虚拟。 一些组件故事在这里结束。...该元素父代可能重新呈现。 在任一种情况下,安装元件可能接收不同props。 这里魔法发生了,我们现在开始需要React了!...在此之前,我们完全不需要做任何事情 这个组件故事继续下去,但在之前,我们需要了解所说这个状态。 7: React组件有一个私有状态 以下也仅适用于类组件。...如果你没有做任何事情,你可以创建没有他们完整应用程序。 他们可以用来非常方便地分析应用程序中发生情况,并进一步优化了React更新性能。

3.1K20

所有这些基础React.js概念都在这里了

ReactAPI尝试尽可能接近DOM API,这就是为什么我们使用className 而不是class 输入元素。秘密地,我们都希望ReactAPI将成为DOM API本身一部分。...我们可以使用这种方法,例如,在DOM上做一些我们现在知道在浏览器中存在东西。在此生命周期方法之前,我们处理DOM都是虚拟。 一些组件故事在这里结束。...出于各种原因,其他组件可以从浏览器DOM中解除装载。在后一种情况发生之前,React调用另一种生命周期方法componentWillUnmount。 任何已装载元件状态可能更改。...该元素父代可能重新渲染。在任一种情况下,装载元件可能接收不同属性。这里魔法发生在这里,我们实际上开始需要React!在此之前,我们根本就不需要React。...如果你没有做任何特别的事情,你可以创建没有他们完整应用。它们非常方便地分析应用中发生情况,并进一步优化了React更新性能。 仅此而已。

1.9K20

HTMLCSSJS 是如何在浏览器中,渲染成你看到页面?【图解Chrome】

如果你对 JS 执行中发生事情细节有兴趣,V8 团队有一篇文章深入对此进行了讲解,有兴趣可以看看。...[image.png] 例如:z-index属性将改变元素层级,在这种情况下,按 HTML 中编写元素顺序进行绘制,将导致渲染结果和预期不符。...例如,如果布局树中某些内容发生变动,则需要为文档中受影响部分,重新生成“绘制记录”。 [image.png] 为元素设置动画,浏览器必须在每一帧之间执行这些操作。...合成器线程光栅化每个图层,一个图层可能想一个完整页面那么大,因此合成器线程将他们分成图块,并将每个图块发送到光栅线程。光栅线程格式化每个元素,并将他们存储在 GPU 内存中。...合成(Compositor)好处,是它可以在不影响主线程情况下完成。合成器线程不需要等待样式计算或者 JS 脚本执行,这就是为什么 “仅合成动画” 被认为是平滑性能最佳选择。

4.7K50
领券