1

我正在阅读这篇非常有趣的文章,以在我的网站http://css-tricks.com/thinking-async/上实现 js 的异步样式加载。

我的要求是能够以异步方式加载 javascript 文件,然后在文件成功加载后从文件中调用初始化方法。哪种方法是首选方式,即使用经典的异步方式或使用上述文章中描述的 jQuery 的 getscript 方法?使用其中一种的优点或缺点是什么?

编辑:我的看法是:假设我们正在加载一个 js,然后我们想在成功加载 js 文件后回调一个初始化函数。这需要尽快发生,因为应该在页面期间解析和执行整个模块无需等待 document.ready 或 window.onload 即可加载。尝试通过经典的异步方式执行此操作可能会导致处理跨浏览器问题和严格的测试,而如果我们使用 jquery ajax(或 getscript 方法),我们可以避免麻烦。

也在寻找这个解决方案,以异步方式加载单个 js 文件,而不使用任何库。

4

1 回答 1

2

编辑:这个答案很旧,显然现代 jQuery 使用脚本注入

使用经典的异步方式(我假设您的意思是脚本注入或 HTML 5 中的 async 属性)加载 javascript 非常受欢迎,并且是大多数异步加载器(包括 AMD,如 RequireJS)实现它的方式。

JQuery 的 getScript 方法在一天结束时调用 eval,大多数体面的 JS 开发人员倾向于回避。

来自 jQuery 源代码的片段,当前为第 613 行:

( window.execScript || function( data ) {
    window[ "eval" ].call( window, data );
} )( data );

jQuery 确实将窗口对象作为上下文传递,从而节省了一些麻烦并且(可能未经测试)修复了诸如 eval 对垃圾收集的奇怪处理之类的问题。根据您选择的工具,在调试期间跟踪线也可能仍然存在问题。

我是 AMD 方法(使用脚本注入)的大力支持者,它允许在加载依赖项后立即异步调用脚本,并允许您在脚本之间传递模块,而不是依赖于全局命名空间。您可以在RequireJS 站点上获得有关 AMD 加载和异步与同步加载的更多信息,或者查看这个相对简单的要点

于 2012-09-21T05:18:54.930 回答