关闭

JAWR【一个java项目的javascript和CSS集成和压缩工具】

标签: 压缩cssajax合并图片
973人阅读 评论(0) 收藏 举报
分类:
概述

现在的系统都趋向于富客户端,客户端的逻辑很多是Javascript来完成的,这样导致了JavaScript文件数量的增多,加大了对网络带宽的需求。JAWR是一个java项目的javascript和CSS集成和压缩工具,提供如下的功能:
1. 对网络交互的数据进行压缩,比如对JS,CSS,图片等。通过去除空行,空格,换行符,注释,变量名混淆可以大大减少JS和CSS文件大小。常用的压缩工具有JSMin, YuiCompressor,Packer,Microsoft Ajax Minifier和UglifyJS。对于第三方的JS,我们可以预先对其压缩。但对于自己开发的JS,为了可读性和可维护性,我们只能在项目部署的时候压缩。JAWR默认的JS压缩器为JSMIN,CSS的压缩器为CSS Compressor,可选的配置为YuiCompressor(支持JS和CSS)。
2. 可以合并所有的JS文件,合并所有的CSS文件。我们知道浏览器下载一个10K的文件,比下载10个1K的文件的速度要快很多,因为浏览器和服务端每次交互都会发送Request Header,服务器响应也会有Response Header,另外下载一个文件只需要建立一次网络连接,而10个文件则要建立10次网络连接,这个比较耗时。
3. 对图片Base64编码嵌入HTML页面。减少网络交互次数。

如何使用JAWR
1. 修改web.xml文件,加入如下代码:
<servlet>
                <servlet-name>JavascriptServlet</servlet-name>
                <servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
                <init-param>
                        <param-name>configLocation</param-name>
                        <param-value>/jawr.properties</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
                <servlet-name>JavascriptServlet</servlet-name>
                <url-pattern>*.js</url-pattern>
        </servlet-mapping>

  <servlet>
    <servlet-name>JavascriptServlet</servlet-name>
    <servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
    <init-param>
      <param-name>configLocation</param-name>
      <param-value>jawr.properties</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>CSSServlet</servlet-name>
    <servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>
    <init-param>
      <param-name>configLocation</param-name>
      <param-value>jawr.properties</param-value>
    </init-param>
    <init-param>
      <param-name>type</param-name>
      <param-value>css</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>

<servlet-mapping>
    <servlet-name>JavascriptServlet</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CSSServlet</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
类似地,可以添加处理CSS和Image的Servlet。

2. 添加配置文件jawr.properties,我们可以在该配置文件中修改JAWR默认的配置选项以及定义Javascript Bundle和CSS Bundle。
3. 在JSP使用JAWR提供的tag来导入Javascript Bundle和CSS Bundle。比如<jwr:script src="${request.contextPath}/bundles/test.js"></jwr:script>

JAWR的工作流程(以JS为例)
1. Web服务器启动时,JAWR会按照配置选项来决定是否压缩JS,打包成Bundle文件,并将JS缓存到内存。
2. 翻译JSP时,将JS的引用转换为JAWR生成的JS Bundle URL,JAWR会将Bundle内容的HashCode作为URL Address的前缀,这样当JS文件发生变化时,JS的URL也会发生变化,客户端会从服务器端获取最新的JS。
3. 客户端请求下载JS文件时,Servlet将gzip压缩(可以配置)后的JS和CSS文件传送给浏览器。
4. 如果客户端请求的资源相对于客户机本地存储的缓存副本并没有发生变化,JAWR会返回Response Code:304 Not Modified, 这样服务端不会返回资源的内容,客户端会直接读取本地缓存副本。

JAWR常用配置选项
1. jawr.debug.on 可选值为true和false,为true时,JAWR不会对资源打包。反之则会对资源打包,压缩。
2. jawr.gzip.on 可选值为true和false,为true时,JAWR会根据浏览器是否支持gzip格式数据来对资源进行gzip压缩。反之,JAWR不会gzip压缩资源。
3. jawr.url.contextpath.override  HTTP协议时,JS Bundle后URL地址前缀
4. jawr.url.contextpath.ssl.override HTTPS协议时,JS Bundle后URL地址前缀,可以配置为http://prefix形式,通过这样的配置,可以绕过某些情况下HTTPS页面不缓存JS和CSS的问题,但IE浏览器会给出如下的提示:

