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

    查看全文 »

  • doT.js 模板引擎的使用

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

    模版引擎之前在介绍mustache时已经提到了。doT、mustache各有优势吧,如果用于JS环境,doT的性能更胜一筹,并且套语句更方便些。现在公司的mobile页面已经被我替换成doT了。

    doT source: https://github.com/olado/doT
    Docs: http://olado.github.com/doT/

    doT上手比较容易,但之前熟悉了mustache,改用doT时有点不习惯,但用两次就好了。

    下载doT.js(里面有个doU.js不要用,doU.js是为了测试遗留问题的)。举个简单的使用例子:

    HTML部分:

    <script id="j-tmpl" type="text/template">
    {{ if(it.success){ }}
    	<h2>results:</h2>
    	<ul>
    		{{ for (var i = 0, l = it.data.length; i < l; i++) { }}
    			<li>
    				<h5>{{=it.data[i].title}}</h5>
    				<p>{{!it.data[i].message}}</p>
    			</li>
    		{{ } }}
    	<ul>
    {{ }else{ }}
    	<h2>暂无数据</h2>
    {{ } }}
    </script>
    

    JS部分:

    <script>
    var obj = {
    	success: true,
    	data:[
    		{title:'item1',message:11},
    		{title:'item1',message:22}
    	]
    }
    var tmpl = document.getElementById('j-tmpl').innerHTML;
    var doTtmpl = doT.template(tmpl);
    console.log(doTtmpl(obj ));
    </script>
    

    看了例子,就应该会使用了。
    {{=it.xx}} 取obj.xx的值
    {{ }} 里面放if els / for 等表达式
    {{!it.xx}} 取把obj.xx转义后的值
    这些基本够用了,还有复杂的应用,可以看doT主页内的examples、docs。
    并且,可以很容易把doT写成jquery插件:

    $.extend({
    tmpl: function(template, data){
    	return doT.template(template).apply(null,[data]);
    }
    });
    
  • TortoiseGit GitHub 使用小计

    / 分类: 开发,工具 / 4 Comments

    装了GIT很久了,最近也没时间鼓捣,今天提交GitHub时发现不太会用了,所以查查资料,简单记录下git的安装和使用。

    1. msysgit

    TortoiseGit依赖msysgit,下载:http://code.google.com/p/msysgit/downloads/list
    有Portable版,我用的就是这个。比如解压.7z到:D:\WebDevelopment\Git\PortableGit

    2. 配置TortoiseGit

    下载:http://code.google.com/p/tortoisegit/downloads/list
    安装TortoiseGit,全部保持默认即可。

    配置git的路径:
    桌面右键 -TortoiseGit - setting - General - MSysGit路径,指定:
    D:\WebDevelopment\Git\PortableGit\bin。

    创建ssh key:
    开始菜单-TortoiseGit-Puttygen, Generate,然后Save private key到本地 (无需key passphrase),比如保存到:D:\WebDevelopment\Git。保存的key下次比如重装系统, 可以继续使用。复制对话框里生成的ssh key,类似:
    ssh-rsa
    .....
    .....
    .....= rsa-key-20120218

    TortoiseGit - setting - Git - Config,填写 name、email。
    新版的默认是只读的, 可以通过右键-git bash里添加配置:
    git config --global user.name 'xxx'
    git config --global user.email "xx@xx"

    3. 使用GitHub

    GitHub功能类似googlecode,方便储存代码。主页,进入Edit Your Profile,找到SSH Keys,Add New SSH Key或edit现有的SSH Key。title随便取,把上面复制的ssh key粘贴到key一栏。

    创建项目:
    主页,New repository创建项目,填写项目名称之类的。创建好后,可以看到一些说明,找到里面的git@github.com:yourName/test.git,复制这个URL。

    本地创建个文件夹,比如test,右键-Git Clone,URL中粘贴刚才复制的URL。Load Putty Key选择上面保存到本地的ssh key。OK,弄完了。

    提交code到github

    右键-Git Commit,然后Push,就可以推到GitHub里面了。

    查看全文 »

  • 使用mustache js模板引擎

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

    Mustache 是个不错的js模板引擎,源码:https://github.com/janl/mustache.js
    演示:http://mustache.github.com/#demo,不仅支持js,还有PHP/RUBY/nodejs等好多语言。市面上的JS模板引擎也不少了,在公司的项目中,考虑在mustache.js、jquery-tmpl两个里面选择,最后选择了mustache,因为它支持的语言更多些,可以写成JQ插件,不依赖其他库,用在团队比较适合,并且一些不错的web项目也选择了它,性能方面应该都不会有太大差距。

    js模板引擎可以把模板分离出来,在ajax使用较多的场合非常适用。以前我们可能会使用拼接的方法,比如:

    var html=[];
    html.push(‘<h1>’); html.push(‘header’); 
    html = html.push(‘</h1>’).join(‘’);
    

    当遇到数据结构复杂 、大量页面都需要这样做的时候,js看起来可能非常乱,维护很不便。使用js模板引擎,可以方便的把view分离出来。
    mustache的一些说明:http://mustache.github.com/mustache.5.html

    if语句

    因为是Logic-less templates,无逻辑,只有标签,无if、for等,不过这些逻辑可以在写在js里面。基本还是适合大部分场合了。如果使用if语句,可以在js里面做一些判断增加一个has标签,然后在模板里面调用,比如再模板里可以这样:

    {{#hasValue}}
    有{{value}}的情况
    {{/hasValue}}
    {{^hasThumb}}
    无value,显示默认值
    {{/hasThumb}}
  • CentOS下开启mysql远程连接,远程管理数据库

    / 分类: 开发 / 11 Comments

    当服务器没有运行php、没装phpmyadmin的时候,远程管理mysql就显得有必要了。因为在CentOS下设置的,所以标题加上了CentOS,以下的命令在debian等系统下应该也OK。

    mysql -u root -p mysql # 第1个mysql是执行命令,第2个mysql是系统数据名称
    

    在mysql控制台执行:

    grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
    # root是用户名,%代表任意主机,'123456'指定的登录密码(这个和本地的root密码可以设置不同的,互不影响)
    flush privileges; # 重载系统权限
    exit;
    

    允许3306端口

    iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
    # 查看规则是否生效
    iptables -L -n # 或者: service iptables status
    
    # 此时生产环境是不安全的,远程管理之后应该关闭端口,删除之前添加的规则
    iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
    

    PS,上面iptables添加/删除规则都是临时的,如果需要重启后也生效,需要保存修改:
    service iptables save # 或者: /etc/init.d/iptables save
    另外,
    vi /etc/sysconfig/iptables # 加上下面这行规则也是可以的
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

    远程管理数据库的软件,win系统下可以使用SQLyog,用了几种远程软件,感觉这个用起来蛮不错的。