2014-03-26 20 views
1

我用下面的方法加载外部HTML文件到一个DIV:在后台线程中将HTML加载到Div中?

var docName = name + ".html"; 
    $("#displayPanel").load(docName); 

然后我打电话getScript加入的JavaScript文件控制的是HTML文件,像这样:

docName = name + ".js"; 
    $.getScript(docName, function(data, textStatus, jqxhr) { 

     if (textStatus==="success") { 
      lightItUp(); //load method 
     } 
    }); 

它加载正确。

问题是,对于大型HTML/JS文件,DOM被冻结,用户交互被禁用,直到加载完成。是否有可能将div加载到“后台线程”并收到完成通知?

+1

听起来像[Web Worker]的工作(https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers)。您可以让Web Worker解析HTML,然后使用消息批量将HTML注入父网页 – CodingIntrigue

+1

我相信jQuery.getScript()是异步的,并在“后台线程”中加载脚本。 – blue

+1

你是否设置全局ajax同步或什么? '.getScript()'不应该冻结用户界面,看起来问题来自'lightItUp()'而不是显然你错误地解释了你看到的行为。顺便说一句,你不需要检查'textStatus',你已经在成功回调中设置了代码。编辑:我不知道你期望有关'textStatus'检查 –

回答

1

不知道我是否正确理解你的问题。

如果您想使div在后台线程中加载并在完成时收到notif,您可以先设置div display:none,并在回调中使其为display:block

$("#aDivInDisplayPanel").load(docName, function() { 
    //load completed. 
    $(this).fadeIn(); 
}); 
1

您是否考虑过使用HTML5 Web Workers?

http://www.w3schools.com/html/html5_webworkers.asp

当在HTML页面中执行脚本,直到脚本完成的页面不响应 。

网络工作者是一个JavaScript,它独立于其他脚本运行在后台, ,而不会影响页面的性能 。你可以继续做任何你想做的事情:点击, 选择东西等,而网络工作者在后台运行。

+1

仅供参考,与W3Schools的链接通常因以下原因而不被接受:http://www.w3fools.com/ - 您应该链接到更有声誉的来源,例如MDN:https://developer.mozilla.org/en- US/docs/Web/Guide/Performance/Using_web_workers – CodingIntrigue

+0

我将重点放在板上。 HTML5 Rocks如何:http://www.html5rocks.com/en/tutorials/workers/basics/ – James

+0

这也是一个非常好的资源,虽然博客信息可以很快过时。 – CodingIntrigue

1

除非你让AJAX同步不知何故,上面的代码不能,除非浏览器需要很长的时间来处理HTML(IE 6.6可能需要1-2分钟来解析HTML载入这种方式)阻止用户界面或你在lightItUp()有一些需要很长时间的东西。

下一步是启动浏览器的性能工具并检查时间。您在上面发布的代码看起来是正确的,不应该引起您所描述的内容。

相关问题