如何异步运行多个内部javascript代码而不阻塞?

如何异步运行多个内部javascript代码而不阻塞?,javascript,asynchronous,Javascript,Asynchronous,我有一个由php脚本创建的网页,加载时将包含0到N个div元素。对于每个div,我运行一个特定的javascript代码来处理与该div相关的数据。 这段代码所做的一件事是创建一个img元素,并将其“src”属性设置为一个已知(但可变)大小的图像的特定url。这是为缓存而做的。这些图像不应该显示在初始页面布局中,但每个图像都应该在特定的用户输入(鼠标悬停)后显示,因此我正在尝试缓存这些图像,以便它们不会花费很长时间出现 当然,图像的加载需要时间——每次图像加载代码块都会导致高加载时间。例如: &

我有一个由php脚本创建的网页,加载时将包含0到N个div元素。对于每个div,我运行一个特定的javascript代码来处理与该div相关的数据。 这段代码所做的一件事是创建一个img元素,并将其“src”属性设置为一个已知(但可变)大小的图像的特定url。这是为缓存而做的。这些图像不应该显示在初始页面布局中,但每个图像都应该在特定的用户输入(鼠标悬停)后显示,因此我正在尝试缓存这些图像,以便它们不会花费很长时间出现

当然,图像的加载需要时间——每次图像加载代码块都会导致高加载时间。例如:

<div id="i1">
<script type="text/javascript">
   /* run code relevant to 'i1', and amongst other things load some image 
      into a detached img element for later use. let's call this code 'bcode' */
</script>
<div id="i2">
<script type="text/javascript">
   /* run 'bcode' for i2 */
</script>

<div id="...and so on">

/*运行与“i1”相关的代码,并加载一些图像
安装到分离的img元件中,供以后使用。让我们将此代码称为“bcode”*/
/*为i2运行“bcode”*/
为了让代码异步运行,我尝试了以下方法:

<div id="i1">
(function() {
   var asyncScriptElement = document.createElement('script');
   asyncScriptElement.async = true;
   var scriptText = document.createTextNode ('here I put all of the relevant "bcode"');
   asyncScriptElement.appendChild (scriptText);
   document.getElementById ('Img_1_2').appendChild (asyncScriptElement);
 }()); 

(功能(){
var asyncScriptElement=document.createElement('script');
asyncScriptElement.async=true;
var scriptText=document.createTextNode('这里我放置了所有相关的“bcode”);
asyncScriptElement.appendChild(脚本文本);
document.getElementById('Img_1_2').appendChild(asyncScriptElement);
}()); 
它在FF下工作(仍然不够快),在IE下显然不工作。 你对如何实现这一目标有什么建议吗?
还要注意的是,我实际上不需要从另一个外部php获得任何东西(即使用XMLHttpRequest)——我获得了这个php中需要的所有数据。我只需要一种方法来解除图像加载的阻塞…

我会将您的脚本包装在一个HTML页面(最终由PHP生成)中,并将其作为iframe下载,以确保任何浏览器都具有相同的行为


还有其他更优雅的选择,有利弊;您可以找到可行选项的比较、浏览器兼容性和漂亮的决策树。

我会将您的脚本包装在一个HTML页面(最终由PHP生成)中,并将其作为iframe下载,以确保任何浏览器都具有相同的行为


还有其他更优雅的选择,有利弊;您可以找到可行选项、浏览器兼容性和良好决策树的比较。

Javascript是单线程的,始终同步运行


有一些浏览器扩展可以解决这个问题,特别是Mozilla中的Javascript是单线程的,并且总是同步运行


有一些浏览器扩展可以解决这个问题,值得注意的是,Mozilla中的waitfor/和构造的概念看起来需要apollo库提供的waitfor/和构造:

看起来需要apollo库提供的waitfor/和构造:

我能从iFrame中的js内部引用外部文档的js变量吗?不。您可以在iframe src中包含其他参数,并通过PHP或JS在iframe中使用这些参数。@Yuval,@ibz,如果您的iframe位于同一域(同一来源)您可以完全访问这两个窗口对象中的所有内容。我是否能够从iframes中的js内部引用外部文档的js变量?不。您可以在iframe src中包含其他参数,并在iframe中通过PHP或JS使用这些参数。@Yuval,@ibz如果您的iframe位于同一个域(同一个原点),则您可以完全访问两个窗口对象中的所有内容。是的,但是有许多方法可以在同一页面中并行执行不同的Javascript代码。Mozilla Javascript Workers和HTML5 Web Workers是我们希望在不久的将来能够采用的伟大解决方案。这并不完全准确,但我离题了。没错,但有很多方法可以在同一页面中并行执行不同的Javascript代码。Mozilla Javascript Workers和HTML5 Web Workers是我们有望在不久的将来采用的伟大解决方案。这并不完全准确,但我离题了。