通过AJAX获取Javascript

通过AJAX获取Javascript,javascript,ajax,caching,Javascript,Ajax,Caching,我想知道,如果我通过AJAX请求获得所有脚本(而不是供应商),会发生什么,以及它的好坏。浏览器会缓存响应还是服务器会将我的脚本和每个请求一起发送,就好像用户从未访问过我的站点一样 性能方面,这比将所有脚本存储在页脚中要好。通过AJAX获取脚本有点混乱,您可以使用JavaScript创建额外的脚本元素,将额外的脚本加载到页面中,这也可以异步完成,这样就不会阻止页面的呈现或下载。以以下内容为例: var script = document.createElement('script'); scrip

我想知道,如果我通过AJAX请求获得所有脚本(而不是供应商),会发生什么,以及它的好坏。浏览器会缓存响应还是服务器会将我的脚本和每个请求一起发送,就好像用户从未访问过我的站点一样


性能方面,这比将所有脚本存储在页脚中要好。

通过AJAX获取脚本有点混乱,您可以使用JavaScript创建额外的脚本元素,将额外的脚本加载到页面中,这也可以异步完成,这样就不会阻止页面的呈现或下载。以以下内容为例:

var script = document.createElement('script');
script.src = 'myscript.js';
document.head.appendChild(script);
它创建一个新的脚本元素,分配一个源代码,并将其附加到文档的
部分。如果这被添加到文档的末尾,那么脚本将在没有阻止页面加载的情况下被下载

这个简单的想法是所有(据我所知)前端JS依赖关系管理的基础,即请求的页面只下载它需要的资产。你可能听说过JS模块定义,比如AMD和CommonJS,这是一个巨大的主题,所以我建议你阅读一下

对于是否缓存它们,答案是肯定的——一般来说——尽管缓存取决于服务器和用户浏览器上的许多因素。单独的请求仍然需要在随后的每个页面加载上进行,这可能比在一个脆弱的连接上加载一个大的单独文件要慢。这个决定实际上取决于用户如何访问您的站点,以及与开发人员的创作和维护相比,最初稍微降低速度是否值得。在移动到前者之前,您始终可以选择后者。

本质上,
默认情况下是同步将数据拉入页面。当脚本放在头部部分时,这可能是一个问题,因为它可能是显示身体内容的拦截器

如果满足特定的次要条件(即大多数用户一开始不会使用您的脚本),通过ajax异步引入javascript通常会很方便。假设您有一个页面,如果您以管理员身份登录,则会引入一些附加脚本来处理您的管理员UI。或诸如此类

但是一般来说,ajaxing javascripts没有什么真正的优势,如果您想避免破坏依赖关系(例如,您的脚本比jQuery库更早地被拉入),只需坚持您已经优化的解决方案:将Javascript放在关闭body标记之前的最后一件事

请注意,HTML5草案中还有一个新功能,可以异步获取脚本(因此理论上可以加快加载速度),即使不使用AJAX magic。尽管如此,它只受现代浏览器的支持,将IE9和更旧版本踢出了游戏

希望有帮助