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

Javascript document.createElement(';img';)v/s new Image()?哪一个要附加到DOM?,javascript,html,Javascript,Html,所以我的问题是(不同于讨论的: 在移动广告中,我会得到impression Tracker,可能是2、3或4。由于网络带宽有限,我希望同时启动所有可用的Tracker,而不是以瀑布式方式启动(请不要问我为什么) 我们一直在使用以下代码: <script type="text/javascript"> var imp_1 = document.createElement("img"); imp_1.src = "tracker url 1 here"; var imp_2 = d

所以我的问题是(不同于讨论的: 在移动广告中,我会得到impression Tracker,可能是2、3或4。由于网络带宽有限,我希望同时启动所有可用的Tracker,而不是以瀑布式方式启动(请不要问我为什么)

我们一直在使用以下代码:

<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> 

var imp_1=document.createElement(“img”);
imp_1.src=“此处的跟踪器url 1”;
var imp_2=document.createElement(“img”);
imp_2.src=“此处的跟踪器url 2”;
var imp_3=document.createElement(“img”);
imp_3.src=“此处的跟踪器url 3”;
var imp_4=document.createElement(“img”);
imp_4.src=“此处的跟踪器url 4”;
更新 所有这些1x1印象跟踪器将指向不同的服务器,因为它们来自不同的归属合作伙伴

我的问题是:

  • 是否总是需要将上述创造性的img变量添加到DOM中?在所有场景中这样做是否都是一种好的做法

  • document.body.appendChild()总是这样吗

  • 如果我改为使用new Image()代替document.createElement(),这里的工作方式会有所不同吗? 我正在为每一个跟踪器设置一个setTimeout(),以便同时启动它们,但是new Image()能够自己完成吗

  • 是否总是需要将上述创造性img变量添加到DOM中? 在所有情况下都这样做是否是一种良好的做法

    您不必将图像添加到DOM中。但是,如果您希望它在页面中可见,那么它必须以某种方式位于DOM中,因为将其添加到DOM中就是它的显示方式。图像可能不会添加到DOM中的一种常见情况是预缓存图像时(使浏览器下载该图像,以便在以后需要时该图像已在缓存中)

    document.body.appendChild()总是这样吗

    document.body.appendChild(img)
    将图像添加到DOM的
    部分的末尾。它将始终这样做。但是,这通常不是您希望图像在DOM中的确切位置,因此可能需要一些其他代码来定位其他位置

    如果我改为使用new Image()代替document.createElement(),这里的工作方式会有所不同吗 正在对每个跟踪器放置一个setTimeout(),以 同时启动它们,但new Image()是否可以这样做 这本身

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


    您无法控制浏览器是否同时请求N个图像,也无法控制浏览器是否现在获取其中一些图像,以及是否在前几个图像完成后获取其中一些图像。浏览器通常对每个原点都有一个连接限制,并且它们一次只会向同一个原点触发如此多的连接。当重新设置限制后,后续请求进入时ached他们会一直排队,直到一些当前打开的请求完成。

    问一个问题/问题。上述问题至少包含两个,如果不是三个的话。“我想同时启动所有可用的跟踪程序,而不是以瀑布式方式”你可以让它们重叠(如果浏览器允许,手机往往会将同时连接的数量限制在比桌面更低的范围内),但你不能让它们同时连接。Re
    new Image
    :根据MDN的说法,它们通常是.MDN(但不是普遍的)非常可靠。我从未听过任何东西表明它们之间存在差异。很久以前,
    newimage()
    是兼容性方面的首选,但这可能在IE5或更早版本中结束。现在,createElement可能是与其他元素构造函数保持一致的首选。但是,使用图像构造函数确实允许在调用中设置高度和宽度,尽管这可能无论如何都应该在CSS中完成。明白了。但我的主要浏览器是Chrome(Android)和Safari(iOS)。基本上使用setTimeout()我想实现这一点。`setTimeout(function(){fire tracker 1 here},0);setTimeout(function(){fire tracker 2 here},0);setTimeout(function(){fire tracker 4 here},0);因此基本上应该触发它们(至少尝试过同时触发?@rishabh-使用多个
    setTimeout(fn,0)
    语句没有任何意义。这与在同一
    setTimeout()中创建所有跟踪器没有任何区别
    。浏览器Javascript是单线程的,因此无论您如何操作,跟踪程序都将按顺序创建。Javascript中没有“纯同步”功能。此外,服务器永远不会同时处理所有请求。明白了。基本上,这些都是不同的公司URL(不同的移动归属公司URL)因此,服务器端点都是不同的。@rishabh-那么不同URL的相对时间应该一点也不重要。如果您只是想让它们现在开始,就没有理由使用任何
    setTimeout()