chromes“appendChild”真的那么慢吗?

2024-01-02

我有一个框架,可以完全使用以下方式生成应用程序的 DOMdocument.createElement and document.appendChild。现在应用程序变得越来越大,我注意到 Chrome 需要比其他浏览器更长的时间来构建 DOM。

因此,我创建了以下性能测试:

window.onload = function(){
    var now = new Date().getTime();
    for(var i = 0; i < 10000; i++){
        document.body.appendChild(document.createElement("div"));
    }
    setTimeout(function(){
        console.log(new Date().getTime() - now);
    },0);

}

这个测试的结果非常有趣:

  • Chrome 16:700+
  • 火狐 9:560
  • IE 9:210
  • 歌剧 11.60:51

Chrome 的完成时间是 Opera 的 14 倍多。 这不仅仅是一个毫无意义的基准!我确实可以在我的应用程序中感受到这种差异。

Chrome 在 DOM 操作上那么慢正常吗? 有办法加快速度吗?

Thanks!


Update 2

Here's a hackish sort of solution, that may be worth a little browser detection. It brings the performance in my testing down to less than 1/10 of what it was.

You can display='none'追加之前的容器,然后再次显示。您可能会得到一点闪光,但这可能比长时间延迟要好。

window.onload = function(){

    var content = String.fromCharCode(Math.floor(Math.random() * 1000));

       // cache it in case it is already set
    var disp = document.body.style.display;

    document.body.style.display = 'none';

    var now = new Date().getTime();

    for(var i = 0; i < 10000; i++){
        document.body.appendChild(document.createElement("div"))
          .appendChild(document.createTextNode( content ));
    }

    setTimeout(function(){
        console.log(new Date().getTime() - now);
        document.body.style.display = disp || ''; // restore it
    },0);
};

这是我所期望的性能提升documentFragment.


Update

运行后修改版 http://jsfiddle.net/rZzYk/3/ of @Esailija的 https://stackoverflow.com/users/995876/esailijajsFiddle 测试包括文档片段,它似乎在 Chrome(或 Opera)中没有任何区别,因此看起来 Chrome 只是速度较慢。


“有什么办法可以加快速度吗?”

我猜如果你使用的话你会获得更好的性能documentFragment,然后使用一个附加到 DOM.appendChild.

