成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP開發大型Web應用淺析

開發 后端
關于PHP的執行效率,網上的專題文章很多,多是PHP、Java幾個陣營的爭論;應用的方面不同,執行環境不同,效率的差別會差得比較大。這里所說的“大型”應用不是說像Google、eBay、Yahoo這類大型網站的具體實施,只是希望大家的系統可以運行得更快更流暢,可以承載更多的用戶在線,希望可以給PHP的初學者一點幫助。

這里所說的“大型”應用不是說像Google、eBay、Yahoo這類大型網站的具體實施,我也沒有意圖勸說讀者放棄自己的概念和信仰,只是希望大家的系統可以運行得更快更流暢,可以承載更多的用戶在線,希望可以給PHP的初學者一點幫助。

關于PHP的執行效率,網上的專題文章很多,多以PHP、Java幾個陣營的爭論開始,以一個不確定的期待結束,很少看見一個明確的結論。確實,程序的執行效率是很難從比較中得出的。應用的方面不同,執行環境不同,效率的差別會差得比較大。而且效率也是需要權衡的,大家都知道匯編語言很底層,可以寫出非常高效的程序,但是我還很少,應該說是幾乎沒看過有人用匯編做Web開發,而且有能力用匯編寫出高效程序的人似乎都是值得大家仰視的,哈哈~我們沒有必要去討論PHP和匯編到底差多少,只要知道自己的PHP和別人的PHP差多少就可以了。

首先,先要明確這篇文章的前提:必須有一臺或更多的可以被自己操縱的服務器,而不是虛擬主機空間。畢竟可以在虛擬主機上運行的通用系統已經有了很多經典的作品和成熟的框架,效率挖掘已經被前輩們做得非常出色了,它們的很多理念也被現在很多PHP用戶繼承和發展,越來越多的所謂“框架”也像滿天繁星一樣,我也不想再去寫那個,因為第一我自己的水平也不怎么樣,寫不出什么新鮮玩意來,寫出來也招人笑,第二是寫這個的文章太多了,說法也太多了,混亂是造成很多富有激情的未來天才程序員夭折的最大元兇。

在獨立服務器上執行的程序和在虛擬主機上可以運行的程序在效率優化方面有著很大差別。您當然可以把一套discuz不加修改地安裝在一臺甚至一堆獨立服務器上,不過,它真的得到最大的性能優化嗎,您真的對得起這一堆服務器嗎?

獨立服務器指的是,使用者對這臺機器有完全的控制權,包括安裝、刪除軟件,配置系統參數甚至修改源代碼。基于這樣一個開放的硬件平臺,性能也不僅僅是體現在速度上,還包括安全性、穩定性等。和虛擬主機不同,用戶必須自己配置Web服務器參數,安裝和配置PHP、數據庫,以及安裝各種亂七八糟的東西(我喜歡這么說),當然還要對它們負責。

首先提出幾個名詞:執行時間、模板、數據庫封裝、Cache、Buffer、Hash、守護進程、crontab。

執行時間,誰都知道,就是一個程序從執行開始到執行結束所用的時間。因為Web是瞬時的、無狀態的,所以執行時間是Web程序執行效率的一個指標,它并不適合衡量C/S程序或者后臺守護的程序,因為它們很多都是持續運行的。頁面執行時間的一個典型例子就是Discuz論壇頁面最下方的時間顯式,通常Discuz都是幾毫秒到幾十毫秒,和所用的平臺、數據量和當前系統壓力有關。

模板大家再熟悉不過,雖然有很多人只是在用,但是不知道為什么在用。模板在傳統上來說是劃分邏輯層的一種途徑,在MVC上結構里,它把表示層和下層分離,在實際使用中,它方便程序員和界面設計人員分工合作。然而,現在很多場合中,由于模板的不當使用,它非但沒有起到促進程序員和界面設計人員分工合作,反倒成為程序員和美工互相仇視的罪魁(我好像在以前的帖子里這樣說過),很多人在抱怨他們不得不花很多時間在整理模板上。

數據庫封裝似乎和Java的關系更大,它對多種數據庫系統提供一個統一調用接口,通常是一些封裝好的類,這些類有時也完成一些比如SQL檢查、過濾等工作。PHPLIB里的DB封裝、PEAR DB、Adodb等都很有名,用的人也很多。#p#

Cache和Buffer看起來好像是一種東西,Cache叫做緩存而Buffer叫做緩沖。在硬件概念中,Cache的用途是連接兩種速度不同的設備,比如寄存器和內存、CPU和PCI-Bus、IDE總線和硬盤。Buffer的原意是類似彈簧的一種緩沖器,用來減輕或吸收沖擊的震動的東西。Buffer是一種數據預存取的方式,它用于臨時存儲數據并以與接收速度不同的速度傳輸。Buffer的更新方式可以是按時間間隔自動刷新,而Cache則更講究“命中率”,將當前時間段使用頻繁的少量數據放到高速設備中方便讀寫。在程序開發中,固然沒有什么高速、低速設備,不過數據源是可以有不同讀寫效率的。對于少量數據,文本文件的讀寫通常就要比數據庫存取效率好,而同樣是文本文件讀寫,在tmpfs上的效率就要比直接的磁盤IO效率好。Buffer更多地體現在進程通信和隊列上,很多時候并不是因為接收方沒有能力更快地讀取,而是沒有必要更快地讀取。

守護進程是一種在后臺連續執行的程序,它通常是起到監視、控制流程、對外提供服務等作用。比如Apache本身就可以被理解成一個守護進程,雖然它實際上是由很多個經常更新的進程組成(主進程是固定的)。

