javascript 中三种动态创建元素的区别以及效率对比

简介: javascript 中动态创建元素的方法一共有三种,这里简单介绍一下,并通过小案例来对比element.innerHTML和document.createElement ()创建元素效率那个快。

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域新星创作者。😜
  • 💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥

前言

javascript 中动态创建元素的方法一共有三种,这里简单介绍一下,并通过小案例来对比element.innerHTML和document.createElement ()创建元素效率那个快。

三种动态创建元素区别

1.document.write ()
2.element.innerHTML
3.document.createElement ()

区别
1.document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘。(很少用到)
2.innerHTML是将内容写入某个 DOM 节点,不会导致页面全部重绘。

element.innerHTML和document.createElement ()创建元素效率对比

1.element.innerHTML

    <div class="inner"></div>
    <script>
        var d1 = +new Date();
        var inner = document.querySelector(".inner");
        for (var i=0;i<=1000;i++){
            inner.innerHTML += '<a href="#">百度</a>';
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    </script>

在这里插入图片描述
由图可以看出,我们通过innerHTML拼接字符串创建1000个元素花费了800多毫秒,这样的效率很差。
但是我们可以避免拼接字符串的方式,因为大量拼接字符串本身就是一个耗时耗内存的操作,可以把要创建的元素放进一个数组中,然后用数组的join()方法将数组元素拼接为字符串,再通过innerHTML添加。

    <div class="inner"></div>
    <script>
        var d1 = +new Date();
        var inner = document.querySelector(".inner");
        var arr = [];
        for (var i=0;i<=1000;i++){
            arr.push('<a href="#">百度</a>')
        }
        inner.innerHTML += arr.join('');
        var d2 = +new Date();
        console.log(d2 - d1);
    </script>

在这里插入图片描述
看这样只有2毫秒,效率甩凭借字符串几条街。

2.document.createElement()

为了对比明显,我们将循环数量加到十万,先看innerHTML通过数组拼接的效率

    <div class="inner"></div>
    <div style="border: 1px solid red; height: 2px;width: 100px;"></div>
    <script>
        var d1 = +new Date();
        var inner = document.querySelector(".inner");
        var arr = [];
        for (var i=0;i<=100000;i++){
            arr.push('<div style="border: 1px solid red; height: 2px;width: 100px;"></div>')
        }
        inner.innerHTML += arr.join('');
        var d2 = +new Date();
        console.log(d2 - d1);
    </script>

在这里插入图片描述

然后我们看同样情况下document.createElement()的效率

    <div class="create"></div>
    <script>
        var d1 = +new Date();
        var create = document.querySelector(".create");
        for (var i=0;i<=100000;i++){
            var div = document.createElement('div');
            div.style.width = '100px';
            div.style.height = '2px';
            div.style.border = '1px solid red'
            create.appendChild(div);
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    </script>

在这里插入图片描述

很明显,依旧是innerHTML通过数组方式创建元素的效率依旧高于document.createElement()的效率。

总结

1.innerHTMT创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂。
2.createElement()创建多个元素效率稍低一点点,但是结构更清晰。
==总结:不同浏览器下, innerHTML效率要比 createElement 高==

结语

陆陆续续写了很多前端基础知识和小demo了,这些对初学者都很有用,赶紧关注一手学习吧!

相关文章
|
7月前
|
JavaScript 算法 开发者
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
本文介绍了类似电脑桌面通过鼠标选择多个图标的实现原理。主要通过监听mousedown、mousemove和mouseup事件,动态调整选择框大小并计算与元素的重叠情况。提供了角重叠和相交重叠的检测方法,并附有示例代码和在线演示链接,方便开发者参考与测试。
263 56
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
273 1
|
10月前
|
JavaScript 前端开发 容器
this、self、window、top 在 JavaScript 中的区别深入研究
在 JavaScript 开发中,`this`、`self`、`window` 和 `top` 是四个常用的概念。`this` 指向当前执行上下文的对象,其值取决于函数调用方式;`self` 在全局作用域中等同于 `window`,常用于 Web Workers;`window` 代表浏览器窗口,是全局变量的容器;`top` 指向最顶层窗口,用于判断是否在框架中。理解这些概念有助于编写健壮的代码。
330 1
this、self、window、top 在 JavaScript 中的区别深入研究
|
8月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
222 1
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
287 2