08月07, 2016

Tengine简单篇

记得14年那会儿,seajs还是比较流行的。当时给团队推了seajs,组件使用Aralejs。依稀记得当时碰到的问题是请求比较多,因为当时spm关于打包那一块还是比较烂的。唯一比较靠谱点的方案是通过concat Url,即:

http://site.com/??a.css,b.css

然后形成一个新的css文件,印象中这个是叫combo,当时找了不少的资料,比较简单方便的是配置nginx。然而当时的团队没有人会配,或者说大家可能没有这种意识吧。

这篇文章算是还当年的一个心愿。(现在的combo,如果用nodejs来实现,也是相当简单的,更何况现在可选择的方案实在太多了,直接合并压缩一个文件,或者用工程化来解决)。

什么是Tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。

Tengine安装

它的最新版是2.1.2,但在我的mac进行make install会报错:

ERROR

随后测试了几个版本,发现2.1.x都会报这个错,最终选择了2.0.x的安装版本。

以2.0.0为例:

wget -c http://tengine.taobao.org/download/tengine-2.0.0.tar.gz
tar zxvf tengine-2.0.0.tar.gz

上面的步骤是下载tar包,并且解压,那么在当前文件夹就有了tengine-2.0.0这个目录,进入tengine-2.0.0

./configure --prefix=/usr/local/tengine --with-http_concat_module

--prefix=/usr/local/tengine是表示安装到/usr/local/tengine这个目录去,默认是装/usr/local/nginx 要支持concat功能,必须要手动安装concat模块,具体可以参考文档

随后就是:

make && make install

新版本(因为我不确定在其他mac下是不是正常的),需要先make,再sudo make install。

关于nginx平滑升级Tegine,或者共存

其实这两者都可以,我更倾向于共存,当然在打开其中一个时,必须要把另外一个的nginx进程stop掉。

安装nginx后,怎么安装/升级到tengine?,但这个回答漏了make install的步骤,思路是对的。

我更倾向于共存的原因是一开始装nginx用的是brew,它生成的文件目录都是比较散,一般是这几个:

/usr/local/Cellar/nginx/1.8.1/bin/nginx
/usr/local/var/log/nginx
/usr/local/var/run/nginx.pid

感觉好散,所以我就用了共存的方式

启动Tengine

sudo /usr/local/tengine/sbin/nginx

同ngin的操作:

sudo nginx
sudo nginx -s reload
sudo nginx -s stop

启动nginx后,我们打开localhost/,就可以看到如下的界面:

欢迎页面

测试nginx的concat的功能

找到/usr/local/tengine/conf下的nginx.conf,加上一条server,或者新建一个conf,include到nginx.conf,通常是推荐后者,我们为了方便,可以直接改nginx.conf

server {
    listen       80;
    server_name  www.test.com;
    root  /Users/zhangpu/tengineDemo;

    location / {
        index  index.html index.htm;
    }

    location /static/css/ {
        concat on;
        concat_max_files 20;
    }

}

简单说明一下:root是表示访问www.test.com(配置一个host即可)的时候,网址的根目录。

这是我demo的目录截图:

menu

index.html中,有一个link地址:

<link rel="stylesheet" href="/static/css/??a.css,b.css">

当请求这个URL的时候,它会进入nginx的配置里面的location /static/css/这个规则,然后做文件合并的功能,需要注意的是,它并不会给你做文件代码压缩的处理。

除了css之外,我们也可以配置js的文件合并。

trim模块

这个trim模块有点坑,它下面有trim、trim_css、trim_js,分别对应html代码去空格(\r\n及注释的压缩)、css代码去空格、js代码去空格。

文档上提及一点:

目前只能处理html格式的页面,js和css只针对于html内嵌的代码,不支持处理单独的js和css页面。

tengine2.0.0这个版本不支持trim_css和trim_js,但它可以支持trim,我们可以这样写规则:

location / {
       index  index.html index.htm;
       trim    on;
}

查看源码效果截图是这样的:

view source

可以清楚地看到,html代码被压缩了,但是style的css那部分并没有。

tengine2.0.1开始支持trim_css和trim_js,但经我测试,2.0.1、2.0.2、2.0.3都有问题,trim_css和trim_js不能单独存在,必须要有trim。然后trim的html压缩没有了,只有html中的style或者script标签里面的代码压缩。

不清楚2.1.x下面这个模块是怎样的,反正就感觉这个功能有些鸡肋吧。

结语

该文简单介绍了Tegine的concat模块及trim模块,至于其他功能,目前了解的还不多。要是以后有了更多的了解,会继续填坑的。

本文链接:www.my-fe.pub/post/basic-tengine.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。