Javascript性能问题
我很好奇,因为我正在维护一个用Javascript编写的3d引擎Javascript性能问题,javascript,performance,dom,Javascript,Performance,Dom,我很好奇,因为我正在维护一个用Javascript编写的3d引擎 哪个更快,parseInt(el.style.width)还是el.offsetWidth 我应该写parseInt(el.offsetWidth) 哪个更快,getElementById()还是childNodes[] 哪个更快,newimage()还是appendChild('img') 请给我一个精彩的Javascript性能指南的链接 谢谢大家! 这里有几个关于Javascript性能的网站 真的很老的网站…但提供了一些见
parseInt(el.style.width)
还是el.offsetWidth
parseInt(el.offsetWidth)
getElementById()
还是childNodes[]
newimage()
还是appendChild('img')
谢谢大家! 这里有几个关于Javascript性能的网站 真的很老的网站…但提供了一些见解 参考书
这里有几个关于Javascript性能的网站 真的很老的网站…但提供了一些见解 参考书
您在这里有点困惑 1.parseInt(el.style.width)和el.offsetWidth哪个更快
提供由javascript或标记中的样式属性设置的宽度el.style.width
提供元素的当前宽度(包括边框)offsetWidth
parseInt(el.offsetWidth)
否,offsetWidth
返回一个数字。但无论何时使用,都应该指定基数
3.哪个更快,getElementById()
还是childNodes[]?
如果您得到了父节点,请使用子节点
。如果你有id,你可以使用byId。性能将取决于浏览器()
4.哪个更快,newimage()
还是appendChild('img')
如果要强制浏览器下载资源,请使用new Image()
。如果要将图像添加到布局中,请使用appendChild(image\u元素)
5.请给我一个链接,指向精彩的Javascript性能指南
我宁愿留下这个链接:,让你做A/B测试 你在这里有点困惑 1.parseInt(el.style.width)和el.offsetWidth哪个更快
提供由javascript或标记中的样式属性设置的宽度el.style.width
提供元素的当前宽度(包括边框)offsetWidth
parseInt(el.offsetWidth)
否,offsetWidth
返回一个数字。但无论何时使用,都应该指定基数
3.哪个更快,getElementById()
还是childNodes[]?
如果您得到了父节点,请使用子节点
。如果你有id,你可以使用byId。性能将取决于浏览器()
4.哪个更快,newimage()
还是appendChild('img')
如果要强制浏览器下载资源,请使用new Image()
。如果要将图像添加到布局中,请使用appendChild(image\u元素)
5.请给我一个链接,指向精彩的Javascript性能指南
我宁愿留下这个链接:,让你做A/B测试 我的建议是:自己进行基准测试。直观地说,我猜el.offsetWidth更快(因为它不需要像el.style.width那样遍历整个css规则集),而childNodes[]更快(因为它不需要像getElementbyId那样遍历整个dom)。但我真的不知道,这就是为什么我把它作为注释而不是答案。@Ben-
getElementbyId
不会遍历DOM。它是元素的内存中查找。这样的速度非常快。同意Ben的观点,对其进行基准测试。AFAIK el.offsetWidth以运行时计算为准。您可能应该交换一些内存并缓存所有结果。另外,我建议使用canvas,因为DOM速度慢且内存不足。@patrick dw-理论上是的。我不同意你的看法看看我的答案。我的建议是:自己做基准测试。直观地说,我猜el.offsetWidth更快(因为它不需要像el.style.width那样遍历整个css规则集),而childNodes[]更快(因为它不需要像getElementbyId那样遍历整个dom)。但我真的不知道,这就是为什么我把它作为注释而不是答案。@Ben-getElementbyId
不会遍历DOM。它是元素的内存中查找。这样的速度非常快。同意Ben的观点,对其进行基准测试。AFAIK el.offsetWidth以运行时计算为准。您可能应该交换一些内存并缓存所有结果。另外,我建议使用canvas,因为DOM速度慢且内存不足。@patrick dw-理论上是的。我不同意你的看法请看我的答案。@Hello71-A/B测试是一种在有两种选择和一个变量的情况下做出营销决策的实验方法。在本文中,它指的是根据性能在两段代码之间做出决定的方法。关于IE和…ById()
的有趣信息。您知道它是否真的在遍历DOM以获取元素吗?我很好奇它在复杂HTML结构上的性能。我一直以为这会很快。我以后可能会做一些测试。@patrick dw-我已经在更新了测试。现在它有1000多个元素和3层深。结果实际上更糟。getById在IE 6-7上的速度慢了50倍。我不知道为什么会这样。我也很惊讶,但它可能不仅仅是IE中的一个查找。有10000多个元素,它就变成了500倍的差异。对我来说似乎是O(n)@glambalazs-谢谢更新的jsperf!我想当然错了。这太疯狂了,真的是个好消息