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

簡單說說PHP優(yōu)化

開發(fā) 后端
我們在編寫程序時,總是想要使自己的程序占用資源最小,運行速度更快,代碼量更少。往往我們在追求這些的同時卻失去了很多東西。本文主要介紹了PHP代碼的優(yōu)化。優(yōu)化的目的是花最少的代價換來最快的運行速度與最容易維護的代碼。

我們在編寫程序時,總是想要使自己的程序占用資源最小,運行速度更快,代碼量更少。往往我們在追求這些的同時卻失去了很多東西。下面我想講講我對PHP優(yōu)化的理解。優(yōu)化的目的是花最少的代價換來最快的運行速度與最容易維護的代碼。

進行大范圍的優(yōu)化,而不是死啃某些程序代碼

我這里所說的優(yōu)化,基本上都是從服務器,Apache,數(shù)據(jù)庫這些方面來進行的優(yōu)化,而并不是對你的PHP代碼加以改進從而提高程序的運行速度,因為比起你將程序中的正則優(yōu)化為字符串處理函數(shù)從而提升程序速度來說,在大范圍內(nèi)進行的優(yōu)化所需要的代價要比這個小的多,而獲得報酬卻要豐厚的多。

在非代碼處進行優(yōu)化有以下好處:

1、通常情況下能夠大大提高效率

2、不會危及到代碼的完整性

3、能夠快速部署

緩存技術

下面來說說常用的緩存技術,通過這些緩存技術能夠大大的提高效率

在說到緩存技術的時候不得不提到memcached ,memcached是高效、快速的分布式內(nèi)存對象緩存系統(tǒng),主要用于加速 WEB 動態(tài)應用程序。

Memcached的原理

memcached 是以守護程序方式運行于一個或多個服務器中,等待接收客戶端的連接操作,客戶端可以由各種語言編寫(例如PHP)。PHP 等客戶端在與 memcached 服務建立連接之后,接下來的事情就是存取對象了,每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存到 memcached 中的對象實際上是放置內(nèi)存中的,并不是保存在 cache 文件中的,這也是為什么 memcached 能夠如此高效快速的原因。

說完memcached,下面來說說常用的緩存方法

1、編譯與OPCODE緩存

因為PHP是解釋型的語言,所以每個PHP文件在運行的時候都需要編譯后再執(zhí)行,同一個文件,不同的用戶訪問,或者同一個用戶不同時間訪問同一個文件,每次都需要重新編譯然后運行,這樣就耗費了大量時間。

通過編譯緩存每個文件在修改之后只編譯一次這樣就減少了文件IO操作,用戶訪問后機器指令直接從內(nèi)存中取出并執(zhí)行而不是硬盤中讀出。

最常見的PHP編譯緩存工具有:APC,Accelerator,xcache

2、全局頁面緩存-- Squid Cache

Squid Cache(簡稱為Squid)是一個流行的自由軟件(GNU通用公共許可證)的代理服務器和Web緩存服務器,Squid作為網(wǎng)頁服務器的前置cache服務器通過緩存相關請求來提高Web服務器的速度。

3、局部緩存之SQL緩存

在大多數(shù)應用程序中主要的瓶頸往往可以追溯到數(shù)據(jù)庫的操作中,一般都是因為復雜的數(shù)據(jù)庫查詢而耗費了大量時間,而SQL緩存可以大大降低復雜查詢造成的負荷。

SQL緩存的例子(使用了memcached擴展)

