dojo打包压缩js

最近发现dojo页面每次请求的时候都会加载好几十个js文件,也就是要建立几十个request请求,这个是无法接受的,所以准备花点时间来研究下。但在网上找了下没发现什么好的例子,看来得花点时间才可能有点结果吧,由于今天下午花了点时间但是没看出什么结果来,又害怕以后不能坚持下去,所以把知道都记录下,希望以后来进行完善。
dojo有个专门压缩JS的工具叫shrinksafe,本人目前使用的版本为:
dojo-release-1.6.1-shrinksafe
对单个JS进行压缩可以这样:
[quote]
E:\myfile\dojo\shrinksafe>java -jar shrinksafe.jar -c 1768.js>17.js
[/quote]
其中1768.js是需要压缩的文件,17.js就是压缩后生成的文件名,这里有个地方需要注意下,那就是那个1768.js必须是独立可运行的,如果这个文件内部引用了其它文件,则运行压缩的时候会出错,因为它不能单独运行,所以shrinksafe不能判断是否压缩成功,所以会报错。

如果要压缩多个js并将其合并成一个js,也很简单:
[quote]
E:\myfile\dojo\shrinksafe>java -jar shrinksafe.jar 9676.js 1768.js>17.js
[/quote]
新版本的shrinksafe可以不加-c命令。

更新(12.8):但是要把dojo中引用到的JS打包起来就不那么容易了,本人差不多花了一天时间,到处查资料,得到的结果也不是太满意,先看一个命令:
[quote]
E:\myfile\dojo\dojo-release-1.6.0-src\util\buildscripts>java -classpath
"../shrinksafe/compiler.jar;../shrinksafe/js.jar" org.mozilla.javascript.tools.shell.Main build.js action=clean,release optimize=closure layerOptimize=closure profile=myprofile releaseName=hello
[/quote]
上面这个命令算是本人在windows上见过的比较长的命令了。有几点要注意:
1.必须在buildscripts下运行java,而且需要java6。
2.除了用到了shrinksafe下的js包以外,还用到了[url]http://code.google.com/closure/compiler/[/url]下的compiler.jar包。据说这个包压缩js很优秀。如果不加optimize=closure layerOptimize=closure这两个参数,会报错
[quote][JavaPackage org.dojotoolkit.shrinksafe.Compressor]. It is not a function, it is "object"[/quote]
经过本人再三搜索,明白了一点,默认使用的是layerOptimize=shrinksafe这样的方式,如果改成layerOptimize=comments,还是可以运行的,而且不用再加compiler.jar包了,不过压缩出来的js比起使用compiler.jar压缩的js,相比压缩比要低一些。
3.profile文件。上面命令中有个profile=myprofile,其中这个myprofile必须位于buildscripts\profiles目录下,且后缀名为.profile.js。至于里面的内容,如下:

dependencies = {
layers: [
{
name: "dojo/mydojo.js",
dependencies: [
"dojo._base",
"dojo.parser",
"dojo.data.ItemFileReadStore",
"dojo.data.ItemFileWriteStore",
"dijit.Tree",
"dijit.layout.BorderContainer",
"dijit.layout.ContentPane",
"dijit.form.Form",
"dijit.form.TextBox",
"dijit.form.Textarea",
"dijit.form.Button"
]
}
]
}

这是本人原来写的一棵树所需要的dojo引用的文件。
4.生成的文件会在dojo-release-1.6.0-src\release\hello目录中,上面的releaseName=hello就是这个意思。
5.然后将dojo目录下的nls目录与mydojo.js复制到相应的web服务目录下,最后在相应的jsp中引用:


<script type="text/javascript" src="/spring3/js/dojo/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript" src="/spring3/js/dojo/packer/mydojo.js"></script>

其中dojo.js还是得引用。还有就是css文件还是得照常引用,目前还不知道css文件是怎么打包的。

折腾了差不多一天,总算弄清了dojo的打包流程,说实话心里并没得啥子成就感,这种东西弄起来比在windows上配置ruby还麻烦。文章就先写到这里,以后如果有的感悟再来更新。

(10.9)关于css的压缩可以在命令行中加上cssOptimize=comments,这样的话,会把所有的css的注释去掉,然后打包成dijit.css,这个文件30K左右,压缩的效果还是不错的,至于可以压缩到原来的50%。然后在jsp中直接引用这个文件与dojo.css文件就可以了:

<link href="../css/tundra.css" rel="stylesheet" type="text/css" />
<link href="../css/dojo.css" rel="stylesheet" type="text/css" />

即便把js与css打包以后,控制台请求还是有36个,仔细看了下,树的数据加载采用XHR的形式,所以引用了dojo._base下的十几个js,这个目前还没想到什么解决方法,因为_base下的文件属于内部引用,本人在打包的时候就算把这些文件加入打包目录还是没有效果。
很不错的中文教程!文件太大分3个包! 目录如下: dojo精品中文教程 Dojo.1.0 Practice Note [1] 什么是dojo 选择dojo的理由 AJAX架构之Dojo篇 Adding Ajax中文版 (DoJo) DOJO学习笔记(七)-日期控件DropdownDatePicker和DatePicker DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 DojoJSON建立无限级AJAX动态加载的功能模块树 Dojo学习笔记( 模块与包) Dojo学习笔记-- djConfig解说 Dojo学习笔记-- dojo.dom Dojo学习笔记-- dojo.event & dojo.event.topic & dojo.event.browser Dojo学习笔记--DateTextbox Dojo学习笔记--Dojo的基础对象和方法 Dojo学习笔记--FisheyeList鱼眼效果 Dojo学习笔记--TabContainer Dojo学习笔记--ValidationTextbox Dojo学习笔记--dijit.Dialog Dojo学习笔记--dijit.Menu Dojo学习笔记--dijit.TitlePane Dojo学习笔记--dijit.Tooltip Dojo学习笔记--dijit.Tree Dojo学习笔记--dojo.graphics.color & dojo.uri.Uri Dojo学习笔记--dojo.string & dojo.lang Dojo学习笔记--动态生成widget Dojo学习笔记--开发自己的TitlePane Dojo学习笔记--页面部分区域遮挡,DialogUnderlay Dojo学习笔记(五)-djConfig详解 dojo data 接口详解 dojo0.9 使用心得 dojo学习笔记(一)-dojo.io.IO & dojo.io.BrowserIO) dojo学习笔记(三) dojo学习笔记(二) dojo.lang.array & dojo.lang.func & dojo.string.extras dojo学习笔记(六)- ContentPane dojo学习笔记(四) dojo的拖拽示例以及疑问! 介绍dojo事件 使用 Dojo 工具包和 JSON-RPC 构建企业 SOA Ajax 客户端 利用Dojo实现拖动(Drag and Drop)效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值