史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 程式 & 網頁設計技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-12-13, 06:32 PM   #1 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 PHP網站提速三大「軟」招

隨著網路的普及,網站已經滲透到了每個行業,但是由於目前專線費用讓很多企業和個人難以承受,所以共享帶寬成為很多網站的首選方案。費用雖然降低了但是一個新的問題很快就出現了,那就是共享帶寬的網速很慢,有時甚至讓人無法忍受。如何能讓自己的網站快起來,成為人們關心的問題,筆者結合親身實踐來講講軟辦法的一些實際套用,希望能夠對讀者有所說明 。

  筆者採用的是Linux操作系統,Apache+PHP的網站構建方法。

  程式碼最佳化

  通常要求程序員要有好的編程習慣,盡量減少冗余程式碼的出現,目前也有好多工具能夠完成這項功能,對於一般的html文件,用於減少冗余的減肥工具很多,而對於PHP程序來說這樣的工具就不太多了,但是Zend Technologies的Zend Optimizer是一款非常好的程式碼最佳化工具,可以免費從Zend Technologies的網站上獲得。Zend Optimizer的使用方法也非常簡單,只要將下載的ZendOptimizer-1.0.0-PHP_4.0.4- Linux_glibc21-i386.tar.gz文件解壓縮,將其中的ZendOptimizer.so檔案拷貝到/usr/local/Zend/lib目錄下,然後修改php.ini文件,在最後增加以下幾行:

  顯示說明Zend Optimizer工作正常

  zend_optimizer.optimization_level=15

  zend_extension="/usr/local/ Zend/lib/ ZendOptimizer.so"

  設定完成後重啟Apache伺服器,編寫一段PHP程序:

  <?

  Phpinfo();

  ?>

  一般來說Zend Optimizer能將系統的效率提升30%∼40%,這是用戶最關心的。

  壓縮頁面

  HTTP1.1傳輸協定支持頁面壓縮傳送,也就是說伺服器把一個頁面壓縮傳送到客戶端,然後在客戶端將頁面解壓縮再顯示給客戶。在伺服器端有兩種傳輸方式,一種是頁面事先已經壓縮好了,傳送時只要將壓縮頁面傳送到客戶端就行,這種適用於靜態網頁多的情況,但是對於大多數站點,動態頁面比較多,這種方法不太適合,因為很多傳到客戶端的頁面其實是沒有的,是伺服器接到客戶端用戶請求動態產生的,所以就要求每產生一個動態頁面都要在傳到客戶端以前先檔案壓縮。從PHP的4.0.4版以後,可以在php.ini文件中增加一行配置「output_handler = ob_gzhandler」,這樣每個動態產生的頁面在傳送到客戶端之前都會進行壓縮,但是根據PHP官方站點的說明,這個參數不能與「zlib.output_compression = on」參數同時使用,因為容易引起PHP工作不正常,另外它只能壓縮PHP程序的動態產生的頁面,對於大量的靜態頁面尤其是圖像文件就不行了。但是mod_gzip模組為Apahe提供了將靜態頁面在傳給客戶端以前先壓縮的功能,它的壓縮比最大能到10,一般情況下可以到 3,也就是說網站的傳輸速率一下提高了三倍多。要想使用mod_gzip功能首先要下載mod_gzip.c或mod_gzip.so文件,如果下載的是.c文件還要用Apache帶的工具將它轉化為.so文件才能使用,方法是執行下面的指令:

   -i -a mod_gzio.c

  cp mod_foo.so/path/to/apache/libexec/mod_gzip.so

  chmod 755/path/to/apache/libexec/mod_foo.so

  系統會在/path/to/apache/ etc/httpd.conf中自動啟動該模組,如果下載的是.so文件則要將該檔案拷貝到相應的目錄下,然後在httpd.conf文件中增加LoadModule gzip_module libexec/ mod_gzip.so,使模組生效。需要注意兩點,第一,要想使用.so文件,Apache必須包含了mod_so模組(可以通過httpd -l指令來查詢該模組是否生效);第二,如果下載的是.so文件,它是與Apache的版本有關的,要注意下載的版本與自己使用的Apache是否一致,如果是.c文件就沒有這個問題。模組生效後還要對Apache進行相應的配置,需要在httpd.conf文件中加入一些參數:

  mod_gzip_on Yes(模組是否生效)

  mod_gzip_minimum_file_size 1002(最小壓縮檔案大小)

  mod_gzip_maximum_file_size 0(最大壓縮檔案大小,0表示沒有限制)

  mod_gzip_maximum_inmem_size 60000(最大可佔用記憶體)

  mod_gzip_item_include file "..gif102SINA>DOUBLE_QUOTATION (以gif結尾的文件要壓縮傳送)

  mod_gzip_item_include file ".txt102SINA>DOUBLE_QUOTATION

  mod_gzip_item_include file ".html102SINA>DOUBLE_QUOTATION

  mod_gzip_item_exclude file ".css102SINA>DOUBLE_QUOTATION

  使用了壓縮模組後,當用戶訪問站點時會在日誌文件中記錄相應的信息,比如「mod_gzip :OK In:file_length Out:gzipfile_length」,表示該頁面傳輸中使用了gzip功能,輸入文件、輸出文件大小都有說明。

  文件緩衝

  這種方法通常是針對PHP、PERL等CGI程序而言的,因為這些程序有一個共同的特徵就是接到用戶的請求後不是馬上將結果返回給用戶,而是經過解釋器解釋執行後將執行結果返回給客戶,這期間通常都要涉及到資料庫的訪問。這樣就會出現一個問題,當兩個用戶訪問同一個頁面時,系統將分別對兩個請求進行操作,但事實上這兩個操作可能是一模一樣的,這樣無形當中增加了系統的負擔。所以通常的解決辦法是在系統記憶體中開闢出一段空間,當用戶第一次訪問頁面後將執行結果存放在該記憶體中,當有用戶再一次訪問該頁面時,系統就將頁面直接從記憶體中調出而不需要重新解釋執行,這段記憶體空間就叫緩衝。目前流行的緩衝管理程序有兩個,一個是FastCGI,另一個是Zend Technologies公司的Zend 快取。FastCGI主要是針對Perl、C、C++等CGI指令碼程序設計的,可以有效地利用記憶體作緩衝,來自客戶端的請求都會被傳送到FastCGI套用服務程序,FastCGI處理用戶的請求後將結果返回給用戶。一般的CGI程序這時將結束工作自動退出,但是FastCGI工作繼續保持,這時它在接到新的用戶請求後不必建立新的工作,可以立即處理用戶請求,也就是說CGI程序建立工作順序執行然後退出,而FastCGI程序順序執行並永遠循環。

  Zend 快取的管理界面

  要想使用FastCGI首先要把FastCGI編譯到Apache中,方法非常簡單,這裡就不說明了,還要在http.conf文件裡作設定:

  AddHandler fastcgi-script .fcg .fcgi .fpl

  Options ExecCGI Indexes Includes

  這樣FastCGI就可以正常工作了,下面是FastCGI程序員手冊中的一段例子程序:

  #!fcgi-savvy-perl

  use FCGI; # 啟始化

  # Initialization code

   = 0;

  # Response loop

  while (FCGI::accept >= 0) {

   #FastCGI建立循環體

  print "Content-type:text/html "; #程序執行

  print "<head><title>FastCGI Demo Page (perl)</title></head> ";

  print "<h1>FastCGI Demo Page (perl)</h1> ";

  print "This is coming from a FastCGI server. <BR> ";

  print "Running on <EM>publish152.internal.sina.com.cn</EM> to <EM></EM><BR> ";

  ++;

  print "This is connection number ";

  }

  FastCGI對Perl等CGI程序的功能非常強大,但是它對PHP程序確是無能為力的,而且需要在編程時增加內容,也就是說它需要一些人為的因素才能發揮作用。相比之下Zend Technologies公司的Zend 快取針對PHP的緩衝功能是很強大的,只要安裝了該軟體,程序員就像編寫其他PHP程序一樣,不需要增加程式碼,就可以實現緩衝功能,有利於系統昇級,十分方便。它是一個付費軟體。它有緩衝功能並能通過圖形界面對其進行管理,其中:快取 Control頁面,可以配置Zend 快取,顯示其當前狀態,還能啟動和停止Zend 快取功能;Scripts頁面,Zend 快取的內容,包括每個文件的狀態,還可以根據點擊次數和緩衝佔有大小選項文件;Benchmark頁面,可以測試Zend 快取的緩衝效果,並以圖形方式給出顯示,它測試的是每秒鐘完成PHP請求的次數。

  它的安裝、驗證方法與Zend Optimizer基本相同,這裡就不詳細說明了,感興趣的讀者可以參考用戶手冊,它的強大功能和便利的管理方法確實讓人心動。

  以上是網站提速一般的幾種方法,對於不同的網站需要採用不同的手段,所對應的提速方案也不盡相同,但總體上不外乎是以上提到的三招,讀者可以根據自己的實際情況具體問題具體分析。

  注意:考慮到客戶端軟體的複雜性,因為有些客戶端軟體可能不支持某些特性,比如,mod_gzip對頁面進行壓縮,但是如果客戶端使用的是Netscape就不行,因為它不能把接收到的壓縮頁面解壓縮,導致頁面不能正常顯示。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:38 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1