grails specifying javascript library

grails specifying javascript library

本文关键字:library javascript specifying grails      更新时间:2023-09-26

在我的grails应用程序中,我们使用jquery。我在必要的页面上包含 jquery

<g:javascript library="jquery"/>

如果我们决定更改JavaScript库,我需要更新每个页面。我知道我可以将其包含在布局中,但并非每个页面上都需要库,因此这似乎很浪费。

在grails中是否有一种典型的方法可以在一个地方指定默认的javascript库应该是什么,然后只包含默认的javascript库,而不在每个页面上指定它是jquery(或任何它是什么)?

由于大多数浏览器都大量缓存 JavaScript 库之类的东西,因此将库包含放入布局中可能比将其放在每个单独的页面中更好。浏览器所做的大量缓存意味着用户只会从服务器为您的整个站点(或至少他们的浏览会话)加载一次库,并且通过在布局中处理它,您可以大大减少维护负载(您提到了)

一般来说,你的JavaScript库应该是高度缓存的,在许多情况下,最好从高度使用的CDN中提取它们,比如谷歌的。只有当 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。