javascript是否使用弹性赛道算法进行处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript是否使用弹性赛道算法进行处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2753字,纯文字阅读大概需要4分钟。
内容图文
![javascript是否使用弹性赛道算法进行处理](/upload/InfoBanner/zyjiaocheng/732/f2010c3730f6418ebada2c8902c5c9b8.jpg)
我试图找出一个有效的算法来改变一堆节点上的很多类,我发现我对javascript如何遍历DOM有一个很大的漏洞.
浏览器/ javascript是否使用像闪存一样的弹性赛道?或者它是更多的事件驱动,每次有变化时重绘整个显示?
“弹性赛道”是一个闪光范例,你可以想象一个闪光环绕的大环.在用户处理期间,时间变化积累,并且在闪存处理期间,闪存引擎会四处奔跑并一遍又一遍地应用所有更改.
替代方案是一个事件模型,每次属性更改时,整个屏幕都会重新绘制 – 这可能是浏览器所做的,但我不确定.
我可以想到混合算法,如果没有任何变化,没有任何事情发生 – 但如果有它们被允许建立 – 有点像我的水槽上的菜.
有没有人能够快速描述用于处理属性更改和DOM插入的算法.
解决方法:
Flash的“弹性赛道”继承自浏览器.当然,在浏览器领域我们不称之为 – 我们称之为事件循环.
javascript事件循环的历史始于Netscape上的渐进式GIF和JPEG渲染.渐进式渲染 – 部分加载内容的绘制 – 需要Netscape实现异步下载渲染引擎.当Brendan Eich实现了javascript时,这个异步事件循环已经存在.因此,向其添加另一层是一项相当简单的任务.
因此,浏览器的事件循环如下所示:
Event loop
┌──────────┐
│ │
│ │
│ ▼
│ check if there's any new ───────? parse data
│ data on the network │
│ │ │
│ ▼ │
│ check if we need to execute ?─────────┘
│ any javascript ──────────────────? execute
│ │ javascript
│ ▼ │
│ check if we need to ?────────────────┘
│ redraw the page ──────────────? redraw page
│ │ │
│ │ │
└────?─────┴─────────────────?─────────────────┘
其余的,正如他们所说,是历史.当Microsoft复制javascript时,他们必须复制事件循环以保持与Netscape兼容.所以形式然后每个人都必须做同样的事情以保持与Netscape和IE兼容.
请注意,javascript没有任何功能可以手动递归到事件循环中(某些语言,例如tcl,可以这样做),因此浏览器必须等到重绘页面之前没有更多的javascript要执行.在脚本结束之前,不能强制进行页面重绘.
正是由于这个原因,当您尝试在创建后立即读取它们时,计算出的值(如元素的宽度或高度)有时会返回错误的值 – 浏览器尚未绘制它们.如果您真的需要在页面重绘后执行代码,那么解决方法是使用超时值为0的setTimeout以允许浏览器运行一轮事件循环.
其他细节:
似乎有一种特殊情况会引发昂贵的回流.请注意,重排是浏览器计算页面布局.如果浏览器需要绘制更改的页面,通常会触发它.
当页面中的某些内容发生变化时,重排计算会排队 – 不会立即执行.如在上面的描述中,回流将仅在javascript执行结束时执行.但有一种情况会导致浏览器立即执行回流计算:如果您尝试读取任何计算值,如宽度和高度.
有关详细信息,请参阅此相关问题:When does reflow happen in a DOM environment?
内容总结
以上是互联网集市为您收集整理的javascript是否使用弹性赛道算法进行处理全部内容,希望文章能够帮你解决javascript是否使用弹性赛道算法进行处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。