Kairyou's Blog

专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]
  • sublime text 项目同步插件(scp)

    / 分类: 工具,实践 / 8 Comments

    基于sublime的SimpleSync插件修改, 完善了原插件的一些缺陷, 比如: 不支持windows系统, 保存时会强制同步, 不支持快捷键调用, 修改配置需要重启sublime.
    所以把源码大部分都修改了. 原版优秀的地方也都已保留, 比如: 执行同步时使用多线程来避免UI阻塞, 同时支持本地同步和同步到server.
    已增加对ST3的支持.

    下面把功能列一下:

    1. 1. 把本地项目的文件同步到本地或server (比如可以用来: 同步到server端预览, 减少不停地commit-push-pull; 或本地编辑时备份到其他文件夹等)
      注: 同步本地用cp命令, 同步server用scp命令
    2. 2. 支持多文件夹, 可以把所有项目的规则写到一起, 针对不同的文件夹执行不同的命令.
    3. 3. 支持多规则, 可以把当前编辑的文件同时推到N个server或本地文件夹.
    4. 4. 同步时的命令利用threading多线程执行, UI不会阻塞, 可以继续操作编辑器(否则sublime执行CMD等命令会卡住, 等命令结束才会响应)
    5. 5. + 支持windows系统 (原版只支持MacOS and Linux)
    6. 6. + 保存文件时是否自动同步, 可在配置里设置 ("autoSync": false)
    7. 7. + 支持快捷键调用同步 (会自动保存当前文件, 再同步)
    8. 8. + 同步前读取配置, 修改配置不需要重启sublime.

    简单配置:

    修改配置: Preferences > Package Settings > sublimeSimpleSync
    增加快捷键: Preferences > Key Buildings - User, 添加一行, 比如:
    { "keys": ["alt+s"], "command": "sublime_simple_sync"},

    项目地址: https://github.com/kairyou/SublimeSimpleSync

  • 使用nodejs压缩合并javascript和css文件

    / 分类: 开发,实践 / 12 Comments

    对于压缩工具前端攻城师最常见的就是雅虎的Yui Compressor / Google的Closure Compiler了。
    对比其他压缩工具相对在JS和CSS压缩领域比较成熟,压缩率也比较好.
    一般会选择结合ANT实现压缩并合并,效果也不错,但是比较偏向个人,团队协作每个人都部署java/ant有些麻烦。
    对于个人开发使用ANT的方案也是相对不错的选择。对于团队,最好的解决办法是在服务端压缩,大家只需要登录并执行一个统一的脚本。

    下面分享下大致的测试结果,和改用nodejs压缩合并js/css的原因。

    js部分采用UglifyJS

    1. 压缩jquery 1.8,253 KB:使用UglifyJS(以下简称UJ): 90.5 KB;使用Closure Compiler(以下简称CC): 91.1 KB。

    2. 如果在闭包(function($, window, undefined) {...})(jQuery, window); 内的 unused function/variables
    CC会被删除没使用的;UJ 默认全部保留,加上 pro.ast_lift_variables(ast) 才会删除未使用的函数/变量 (对象/数组 不会被删除)。
    如果直接暴漏在window下的,两个基本差不多。

    3. function c(){2}, CC 会警告,UJ不会
    4. function c(){e()2},都会抛出异常,显示行数,错误原因。CC提示列错误,UJ不会。
    5. function c(){e();2},都保留了2,CC 警告,UglifyJS 无信息
    6. CC 一次显示JS里的全部错误(有些是前面的错误引起的, 所以部分是误报),UJ每次只显示一个错误。

    7. 0 = {}; CC会报错,而UJ不会。
    8. if语句都可很好的优化。

    9. CC喜欢把变量/函数(结构简单的)内的语句,直接插入到使用它们的地方,UJ维持原样。
    如果函数内的内容较少, CC会把函数的内容直接插入到调用它的地方,比如:
    function c(){xxxxxxx('12345678901234567');}
    function c(){xxxxxx.yyyyy('12345678901234');}
    function c(){xxxxxx.yyyyy.zzzz('12345678901');}
    function c(){if (X){alert('1234')};alert('12');}
    当其他函数里调用c()时,会把c()方法删除,然后把c()内的内容移动到这里
    (当里面的字符串长度+1后,就会直接使用原函数c(),所以CC这里是根据字符长度)。

    查看全文 »