Kairyou's Blog

专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]
  • 使用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这里是根据字符长度)。

    查看全文 »

  • Sublime Text 新建文件的模版插件: SublimeTmpl

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

    写了个sublime的模版插件, 项目主页: https://github.com/kairyou/SublimeTmpl
    这样就可以新建文件时使用模版的内容了, 目前添加了html/js/css/php/python/ruby的模版. 不需新建空白文件, 再从其他文件复制内容过来了.
    已增加对Sublime Text3的支持.

    使用:

    1. ST菜单, File-New File (SublimeTmpl), 选择列表里的相应菜单, 可直接使用模版新建文件.
    2. 命令, cmd+shift+p, 输入: "tmpl:", 可以找到创建文件的菜单列表.
    3.快捷键, 默认快捷键见下面. 可以自己修改, 方法见"设置"部分.

    默认快捷键:

    ctrl+alt+h html
    ctrl+alt+j javascript
    ctrl+alt+c css
    ctrl+alt+p php
    ctrl+alt+r ruby
    ctrl+alt++shift+p python
    
    关闭默认快捷键:

    Package Settings > SublimeTmpl > Settings - User, 增加disabled_keymap_actions配置:
    "disabled_keymap_actions": "html, css" // 关闭html/css语法的快捷键(多个逗号分隔) "disabled_keymap_actions: "all" //关闭所有语法快捷键

    安装:

    方法1. 通过 Package Control
    Package Control / Install Package, 搜索"SublimeTmpl" 或 "tmpl", 安装.
    * [2012/08/01]已经通过Package Control审核

    方法2. Github
    打开项目主页, git clone到ST的Packages文件夹(\Data\Packages), 或直接把ZIP格式的下载下来解压到Packages文件夹(文件夹名称必须为:SublimeTmpl).

    设置:

    菜单: Preferences / Packages Settings / SublimeTmpl, 可以编辑菜单/快捷键/新语法等等.

    如果你想贡献自己的package, 可以参考我这篇文章的介绍:
    https://xhl.me/archives/how-to-submit-a-sublime-package/

    新增特性:

    1. 用户自定义模板 (Thanks @Xu Cheng)
    自定义模板路径: "Data\Packages\User\SublimeTmpl\templates" 目录, 会优先使用(可以参考:默认的模板).
    默认模版路径: "Data\Packages\SublimeTmpl\templates" 目录.
    用自己自定义的模板: 推荐把默认模版目录的*.tmpl文件 复制到 自定义模板路径, 再去修改.

    2. 模板支持 ${date} 变量
    settings - user里面可以修改${date}默认的输出格式("%Y-%m-%d %H:%M:%S"), 比如改成: "date_format" : "%Y-%m-%d"

    3. 模板支持自定义 attr
    settings - user里添加:

    "attr": {
        "author": "your name" ,
        "email": "mail@yours.com",
        "link": "http://yours.com",
        "hello": "word"
    }
    

    就能在模板中使用 ${author} ${email} ${link} ${hello} 变量
    Thanks @vfasky (Blog)

    4. 保存文件时支持: ${saved_filename}, ${saved_filepath} 变量, settings - user里添加:
    "enable_file_variables_on_save": true, // 开启
    文件保存时, 上面的2个变量会替换为: 保存的文件名, 和文件路径.

    5. 支持: ${project_base_name}, ${project_path} and ${platform} 变量, settings - user里添加:
    "enable_project_variables": true, // 开启
    Note: 仅ST3支持, 上面的3个变量会替换为: 项目名, 项目路径, 当前系统环境.

    另外, 关于新增语言的附加说明

    1. 新增SublimeTmpl里面没有的语言

    1.1 新增.tmpl文件:
    自定义模板目录 (`Preferences - Browse Packages`, `User/SublimeTmpl/templates`), 新增比如 `html5.tmpl`.

    1.2 配置语言:
    首先参考: `Packages Settings / SublimeTmpl / Settings - Default` 的默认设置.
    新增语法, 选择: `SublimeTmpl / Settings - User`, 比如:

    {
        "html5": { // new
            "syntax": "Packages/HTML/HTML.tmLanguage",
            "extension": "html" // default_extension
        },
        "vue": { // new
            "syntax": "Packages/Vue Syntax Highlight/vue.tmLanguage",
            "extension": "vue"
        },
        // "disable_keymap_actions": "html, js, python", // "all"
        "enable_project_variables": true, // ${project_base_name}, ${project_path} and ${platform}
        "enable_file_variables_on_save": true, // ${saved_filename}, ${saved_filepath} on save file
        "attr": {
            "author": "Your Name",
            "email": "you@example.org",
            "link": "http://example.org"
        }
    }
    

    `html5`:对应`html5.tmpl`, `syntax`是Packages目录内的syntax路径, `extension`是默认保存时使用的扩展名.

    新增开始菜单: `SublimeTmpl / Settings - Menu`, 参照 `Menu - Default`.
    新增快捷键: `SublimeTmpl / Key Bindings User`, 参照 `Key Bindings Default`.

    2. 新增Sublime的语言

    这个我也没新建过, 可以去Package Control或者github上面找个其他人添加的新语言, 参考参考.
    如果没找到别人写好的, 可以参考如下网址, 自己做:
    http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html (官方文档, 利用AAAPackageDev这个插件制作)
    http://manual.macromates.com/en/language_grammars (textmate的doc, 和sublime大部分是相同的)
    https://github.com/LearnBoost/stylus/blob/master/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage (别人写好的语法, 可以和自己新建的对比)