代碼片段:

  1. $key = md5(“some sort of sql query”);  
  2. if (!($result = memcache_get($key))) {  
  3. $result = $pdo->query($qry)->fetchAll();  
  4. // 緩存查詢結果一小時  
  5. memcache_set($key$result, NULL, 3600);  

4、局部緩存之代碼塊緩存

為了優(yōu)化PHP程序,有時候我們不得不優(yōu)化一個個代碼段來減少那么一點點的執(zhí)行的時間,但是比起優(yōu)化復雜的不同的PHP代碼段還不如通過緩存來直接忽略這些代碼段的優(yōu)化,這樣做的好處是:

1、能夠很快的看到效果 

2、不會破壞以前的代碼

3、速度要比優(yōu)化代碼要快得多

代碼塊緩存的列子(同樣使用了memcached擴展)

代碼片段:

  1. function complex_function_abc($a$b$c) {  
  2. $key = __FUNCTION__ . serialize  
  3. (func_get_args());  
  4. if (!($result = memcache_get($key))) {  
  5. $result = //函數(shù)代碼  
  6. // 儲存執(zhí)行結果1小時   
  7. memcache_set($key$result, NULL, 3600);  
  8. }  
  9. return $result;  

當然除了上述方法外還可以用到文件緩存(將數(shù)據(jù)庫中的數(shù)據(jù)取出儲存在文件中),還可以生成靜態(tài)HTML文件等,但是這些方法的緩存還是將文件儲存在硬盤上而不是內(nèi)存中。

輸出控制

除了上述緩存技術外還可以通過輸出控制來讓程序執(zhí)行的時間更少

下面通過PHP與APACHE來說說輸出控制

1、PHP輸出控制

這里最主要用到ob_start()以及PHP中的OB系列函數(shù),這些函數(shù)可以做什么呢?

第一就是靜態(tài)模版技術。所謂靜態(tài)模版技術就是通過某種方式,使得用戶在client端得到的是由PHP產(chǎn)生的html頁面。如果這個html頁面不會再被更新,那么當另外的用戶再次瀏覽此頁面時,程序將不會再調(diào)用PHP以及相關的數(shù)據(jù)庫,對于某些信息量比較大的網(wǎng)站,例如sina,163,sohu。類似這種的技術帶來的好處是非常巨大的。

代碼示例:

  1. <?php  
  2. ob_start(); //打開緩沖區(qū)  
  3. ?>  
  4. php頁面的全部輸出  
  5. <?  
  6. $content = ob_get_contents(); //取得php頁面輸出的全部內(nèi)容  
  7. $fp = fopen("output.html""w"); //創(chuàng)建一個文件,并打開,準備寫入  
  8. fwrite($fp$content); //把php頁面的內(nèi)容全部寫入output.html,然后……  
  9. fclose($fp);  
  10. ?> 

當然這個ob系列函數(shù)還有其他很多用處我就不在這里一一說明了。

2、apache輸出控制

將SendBufferSize設置為頁面大小,這樣就能將頁面一次性放在發(fā)送緩沖區(qū)從而增加處理速度。
SendBufferSize 指令

說明:TCP發(fā)送緩沖區(qū)大小(字節(jié))

語法:SendBufferSize bytes

默認值:SendBufferSize 0

作用域:server config

狀態(tài):MPM

模塊:beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

這個指令設置服務器的TCP發(fā)送緩沖區(qū)的大小(字節(jié))。提高這個值會導致兩個后果:高速度和高潛伏時間(100ms左右)。如果設置為"0",將使用操作系統(tǒng)默認值。

通過源代碼方式編譯你的Apache/PHP/Database 可讓你的程序增加10--15%的速度

下面再說說在代碼優(yōu)化的時候應該注意的

1、短代碼不等于快的代碼

很多人在寫程序時希望將代碼寫的越簡潔越好,但是越短的代碼有時候反而需要更長的執(zhí)行時間,所以哪怕是用更多的代碼也不使用速度慢的代碼

2、在寫程序的時候更應該注重程序的擴展性,而不是追求速度

3、在優(yōu)化你的代碼之前,先看看跟數(shù)據(jù)庫有關的部分,因為大多數(shù)應用程序的瓶頸在數(shù)據(jù)庫而不是代碼

4、微優(yōu)化得不償失

什么叫做微優(yōu)化?就像前面所說的將正則表達式部分的代碼改用字符串函數(shù)代替。這樣做有以下缺點:

(1)花費時間較長

(2)不會解決你的性能問題

(3)很有可能會破壞以前的代碼從而產(chǎn)生未知的錯誤

(4)付出大于回報

這里還不得不提到一個誤區(qū),有些人為了讓程序更加優(yōu)化,在分析業(yè)務邏輯的時候便將優(yōu)化考慮在內(nèi)了,從而為了得到更優(yōu)的代碼而改動業(yè)務邏輯。這是十分愚蠢的想法,因為程序的目的便是為了處理現(xiàn)實中遇到的問題,是為這些問題服務的,怎么能本末倒置呢。

【編輯推薦】

  1. 在PHP語言中使用JSON
  2. 再議PHP程序語言中 單雙引號的區(qū)別
  3. 內(nèi)嵌式的語言PHP應用技巧七則
  4. 非常實用 十個PHP高級應用技巧
  5. 高手傳經(jīng) 學習PHP重在堅持
責任編輯:于鐵 來源: PHPchina
相關推薦

2011-05-31 14:06:10

Oracle分區(qū)

2009-12-24 16:21:04

Fedora core

2011-07-18 14:45:26

2010-06-13 15:10:19

Linux 查看進程

2010-06-18 17:13:07

Linux anacr

2019-06-18 16:31:34

CPUGPU內(nèi)存

2009-12-28 17:12:38

Fedora Foru

2010-06-18 10:11:16

Linux Accep

2020-12-09 08:50:55

web組件開發(fā)

2010-06-21 16:02:35

Linux ar命令

2021-01-22 11:58:30

MySQL數(shù)據(jù)庫開發(fā)

2010-09-17 14:54:29

常用網(wǎng)絡協(xié)議

2009-06-18 12:14:47

javascript 函數(shù)

2009-09-01 17:59:36

C#泛型的作用

2011-07-26 09:04:44

MySQL Repli數(shù)據(jù)庫負載均衡

2019-05-27 17:01:02

PHPPDO編程語言

2010-01-12 18:27:58

C++代碼

2009-11-30 11:25:24

VS2003 UNIC

2011-07-11 10:00:34

PHP緩存技術

2024-04-07 01:00:00

模型P圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠的干狠狠的操 | 亚洲一区二区三区久久久 | 日韩亚洲一区二区 | 91精品国产欧美一区二区 | 国产成人精品免费视频大全最热 | 一区网站 | 欧美日韩高清免费 | 99久久夜色精品国产亚洲96 | 久久久久久亚洲欧洲 | 羞羞羞视频| 日本超碰| 久久久天天 | 国产成视频在线观看 | 黄色片在线免费看 | 久久精品国产亚洲夜色av网站 | 天天插天天搞 | 成人性生交大片 | 国产亚洲精品久久久久动 | 91看片网址| 在线观看国产 | 亚洲综合二区 | 精品久久电影 | 一二三在线视频 | 日本a∨精品中文字幕在线 亚洲91视频 | 九九久久免费视频 | 欧美一级电影免费观看 | 亚洲精品在线看 | 国产精品国产三级国产aⅴ无密码 | 欧洲亚洲精品久久久久 | 国产黄色大片在线观看 | 在线观看特色大片免费网站 | 瑞克和莫蒂第五季在线观看 | 成人av免费 | 97久久久久久 | 欧美久 | 欧美黄 片免费观看 | 免费黄色大片 | 午夜视频网| 国产欧美精品一区二区三区 | 中文字幕免费中文 | 日韩一区二区成人 |