在我的 grails 应用程序中,我们使用 jquery。我在必要的页面上包含 jquery
<g:javascript library="jquery"/>
如果我们决定更改 javascript 库,我需要更新每个页面。我知道我可以将它包含在布局中,但并不是每个页面都需要该库,所以这似乎很浪费。
grails 中是否有一种典型的方法可以在一个地方指定默认的 javascript 库应该是什么,然后只包含该默认库而不在每个页面上指定它是 jquery(或其他任何内容)?
在我的 grails 应用程序中,我们使用 jquery。我在必要的页面上包含 jquery
<g:javascript library="jquery"/>
如果我们决定更改 javascript 库,我需要更新每个页面。我知道我可以将它包含在布局中,但并不是每个页面都需要该库,所以这似乎很浪费。
grails 中是否有一种典型的方法可以在一个地方指定默认的 javascript 库应该是什么,然后只包含该默认库而不在每个页面上指定它是 jquery(或其他任何内容)?
由于大多数浏览器会大量缓存 JavaScript 库之类的内容,因此将库包含在布局中可能比将其放在每个单独的页面中更好。浏览器执行的大量缓存意味着用户只会为整个站点(或至少是他们的浏览会话)从服务器加载一次库,并且通过在布局中处理它,您将大大减少维护负载(您提到)
一般来说,你的 JavaScript 库应该是高度缓存的,并且在许多情况下,最好从使用率很高的 CDN 中提取它们,例如Google 的. 仅当 CDN 提供商出现故障且浏览器无法访问其库时,才应请求您的“本地”(即来自您的服务器)库。(看看HTML5Boilerplate 项目是如何做到的)
正因为如此,我不会担心将库放入布局页面会产生非常小的性能损失。即使你没有为你的库使用一个使用良好的 CDN,人们今天实际使用的任何浏览器也只会加载你的 JavaScript 库一次(它获得的第一个包含它的页面),其余的只会使用它的缓存副本您网站上的页面。
所以,简而言之,把它放在布局页面中,不用担心。它只会在第一个页面加载时被请求,并且将来自所有后续加载的缓存,并且您的代码库将是 DRYer。
您还可以创建一个外部 JS 文件来选择性地加载您指定的文件。像这样的东西:
//FILENAME: jselector.js
if ( [conditions] ) {
var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename); //reference your Jquery file here
document.getElementsByTagName("head")[0].appendChild(fileref);
}
jselector.js
然后在需要它的每个页面中添加对该文件的引用 ( )。
<script type="text/javascript" src="jselector.js"></script>
如果你的 jQuery 文件发生变化,你更新这个单一的外部 JS ( jselector.js
),所有的页面都会自动指向新的 jQuery。