我想知道如果我通过 AJAX 请求获得所有脚本(不是供应商)会怎样,以及它有什么好处或坏处。浏览器会缓存响应还是服务器会在每个请求中发送我的脚本,就好像用户从未访问过我的网站一样?
性能方面会比将所有脚本存储在页脚中更好。
我想知道如果我通过 AJAX 请求获得所有脚本(不是供应商)会怎样,以及它有什么好处或坏处。浏览器会缓存响应还是服务器会在每个请求中发送我的脚本,就好像用户从未访问过我的网站一样?
性能方面会比将所有脚本存储在页脚中更好。
通过 AJAX 获取脚本在术语上有点混乱,您可以使用 JavaScript 创建额外的脚本元素以将额外的脚本加载到页面中 - 这也可以异步完成,因此不会阻止页面的呈现或下载。看看下面的例子:
var script = document.createElement('script');
script.src = 'myscript.js';
document.head.appendChild(script);
它创建一个新的脚本元素,分配一个源并将其附加到head
文档的部分。如果将其添加到文档的末尾,则将下载脚本而不会阻止页面加载。
这个简单的想法是所有(我所知道的)前端 JS 依赖管理的基础——请求的页面只下载它需要的资产。您可能听说过诸如 AMD 和 CommonJS 之类的 JS 模块定义,这是一个很大的话题,因此我建议您阅读Addy Osmani 的“使用 AMD、CommonJS 和 ES Harmony 编写模块化 JavaScript”一文。
在回答它们是否会被缓存时,答案是肯定的——一般来说——尽管缓存取决于服务器和用户浏览器上的许多因素。仍然需要在每个后续页面加载时发出单独的请求,这可能比不稳定连接上的一个大的单独文件要慢。决定实际上取决于用户如何访问您的网站,以及最初稍微降低速度是否值得与开发人员创作和维护。您总是可以选择后者,而不是稍后再转向前者。
本质上,<script>
默认情况下是将数据同步拉入您的页面。当脚本放置在头部时,这可能是一个问题,因为它可能会阻止显示您的身体内容。
如果满足特定的次要条件,通常通过 ajax 异步拉入 javascript 可能会派上用场,即大多数用户一开始不会使用您的脚本。假设您有一个页面,如果您以管理员身份登录,则会引入一些额外的脚本来处理您的管理员 UI。或者这样。
但一般来说,ajaxing javascripts 并没有真正的优势,如果您想避免损坏的依赖关系(例如,您的脚本在 jQuery 库之前被拉入),只需坚持您已经最佳的解决方案:将您的 javascripts 作为最后一件事在关闭 body 标签之前。
另请注意,HTML5 草案中有一个新的async 属性,即使不使用 AJAX 魔法,也可以异步获取脚本((因此理论上可以加快加载速度)。一如既往,它仅受现代浏览器支持,将 IE9 和旧版本踢出游戏。
希望能帮助到你!