通过AJAX获取Javascript

时间:2013-07-22 12:14:45

标签: javascript ajax caching

我想知道如果我通过AJAX请求获取所有脚本(不是供应商)以及它的好坏之类的内容。浏览器是否会缓存响应,或者服务器会在每个请求中发送我的脚本,就好像用户从未访问过我的网站一样?

性能方面会比将所有脚本存储在页脚中更好。

2 个答案:

答案 0 :(得分:1)

通过AJAX获取脚本有点混乱,您可以使用JavaScript创建额外的脚本元素以将额外的脚本加载到页面中 - 这也可以异步完成,因此它不会阻止呈现或下载页。请查看以下示例:

var script = document.createElement('script');
script.src = 'myscript.js';
document.head.appendChild(script);

它创建一个新的脚本元素,分配一个源并将其附加到文档的head部分。如果将其添加到文档末尾,则会下载脚本而不会阻止页面加载。

这个简单的想法是所有(我所知道的)前端JS依赖关系管理的基础 - 所请求的页面只下载它需要的资产。您可能听说过JS模块定义,例如AMD和CommonJS,这是一个很大的主题,因此我建议您阅读Addy Osmani's "Writing Modular JavaScript With AMD, CommonJS & ES Harmony" article

在回答它们是否会被缓存时,答案是肯定的 - 一般来说 - 虽然缓存取决于服务器和用户浏览器上的许多因素。仍然需要在每个后续页面加载上进行单独的请求,这可能比在片状连接上的一个大的单个文件慢。这个决定实际上取决于用户如何访问您的网站,以及与开发人员创作和维护相比,最初的速度是否有所降低。你总是可以选择后者而不是后来转移到前者。

答案 1 :(得分:1)

实质上,<script>默认情况下会同步将数据拉入您的网页。当脚本放在头部时,这可能是一个问题,因为它可能是一个显示你的身体内容的阻止者。

如果满足特定的小条件,ajax异步拉入javascript通常会很方便,即大多数用户不会首先使用您的脚本。假设您有一个页面,如果您以管理员身份登录,则会引入一些额外的脚本来处理您的管理UI。或者这样。

但总的来说,在jakucrijj中没有真正的优势,如果你想避免破坏依赖(例如,你的脚本比你的jQuery库更早被拉入),只需坚持你已经最优的解决方案:将你的javascripts放在关闭身体标签的最后一件事。

另请注意HTML5草案中有新的async attribute,即使不使用AJAX魔法,也可以异步获取脚本((因此可以加速理论加载)。但是,它始终只支持现代浏览器,将IE9和更老的游戏踢出游戏。

希望它有所帮助!