document.createElement(' img')v / s new Image()?哪一个要附加到DOM?

时间:2015-08-03 06:51:05

标签: javascript html

所以我的问题是这个(与讨论here不同: 在移动广告中,我会得到印象跟踪器,可能是2,3或4.由于网络带宽有限,我想同时发射所有可用的跟踪器,而不是以瀑布方式(请不要)问我为什么)。

我们一直在使用这段代码:

<script type="text/javascript"> 
var imp_1 = document.createElement("img"); 
imp_1.src = "tracker url 1 here"; 
var imp_2 = document.createElement("img"); 
imp_2.src = "tracker url 2 here"; 
var imp_3 = document.createElement("img"); 
imp_3.src = "tracker url 3 here"; 
var imp_4 = document.createElement("img"); 
imp_4.src = "tracker url 4 here"; 
</script> 

更新 所有这些1x1展示跟踪器都将指向不同的服务器,因为它们来自不同的归属合作伙伴。

我的问题是:

  1. 是否始终需要将以上广告素材img vars添加到DOM?在所有情况下都这样做是不是很好?

  2. document.body.appendChild()总能做到这一点吗?

  3. 如果我使用new Image()代替document.createElement(),那么这里的工作方式会有所不同吗? 我正在努力对每个跟踪器放置一个setTimeout()来同时触发它们,但是新的Image()能够自己做吗?

1 个答案:

答案 0 :(得分:2)

  

是否始终需要将以上创意img vars添加到DOM?   在所有情况下都这样做是不是很好?

您不必将图像添加到DOM。但是,如果您希望它在页面中可见,那么它必须以某种方式在DOM中,因为将它添加到DOM是如何显示的。图像可能未添加到DOM的一种常见情况是在预先处理图像时(导致浏览器下载图像,以便稍后需要时它已经在缓存中)。

  

document.body.appendChild()总能做到这一点吗?

document.body.appendChild(img)会将图片添加到DOM的<body>部分的末尾。它总会这样做。但是,通常这不是您想要DOM中的图像的位置,因此可能需要在其他地方定位位置的其他代码。

  

如果我改为使用new Image()代替document.createElement(),那么这里的工作方式会有所不同吗?我曾是   致力于对每个跟踪器设置setTimeout()   同时解雇它们,但新的Image()能够做到   这本身就是什么?

您可以使用new Image()document.createElement("img")。要么创建一个相同的图像对象。我不清楚您对setTimeout()的引用是什么。图像标签没有任何内置的定时功能。如果您希望将来某个特定时间加载图片,则可能需要使用setTimeout()来调用该事件,以便在将来的特定时间内使用。

您无法控制浏览器是否同时请求N个图像,或者是否现在可以获取其中的一些图像,并且在前几个图像完成之后它们中的一些图像。浏览器通常具有每个来源的连接限制,并且它们只会同时向同一起源发起这么多连接。当后续请求在达到限制后进入时,它们将排队,直到某些当前打开的请求完成。