源碼已經上傳到github:https://github.com/grasses/nginx-lua-static-mergercss
nginx-lua-static-merger
是一個基於openresty的模塊,主要用於合併靜態文件,減小http請求,加快靜態文件訪問速度的模塊。html
使用nginx-lua-static-merger
須要在編譯nginx時候添加openresty的模塊,或者直接安裝openresty做爲服務器。前端
nginx-lua-static-merger
可讓你的js、css請求不要那麼多,一個就夠了。jquery
先從nginx原理來看nginx處理http請求的過程。nginx
Nginx的模塊從功能上分爲以下三類:git
Handlers(處理器模塊),直接處理請求,並進行輸出內容和修改headers信息等操做。Handlers處理器模塊通常只能有一個。github
Filters (過濾器模塊),主要對其餘處理器模塊輸出的內容進行修改操做,最後由Nginx輸出。bootstrap
Proxies (代理類模塊),Nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務好比FastCGI等進行交互,實現服務代理和負載均衡等功能。後端
也就是說,一個http請求過來,nginx先處理請求信息,而後過濾信息,最後丟給代理來處理,它自己處理的東西並很少,它僅僅是經過查找配置文件將這次請求映射到一個location block,而此location中所配置的各個指令則會啓動不一樣的模塊去完成工做。服務器
從正常來看,一個頁面加載10來個js、css是正常的,還有10來個圖片,即便是什麼也不幹,那麼一個頁面也要處理掉20多個http請求,每一個http請求都要跑一遍TCP請求,nginx迴應,過濾,分配。
看張圖吧,國外一個網速測試工具:
去掉首頁index.html
的加載時間,能夠看到,加載靜態文件css,js時間耗費了很長的等待時間,而且image的加載是在js和css加載完後才加載的,也就是說,若是js或css加載慢了,那麼頁面就慢了。
這個頁面是github.com/grasses。
Openresty是國人寫的開源項目,打包了標準的 Nginx 核心,不少的經常使用的第三方模塊,以及它們的大多數依賴項。
tar xzvf ngx_openresty-VERSION.tar.gz cd ngx_openresty-VERSION/ ./configure make make install
詳細的安裝教程仍是去看官網吧。
|--/usr/local/openresty/nginx | `--lua | `--nginx-lua-static-merger.lua | `--conf | `--nginx.lua |--/www/openresty/static | `--js | `--css | `--cache
注意
一、nginx.conf
中的lua_package_path "/usr/local/openresty/lualib/?.lua;;";
和lua_package_cpath "/usr/local/openresty/lualib/?.so;;";
,若是你是編譯nginx而不是直接安裝openresty,目錄記得放對。
二、確保/www/openresty/static
有Lua寫的權限。
前端調用方法以下:
<link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css;/qiniu/css/main.css;/css/navbar.css"> <script src="/js/jquery.min.js;/js/main.js;/qiniu/bootstrap/js/bootstrap.min.js;/qiniu/js/plupload/plupload.full.min.js;/qiniu/js/plupload/i18n/zh_CN.js"></script>
Nginx在location經過 content_by_lua_file
把接下來的處理丟個Lua作邏輯。
Lua經過uri進行md5編碼,判斷cache是否存在,若是cache不存在,循環分割、遍歷uri,訪問響應的路徑,查找靜態文件,存在則記錄,最後寫cache入文件,方便下次訪問。
下面是在不做處理狀況請求多個js結果:
下面是第一次請求下,lua既要獲取數據又要合併生成cache,屬於冷數據:
第二次訪問就是熱數據了,訪問速度是增長的:
-by小草
2015-06-22 20:04:10