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