8

我正在缩小 grails 应用程序中的 js 和 css 文件。我最初的计划是使用资源插件来缩小资源(还查看了 jawr 和 performance-ui,但这些天资源似乎是事实上的标准)。

Resources 可以很容易地使用 YUI 缩小单个 CSS 文件,但是我们有超过 40 个 JS 文件,我们想将它们连接成一个文件(并且文件也需要以正确的顺序连接)我没有看到任何暗示 Resources 支持开箱即用的东西,这些是我们迄今为止计划的方法:

  1. 添加新的 grails taglib 以连接 js 和 css 文件以创建一个 js 和一个 css 文件并使用资源插件缩小。一个简单的实现将意味着每次提供页面时 yui-minify 都会运行(!!)所以我们需要以某种方式引入缓存。

  2. 使用 BuildConfig 的 grails.war.resources 来缩小 js 和 css。这将解决缓存问题,因为资源只会在构建时构建和缩小,但需要我们使用 grails run-war 在本地进行测试,因此任何与缩小相关的错误都不会在开发后期被捕获循环。

这一定是一个相当普遍的问题。其他人在做什么?想听听我可以使用的任何其他方法或最佳实践。

4

1 回答 1

1

You can make all your resources using the same bundle, with this, you will have only one merged js. Example:

main {
  resource id: 'mainjs', url: 'js/main.js'
  defaultBundle: 'mybundle'
}

second {
  resource id: 'secondjs', url: 'js/second.js'
  defaultBundle: 'mybundle'
}

According to the docs:

The "bundle" mapper adds together resources of the same type to reduce the number of files your client pages request.

The "bundle" mapper looks at the value of the "bundle" property on resources and if found, will add the resource to a new synthetic aggregated resource.

This aggregated resource is itself processed through mappers, so it is subject to the other optimisations you apply to the kind of resource the bundle is aggregating.

Bundles are always in the base directory of the static resources folder - which means references to files inside the bundle must be re-adjusted so they continue to refer to the same files. This is made possible for CSS files by the csspreprocessor and cssrewriter mappers.

于 2013-03-14T12:50:31.240 回答