Playframework 2.0 Play Framework 2.0.4 GZip

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

我希望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 (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)。设置(
...
可转让资产