我需要在我的网页上包含一个非现场javascript文件,但我不希望它能够影响我网站的性能,以防javascript所在的服务器关闭或没有响应。
我想知道的是,是否可以使用javascript制作某种包装函数,以确保托管异地javascript的页面在可接受的时间范围内响应。
我考虑过将“defer”属性添加到我包含javascript的位置,但据我所知,这仍然会在页面的其余部分加载后暂停网站。
如果在javascript中无法做到有什么好的选择吗?
我的网站是C#asp.net。
答案 0 :(得分:4)
如果异地JavaScript是自包含的 - 也就是说,在你的脚本能够正常运行之前,你的脚本都没有依赖它来加载 - 解决方案可以非常简单。这个例子是使用jQuery,但任何库(甚至没有库)都是可行的:
<div id="script-placeholder"></div>
<script type="text/javascript">
$(function(){
$('.script-placeholder').append('<script type="text/javascript" src="http://site.com/file.js"></scr'+'ipt>');
});
</script>
这将等到整个页面加载完毕,然后在空的占位符DIV中插入一个新的<script>
块,这将触发浏览器尝试下载脚本。如果远程服务器响应缓慢或关闭,脚本仍将花费很长时间或超时,但它不会阻止用户在等待时使用页面的 rest 。 / p>
答案 1 :(得分:1)
将脚本放在页面底部,这至少会将其推迟到其他所有内容都加载完毕后。
根据您的需要,您甚至可以通过xhr(挂钩到实际窗口加载事件以等待图像)之后完全加载它,然后通过eval动态注入内容( )响应文本。您需要在您的网站上使用代理以避免跨域限制,这可能会破坏您的目的,我不确定。
详情请见此处:http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/
答案 2 :(得分:0)
有趣的问题。您可以使用带回调的ajax并执行某种超时,如果它尚未加载则执行某些操作。是否有特殊原因依赖于另一个网站?将它直接复制到您的网站似乎要简单得多。