JavaScript中延迟加载的最佳实践

JavaScript中延迟加载的最佳实践,javascript,jquery,ajax,lazy-loading,Javascript,Jquery,Ajax,Lazy Loading,当HTML同时包含标签和对这些脚本的函数调用时,动态加载HTML内容并将其注入页面的最佳方法是什么 考虑这种方法简单,我将考虑jQuery: <script> $.ajax({ url: 'http://...', success: function(html) { $("body").append(html); } }); </script> 假设返回的html包含如下内容: <script src="some_scrip

当HTML同时包含标签和对这些脚本的函数调用时,动态加载HTML内容并将其注入页面的最佳方法是什么

考虑这种方法简单,我将考虑jQuery:

<script>
$.ajax({
    url: 'http://...',
    success: function(html) {
        $("body").append(html);
    }
});
</script>
假设返回的html包含如下内容:

<script src="some_script.js"></script>
<script>
some_function(); // function defined in some_script.js
</script>
由于某些_函数是在某些_script.js中定义的,因此它只有在加载某些_script.js后才可用,但通常会在加载某些_script.js之前执行,从而导致错误

显然,有一些解决方案可以克服这个问题,但在这种情况下,最佳做法是什么?应该使用诸如RequireJS之类的库吗


上面的例子是我使用的模式的一个结果:我有一个组件,只有在使用它时,我才会加载它。我调用Ajax来检索HTML和所需的脚本。还可能需要很多脚本,将它们作为一组标记写入HTML模板比通过JavaScript加载更容易。这也是首选的,因为脚本URL可能在应用程序内部生成,因此普通JS脚本可能不知道绝对脚本URL。

实际上是Safari和Internet Explorer其他人很可能不会执行通过Ajax作为安全措施注入的


我可以推荐的是,当您需要一个相当大的库,但实际使用web应用程序并不需要它时,最好将包含该库的.js文件加载到文档中,然后使用库中定义的所有属性和方法。将回调监听器连接到脚本加载程序,并执行回调中的所有代码,而不是外部.js文件本身。

由于JavaScript的动态性,它可能会变得非常复杂,我建议不要只在执行某些函数时加载脚本,您可以使用Require.JS之类的工具来更好地控制加载的时间。