我們在編寫程式時,總是想要使自己的程式占用資源最小,執行速度更快,**量更少。往往我們在追求這些的 同時卻失去了很多東西。下面我想講講我對php優化的理解。優化的目的是花最少的代價換來最快的執行速度與最容易維護的**。
進行大範圍的優化,而不是死啃某些程式**
我這裡所說的優化,基本上都是從伺服器,apache,資料庫這些方面來進行的優化,而並不是對你的php**加以改進從而提高程式的執行速度,因為比起 你將程式中的正則優化為字串處理函式從而提公升程式速度來說,在大範圍內進行的優化所需要的代價要比這個小的多,而獲得報酬卻要豐厚的多。
在非**處進行優化有以下好處
(1).通常情況下能夠大大提高效率
(2). 不會危及到**的完整性
(3). 能夠快速部署
快取技術
下面來說說常用的快取技術,通過這些快取技術能夠大大的提高效率
在說到快取技術的時候不得不提到memcached ,memcached是高效、快速的分布式記憶體物件快取系統,主要用於加速 web 動態應用程式。
memcached的原理
memcached 是以守護程式方式執行於乙個或多個伺服器中,等待接收客戶端的連線操作,客戶端可以由各種語言編寫(例如php)。php 等客戶端在與 memcached 服務建立連線之後,接下來的事情就是訪問物件了,每個被訪問的物件都有乙個唯一的識別符號 key,訪問操作均通過這個 key 進行,儲存到 memcached 中的物件實際上是放置記憶體中的,並不是儲存在 cache 檔案中的,這也是為什麼 memcached 能夠如此高效快速的原因。
說完memcached,下面來說說常用的快取方法
1、編譯與opcode快取
因為php是解釋型的語言,所以每個php檔案在執行的時候都需要編譯後再執行,同乙個檔案,不同的使用者訪問,或者同乙個使用者不同時間訪問同乙個檔案,每 次都需要重新編譯然後執行,這樣就耗費了大量時間。
通過編譯快取每個檔案在修改之後只編譯一次這樣就減少了檔案io操作,使用者訪問後機器指令直接從記憶體中取出並執行而不是從硬碟中讀出。
最常見的php編譯快取工具有:apc,accelerator,xcache
關於高階快取可以參考:http://www.php100.com/html/shipinjiaocheng/php100shipinjiaocheng/2010/0201/3897.html
2、全域性頁面快取-- squid cache
squid cache(簡稱為squid)是乙個流行的自由軟體(gnu通用公共許可證)的**伺服器和web快取伺服器,squid作為網頁伺服器的前置 cache伺服器通過快取相關請求來提高web伺服器的速度
更多介紹請看這裡:http://zh.wikipedia.org/wiki/squid_cache
3、區域性快取之sql快取
在大多數應用程式中主要的瓶頸往往可以追溯到資料庫的操作中,一般都是因為複雜的資料庫查詢而耗費了大量時間,而sql快取可以大大降低複雜查詢造成的負 荷。
sql快取的例子(使用了memcached擴充套件)
**片段
$key = md5(「some sort of sql query」);
if (!($result = memcache_get($key)))
4、區域性快取之**塊快取
為了優化php程式,有時候我們不得不優化乙個個**段來減少那麼一點點的執行的時間,但是比起優化複雜的不同的php**段還不如通過快取來直接忽略這 些**段的優化,這樣做的好處是
(1). 能夠很快的看到效果
(2). 不會破壞以前的**
(3). 速度要比優化**要快得多
**塊快取的列子(同樣使用了memcached擴充套件)
**片段
function complex_function_abc($a, $b, $c)
return $result;
}
簡單說說PHP優化 值得一看
我們在編寫程式時,總是想要使自己的程式占用資源最小,執行速度更快,量更少。往往我們在追求這些的同時卻失去了很多東西。下面我想講講我對php優化的理解。優化的目的是花最少的代價換來最快的執行速度與最容易維護的 進行大範圍的優化,而不是死啃某些程式 我這裡所說的優化,基本上都是從伺服器,apache,資...
簡單說說MPEG
mpeg 1 mpeg 2和mpeg 4。mpeg 3 原本目標是為高畫質晰度電視 hdtv 設計,隨後發現mpeg 2已足夠hdtv應用,故mpeg 3的研發便中止。音訊物件 video audio objects 的編碼 3d內容 低位元率編碼 low bitrate encoding 和數字版...
簡單說說委託
在c 中,大多時候,方法的引數是資料,但有時我們會想將 方法 作為引數,這時,我們就可以用委託。委託一般情況下會和事件一起使用,事件說白了也是特殊的乙個方法。先看個例子吧 有很多方法,比如求平方,求階乘 想讓使用者輸入值,求該值的平方,階乘 using system using system.col...