Crontab是UNIX/Linux的定時程序,有點像Windows的“計劃任務”,它設定在多少個時間間隔后或者是某一個時間點執行特定的程序。它通常用來完成自動更新、清除臨時數據等一段時間自動執行一次的操作。

另外一個比較特別的概念(說它特別是相對于習慣了通用系統開發的人來說),是當我們擁有了一臺獨立的服務器之后,完全沒必要把自己局限在PHP所能提供的功能范圍內,當我們不知不覺地成為系統的主人后,要努力發現到這一點,我們有很多東西可以用的。PHP不是萬能的(這簡直是一定的),對于它的功能上的不足,完全可以用Perl來彌補,Perl做為一種通用語言,可以提供更多的功能選擇,砂礫一樣密的模塊給這個隨意得有些變態的語言提供了無窮的能量。對于PHP性能上的不足,完全可以用C來補充。PHP的根本就是由C繼承來,PHP本身也是由C開發,用C來做PHP的擴展是完全合理的。

Linux本身就是由C和Perl在支撐(我這樣說完全不是為了夸大Perl的地位,大家可以去看看一個標準的Linux中有多少Perl腳本,離開Perl之后這個系統是不是覺得像個殘疾人)。PHP從C中繼承了大部分的語法,從Perl中學習了大部分Web特性、函數和那個貌似與開源很矛盾的“$”符號(PHP早期就是一個Perl腳本)。

下面來分析我在使用的一些代碼(注:Linux獨立服務器適用。我好像已經放棄對Windows和虛擬主機做大型開發很長時間了)。里面使用了一些也許很熟悉也許很陌生也許很變態的方法。我的系統是RedHat AS3,沒有什么特別的,PHP版本是4.4.0,MySQL是4.1。我從來沒有刻意地去寫一些必須用到PHP5的新特性的代碼,除非真的必須用到。

我的Web根目錄在/www下,Apache、PHP都是默認安裝在/usr/local/下,MySQL是下載的編譯好的二進制版本,我也一樣把它丟在那里。因為只是用于測試,我不想它看起來很亂,至于在實際項目中,尤其是多臺服務器的情況下,需要好好地部署一下你的系統。

為了使系統的結構清晰一些,我把需要使用的文件都放在了二級目錄下面。

下面是通用頭文件/includes/kernel/common.inc.php的一些片斷:

﹤?php
if (!defined('IN_BSG')) {
exit;
}
?﹥

上面的代碼保證它只能被合法的程序所調用,而不會被其它的文件include。如果正在執行的程序沒有定義一個'IN_BSG'常量,它在include這個common.inc.php之后程序會終止。

﹤?php
list($usec, $sec) = explode(" ", microtime());
$page_time_start = $usec + $sec;
?﹥

這兩行大家可能都會比較熟悉,這是計算程序的開始執行時間的。在程序結束之前,還會再計算一下這個,為的是得出程序執行所耗費的時間。如果你不在意這些,可以放心地把它注釋掉。

【編輯推薦】

  1. PHP成為中國應用最廣的Web開發語言
  2. 你是優秀的PHP程序員嗎?
  3. PHP編程的五個良好習慣
責任編輯:佚名 來源: 豆豆網
相關推薦

2010-07-26 08:46:21

PHP負載均衡

2010-11-03 10:31:51

PHP魔術方法

2009-12-11 10:59:48

PHP函數extrac

2010-12-10 13:57:45

PHP Extensi

2009-01-15 13:26:14

PHPWeb開發ASP.NET

2010-04-19 17:46:45

無線應用開發系統

2009-07-09 16:47:26

Servlet的Web

2010-10-28 09:05:10

ASP.NET

2012-02-02 10:14:14

2009-07-02 09:35:16

PHP 5克隆函數clone()函數

2009-06-30 15:32:00

入侵檢測Java Web

2009-03-17 15:44:40

2011-08-12 11:36:07

2011-04-06 13:39:18

2009-09-24 17:21:17

加速Hibernate

2011-07-19 09:46:38

2011-07-19 09:58:36

2011-09-08 17:48:33

Web Widget

2009-09-16 16:01:57

PHP正則表達式正則表達式的應用

2011-01-04 18:04:49

PHP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品日韩一区二区电影 | 插插插干干干 | 韩国欧洲一级毛片 | 国产精品96久久久久久 | 国产探花 | 在线观看国产三级 | 在线观看中文字幕 | 久久精品二区 | 国产成人精品一区二区 | 精品国产乱码一区二区三区 | 91精品国产一区二区三区 | 亚洲高清在线观看 | 日日夜夜影院 | 亚洲精品成人在线 | 精品成人一区二区 | 久久久91 | 欧美久久久久 | 一区二区视频 | 国产精品视频久久 | 99在线免费观看 | 欧美日韩亚 | 婷婷久久五月天 | 一区二区三区在线播放 | 国产成人精品免费视频大全最热 | 天天操夜夜爽 | 亚洲一区二区三区高清 | 国产精品美女一区二区 | 精品一区二区三区在线观看国产 | 日韩久久久久久久 | 国产一区二区三区色淫影院 | 国产精品久久久久久亚洲调教 | 一区二区三区亚洲 | 三级av在线 | 亚洲欧美在线视频 | 狠狠操电影 | 在线免费黄色 | 精品福利视频一区二区三区 | 成av在线 | 色婷婷综合网 | 亚洲欧美精品在线 | 一区二区三区国产视频 |