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

【译】如何避免在JavaScript中阻塞DOM

原文链接:https://www.sitepoint.com/avoiding-dom-blocking/ 在浏览器和在诸如Node.js的运行时环境中,JavaScript程序是运行在单线程上的。...例如:当一个按钮被点击后触发了一个事件,这个事件执行一个函数,在函数内进行了一些计算并更新DOM。一旦完成,浏览器便空闲下来,从任务队列中取出下一个任务来处理。...然而,worker被故意设计了一些限制,worker无法直接访问DOM或者localStorage(这样做会使JavaScript变成多线程模型并破坏浏览器的稳定性)。...注意到因为肢体的摆动是由JavaScript控制的,所以它们仍然会因阻塞而暂停。 内存存储 更新内存中的对象要比使用写入磁盘的存储机制快得多。...我们应当尽可能少地进行任务处理,并且不要明显地阻塞DOM。此外,幸运的是,在无法避免长时间运行任务的情况下,也存在一些选项可供开发者选择。

2.8K10

JavaScript基础-DOM操作:查找、创建、修改

DOM(Document Object Model)是Web开发中的核心概念,它将HTML文档表示为一个可编程的对象集合,使得JavaScript能够动态地查询、创建、修改页面内容。...本文旨在深入浅出地介绍DOM操作的基础知识,包括查找元素、创建新节点以及修改现有节点的方法,同时揭示一些常见问题、易错点,并提供避免策略及实用代码示例。...易错点与避免策略 ID唯一性:使用getElementById时,确保ID在整个文档中是唯一的,否则行为可能不可预测。...易错点与避免策略 忘记插入:创建节点后,记得将其插入到DOM树中,否则新节点不会显示在页面上。...记住,虽然直接操作DOM可以实现丰富的交互效果,但也应注意性能优化,特别是在处理大量数据或频繁更新时,考虑使用现代框架或库来简化DOM操作,提高应用性能。

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

    JavaScript DOM 操作创建和追加节点

    jQuery 有一个 append 方法,就是在某个元素基础上追加一些元素,但实际内部实现是需要先创建在追加,下面代码演示了一个创建 ul 和 li 的过程。...辽宁”, “浙江”, “河南”]; var city = [“shenyang”, “hangzhou”, “zhengzhou”]; for (var key in province) { // 创建...document.createElement(“li”); var text = document.createTextNode(province[key]); // 把新建的文本追加到 li 中...obj_ul.appendChild(obj_li); } // 将新建的 ul 追加到 body document.getElementsByTagName(“body”)[0].appendChild(obj_ul); // 在指定节点位置前追加一个元素...document.createTextNode(“广东”); new_li.setAttribute(“id”, “guangzhou”); new_li.appendChild(new_text); // 在指定位置追加

    16420

    JavaScript 中 的 DOM 和 BOM

    JavaScript 与 ECMAScript 关系 JavaScript = ECMAScript + DOM + BOM 1.ECMAScript 为 JavaScript 提供核心语言功能,是由欧洲计算机制造商协会...从根本上将 BOM 只处理浏览器窗口和框架,但是人们习惯把针对浏览器的 JavaScript 扩展也算作 BOM 的一部分,例如:浏览器弹出新窗口的功能;移动、缩放和关闭浏览器窗口的功能;navigator...DOM2 在原有的 DOM 基础上又扩充了鼠标和用户界面事件、范围、遍历(迭代 DOM 文档的方法)等细分模块,并且通过对象接口增加了对 CSS 的支持。...DOM3 级进一步扩展 DOM,引入了以统一方式加载和保存文档的方法——在 DOM 加载和保存(DOM Load and Save)模块中定义,新增了 DOM 验证(DOM Validation)。...DOM0 级,DOM0 级标准本质上不存在,所谓 DOM0 只是 DOM 历史坐标中的一个参照点,具体来说,DOM0 级是指 Internet Explorer 4.0 和 Netscape Navigator

    47320

    JavaScript中的Dom和Bom

    当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。...3.1.4 CSS选择器 还有html5中新增的两个方法,让我们可以用css选择器的方法来选择DOM节点,这两个方法必须在IE8以上的现代浏览器中才能使用。...,然后将p元素插入到页面的某个节点后,那么这个任务可以分为几个步骤: a.创建一个p元素节点 b.把这个p元素节点最佳到文档中的#parent元素节点上 c.创建一个文本节点 d.把这个文本节点追加到刚才创建的...但它只是一个文档碎片,还不是DOM节点树上的组成部分,无法显示在浏览器里。...createTextNode,创建一个文本节点用于放文本内容,和上面几乎一样,只是传入的参数就是文本字符串,创建好后依旧是文档中的一个游荡的孤儿。

    92310

    Java中的DOM和Javascript技术

    Java中的DOM和Javascript技术 DOM是一门技术,是文档对象模型.所需的文档只有标记型文档,如我们所学的html文档(文档中的所有标签都封装成为对象了) DOM: 为Document Object...把标签文档中所有的标签封装成对象, 文档也封装成对象,DOM技术(标记型文档封装成对象) DOM技术存在浏览器中,内置了DOM技术解析器,变对象是需要进行解析的,描述进行封装.在内存当中进行解析,为Demo.html...(HTML,CSS,JAVASCRIPT,DOM + xmlHTTPRequest为AJAX) HTML:提供标签,用于封装数据. css:提供样式....DOM:提供解析,将标记文档以及文档中的内容都封装成为对象,这样就可以操作对象中的属性和行为....a href="javascript:void(0) onclick="changeFont(16px)" ">中字体 javascript:void(0) onclick=

    66030

    Javascript中DOM技术的的简单学习

    API 2:DOM的分层结构     在DOM中,文档的层次结构被表示为树形结构。...树是倒立的,树根在上     树叶在下面,树的节点表示文档的内容     子节点:   在树形结构中,直接位于一个节点之下的节点被称为该节点的子节点     父节点:   直接位于一个节点之上的节点被称为该节点的父节点...中的JavaScript、DOM、CSS等文本。    3.3. 属性节点:元素属性,如标签的链接属性href="http://www.imooc.com"。...那么在网页中,我们通过id先找到标签,然后进行操作。...学完以上两门基础课后,在深入学习JavaScript的变量作用域、事件、对象、运动、cookie、正则表达式、ajax等课程。

    1K50

    JavaScript中的数组创建

    在JavaScript中要做到这一点的基本方法是使用数组字面量,例如 [1,5,8]或是数组构造器 newArray(1,5,8)。...除了手动枚举之外,JavaScript还提供了更有趣更直接的数组创建方式。让我一起看看在JavaScript中初始化数组的一般场景和高级场景吧。 1....这种情况中,最后一个逗号会被JavaScript忽略: 在JS Bin中查看 let items = ['first', 'second', 'third', ]; items; // => ['first...数组构造器 JavaScript中的数组是一个对象。和任何对象一样,它有一个可以用来创建新实例的构造器函数 Array。...---- 往期精选文章 使用虚拟dom和JavaScript构建完全响应式的UI框架 扩展 Vue 组件 使用Three.js制作酷炫无比的无穷隧道特效 一个治愈JavaScript疲劳的学习计划 全栈工程师技能大全

    3.5K10

    在JavaScript中,如何创建一个数组或对象?

    在JavaScript中,可以使用以下方式创建数组和对象: 一:创建数组(Array): 1:使用数组字面量(Array Literal)语法,使用方括号 [] 包裹元素,并用逗号分隔: let array1...= [1, 2, 3]; // 包含三个数字的数组 let array3 = ['apple', 'banana', 'orange']; // 包含三个字符串的数组 2:使用 Array 构造函数创建数组...new Array(1, 2, 3); // 包含三个数字的数组 let array6 = new Array('apple', 'banana', 'orange'); // 包含三个字符串的数组 二:创建对象...包含两个属性的对象 let obj3 = { firstName: 'John', lastName: 'Doe', age: 25 }; // 包含三个属性的对象 2:使用 Object 构造函数创建对象...包含两个属性的对象 let obj6 = new Object({ firstName: 'John', lastName: 'Doe', age: 25 }); // 包含三个属性的对象 这些方式都可以创建数组和对象

    38730

    怎样在JavaScript中创建和填充任意长度的数组

    没有空洞的数组往往表现得更好 在大多数编程语言中,数组是连续的值序列。在 JavaScript 中,Array 是一个将索引映射到元素的字典。...例如,下面的 Array 在索引 1 处有一个空洞: 1> Object.keys(['a',, 'c']) 2[ '0', '2' ] 没有空洞的数组也称为 dense 或 packed。...在某些引擎中,例如V8,如果切换到性能较低的数据结构,这种改变将会是永久性的。即使所有空洞都被填补,它们也不会再切换回来了。...关于 V8 是如何表示数组的,请参阅Mathias Bynens的文章“V8中的元素类型”【https://v8.dev/blog/elements-kinds】。...在 `Array` 构造函数后面加上 `.fill()` 方法 .fill()方法会更改当前的 Array 并使用指定的值去填充它。

    3.3K30

    一文解读JavaScript中的文档对象(DOM)

    前言 相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScript...1.文档对象(DOM) 1).Document对象 这是我们用的最普遍的一个文档对象了,专门用来操作DOM节点时用。...#创建一个注释节点 document.createDocumentFragment() #创建文档粉碎节点 7)).增加节点 appendChild(节点) #节点被添加到元素的末尾 insertBefore...(a,b) #a节点会插入b节点的前面 8)).删除节点 removeChild(节点名) #被移除的节点仍在文档中,只是文档中已没有其位置了 9)).替换节点 replaceChild(插入的节点...下一篇文章,我们继续介绍JavaScript,敬请期待! 看完本文有收获?请转发分享给更多的人

    71420

    一文搞懂 JavaScript 中 DOM 相关的距离

    一、问题由来 刚开始学 DOM 操作中对于元素距离元素的距离问题总是迷迷糊糊的,虽然有万能的 getCurrentStyle 方式来取得所需要的属性,但是有时看别人的代码的时候,总会遇到很多简写的方式...比如下面要说的 offset 系列,scroll 系列,client系列的距离,还有事件发生时 offsetX,clientX,pageX 等等的一些距离的总结,可以在我们忘记的时候翻翻一翻这篇文章,然后花最短的时间搞清楚它们之间的区别...console.log(textarea.clientLeft, textarea.scrollLeft, textarea.offsetLeft); }; 我们可以发现,只有 scrollLeft 是在改变的...看完这些,你对 DOM 元素的距离相关的属性都了解了吗? 其实我们之间的问题,从来都不是距离。

    1.4K31

    第61节:Java中的DOM和Javascript技术

    Java中的DOM和Javascript技术 DOM是一门技术,是文档对象模型.所需的文档只有标记型文档,如我们所学的html文档(文档中的所有标签都封装成为对象了) DOM: 为Document...把标签文档中所有的标签封装成对象, 文档也封装成对象,DOM技术(标记型文档封装成对象) DOM技术存在浏览器中,内置了DOM技术解析器,变对象是需要进行解析的,描述进行封装.在内存当中进行解析,为Demo.html...(HTML,CSS,JAVASCRIPT,DOM + xmlHTTPRequest为AJAX) HTML:提供标签,用于封装数据. css:提供样式....DOM:提供解析,将标记文档以及文档中的内容都封装成为对象,这样就可以操作对象中的属性和行为....a href="javascript:void(0) onclick="changeFont(16px)" ">中字体 javascript:void(0) onclick=

    62120

    在 JavaScript 中使用 WebSocket,创建 WebSocket 连接

    在 JavaScript 中使用 WebSocket,用 WebSocket 对象创建 WebSocket 连接,并使用该对象提供的方法和事件处理程序进行实时通信。...以下是一个简单的示例代码,展示了在 JavaScript 中如何使用 WebSocket: // 创建 WebSocket 连接 const socket = new WebSocket('ws://localhost...在该事件处理程序中,你可以进行与服务器的通信,例如发送消息。 onmessage:当接收到服务器发送的消息时触发。可以在该事件处理程序中处理接收到的消息。 onclose:当连接关闭时触发。...WebSocket 连接的创建和事件处理程序的监听是异步的,因此确保在连接建立后才发送消息或进行其他操作。...综上所述,以上示例展示了在 JavaScript 中使用 WebSocket 进行实时通信的基本操作。根据需要在事件处理程序中编写适当的逻辑来处理连接、消息、关闭和错误等情况。

    2.2K30

    在 JavaScript 中轻松处理 this

    作者:Dmitri Pavlutin 翻译:疯狂的技术宅 来源:dmitripavlutin 我喜欢 JavaScript 中能够更改函数执行上下文(也称为 this)的特性。...在 Person 函数内部创建新的实例。 agent.getFullName() 返回 person 的全名:'John Smith'。...现在,在方法 getFullName() 中,this 的值是全局对象(浏览器环境中的 window)。...这是在类中绑定 this 的最有效,最简洁的方法。 六. 结论 与对象分离的方法对 this 产生了许多误解。你应该意识到这种影响。...在类中,你可以使用 bind() 方法在构造函数内部手动绑定类方法。 如果你想跳过编写样板代码,那么新的 JavaScript 建议类字段会带来胖箭头方法,该方法会自动将 this 绑定到类实例。

    2.4K20
    领券