本地模擬服務器CDN(靜態HTML,CSS,JS)開發
所謂本地開發環境就是和線上cdn(a.longencdn.cn)一樣的目錄結構和功能,提供了一個本地鏡像,開發者直接在本地鏡像的對應目錄中作開發即可,包括一些html靜態文件,css文件及JS文件等。比如說服務器cdn項目目錄結構是 a.longencdn.cn/apps/js, 那么我們在本地也和服務器目錄一樣,訪問 a.longencdn.cn 的時候 apache 首先在開發機上尋找文件,找不到去正式環境去 download 文件,一並返回給客戶端。a.longencdn.cn/apps/js.這樣做的好處有以下幾點:
優點:
1. 調式比較方便。 比如線上要更改需求,比如要更改JS,css,那么我們把demo下載到本地,對本地的相應的JS,css更改,如果ok的話,把相應的JS,css文件提交到svn上即可。(因為本地的目錄和線上一樣的,所以他們會先查找本地的文件,如果沒有找到再往服務器找相同的文件名js或者css。)。
2. 也可以模擬combo合並js,css文件。減少請求,提高性能。
比如雅虎的首頁JS文件如下:
使用&符合合並或者壓縮多個JS,css文件。
比如淘寶首頁JS文件如下:
多個JS文件使用逗號(,)隔開,合並,減少請求數。這些都是使用combo進行文件合並,這些,我們完全可以使用php服務器在本地開發模擬,比如:
拔赤github上封裝了合並及壓縮JS,css文件的PHP,拔赤自動合並或者壓縮JS/CSS 。下面我們來看看使用本地PHP來模擬線上CDN。
環境搭建
1. 安裝PHP,我這邊直接安裝wamp5.
2. 進入apache根目錄,打開配置文件 httpd.conf 如:
把以下文件都打開:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule deflate_module modules/mod_deflate.so LoadModule expires_module modules/mod_expires.so LoadModule include_module modules/mod_include.so
接着 再添加一句:讓html執行PHP
AddType application/x-httpd-php .html .htm .php .phtml .shtml
將shtml支持打開(開啟shtml主要是為了多人協作時更加方便)
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
3. 添加虛機的配置,打開extra/httpd-vhosts.conf,將下面代碼拷貝進去,並根據注釋提示的內容,自行修改,主要是將 DocumentRoot 和 RewriteCond 中的路徑(D:/dev/a.longencdn.cn/)如:
添加如下面代碼:
<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "D:/wamp5/wamp/www" ServerName localhost #這里修改為你本機的開發目錄 <Directory D:/wamp5/wamp/www> Options +Includes Order deny,allow Allow from All </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "D:/dev/a.longencdn.cn/" ServerName a.longencdn.cn RewriteEngine On RewriteCond %{QUERY_STRING} ^\?.*\.(js|css|js,|css,)$ [OR] RewriteCond %{QUERY_STRING} ^\?.*\.(js?.+|css?.+)$ [OR] RewriteCond %{REQUEST_FILENAME} -min\.(js|css) [NC] RewriteRule ^/(.*)$ /cb.php?%{REQUEST_URI} [QSA,L,NS,NC] #這里D:/dev/a.longencdn.cn/修改為你本機開發目錄 RewriteCond D:/dev/a.longencdn.cn/%{REQUEST_FILENAME} !-F #這里修改為你本機的開發目錄 <Directory D:/dev/a.longencdn.cn> Options +Includes Order allow,deny Allow from All </Directory> </VirtualHost>
其中:
DocumentRoot "D:/wamp5/wamp/www" 是指:如下圖:

DocumentRoot "D:/dev/a.longencdn.cn/" 是在本地也建立了一個文件目錄,D:/dev/a.longencdn.cn, 再下面就是放項目的文件,比如文件名叫apps,再把拔赤寫的cb.php復制放到a.longencdn.cn根目錄下,如:

其中cb.php文件相對應的地方也要改下:如

4. 接着打開hosts文件 綁定加一句 127.0.0.1 a.longencdn.cn 就ok了。
最后我們可以來演示下: 假如我項目文件apps下有js文件 其中里面有2個js文件,分別為a.js和b.js 代碼分別如下:
a.js
function A(){ console.log("我是A函數"); }
b.js
function B(){ console.log("我是B函數"); }
那么我們可以直接在本地服務器下訪問a.js:如:

b.js訪問如下:

當然我們可以連着寫a.js,b.js 模擬淘寶的cdn代碼,如下:

ok,通過以上可以看到,已經可以訪問且對多個js合並了。
下面分別對拔赤的php文件 合並及壓縮的文件提供下載 及 我本地的apache2 conf文件配置供下載:
1. 拔赤的php合並及壓縮下載。
2. apache2 conf文件配置下載。