文章标签 » javascript

发现一个好用的python版js压缩工具

https://github.com/rspivak/slimit
灰常好的工具,压缩比高,代码兼容性好,可媲美主流压缩工具~
做了下简单的benchmark:

#raw
256K jquery-1.8.1.js
#download from jquery.com
 92K jquery-1.8.1.min.js
 36K jquery-1.8.1.min.js.gz
#http://closure-compiler.appspot.com
 84K jquery-1.8.1.google.advanced.js
 32K jquery-1.8.1.google.advanced.js.gz
 92K jquery-1.8.1.google.simple.js
 36K jquery-1.8.1.google.simple.js.gz
#http://dean.edwards.name/packer
120K jquery-1.8.1.packer.js
 40K jquery-1.8.1.packer.js.gz
#http://refresh-sf.com/yui
#Uncaught SyntaxError: Unexpected token } 
 64K jquery-1.8.1.yui.js
 24K jquery-1.8.1.yui.js.gz
#slimit
 96K jquery-1.8.1.slimit.js
 36K jquery-1.8.1.slimit.js.gz

yui的虽然最nb,拉开其他工具一大截,但是压出来已经不能用了,难道是我点击提交按钮的方式不对??

实际使用时,我用的环境是redhat5.x,python环境较为恶劣,slimit只兼容到python 2.7,于是单独做了一个”便携版本”,可以兼容到2.4,并且相关依赖也放到一起,下载即用:)
https://github.com/emptyhua/js-css-minify-portable

关于js的字符串编码

The String type is the set of all finite ordered sequences of zero or more 16-bit unsigned integer values (“elements”). The String type is generally used to represent textual data in a running ECMAScript program, in which case each element in the String is treated as a code unit value (see Clause 6). Each element is regarded as occupying a position within the sequence. These positions are indexed with nonnegative integers. The first element (if any) is at position 0, the next element (if any) at position 1, and so on. The length of a String is the number of elements (i.e., 16-bit values) within it. The empty String has length zero and therefore contains no elements.
When a String contains actual textual data, each element is considered to be a single UTF-16 code unit. Whether or not this is the actual storage format of a String, the characters within a String are numbered by their initial code unit element position as though they were represented using UTF-16. All operations on Strings (except as otherwise stated) treat them as sequences of undifferentiated 16-bit unsigned integers; they do not ensure the resulting String is in normalised form, nor do they ensure language-sensitive results.

按照ECMA标准,无论引擎底层如何实现,js的字符串看起来都应该是UTF-16编码的字符串,并且每个字符串单元代表一个UTF-16的双字节
例如:
>”中”.length
1
(不知道这是啥特殊字符,发到wordpress有问题,直接贴图,那我是怎么输进去的呢,后面说转义符)
“中”编码成UTF-16为一个双字节0x4E2D,所以长度为1
长的像口的字符编码成UTF-16占4字节 0xD950 0xDF21,占用两个双字节,长度为2
(下面用”口”代替这个特殊字符)
>”口”[0]
“”
>”口”.charCodeAt(0).toString(16)
“d950”
所以字符串的长度显然是占用双字节的个数,而非我以前想当然认为的实际字符的个数。。。

\udddd形式的转义同样用来表示一个双字节,而非字符本身,”口”用转义符来表示的话:

最后我要的结论是:

对于像objective c里unichar一样的UTF-16编码格式的字符串可以通过@“\\u04x”直接得到json转义串~

PPJ回忆录

个人以为:学一门脚本很容易,但是学几门就是一个痛苦的事,因为我经常把他们搞混。。

于是我下决心写一个能够帮我理清楚的文档,我命之为《PPJ回忆录》,从周5写到今天,精疲力尽,剩下OO和正则部分没写,我决定先歇会~

毫不客气的说,对于同时学里面任意两门语言的同学,这个文档都会对你有帮助。

———–
post by gmail~

一段用于辅助gettxt翻译的vim配置

看图吧,用得到的话会觉的简直太爽了,^_^
使用方法:
打开需要标记的文件,输入命令 :GettextMarkStart,开启辅助
选择需要翻译的文本
screenshot_092.png
按_出来提示菜单,选择完成标记
screenshot_093.png

配置:http://code-of-emptyhua.googlecode.com/svn/trunk/vim/addgettextmark.vim

———–
post by gmail~

getAttribute(‘onclick’) in IE

第n次火星了,可是依然没去过火星.
这个是最近用到才知道,需求是替换onclick属性中的关键字,但是俺单纯的以为geAttribute都会返回一个字符串给我,没想到ie又一次显示了它独到的见解~


click me~

ff下输出

alert('click');
string

ie6和ie7下输出:

function anonymous()
{
alert('click');
}
function

ie8下输出:

function onclick()
{
alert('click');
}
function

其他事件属性肯定也会有同样表现,ie8十分搞笑,换了一个函数名…

最后对于ie我只有这样了:


click me~