我正在阅读这篇非常有趣的文章,用于在我的网站http://css-tricks.com/thinking-async/上实现js的异步样式加载。
我的要求是能够以异步方式加载javascript文件,然后在成功加载后从文件中调用初始化方法。哪种方法是首选方式,即使用经典异步方式或使用jQuery的getscript方法,如上文所述?使用一个优于另一个的优点或缺点是什么?
编辑:我的看法是:假设我们正在加载一个js然后我们想在成功加载js文件后回调一个初始化函数。这需要尽快发生,因为整个模块应该被解析并且在页面加载期间执行而无需等待document.ready或window.onload。尝试通过经典的异步方式执行此操作可能会导致处理跨浏览器问题和严格的测试,而如果我们使用jquery ajax(或getscript方法),我们可以避免麻烦。同时寻找此解决方案,以异步方式加载单个js文件,而不使用任何库。
答案 0 :(得分:2)
编辑:这个答案很旧,显然现代jQuery使用脚本注入
使用经典异步方式加载javascript(我假设你的意思是脚本注入或HTML 5中的async属性)是非常被接受的,并且是大多数异步加载器(包括AMD,如RequireJS)实现它的方式。 / p>
JQuery的getScript方法在一天结束时调用eval,大多数像样的JS开发人员都倾向于回避。
来自jQuery源代码的片段,目前为第613行:
( window.execScript || function( data ) {
window[ "eval" ].call( window, data );
} )( data );
jQuery确实传递了窗口对象作为上下文,省去了一些麻烦和(可能是未经测试的)修复问题,例如eval奇怪的垃圾收集处理。在调试过程中跟踪线路可能仍有问题,具体取决于您选择的工具。
我是AMD方法(使用脚本注入)的主要支持者,它允许在加载依赖项后立即异步调用脚本,并允许您在脚本之间传递模块而不是依赖于全局命名空间。您可以在RequireJS site获取有关AMD加载和异步与同步加载的更多信息,或者查看此relatively simple gist。