5. jawr.js.bundle.factory.bundlepostprocessors 配置JS bundle级别的postprocessor,比如我在项目上配置为YUI,这样JAWR使用YuiCompressor作为JS压缩器。
6. jawr.css.bundle.factory.bundlepostprocessors 同上,只是配置CSS bundle级别的postprocessor

如果在weblogic平台使用YUI压缩器,我们需要修改weblogic jar包的加载顺序,因为YUI使用到了Rhino(JS解释器),weblogic10本身已经包含了老版本的Rhino。我们需要修改jar包的加载顺序确保系统使用的是新版本的JS解释器。

 

 

 

 

jawr是一个可调节的Javascript和CSS的包装解决方案,允许迅速开发单独的模块资源文件。开发模式下,开发人员可以使用大量的分散的JavaScript文件,然后Jawr以可配置的方式将其捆绑成一个或几个文件。

通过使用标签库,Jawr允许开发和生产模式使用相同的不变的页面。 Jawr也缩减并压缩文件,以减少页面加载时间。

Jawr使用简单的.properties属性描述符,除应用于标准的Java Web应用外,也可以被用于 FaceletsGrails 应用。

 

众所周知,下载一个大文件要比下载2个较小的文件速度快,因为增加了HTTP协议的交互时间,而事实上,大多数浏览器只保留两个打开的连接,在任何给定的时间内相对相同的主机。 Jawr将减少加载页面的请求数量和传输到客户端的数据量,实现加载时间大幅改善。 通过简单的配置文件,可将资源分配到最适合的网站使用模式。未被添加到捆绑中的文件也有利于缩减和压缩效果(如果未声明捆绑包,Jawr将作为一个易于配置的资源压缩机)。

一个JSP标签库(Facelets也支持)用于在网页中引入资源。 在开发模式下,标签生成映射到捆绑的每个资源的<script>和<style>标签。 在生产模式下,标签生成一个链接指向包文件。 因此,从开发切换到生产模式,无需改变页面代码,。

伴随着利用复杂的JavaScript实现更丰富的客户端界面的不断增加的趋势,使用Jawr允许模块分布在不同的文件中将缓解开发过程的压力,而不用担心应用将如何为客户端服务。

Jawr的替代方法如下:

  • 开发符合部署模式的集各项功能于一身的脚本文件。 也就是说,将所有模块塞进几个文件中。 版本控制变得难以管理,很难找到一个需要改变组件。 随着项目的发展,代码变得几乎不可能缩减。
  • 使用构建脚本连接并压缩文件,这迫使开发人员,即使轻微的代码变化,测试时都将重新构建和部署整个应用。

Jawr提供了两全其美的方式,结合强大的捆绑-缩减--压缩提供生产模式下的最佳服务方案与快速变化-保存-测试周期的快速开发模式。

您可在这里 下载Jawr的最新版本 。 此外,可检出快速入门教程 ,看看在您的项目中它是多么容易使用。

而且不要忘记检查 常见问题中 的提示和故障解决方法。

特点

  • 自由和开放源码 :Apache 2.0许可证下发布,Jawr可用于免费或经修订后用于商业和非商业用途。
  • 易于安装 :使用Jawr时仅需在部署描述符中声明一对servlet,创建一个简单的.properties配置文件,并使用Jawr标签库导入CSS和JavaScript资源到你的页面。 完整的安装仅需几分钟,在一段时间内无需进行任何修改或很少修改。
  • 轻量级 :打包和压缩是在服务器启动时一次完成,所以没有开销要求。 另外,可使用缓存组件,默认直接从内存中而非文件系统中载入资源。
  • 内置的缩减和后处理(postprocessor ) :Jawr包括JSMin和YUI压缩机,都来自雅虎。 一个自定义的CSS 缩减器也包括其中,虽然YUI 压缩器也可以用于CSS。 对于每一个绑定包,启动时自动执行一个可定制的后处理过程链。CSS文件中相对URL将被后处理器改写,以便工作于不同的相对路径。 也很容易创建自定义后处理器,以便在部署时修改您的js和css文件。了解更多
  • 第三方框架集成 :Jawr可与 DWR Spring、JSF、 Facelets WicketCommons Validator(with Struts), 以及 Grails一道使用, 它也可以很容易地插入你自己的基础设施。

还有更多的功能,请检查 功能列表页 的完整列表。

jawr站点:http://jawr.java.net/

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:67224次
    • 积分:1273
    • 等级:
    • 排名:千里之外
    • 原创:60篇
    • 转载:37篇
    • 译文:0篇
    • 评论:1条
    最新评论