Playframework 2.0 Play Framework 2.0.4 GZip
我希望Play将Gzip JS和CSS发送到浏览器。 在Build.scala中,我添加了Playframework 2.0 Play Framework 2.0.4 GZip,playframework-2.0,gzip,Playframework 2.0,Gzip,我希望Play将Gzip JS和CSS发送到浏览器。 在Build.scala中,我添加了 val gzipAssets = TaskKey[Seq[File]]("gzip-assets", "GZIP all assets") lazy val gzipAssetsSetting = gzipAssets <<= gzipAssetsTask lazy val gzipAssetsTask = (gzippableAssets, streams) map { case
val gzipAssets = TaskKey[Seq[File]]("gzip-assets", "GZIP all assets")
lazy val gzipAssetsSetting = gzipAssets <<= gzipAssetsTask
lazy val gzipAssetsTask = (gzippableAssets, streams) map {
case (finder: PathFinder, s: TaskStreams) => {
finder.get.map { file =>
val gzTarget = new File(file.getAbsolutePath + ".gz")
IO.gzip(file, gzTarget)
s.log.info("Compressed " + file.getAbsolutePath + " " + file.length / 1000 + " k => " + gzTarget.getName + " " + gzTarget.length / 1000 + " k")
gzTarget
}
}
}
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
// Twitter Bootstrap v2.0.1 compilation (https://plus.google.com/u/0/108788785914419775677/posts/QgyUF9cXPkv)
lessEntryPoints <<= (sourceDirectory in Compile)(base => ((base / "assets" / "stylesheets" / "twitterbootstrap" / "styles.less"))),
// set up gzip of assets
gzippableAssets <<= (resourceManaged in (ThisProject))(dir => ((dir ** "*.js") +++ (dir ** "*.css"))),
gzipAssetsSetting,
playPackageEverything <<= playPackageEverything dependsOn gzipAssets
).settings( ...
val gzip资产=TaskKey[Seq[File]](“gzip资产”、“gzip所有资产”)
惰性val GZIPassetSetting=gzipAssets
val gzTarget=新文件(File.getAbsolutePath+“.gz”)
IO.gzip(文件,gzTarget)
s、 log.info(“Compressed”+file.getAbsolutePath+“”+file.length/1000+“k=>”+gzTarget.getName+“”+gzTarget.length/1000+“k”)
gzTarget
}
}
}
val main=PlayProject(appName、appVersion、appDependencies、mainLang=JAVA)。设置(
//TwitterBootstrap v2.0.1编译(https://plus.google.com/u/0/108788785914419775677/posts/QgyUF9cXPkv)
减少点我花了几个小时寻找解决同样问题的方法
尝试以下操作:。无论您运行playdist
还是playtage
,它都会打包.gz
文件
考虑到这出戏已经足够聪明,可以在一个
存在相应的.gz文件,当
正在执行“stage”或“dist”。某些反向代理可以使用gzip资源,但是
这要么效率较低(如果针对每个请求执行),要么效率较高
复杂(如果资源被缓存,并且最终可能会过时)
下面是一个使用Build.scala的半成品解决方案:
val gzippableAssets = SettingKey[PathFinder]("gzippable-assets", "Defines the files to gzip")
val gzipAssets = TaskKey[Seq[File]]("gzip-assets", "gzip all assets")
lazy val gzipAssetsSetting = gzipAssets <<= gzipAssetsTask dependsOn (copyResources in Compile)
lazy val gzipAssetsTask = (gzippableAssets, streams) map {
case (finder: PathFinder, s: TaskStreams) => {
var count = 0
var files = finder.get.map { file =>
val gzTarget = new File(file.getAbsolutePath + ".gz")
IO.gzip(file, gzTarget)
count += 1;
gzTarget
}
s.log.info("Compressed " + count + " asset(s)")
files
}
}
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
...
gzippableAssets <<= (classDirectory in Compile)(dir => (dir ** ("*.js" || "*.css" || "*.html"))),
gzipAssetsSetting,
playPackageEverything <<= playPackageEverything dependsOn gzipAssets
)
val gzippableAssets=SettingKey[PathFinder](“gzippableAssets”,“将文件定义为gzip”)
val gzipAssets=TaskKey[Seq[File]](“gzip资产”、“gzip所有资产”)
惰性val GZIPassetSetting=gzipAssets
val gzTarget=新文件(File.getAbsolutePath+“.gz”)
IO.gzip(文件,gzTarget)
计数+=1;
gzTarget
}
s、 日志信息(“压缩”+计数+“资产”)
文件夹
}
}
val main=PlayProject(appName、appVersion、appDependencies、mainLang=JAVA)。设置(
...
可转让资产