window.onload = function(){
    var now = new Date().getTime();

      // create a documentFragment
    var frag = document.createDocumentFragment();

    for(var i = 0; i < 10000; i++){
        frag.appendChild(Div());  // append to the documentFragment
    }

      // append the documentFragment (which is emptied)
    document.body.appendChild(frag);

    setTimeout(function(){
        console.log(new Date().getTime() - now);
    },0);

    function Div(){
        var This = document.createElement("div");
        return This;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chromes“appendChild”真的那么慢吗? 的相关文章

  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何知道Matlab中系统命令执行过程中经过的时间?

    我有一个运行系统脚本的 Matlab 代码 该脚本可能会因命令运行而停止 我想知道是否有一种方法可以让程序知道它是否花费了很长时间并执行其他操作 这是代码 tic status cmdout system iperfcmd The prog
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 是否可以使用“git gc”来打包引用日志对象?

    正如答案所暗示的https stackoverflow com a 32025729 https stackoverflow com a 32025729我已经配置了远程裸仓库 git config gc pruneExpire never
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • jquery从变量中删除html元素

    我将 html 保存在变量中 var itinerary events today html 我有很多 html 和一个按钮我想删除 它的 ID 为 myButton 如何从变量中保存的 html 中删除它 我建议这种方法 var itin
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比

随机推荐

  • 设置页面加载时的滚动位置

    我希望在页面加载时设置页面滚动 我可以通过 div 滚动顶部或仅像素高度来设置它 document ready function document scrollTop 100
  • CSS 动画 - 从中​​心增长(从中心点缩放到整个容器)

    我正在开发一款游戏 我想为一些盒子制作动画 我想要一个盒子从小处开始 然后向外生长 所有边缘同时生长 看起来就像从中心向外生长的效果 到目前为止 我拥有的最好的动画如下 它根据我的需要增加盒子的高度和宽度 但从左侧和顶部开始 我希望它从一个
  • PHP:Excel 无法打开文件,因为文件格式或文件扩展名无效

    当我尝试打开从应用程序下载的 xls 文件时 出现此错误 Excel 无法打开该文件 因为文件格式或文件扩展名无效 验证文件未损坏并且文件扩展名与文件格式匹配 这是我的 php 代码 首先 我上传 xls 文件 if is uploaded
  • 命令 vue init 需要全局插件

    当我尝试vue init webpack test app 我收到以下错误 Command vue init requires a global addon to be installed Please run npm install g
  • fs.readdir 忽略目录

    我想扫描该文件夹 但忽略其中包含的所有文件夹 目录 我在 C folder 中只有 txt文件和其他文件夹 我只想扫描txt文件 并忽略文件夹 app get generatE function req res const logsFold
  • 使用 TFS + git 设置 Xamarin Studio 版本控制

    我正在设置Xamarin with 团队基础服务 git开发 iOS 应用程序 我尝试了许多不同的设置 试图在 MAC 上设置 TFS git 集成 但没有成功 我不断收到其中任何一个的例外情况not authorized or faile
  • 在最新版本的 Notepad++ 中排序不区分大小写

    如何在最新版本的 Notepad 即 gt 6 5 中进行不区分大小写的排序 我知道使用 TextFX 的旧方法 但是 Notepad 现在具有内置的 行操作 但这些似乎区分大小写 您仍然可以使用TextFX 角色Notepad 最新版本中
  • Rails 3 覆盖 Devise 会话控制器

    我需要在登录过程中覆盖 Devise 会话控制器 Rails 3 0 9 Ruby 1 9 2 Devise 1 3 4 我尝试过但没有任何效果 class SessionsController lt Devise SessionsCont
  • Node-webkit 应用程序 - 如何更新它?

    我正在使用 node webkit 为我的学生开发应用程序 并提供一站式解决方案 我需要每月更新一次 node webkit 存档 我有办法做到这一点吗 基本上我每个月只需要替换一个 html 文件 比如 page1 html 我用谷歌搜索
  • 为什么 Java 的序列化比第 3 方 API 慢?

    在处理套接字和序列化对象时 我注意到有一些第三方库可以在 Java 上实现更快的对象序列化 例如Kryo http code google com p kryo and FST http code google com p fast ser
  • “spring-boot-maven-plugin”重新打包后,“Implementation-Version”不在清单中

    在 Maven 中给出这个插件配置pom xml
  • asmx Web 服务、json、javascript/jquery?

    我正在使用 asmx 从数据库检索一些数据 public class TestPage1 public int UserID get set public string UserName get set public string Pass
  • 函数中的引用如何工作?

    首先 我编写了第一个代码示例 但它无法正常工作 我更喜欢第一个示例 但只有第二个示例可以正常工作 我不知道为什么第一个样本没有改变原始数组 但第二个样本却改变了 差别在哪里呢 第一个样本 import heapq def heap sort
  • WPF进度条样式是块状的?

    我在应用程序中使用不确定的进度条 并且得到了一系列水平运行的块的糟糕动画 难道没有更好的风格可用 例如 vista 或 windows 7 吗 您的进度条具有与当前 Windows 主题相对应的样式 如果您在带有 Aero 主题的 Wind
  • 显示:内联边距、填充、宽度、高度

    如果我设置display inline对于任何元素 那么将margin padding width height不影响该元素 是否有必要使用float left or display block or display inline bloc
  • 是否可以在线检索 Dynamics CRM 中的架构更改信息?

    创建自定义实体 添加或更改字段时 有人会对元数据进行开箱即用的更改 如何知道是谁以及何时做的 从 UI 表单创建或修改也是如此 CRM 中的元数据似乎不存储该信息 我认为无法访问您所要求的信息 本地 CRM 数据库中没有此类信息 我想 CR
  • Mercurial:在一个存储库中的分支之间合并一个文件

    当我在 Hg 存储库中有两个分支时 如何仅将一个文件与另一个分支合并 而不合并变更集中的所有其他文件 是否可以仅合并某些文件 而不是整个变更集 警告 虚拟合并 原样 Martin Geisler 推荐 https stackoverflow
  • 在TFS中构建一组特定项目

    有谁知道如何配置 TFS Build 以在解决方案中构建一组项目 我的解决方案有 16 个项目 但对于我的构建定义之一 我希望编译其中的一些项目 我认为最简单的方法是创建一个新的解决方案文件 没有什么可以阻止您拥有引用相同项目 或某个子集
  • Webpack 导入 font-awesome 库时出现问题

    我正在构建一个 React 应用程序 需要导入 font awesome CSS 但我收到一条错误消息 指出该模块无法解析 woff2 文件 下面是我的代码 import React from react import ReactDOM f
  • chromes“appendChild”真的那么慢吗?

    我有一个框架 可以完全使用以下方式生成应用程序的 DOMdocument createElement and document appendChild 现在应用程序变得越来越大 我注意到 Chrome 需要比其他浏览器更长的时间来构建 DO