免費視頻播放器

          Flowplayer – Flash Video Player for the Web

          Video LightBox JS

          JW Player

          Free flash flv/mp4 player

          SublimeVideo – HTML5 Video Player

          高級視頻播放器

          HTML5 Video Player

          Vplayer – Video player with Gallery

          Tejas – Premium HTML5 Video Player

          JQuery Html5 Video Player

          HTML5 Video Gallery with Live Playlist

          MediaBox – jQuery Plugin for Audio & Video

          Video Player Reflection Multi Skin Local / YouTube

          Dynamic Flash Video Player (.flv & h.264)

          Very Versatile Video Player (h.264, and flv)

          Ultra XML Video Player

          Clean White Video Player

          Xml video player

          AS3 Video Player

          Smart Video Player

          Fullscreen Video Player 03 AS2

          New Video Player. Dynamic Movie Player FlashVars.

          via designmodo

          更多關于FlowPlayer的詳細信息,或者下載地址請點這里

          本站文章除注明轉載外,均為本站原創或編譯
          歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動共創開源社區
          轉載請注明:文章轉載自:開源中國社區 [http://www.oschina.net]
          本文標題:20+ 個免費和高級的 Web 視頻播放器
          本文地址:http://www.oschina.net/news/23953/video-players
          posted @ 2011-12-16 14:23 小馬歌 閱讀(377) | 評論 (0)編輯 收藏
           

          如果你正在使用MySQL,你應該了解下一個版本將會有么新特性,例如更好的伸縮性、高性能以及靈活性的提升之類的。

          MySQL的下一個版本是5.6,這里列出了該版本的5大新特性:

          優化器的改進

          MySQL Optimizer團隊做了大量的工作為了不斷的提升SQL查詢的效率,主要體現在索引條件pushdown以及多范圍的讀數據。索引條件的pushdown的意思是將WHERE條件語句移到存儲引擎中去處理,可降低過載;而多范圍讀意味著當查詢使用第二索引時,將進行磁盤塊的排序。

          InnoDB改進

          MySQL InnoDB存儲引擎團隊主要提供了NoSQL的訪問接口,可通過Memcached的API直接訪問InnoDB的表。

          使用memcached API直接訪問NoSQL

          此舉可大幅提升Web應用中的數據訪問性能,適合一些簡單的查詢。

          更好的復制

          MySQL復制模塊團隊主要改進了數據完整性和可用性以及性能方面的提升。

          Performance Schema

          Performance Schema是在5.5版本中引入的,5.6做了改進,提供新功能包括:表鎖、表I/O以及表鎖等待。

          英文出自:creativedev

          譯文出自:oschina

          posted @ 2011-12-16 14:20 小馬歌 閱讀(178) | 評論 (0)編輯 收藏
           
          from:http://forums.cacti.net/about26458.html

          Scripts and templates for nginx. 

          Nginx - http://nginx.net/ 

          Provide graphing nginx clients statistics (active, reading, writing, waiting) and nginx socket statistics (accepts, handled, requests). It's a formal devision used only for graphs usability. 

          For use do next steps: 

          1. Enable nginx http_stub_status_module at configure stage (if requared). 

          2. Enable stub status. Add to nginx.conf (in any server context): 

          Code:
          location /nginx_status {
             stub_status on;
             # disable access_log if requared
             access_log   off;
             #allow XX.YY.AA.ZZ;
             #allow YY.ZZ.JJ.CC;
             #deny all;
          }


          Restart nginx.

          3.

          Code:
          cp get_nginx_clients_status.pl <path_cacti>/scripts/
          cp get_nginx_socket_status.pl <path_cacti>/scripts/
          chmod 0755 <path_cacti>/scripts/get_nginx_socket_status.pl
          chmod 0755 <path_cacti>/scripts/get_nginx_clients_status.pl


          4. Check that it's work. Run

          Code:
          get_nginx_clients_status.pl http://nginx.server.tld/nginx_status


          and see that returned the same string:

          Code:
          nginx_accepts:113869 nginx_handled:113869 nginx_requests:122594


          5. Import to cacti cacti_graph_template_nginx_clients_stat.xml and cacti_graph_template_nginx_sockets_stat.xml. 

          6. Add nginx graphs to your hosts. 

          P.S. Sorry for my english :)


          Attachments:
           cacti-nginx.tar.gz [5.15 KiB] 
          Downloaded 6371 times 
          posted @ 2011-12-15 16:37 小馬歌 閱讀(679) | 評論 (0)編輯 收藏
           
          轉自:http://tech.it168.com/a2009/0203/264/000000264249.shtml


          【IT168技術分析評論】 
          最近簡單的使用了目前在國內用的比較多的幾個主流國外PHP框架(不包括國內框架),大致對這些框架有個直觀上的感受,簡單分享一下,對于哪些做框架選型的時候,權當一個參考。

          主要參考的框架包括:CodeIgniter、CakePHP、ZendFramework、Symfony

          說明:我對很多框架也沒有認真使用,只是簡單試用了一下,可能很多看法不成熟或者是錯誤的,請大家指正,一起成長。

          【 CodeIgniter 】

          官方網站:http://codeigniter.com

          中文網站:http://codeigniter.org.cn

          中文手冊:http://codeigniter.org.cn/user_guide

          視頻教程:http://codeigniter.org.cn/tutorials

          測試版本:CodeIgniter_1.6.1

          優點:

          1. 配置簡單,全部的配置使用PHP腳本來配置,執行效率高;具有基本的路由功能,能夠進行一定程度的路由;具有初步的Layout功能,能夠制作一定程度的界面外觀;數據庫層封裝的不錯,具有基本的MVC功能

          2. 快速簡潔,代碼不多,執行性能高,框架簡單,容易上手,學習成本低,文檔詳細;自帶了很多簡單好用的library,框架適合小型應用

          缺點:

          1. 把Model層簡單的理解為數據庫操作

          2. 框架略顯簡單,只能夠滿足小型應用,略微不太能夠滿足中型應用需要

          評價:

          總體來說,拿CodeIgniter來完成簡單快速的應用還是值得,同時能夠構造一定程度的layout,便于模板的復用,數據操作層來說封裝的不錯,并且CodeIgniter沒有使用很多太復雜的設計模式,執行性能和代碼可讀性上都不錯。至于附加的 library 也還不錯,簡潔高效。

          【 CakePHP 】

          官方網站:http://www.cakephp.org

          中文手冊:http://www.1x3x.net/cakephp

          視頻教程:http://search.you.video.sina.com.cn/s?key=cakephp

          測試版本:cake_1.1.19.6305

          優點:

          1. CakePHP是最類似于RoR的框架,包括設計方式,數據庫操作的Active Record方式;設計層面很優雅,沒有自帶多余的 library,所有的功能都是純粹的框架,執行效率還不錯;數據庫層的 hasOne, hasMany 功能很強大,對于復雜業務處理比較合適;路由功能,配置功能還不錯;自動構建腳手架(scaffold)很強大;適合中型應用;基本實現過了MVC每一層;具有自動操作命令行腳本功能;

          2. 文檔比較全,在國內推廣的比較成功,大部分都知道CakePHP,學習成本中等

          缺點:

          1. CakePHP非常嚴重的問題是把Model理解為數據庫層操作,嚴重影響了除了數據庫之外的操作能力

          2. CakePHP的cache功能略顯薄弱,配置功能稍嫌弱;CakePHP不適合大型應用,只適合中型應用,小型應用來說略微的學習成本高了點

          評價:

          總體來說CakePHP框架代表了PHP框架很重要的一個時代和代表,并且目前發揮著很重要的作用,不少自己寫的框架都模仿了CakePHP的方式,是個里程碑式的產品;CakePHP透露著RoR的敏捷開發方式和把數據庫操作認為是唯一Model的設計思想,作為開發快速應用和原型是絕好的工具;同樣,用來做Web2.0網站的開發框架,也是值得選擇的。

          【 Zend Framework 】

          官方網站:http://framework.zend.com

          中文手冊:http://www.phpeye.com/zf

          視頻教程:http://framework.zend.com/docs/screencasts

          測試版本:ZendFramework-1.5.0

          優點:

          1. 官方出品,自帶了非常多的 library,框架本身使用了很多設計模式來編寫,架構上很優雅,執行效率中等;MVC設計中,比較簡潔,具有路由功能,配置文件比較強大(能夠處理 XML和php INI),各種 library 很強大,是所有PHP框架中各種功能最全面的,包括它不僅是一個框架,更是一個大類庫(取代PEAR),這是它的主要特色;能夠直觀的支持除數據庫操作之外的Model層(比 CodeIgniter 和 CakePHP 強),并且能夠很輕易的使用Loader功能加載其他新增加的Class;Cache功能很強大,從前端Cache到后端Cache都支持,后端 Cache支持Memcache、APC、SQLite、文件等等方式;數據庫操作功能很強大,支持各種驅動(適配器)

          2. 文檔很全,在國內社區很成熟,并且目前不少Web 2.0網站在使用,學習成本中等

          缺點:

          1. MVC功能完成比較弱,View層簡單實現(跟沒實現一樣),無法很強大的控制前端頁面

          2. 沒有自動化腳本,創建一個應用,包括入口文件,全部必須自己手工構建,入門成本高

          3. Zend Framework 作為一個中型應用框架問題不大,也能夠勉強作為大型應用的框架,但是作為一個很成熟的大型PHP框架來說,還需要一些努力

          評價:

          作為官方出品的框架,Zend Framework的野心是可以預見的,想把其他框架擠走,同時封裝很多強大的類庫,能夠提供一站式的框架服務,并且他們的開發團隊很強大,完全足夠有能力開發很強大的產品出來,所以基本可以確定的是Zend Framework前途無量,如果花費更多的時間去完善框架。同樣的,Zend Framework架構本身也是比較優雅的,說明Zend官方是有很多高手的,設計理念上比較先進,雖然有一些功能實現的不夠完善,比如View層,自動化腳本等等,這些都有賴于未來的升級。總體來說Zend Framework是最值得期待的框架,當然,你目前要投入你的項目中使用也是完全沒問題的。

          【 Symfony 】

          官方網站:http://www.symfony-project.org

          中文網站:http://symfony-project.cn

          權威指南:http://www.symfony-project.org/book

          學習參考:http://sf.thecodecentral.com

          測試版本:symfony-1.0.13

          優點:

          1. Symfony 是我了解的PHP框架中功能最強大的,而且我使用時間比較長,但是很多功能還是沒有挖掘出來;它完整實現了MVC三層,封裝了所有東西,包括 $_POST,$_GET 數據,異常處理,調試功能,數據檢測;包含強大的緩存功能,自動加載Class(這個功能很爽),強大的i18n國家化支持;具有很強大的view層操作,能夠零碎的包含單個多個文件;非常強大的配置功能,使用yml配置能夠控制所有框架和程序運行行為,強大到讓人無語;能夠很隨意的定義各種自己的 class,并且symfony能夠自動加載(auto load)這些class,能夠在程序中隨意調用;包含強大的多層級項目和應用管理:Project --> Application --> Module --> Action,能夠滿足一個項目下多個應用的需要,并且每層可以定義自己的類庫,配置文件,layout;非常強大的命令行操作功能,包括建立項目、建立應用、建立模塊、刷新緩存等等;

          2. Symfony絕對是開發大型復雜項目的首選,因為使用了Symfony,將大大節約開發成本,并且多人協作的時候,不會出現問題,在Project級別定義好基礎Class以后,任何模塊都能夠重用,大大復用代碼

          缺點:

          1. 數據庫操作model采用了重量級的propel和creole,不過在我測試的版本中已經把他們移到了addon里,可用可不用

          2. 緩存功能無法控制,每次開發調試總是緩存,需要執行 symfony cc, symfony rc 來清除和重建緩存;

          3. 效率不是很高,特別是解析模板和讀取配置文件的過程,花費時間不少;

          4. 學習成本很高,并且國內沒有成熟的社區和文檔,連中文手冊都沒有,相應的要掌握所有功能,需要花費比較多的時間

          評價:

          Symfony絕對是企業級的框架,唯一能夠貌似能夠跟Java領域哪些強悍框架抗衡的東西;強悍的東西,自然學習復雜,但是相應的對項目開發也比較有幫助,自然是推薦復雜的項目使用Symfony來處理,覺得是值得,后期的維護成本比較低,復用性很強。相應的如果使用Symfony的應該都是比較復雜的互聯網項目,那么相應的就要考慮關于數據庫分布的問題,那么就需要拋棄Symfony自帶的數據庫操作層,需要自己定義,當然了,Symfony支持隨意的構造model層。

          【 總評 】

          以上數款框架,各有特色,而且都是開源項目,不過框架針對的項目不一樣,一般來說 CodeIngiter 比較適合小型項目,CakePHP 和 Zend Framework 比較適合中型項目,Symfony 比較適合大型重量級項目,在項目選型的時候,要充分考慮框架的可以定制性、擴展性,因為每個項目都無法確定你是否會隨著需求的變化進行改變。

          相對來說,Zend Framework 和 Symfony 應對變化的能力比較強,特別是能夠隨意定制 model 層的Class,能夠非常方便增加自己業務或者數據處理類,我是個人比較推薦在中大型項目中使用的框架。CodeIngiter 和 CakePHP 在中小型項目中同樣能夠發揮重大作用,快速開發和原型構建,非常適合目標不清晰的原型項目的開發。了解一個框架最好的方式就是使用它,學習它最好的方式就是看視頻。:-)

          仁者見仁,智者見智,在項目挑選框架的時候,請先認真考察項目的需求和未來的變化,然后選擇合適的框架,讓項目開發速度和后期維護性得到一個合理的平衡,當然了,也許,自己寫一個框架更適合。 :-)

          泛泛的評價了幾款框架,估計很多東西都沒有說到點子上,大家就姑且看之,同樣歡迎提出看法指正!
          posted @ 2011-12-12 15:18 小馬歌 閱讀(535) | 評論 (0)編輯 收藏
           
          使用 Nginx 提升網站訪問速度 

          http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/

          劉 柄成 (javayou@gmail.com), 軟件工程師, 廣州市摩網信息技術有限公司 
          簡介: 本文主要介紹如何在 Linux 系統上安裝高性能的 HTTP 服務器 —— Nginx、并在不改變原有網站結構的條件下用 Nginx 來提升網站的訪問速度。
          劉柄成一直使用 J2EE/J2ME 從事移動互聯網方面的開發。DLOG4J 的作者,您可以通過 Java 自由人網站來跟他聯系,網址是:http://www.javayou.com ,另外他的郵件地址是 javayou@gmail.com。

          nginx怎么加expire頭

          http://blog.csdn.net/love__coder/archive/2010/09/02/5859820.aspx

               nginx怎么對網站的圖片、js和css添加過期頭呢?

               在nginx配置文件server配置下,添加如下配置:

            server {

           location ~* ^.+\.(jpg|jpeg|gif|png|bmp)$ {
                  access_log /data/logs/image.log;
                  root '/usr/opt/nginx/html/www1';
                  expires 30d;
                  break;
              }

           

              location ~* ^.+\.(js|css)?${
                 access_log /data/logs/jsandcss.log;    
                 root '/usr/opt/nginx/html/www1';
                 expires 30d;
              }

              }

               keyword:nginx expire

           

          Apache/Nginx Cache Last-Modified、Expires和Etag相關工作原理

          http://www.yanghengfei.com/archives/524/

           

          使用ETag和expires 調優web 服務器性能

          正確使用Etag和Expires標識處理,可以使得頁面更加有效被Cache。

          在客戶端通過瀏覽器發出第一次請求某一個URL時,根據 HTTP 協議的規定,瀏覽器會向服務器傳送報頭(Http Request Header),服務器端響應同時記錄相關屬性標記(Http Reponse Header),服務器端的返回狀態會是200,格式類似如下:

          HTTP/1.1 200 OK

          Date: Tue, 03 Mar 2009 04:58:40 GMT

          Content-Type: image/jpeg

          Content-Length: 83185

          Last-Modified: Mon, 22 Nov 2010 16:29:24 GMT

          Cache-Control: max-age=2592000


          Expires: Thu, 02 Apr 2009 05:14:08 GMT

          Etag: "xok.la-961AA72-4CEA99B4415628″
          客戶端第二次請求此URL時,根據 HTTP 協議的規定,瀏覽器會向服務器傳送報頭(Http Request Header),服務器端響應并記錄相關記錄屬性標記文件沒有發生改動,服務器端返回304,直接從緩存中讀取:

          HTTP/1.x 304 Not Modified

          Date: Tue, 03 Mar 2009 05:03:56 GMT

          Content-Type: image/jpeg

          Content-Length: 83185

          Last-Modified: Mon, 22 Nov 2010 16:29:24 GMT

          Cache-Control: max-age=2592000

          Expires: Thu, 02 Apr 2009 05:14:08 GMT

          Etag: "xok.la-961AA72-4CEA99B4415628″
          其中Last-Modified、Expires和Etag是標記頁面緩存標識

          一、Last-Modified、Expires和Etag相關工作原理

          1、Last-Modified

          在瀏覽器第一次請求某一個URL時,服務器端的返回狀態會是200,內容是你請求的資源,同時有一個Last-Modified的屬性標記 (Http Reponse Header)此文件在服務期端最后被修改的時間,格式類似這樣:

          Last-Modified: Mon, 22 Nov 2010 16:29:24 GMT
          客戶端第二次請求此URL時,根據 HTTP 協議的規定,瀏覽器會向服務器傳送 If-Modified-Since 報頭(Http Request Header),詢問該時間之后文件是否有被修改過:

          If-Modified-Since: Mon, 22 Nov 2010 16:29:24 GMT
          如果服務器端的資源沒有變化,則自動返回 HTTP 304 (NotChanged.)狀態碼,內容為空,這樣就節省了傳輸數據量。當服務器端代碼發生改變或者重啟服務器時,則重新發出資源,返回和第一次請求時類 似。從而保證不向客戶端重復發出資源,也保證當服務器有變化時,客戶端能夠得到最新的資源。

          注:如果If-Modified-Since的時間比服務器當前時間(當前的請求時間request_time)還晚,會認為是個非法請求

          2、Etag工作原理

          HTTP 協議規格說明定義ETag為”被請求變量的實體標記” (參見14.19)。簡單點即服務器響應時給請求URL標記,并在HTTP響應頭中將其傳送到客戶端,類似服務器端返回的格式:

          Etag: "xok.la-961AA72-4CEA99B4415628″
          客戶端的查詢更新格式是這樣的:

          If-None-Match: "xok.la-961AA72-4CEA99B4415628″
          如果ETag沒改變,則返回狀態304。

          即:在客戶端發出請求 后,Http Reponse Header中包含 Etag: “xok.la-961AA72-4CEA99B4415628″

          標識,等于告訴Client端,你拿到的這個的資源有表示 ID:xok.la-961AA72-4CEA99B4415628。當下次需要發Request索要同一個 URI的時候,瀏覽器同時發出一個If-None-Match報頭( Http RequestHeader)此時包頭中信息包含上次訪問得到的Etag: “xok.la-961AA72-4CEA99B4415628″標識。

          If-None-Match: "xok.la-961AA72-4CEA99B4415628"
          ,這樣,Client端等于Cache了兩份,服務器端就會比對2者的etag。如果If- None-Match為False,不返回200,返回304 (Not Modified) Response。

          3、Expires

          給出的 日期/時間后,被響應認為是過時。如Expires: Thu, 02 Apr 2009 05:14:08 GMT

          需和Last-Modified結合使用。用于控制請求文件的有效時間,當請求數據在有效期內時客 戶端瀏覽器從緩存請求數據而不是服務器端. 當緩存中數據失效或過期,才決定從服務器更新數據。

          4、Last-Modified和Expires

          Last- Modified標識能夠節省一點帶寬,但是還是逃不掉發一個HTTP請求出去,而且要和Expires一起用。而Expires標識卻使得瀏覽器干脆連 HTTP請求都不用發,比如當用戶F5或者點擊Refresh按鈕的時候就算對于有Expires的URI,一樣也會發一個HTTP請求出去,所 以,Last-Modified還是要用的,而 且要和Expires一起用。

          5、 Etag和Expires

          如果服務器端同時設置了Etag和Expires 時,Etag原理同樣,即與Last-Modified/Etag對應的HttpRequest Header:If-Modified-Since和If-None-Match。我們可以看到這兩個Header的值和WebServer發出的 Last-Modified,Etag值完全一樣;在完全匹配If-Modified-Since和If-None-Match即檢查完修改時間和 Etag之后,服務器才能返回304.

          6、Last-Modified和Etag

          Last-Modified 和ETags請求的http報頭一起使用,服務器首先產生 Last-Modified/Etag標記,服務器可在稍后使用它來判斷頁面是否已經被修改,來決定文件是否繼續緩存

          過程如下:

          1. 客戶端請求一個頁面(A)。

          2. 服務器返回頁面A,并在給A加上一個Last-Modified/ETag。

          3. 客戶端展現該頁面,并將頁面連同Last-Modified/ETag一起緩存。

          4. 客戶再次請求頁面A,并將上次請求時服務器返回的Last-Modified/ETag一起傳遞給服務器。

          5. 服務器檢查該Last-Modified或ETag,并判斷出該頁面自上次客戶端請求之后還未被修改,直接返回響應304和一個空的響應體。

          注:

          1、Last- Modified和Etag頭都是由Web Server發出的Http Reponse Header,Web Server應該同時支持這兩種頭。

          2、Web Server發送完Last-Modified/Etag頭給客戶端后,客戶端會緩存這些頭;

          3、客戶端再次發起相同頁面的請求時,將分別發送與Last-Modified/Etag對應的Http RequestHeader:If-Modified-Since和If-None-Match。我們可以看到這兩個Header的值和 WebServer發出的Last-Modified,Etag值完全一樣;

          4、 通過上述值到服務器端檢查,判斷文件是否繼續緩存;

          二、Apache、 Lighttpd和Nginx中針配置Etag和Expires,有效緩存純靜態如css/js/pic/頁面/流媒體等文件。

          A、Expires

          A.1、 Apache Etag

          使用Apache的mod_expires 模塊來設置,這包括控制應答時的Expires頭內容和Cache-Control頭的max-age指令

          ExpiresActive On

          ExpiresByType image/gif "access plus 1 month"

          ExpiresByType image/jpg "access plus 1 month"

          ExpiresByType image/jpeg "access plus 1 month"

          ExpiresByType image/x-icon "access plus 1 month"

          ExpiresByType image/bmp "access plus 1 month"

          ExpiresByType image/png "access plus 1 month"

          ExpiresByType text/html "access plus 30 minutes"

          ExpiresByType text/css  "access plus 30 minutes"

          ExpiresByType text/txt  "access plus 30 minutes"

          ExpiresByType text/js   "access plus 30 minutes"

          ExpiresByType application/x-javascript   "access plus 30 minutes"

          ExpiresByType application/x-shockwave-flash     "access plus 30 minutes"

          <ifmodule mod_expires.c>

          <filesmatch "\.(jpg|gif|png|css|js)$">

          ExpiresActive on

          ExpiresDefault "access plus 1 year"

          </filesmatch>

          </ifmodule>
          當設置了expires后,會自動輸出Cache-Control 的max-age 信息

          具體關于 Expires 詳細內容可以查看Apache官方文檔。

          在這個時間段里,該文件的請求都將直接通過緩存服務器獲取,

          當然如果需要忽略瀏覽器的刷新請求(F5),緩存服務器squid還需要使用 refresh_pattern 選項來忽略該請求

          refresh_pattern -i \.gif$ 1440 100% 28800 ignore-reload

          refresh_pattern -i \.jpg$ 1440 100% 28800 ignore-reload

          refresh_pattern -i \.jpeg$ 1440 100% 28800 ignore-reload

          refresh_pattern -i \.png$ 1440 100% 28800 ignore-reload

          refresh_pattern -i \.bmp$ 1440 100% 28800 ignore-reload

          refresh_pattern -i \.htm$ 60 100% 100 ignore-reload

          refresh_pattern -i \.html$ 1440 50% 28800 ignore-reload

          refresh_pattern -i \.xml$ 1440 50% 28800 ignore-reload

          refresh_pattern -i \.txt$ 1440 50% 28800 ignore-reload

          refresh_pattern -i \.css$ 1440 50% 28800 reload-into-ims

          refresh_pattern -i \.js$ 60 50% 100 reload-into-ims

          refresh_pattern . 10 50% 60
          有關Squid中Expires的說明,請參考Squid官方中refresh_pattern介 紹。

          A.2、Lighttpd Expires

          和Apache一樣Lighttpd設置expire也要先查看是否支持了mod_expire模 塊,

          下面的設置是讓URI中所有images目錄下的文件1小時后過期;

          expire.url = ( "/images/" => "access 1 hours" )
          下面是讓作用于images目錄及其子目錄的文件;

          $HTTP["url"] =~ "^/images/" {
           
          expire.url = ( "" => "access 1 hours" )
           
          }
          也可以指定文件的類型;

          $HTTP["url"] =~ "\.(jpg|gif|png|css|js)$" {
           
          expire.url = ( "" => "access 1 hours" )
           
          }
          具體參考Lighttpd官方Expires解釋

          A.3、Nginx中Expireslocation ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

          {

          expires 30d;

          }

          location ~ .*\.(js|css)?$

          {

          expires 1h;

          }
          這類文件并不常修改,通過 expires 指令來控制其在瀏覽器的緩存,以減少不必要的請求。 expires 指令可以控制 HTTP 應答中的” Expires “和” Cache-Control “的頭標(起到控制頁面緩存的作用)。其他請參考Nginx中Expires

          B.1、Apache中Etag設置
          在Apache中設置Etag的支持比較簡單,只用在含有靜態文件的目錄中建立一個文件.htaccess, 里面加入:

          FileETag MTime Size
          這樣就行了,詳細的可以參考Apache的FileEtag文檔頁

          B.2、 Lighttpd Etag
          在Lighttpd中設置Etag支持:

          etag.use-inode: 是否使用inode作為Etag

          etag.use-mtime: 是否使用文件修改時間作為Etag

          etag.use-size: 是否使用文件大小作為Etag

          static-file.etags: 是否啟用Etag的功能

          第四個參數肯定是要enable的, 前面三個就看實際的需要來選吧,推薦使用修改時間

          B.3、 Nginx Etag

          Nginx中默認沒有添加對Etag標識.Igor Sysoev的觀點”在對靜態文件處理上看不出如何Etag好于Last-Modified標識。”

          Note:

          Yes, it's addition,and it's easy to add, however, I do not see howETag is better than Last-Modified for static files. -Igor Sysoev

          A nice short description is here:

          http://www.mnot.net/cache_docs/#WORK

          It looks to me that it makes some caches out there to cache theresponse from the origin server more reliable as in rfc2616(ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt) is written.
          3.11 Entity Tags 13.3.2 Entity Tag Cache Validators 14.19 ETag

          當然也有第三方nginx- static-etags 模塊了,請參考

          https://github.com/mikewest/nginx-static-etags

          三、對于非實時交互動態頁面中Expires和Etag處理

          對數據更新并不頻繁、如tag分類歸檔等等,可以考慮對其cache。簡單點就是在非實時交互的動 態程序中輸出expires和etag標識,讓其緩存。但需要注意關閉session,防止http response時http header包含session id標識;

          3.1、Expires

          如expires.php

          <?php
           
          header('Cache-Control: max-age=86400,must-revalidate');
           
          header('Last-Modified: ' .gmdate('D, d M Y H:i:s') . ' GMT' );
           
          header("Expires: " .gmdate ('D, d M Y H:i:s', time() + '86400′ ). ' GMT');
           
          ?>
          以上信息表示該文件自請求后24小時后過期。

          其他需要處理的動態頁面直接調用即可。

          3.2、Etag

          根據Http返回狀態來處理。當返回304直接從緩 存中讀取

          如etag.php

          >


          cache();

          echo date("Y-m-d H:i:s");

          function cache()

          {

          $etag = "http://xok.la";

          if ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag)

          {

          header('Etag:'.$etag,true,304);

          exit;

          }

          else header('Etag:'.$etag);

          }

          ?>


          本文來自: E點廢墟(www.xok.la)

          詳細出處參考:http://xok.la/2010/11/apache_nginx_cache_last-modified%e3%80%81expires_etag.html

           

          varnish,squid,apache,nginx緩存文件比較

          http://blog.51yip.com/server/1032.html

          一,測試環境

          1,硬件是奔騰雙核,機子三年前買的。系統是archlinux

          2,測試varnish和squid的時候,web服務用的apache

          3,測試apache的時候,啟動了5個進程,不過隨著壓力的增加,進程會增加的。

          4,測試nginx的時候,啟動了十個nginx進程,20個php-cgi進程

           

          5,varnish,squid,nginx用的是反向代理的形勢,也就是說訪問圖片的時候,要先透過緩存工具

          二,測試

          1,varnish

          [root@BlackGhost bin]# /usr/local/bin/webbench -c 100 -t 20 http://127.0.0.1:8080/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          Webbench - Simple Web Benchmark 1.5
          Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

          Benchmarking: GET http://127.0.0.1:8080/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          100 clients, running 20 sec.

          Speed=476508 pages/min, 47258114 bytes/sec.
          Requests: 158836 susceed, 0 failed.

          varnish的緩存效率命中率真的好高,看下圖:

          varnish

          varnish

          訪問了這么次,沒有緩存只有一次,效率真的很高。

          2,squid

          [root@BlackGhost bin]# /usr/local/bin/webbench -c 100 -t 20 http://localhost:9000/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          Webbench - Simple Web Benchmark 1.5
          Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

          Benchmarking: GET http://localhost:9000/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          100 clients, running 20 sec.

          Speed=133794 pages/min, 7475018 bytes/sec.
          Requests: 44598 susceed, 0 failed.

          從測試效果來說,squid挺讓我失望的,在測試前,我心里是這樣估計的,緩存最好的是 varnish,其次是squid,然后nginx,最后是apache,現在呢,squid是最差的。后來我看了一下log文件,發現正常情況下,緩存 和沒有緩存的比率不是1:2,如果在高壓力下,緩存和沒有緩存的比率更小。

          3,apache

          [root@BlackGhost conf]# /usr/local/bin/webbench -c 100 -t 20 http://localhost/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          Webbench - Simple Web Benchmark 1.5
          Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

          Benchmarking: GET http://localhost/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          100 clients, running 20 sec.

          Speed=160890 pages/min, 15856005 bytes/sec.
          Requests: 53630 susceed, 0 failed.

          4,nginx

          [root@BlackGhost conf]# /usr/local/bin/webbench -c 100 -t 20 http://localhost:10000/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          Webbench - Simple Web Benchmark 1.5
          Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

          Benchmarking: GET http://localhost:10000/00/01/RwGowEtWvcQAAAAAAAAWHH0Rklg81.gif
          100 clients, running 20 sec.

          Speed=304053 pages/min, 30121517 bytes/sec.
          Requests: 101351 susceed, 0 failed.

          從上面的測試結果我們可以發現,varnish > nginx > apache > squid,我想這個結果,根大家預期的結果有點出入,因為squid做老牌文件緩存工具怎么會這么差呢,squid的命中率低,我在網上查了一下,很多 人都是這樣的,這個可能根個人配置有關系,也許真正的高手,才能讓squid發揮最大功力。

          posted @ 2011-12-12 14:12 小馬歌 閱讀(772) | 評論 (0)編輯 收藏
           

          注:本篇是關于http頭信息cache的一些說明,理論行較強,但是很有用,不管是開發還是運維都得了解,如果還沒有研究到這一塊的朋友看起來覺得會比較枯燥。

          轉載于:http://hi.baidu.com/feilala_fly/blog/item/29b9f200f26c5f03738b6521.html

          Http的Cache機制總共有4個組成部分:

          Cache-Control、Last-Modified(If-Modified-Since)、Etag(If-None-Match) 、Expires

          服務器響應頭:Last-Modified,Etag
          瀏覽器請求頭:If-Modified-Since,If-None-Match

          服務器發出Etag,Last-Modified頭后,下次瀏覽器再進行同樣的請求,則會發出If-None-Match,If-

          Modified-Since頭,而后服務器根據這些信息來判斷是否需要發送數據,如果沒有更新,服務器就簡單的

          發送一個304狀態告訴瀏覽器用緩存就OK了,不用下載數據了,從而節約了帶寬。

          Last-Modified / If-Modified-Since

          Last-Modified是響應頭,If-Modified-Since是請求頭。Last-Modified把Web組件的最后修改時間告訴客

          戶端,客戶端在下次請求此Web組件的時候,會把上次服務端響應的最后修改時間作為If-Modified-Since

          的值發送給服務器,服務器可以通過這個值來判斷是否需要重新發送,如果不需要,就簡單的發送一個

          304狀態碼,客戶端將從緩存里直接讀取所需的Web組件。如果有更新,返回HTTP 200和更新的頁面內容,

          并且攜帶新的”ETag”和”LastModified”。

              使用這個機制,能夠避免重復發送文件給瀏覽器,不過仍然會產生一個HTTP請求。

          ETag / If-None-Match

          ETag是響應頭,If-None-Match是請求頭。Last-Modified / If-Modified-Since的主要缺點就是它只能精確到秒的級別,一旦在一秒的時間里出現了多次修改,那么Last-Modified / If-Modified-Since是無法體現的。相比較,ETag / If-None-Match沒有使用時間作為判斷標準,而是使用一個特征串。Etag把Web組件的特征串告訴客戶端,客戶端在下次請求此Web組件的時候,會把上次服務端響應的特征串作為If-None-Match的值發送給服務端,服務端可以通過這個值來判斷是否需要從重新發送,如果不需要,就簡單的發送一個304狀態碼,客戶端將從緩存里直接讀取所需的Web組件。因此,HTTP/1.1利用Entity Tag頭提供了更加嚴格的驗證。

           

          當服務器發出響應的時候,可以通過兩種方式來告訴客戶端緩存請求:

          第一種是Expires,比如:Expires: Sun, 16 Oct 2016 05:43:02 GMT在此日期之前,客戶端都會認為緩存是有效的。

          不過Expires有缺點,比如說,服務端和客戶端的時間設置可能不同,這就會使緩存的失效可能并不能精確的按服務器的預期進行。

          第二種是Cache-Control,比如:Cache-Control: max-age=3600

          這里聲明的是一個相對的秒數,表示從現在起,3600秒內緩存都是有效的,這樣就避免了服務端和客戶端時間不一致的問題。

          但是Cache-Control是HTTP1.1才有的,不適用與HTTP1.0,而Expires既適用于HTTP1.0,也適用于HTTP1.1,所以說在大多數情況下同時發送這兩個頭會是一個更好的選擇,當客戶端兩種頭都能解析的時候,會優先使用Cache-Control基礎知識

                   1) 什么是”Last-Modified”? 

                   在瀏覽器第一次請求某一個URL時,服務器端的返回狀態會是200,內容是你請求的資源,同時有一個Last-Modified的屬性標記(Http Reponse Header)此文件在服務期端最后被修改的時間,格式類似這樣: 

                  Last-Modified: Fri, 12 May 2006 18:53:33 GMT

                   客戶端第二次請求此URL時,根據 HTTP 協議的規定,瀏覽器會向服務器傳送 If-Modified-Since 報頭(Http Request Header),詢問該時間之后文件是否有被修改過: 

                  If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT

                   如果服務器端的資源沒有變化,則自動返回 HTTP 304 (Not Changed.)狀態碼,內容為空,這樣就節省了傳輸數據量。當服務器端代碼發生改變或者重啟服務器時,則重新發出資源,返回和第一次請求時類似。從而保證不向客戶端重復發出資源,也保證當服務器有變化時,客戶端能夠得到最新的資源。 
          :如果If-Modified-Since的時間比服務器當前時間(當前的請求時間request_time)還晚,Apache會認為是個非法請求

                   2) 什么是”Etag”? 

                   HTTP 協議規格說明定義ETag為“被請求變量的實體值” (參見 —— 章節 14.19)。 另一種說法是,ETag是一個可以與Web資源關聯的記號(token)。典型的Web資源可以一個Web頁,但也可能是JSON或XML文檔。服務器單獨負責判斷記號是什么及其含義,并在HTTP響應頭中將其傳送到客戶端,以下是服務器端返回的格式: 

                  ETag: "50b1c1d4f775c61:df3"

                   客戶端的查詢更新格式是這樣的: 

                  If-None-Match: "50b1c1d4f775c61:df3"

                   如果ETag沒改變,則返回狀態304然后不返回,這也和Last-Modified一樣。本人測試Etag主要在斷點下載時比較有用。
                  
                 Last-Modified和Etags如何幫助提高性能?
                   聰明的開發者會把Last-Modified 和ETags請求的http報頭一起使用,這樣可利用客戶端(例如瀏覽器)的緩存。因為服務器首先產生 Last-Modified/Etag標記,服務器可在稍后使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回服務器要求服務器驗證其(客戶端)緩存。 
                   過程如下:
                           1. 客戶端請求一個頁面(A)。 
                           2. 服務器返回頁面A,并在給A加上一個Last-Modified/ETag。 
                           3. 客戶端展現該頁面,并將頁面連同Last-Modified/ETag一起緩存。 
                           4. 客戶再次請求頁面A,并將上次請求時服務器返回的Last-Modified/ETag一起傳遞給服務器。 
                           5. 服務器檢查該Last-Modified或ETag,并判斷出該頁面自上次客戶端請求之后還未被修改,直接返回響應304和一個空的響應體。

          注:
          1、Last-Modified和Etag頭都是由Web Server發出的Http Reponse Header,Web Server應該同時支持這兩種頭。
          2、Web Server發送完Last-Modified/Etag頭給客戶端后,客戶端會緩存這些頭;
          3、客戶端再次發起相同頁面的請求時,將分別發送與Last-Modified/Etag對應的Http Request Header:If-Modified-Since和If-None-Match。我們可以看到這兩個Header的值和Web Server發出的Last-Modified,Etag值完全一樣;
          4、通過上述值到服務器端檢查,判斷文件是否繼續緩存;

           

          關于Etag和Last-Modified網上還有更精辟的解釋

          1、關于Last-Modified

          HTTP的Response中還會有另外一個Header叫Last-Modified,比如

          “Last-Modified: Thu, 06 Apr 2006 21:17:12 GMT”,

          瀏覽器訪問一個URI得到這樣的Resposne之后,就知道這個資源最后一次的修改時間,下次需要再次獲得這個資源的時候,會發一個Request給Server,不過這個Request中有一條

          “If-Unmodified-Since: Thu, 06 Apr 2006 21:17:12 GMT”,

          如果在Server端在這個日期之后對這個資源進行了修改,就會照常返回這個資源給Client端,但是如果沒有修改,就會返回一個304 (Not Modified) Response而不返回資源,告訴Client端:“這個資源從上次給你之來從來沒改過,你放心用你Cache中的好了。” 一個304 Response比一個靜態資源通常小多了,這樣就節省了網絡帶寬。

           

          2、Last-Modified和Expires的區別

          讓我們回過頭來比較一下Expires和Last-Modified這兩個東西,似乎Last-Modified比不上Expires,因為雖然它能夠節省一點帶寬,但是還是逃不掉發一個HTTP請求出去,而Expires卻使得瀏覽器干脆連HTTP請求都不用發,豈不痛快!那還要Last- Modified這個物體干什么?理想狀況的確是這樣,不過當用戶在IE或者Firefox里面按F5或者點擊Refresh按鈕的時候(不是在URL欄里重新輸入一遍URL然后回車),就算對于有Expires的URI,一樣也會發一個HTTP請求出去,所以,Last-Modified還是要用的,而且要和Expires一起用。 

          3、Etag

          除了Last-Modified,HTTP Response中還可能有另外一個Header: ETag,使得Server上的靜態資源有點“版本控制”的味道,假如HTTP Response中包含

          ETag: "abcdefg1234:0001"

          等于告訴Client端,你拿到的這個版本的資源有個ID,叫做abcdefg1234:0001,下次需要發Request索要同一個URI的時候,在Request里面加一條

          If-None-Match: "abcdefg1234:0001"

          好,Server 端做了一些修改,下次這個Client再來了一個請求,但是這時候資源已經改了,所以返回這個新資源,還有新的tag “ETag: "abcdefg4567:0001"”(這個etag我是胡寫的),這樣,Client端等于Cache了兩份,在需要索要這個資源的時候,可以包含這樣的Header: “If-None-Match: "abcdefg1234:0001" "abcdefg4567:0001"”,這樣,即使Server端頭腦發熱,把這個資源Roll back回原來的版本,依然會返回304 (Not Modified) Response,因為它知道Client端Cache著以前的版本呢,這點功能是Last-Modifed/If-Not-Modified沒法做到的。 

          4、Etag的弊端

          不過ETag/If-None-Match這點功能實在是個雞肋,首先,Server端的資源不大可能Roll Back,更重要的是,有可能造成Client Performance下降。對于只有一個Server的網站,沒什么問題,但是現在稍微上點規模的網站都需要Scale Out,也就是說需要前端一個Load Balancer,后面接多臺Server來處理請求,俗稱Cluster,既然是Cluster,那么每個請求到底返回什么結果應該和分配到哪個 Server無關,不過這個ETag可能就壞事了。假如用戶的第一次請求分配給Server A,返回“ETag: "abcdefg1234:0001"”,但是第二次請求分配給了Server B,Server B上這個資源和Server A上的一模一樣,但是計算出這個資源的ETag是"abcdefg1234:0002",這下麻煩了,雖然內容一樣,但是ETag不匹配,還是浪費了帶寬把資源發送了一遍,冤枉啊!而事實上,不同Server上的ETag很有可能不同,對于Apache,ETag的計算考慮了inode,對于 IIS,ETag考慮了metabase的修改版本,要保證不同server上的這些信息一致,有點小難。不過不是有Last-Modified/If- Not-Modified嗎?Server端看到If-Modified-Since,對照一下時間對得上,不管If-None-Match,可以直接發回304(Not Modified)呀,很不幸,RFC2616對這種情況做了規定,如果既有If-None-Match又有If-Modified-Since,除非兩者不沖突,不然不會返回304。

           

          所以說ETag就是一個害人精,按照Yahoo的建議,別費勁想辦法同步不同Server上的ETag了,干脆就把ETag刪除得了(缺省,Apache和 IIS都是有ETag的),我Sniff了一下Yahoo的若干網頁返回HTTP Response,的確沒有ETag,人家的確是知行合一

          對于Apache,在httpd.conf或者.htaccess中加一行就搞定了:

          5、Apache中的Etag設置
          補充:
          Apache默認開啟Etag,可以使用FileEtag來設置

          FileETag none|INode|MTime|Size|All

          從apache的實現中http_etag.c我們可以發現,Apache的Etag包括了Inode|Mtime|Size這些因素。

          對于IIS 6,可就有點費勁了,首先,似乎沒有辦法通過Config來把ETag去掉,查了很多資料,問了很多人,似乎能夠去掉ETag的辦法只有寫一個ISAPI Filter來弄,Sniff了一下Microsoft的幾個網頁的結果顯示ETag都穩當當的存在,估計目前真的沒有什么好方法。

          只好退而取其次,保證不同Server上的ETag一致了。 IIS對Etag的計算算法是ETag = {Filetimestamp:ChangeNumber}, Filetimestamp保持一致沒什么問題,ChangeNumber是metabase的change number,就有點難保證Cluster中每個Server都一樣了,所以,干脆就把它設成固定值好了,這個連接告訴我們該怎么辦,很可惜,沒有找到徹底刪除ETags的配置。

          當然轉載于此方便以后自己查閱!!!!

          posted @ 2011-12-12 14:12 小馬歌 閱讀(628) | 評論 (0)編輯 收藏
           
          最近發現一款很好的網頁快速設計工具Balsamiq Mockups。
            用下來發現它真正抓住了原型設計的核心與平衡點,既能快速設計草圖,又能比較好地進入到平時團隊工作的流程和工具中,可以說是擊中了原型設計的Sweet Spot,強烈推薦!

          先看看截圖:
           

          下面來說說它的功能和亮點:

            1.操作方面,拖拽,控件分組,甚至元素之間的對齊都做得很貼心;

            2.預制了很多界面元素,從簡單的輸入框,下拉框,瀏覽器主要元素,到經常用得到的導航條,日歷,表格,到復雜的Tag Cloud,Cover Flow, 地圖,WYSWYG的格式工具欄等,有了這些不用從頭畫起,往往比用白板都快;

            3.界面元素的修改很簡單,比如導航條的幾個標簽頁的label,就是用逗號分隔的文字,下拉框的選項就是分行的文字;

            4.使用xml語言來記錄和保存界面元素和布局, 
               1.這使得每個設計都能被很好得放進SVN,Git,和CVS等工具中進行管理和跟蹤;
               2.可以設計復雜的界面元素,保存后,以后可以重復使用(包括修改);

            5.可以將設計導出成PNG格式的圖片;

           
            6.可以用命令行進行導出操作,這樣就能讓我寫個腳本,從svn里checkout某個目錄下的所有設計文件后,導出圖片,打包后用郵件發到項目經理,工程師甚至客戶那;

            7.跨平臺,Balsamiq Mokups是用Flex和Air實現的,所以在Mac OS,Linux和Windows下都能使用;

            8.不僅僅有桌面版本,還有能集成在Confluence,JIRA,和XWiki中的版本,使得異地在線協作更方便有效;

          posted @ 2011-12-12 14:04 小馬歌 閱讀(494) | 評論 (0)編輯 收藏
           

          配置的重點在server這個node上,其他用nginx默認配置就行,這里就只寫出server那一塊的配置。因為symfony需要一些php $_SERVER里的變量來做路由,但是nginx賦給php的$_SERVER值并不是完全正確的,我也是查了不少資料才調好的,希望能對想讓symfony在nginx上跑的同學有所幫助


          http {
            ...
            server {
              listen      80; #nginx的端口
              server_name localhost; #網站網址,這里以localhost為例
              root        /path/to/root; #根目錄路徑
              chareset    utf-8;
              location /sf/ { #如果url匹配"/sf/"
                alias /path/to/symfony/data/web/sf/; #訪問/sf下面的資源所在的目錄
              }
              location ~ ^/.+\.php(/.*)?$ { #如果匹配類似/frontend_dev.php/*這樣的
                set $script $fastcgi_script_name; #像/frontend_dev.php這樣的url,直接把$fastcgi_script_name賦值給$script
                if ($document_uri ~ ^(.+\.php)(/.*)) { #如果又匹配/frontend_dev.php/article/1這樣的
                  set $script    $1; #把frontend_dev.php賦值給$script
                  set $path_info $2; #把/article/1賦值給$path_info,如果用nginx默認的配置,$_SERVER['path_info']會不正確而導致symfony找不到正確的路由
                }
                fastcgi_pass  127.0.0.1:9000; #php-cgi服務
                #下面開始給php的$_SERVER相關變量賦值,不寫對都有可能運行不了symfony
                include       fastcgi_params; #這里面有很多nginx默認給php的$_SERVER賦的環境變量值,
                                              #如果你想要把這句放后面的話,下面已經賦過值的記得注釋掉,否則又被覆蓋回原來的錯誤值
                fastcgi_param SCRIPT_FILENAME $document_root$script;
                fastcgi_param SCRIPT_NAME     $script;
                fastcgi_param PATH_INFO       $path_info;
                fastcgi_param DOCUMENT_URI    $document_uri;
                
              }
              location / { #當前面的規則都不匹配,就運行這個(剩下的url肯定都匹配/)
                if (-f $request_filename) { #如果資源(像css,js這樣的文件)和請求的url是匹配的,也就是說能根據url直接找到
                  expires max; #那就永不過期
                  break;       #并且不往下執行了
                }
                #否則得話都給他rewrite到index.php上去
                rewrite .* /index.php last;
              }
            }
          }
          關于path_info部分還有更簡單的寫法,而且是官方例子,參見我另外一篇博客。

          另外配置symfony等單一入口框架也有更好的例子,參見我新寫的文章

          posted @ 2011-12-12 11:37 小馬歌 閱讀(968) | 評論 (0)編輯 收藏
           

          1 新建立工程
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony generate:project mycms
          2 創建前臺和后臺
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony generate:app frontend 
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony generate:app backend
          3 生成model表單模型
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony doctrine:build --all
          4 從data下填充數據庫到數據庫
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony doctrine:generate-module frontend job Job --with-show --non-verbose-template
          5 生成后臺action及模版
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony doctrine:generate-admin backend Category
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony doctrine:generate-admin backend Content
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony doctrine:generate-admin backend Comment
          6 格式化后臺程序的輸出 
          D:\xampp\htdocs\mycms>D:\symfony\data\bin\symfony plugin:publish-assets
          7 創建前臺程序
          D:\xampp\htdocs\mycms>symfony doctrine:generate-module frontend category Category --with-show
          D:\xampp\htdocs\mycms>symfony doctrine:generate-module frontend content Content --with-show
          D:\xampp\htdocs\mycms>symfony doctrine:generate-module frontend comment Comment --with-show
          8 目前位置一個帶有前臺和后臺的應用程序已經全部好了。

          //---------------------------yml 應用程序的數據庫 ---------------------------------
          Category:
          columns:
              name: string(50)
              description: string(1000)

          Content:
          actAs:
              Timestampable: ~
          columns:
              title: string(255)
              body: clob
              view_count: integer
              recommend_level:
                type: enum
                values: [0,1,2]
                default: 2
              category_id: integer
          relations:
              Category:
                local: category_id
                foreign: id
                foreignAlias: Contents

          Comment:
          columns:
              body: clob
              user_id: integer
              content_id: integer
          relations:
              Content:
                local: content_id
                foreign: id
                foreignAlias: Comments
          //---------------------------yml 應用程序的后臺樣式 ---------------------------------   
          generator:
          class: sfDoctrineGenerator
          param:
              model_class:           category
              theme:                 admin
              non_verbose_templates: true
              with_show:             false
              singular:              ~
              plural:                ~
              route_prefix:          category
              with_doctrine_route:   true
              actions_base_class:    sfActions

              config:
                actions:
                  _delete:
                    label: 刪除
                  _list:
                    label: 返回管理
                fields:
                  id:
                    label: 編號
                  name:
                    label: 名字
                  description:
                    label: 描述
                list:
                  title: 信息管理
                  display: [id,=name,description]
                  layout: stacked
                  #params: 編號:%%id%%<br />名字:%%name%%<br />描述:%%description%%<br />
                  sort: [title,view_count,category, DESC]
                  max_per_page: 6
                  batch_actions:
                    _delete:
                      label: 刪除
                    publish:
                      label: 發布
                  object_actions:
                    _edit:
                      label: 編輯
                    _delete:
                      label: 刪除
                    publish:
                      label: 發布
                  actions:
                    _new:
                      label: 創建

                filter: ~
                form:    ~
                edit:    ~
                new:     ~

          posted @ 2011-12-10 19:45 小馬歌 閱讀(241) | 評論 (0)編輯 收藏
           

          正骨操

          1.       立位拉筋:站立,雙手十指交叉,手心向上,伸直上臂,兩臂盡力貼近雙耳。腳尖踮起,緩緩落腳跟36次。

          2.       顫筋:與立位拉筋動作相同,腳尖踮起后,顫動腳跟,通過顫動,帶動整個脊椎一起運動,由慢到快,循序漸進。每次顫動時間1分鐘。

          3.       轉腿劃圓:站立,雙腳并攏,左腳腳尖點地。抬左腳不超過膝蓋,用大腿帶動小腿,以胯為軸,由前至后劃圓36次。腳尖始終保持向下。之后由后向前劃圓36次。兩腳交替。

          4.       左右提胯:站立,雙腳并攏。保持上身不動,全身放松,盡力向上提胯,左右各提一次為一組,每次做36組。整個練習過程中膝蓋不能彎,肩膀不能晃動。

          5.       左右轉腰:坐姿,兩腿與肩同寬,腰部放松,左右搖擺腰部36次。上身不要晃動。

          6.       平面轉腰:坐姿,保持上身不動,自左向右轉動腰身36次,然后再自右向左轉動36次。

          7.       上下轉腰:坐姿,保持上身不動,盡力吸氣收腹,腰向后彎,肚子自下而上運動;呼氣鼓肚子,腰向前挺,肚子自上而下運動。反復36次;盡力呼氣鼓肚子,腰向前挺,肚子自上而下運動;吸氣收腹,腰向后彎,肚子自下而上運動。反復36次。

          8.       打開胸椎:坐姿,腰背挺直,兩臂向兩次伸直,掌心向前,拇指向上,其余四指并攏。用眼睛看著左手拇指,以腰為軸,身體向左后方轉動至極限,兩臂要始終保持伸直,到達極限后保持10秒,慢慢恢復原位。以36次為一組。一定要做完左側后再做右側。

          9.       轉動頸椎:坐姿,雙手放在大腿上,上身挺直。低頭縮脖(呈烏龜狀),下巴盡力貼胸口。以下巴帶動頸椎,自左向右水平劃圓36次。之后自右向左劃圓36次。注意轉動時不能太快。

          10.    抬頭望月:坐姿,腰背挺直,轉頭盡力向左上方看,達到極限后頭向右側盡力壓右肩。左右各做10次。

          11.    轉肩1:站立,兩腳與肩同寬,雙手下垂,轉動肩膀。轉肩時兩臂跟隨肩膀向上微微抬起,掌心向下,肩膀向后下方壓住肩胛骨下的膏肓穴幾秒后復原。重復36次。

          12.    轉肩2:站立,兩腳與肩同寬,兩臂向兩次伸直,掌心向前,拇指向上,其余四指并攏。緩慢向前轉動小臂,快達到極限時突然發力,利用寸勁震動雙肩。

          13.    舉臂轉頭:坐姿,腰背挺直,雙手十指交叉,手心向上置于頭后,兩臂在頭后劃圓。

          以上為個人總結歸納,請在陳醫生指導下練習。

          posted @ 2011-12-09 18:22 小馬歌 閱讀(342) | 評論 (0)編輯 收藏
          僅列出標題
          共95頁: First 上一頁 44 45 46 47 48 49 50 51 52 下一頁 Last 
           
          主站蜘蛛池模板: 都江堰市| 宣汉县| 军事| 临朐县| 吴江市| 丹江口市| 罗田县| 盱眙县| 吕梁市| 泰兴市| 梓潼县| 离岛区| 汕尾市| 浦城县| 巫溪县| 彝良县| 景德镇市| 曲靖市| 丹东市| 广安市| 图木舒克市| 治多县| 东城区| 台州市| 肥城市| 余江县| 福安市| 江源县| 喀喇沁旗| 林西县| 麻阳| 循化| 伊川县| 象山县| 双鸭山市| 都匀市| 拜城县| 澄迈县| 延津县| 南召县| 英德市|