『壹』 php foreach、while性能比較
foreach是對數組副本進行操作(通過拷貝數組),而while則通過移動數組內部指標進行操作,一般邏輯下認為,while應該比foreach快(因為foreach在開始執行的時候首先把數組復制進去,而while直接移動內部指標。),但結果剛剛相反。
在循環里進行的是數組「讀」操作,則foreach比while快:
復制代碼
代碼如下:
foreach
($array
as
$value)
{
echo
$value;
}
while
(list($key)
=
each($array))
{
echo
$array[$key];
}
在循環里進行的是數組「寫」操作,則while比foreach快:
復制代碼
代碼如下:
foreach
($array
as
$key
=>
$value)
{
echo
$array[$key]
=
$value
.
'...';
}
while
(list($key)
=
each($array))
{
$array[$key]
=
$array[$key]
.
'...';
}
總結:通常認為,foreach涉及到值復制,一定會比while慢,但實際上,如果僅僅是在循環里進行數組的讀操作,那麼foreach是很
快的,這是因為PHP採用的復制機制是「引用計數,寫時復制」,也就是說,即便在PHP里復制一個變數,最初的形式從根本上說其實
仍然是引用的形式,只有當變數的內容發生變化時,才會出現真正的復制,之所以這么做是出於節省內存消耗得目的,同時也提升了
復制的效率。這樣看來,foreach的高效讀操作就不難理解了。另外,既然foreach不適合處理數組寫操作,那麼我們可以得出一個結
論,多數情況下,類似foreach
($array
as
$key
=>
$value)形式的做數組寫操作得代碼都應該被替換成while
(list($key)
=
each($array))。這些技巧產生的速度差異在小項目里可能並不明顯,但是在類似框架這樣的大項目中,一次請求動輒便會涉及到幾
百幾千幾萬次數組循環操作,差異就會明顯放大。
『貳』 php php for循環查詢資料庫效率低,該如何優化mysql mysql
那就用sphinx 技術,目前這個是最好的,沒有之一。
下面是我網路弄過來的,怎麼使用還得你自己看白皮書了。
Sphinx的主要特性包括:
高速索引 (在新款CPU上,近10 MB/秒);
高速搜索 (2-4G的文本量中平均查詢速度不到0.1秒);
高可用性 (單CPU上最大可支持100 GB的文本,100M文檔);
提供良好的相關性排名
支持分布式搜索;
提供文檔摘要生成;
提供從MySQL內部的插件式存儲引擎上搜索
支持布爾,短語, 和近義詞查詢;
支持每個文檔多個全文檢索域(默認最大32個);
支持每個文檔多屬性;
支持斷詞;
支持單位元組編碼與UTF-8編碼。[1]
『叄』 怎樣提高php運行效率
1,資料庫模型很重要,建表要做好索引,以及數據拆分
2,緩存,適當運用緩存
3,盡可能使用官方的函數,不要自己造車
『肆』 php是解釋語言,有什麼方法提高php的運行速度
代碼優化
代碼優化不僅僅是寫出干凈和清晰的代碼,而是對代碼進行一定的簡化。可以使用Zend Optimizer來自動幫助完成這些繁雜的工作。Zend Optimizer可以從Zend Technologies的網站http://www.zend.com/免費得到,但必須同意它的許可約定,因為它不是以GPL方式發行的。它的原理很簡單,即通過檢測Zend引擎產生的中間代碼,並對它進行優化,從而獲得更高的執行速度。
在使用了Zend Optimizer後,復雜的PHP源程序的執行效率馬上會得到顯著提高,缺點是優化後的代碼可讀性下降,給代碼修改帶來困難。
Zend Optimizer的安裝方法非常簡單,只要根據用戶使用的平台,下載相關的預編譯版本,把下面2行代碼加入到php.ini文件中,重新啟動Web 伺服器就行了:
zend_optimizer.optimization_level=15
zend_extension=″/path/to/ZendOptimizer.so″
zend_loader.enable=Off
額外增加的第三行代碼是可選的,因為禁用zend_loader將會使優化速度更快。需要注意的是,只有在不使用Zend Encoder Runtime的時候,才可以禁用zend_loader。
使用緩存
如果PHP程序的規模很大,那麼提高速度的辦法就是使用緩存。現在已經有許多緩存方案可供選擇,其中包括Zend Cache、APC和Afterburner Cache。
上面這幾種都是「緩存模塊」(caching moles)。第一次調用PHP文件時,緩存模塊從PHP源代碼生成一些中間代碼,並把這些中間代碼存儲在Web伺服器的內存中。以後再調用這些文件時,就可以直接使用內存中「編譯」過的代碼。這種方法確實能夠改善應用的性能,因為它使得磁碟訪問量減低到了最少的程度(代碼已經讀取和解析),代碼直接在內存中運行,使得伺服器響應請求的速度大大提高。
當然,緩存模塊還會監視PHP源文件的變化,必要時會重新緩存頁面,從而防止用戶得到的頁面仍舊由過時的PHP代碼生成。由於緩存模塊能夠明顯地降低伺服器的負載,提高PHP應用的響應效率,因此它們非常適合於負載較大的網站使用。
Zend Cache是Zend Technologies公司開發的商業軟體。在第一次運行後,PHP頁面的運行速度立刻會有很大的提高,伺服器的空閑資源也更多了。缺點是它不是免費的,但性價比還是很高的。
Afterburner Cache是Bware Technologies公司開發的免費緩存模塊。功能與Zend Cache基本一樣,但提高性能方面比不上Zend Cache。
APC(Alternative PHP Cache)是由Community Connect公司開發的另一種免費緩存模塊,目前版本是2.0.4,可以從http://pecl.php.net/package/APC獲得。對於產品應用來說,它的性能很穩定,而且也能在很大程度上提高響應請求的速度。
壓縮網頁內容
影響站點的訪問速度還有1個重要因素,那就是下載速度。解決的辦法就是壓縮網頁內容。對於純文本內容而言,HTTP壓縮技術可壓縮至原大小的40%以下,從而提供60%以上的數據傳輸節約。雖然Web伺服器會因為壓縮導致CPU佔用的略微上升,但可以節約大量用於傳輸的網路IO。
根據IETF規范,大部分瀏覽器都支持使用gzip壓縮演算法進行內容壓縮。也就是說,可以先用gzip壓縮網頁內容,然後發送到客戶端瀏覽器,瀏覽器在接收的時候會自動解壓數據,再顯示頁面。這個過程對用戶來說,是完全透明的。同樣,壓縮Web頁面的內容也有不同的方法。
Mod_gzip是1種開放源代碼的、標準的Apache模塊,也叫互聯網內容加速模塊。可以將它和Apache一起編譯,也可以作為DSO使用。相對於普通的瀏覽過程,它可以節省40%左右的流量。Mod_gzip不僅可以壓縮靜態的內容,如HTML、XML,而且對動態生成的,包括SQL、Java、WML、VRML等產生的內容,在伺服器端進行實時壓縮並傳輸,其壓縮效率驚人,一般都為60%~85%。
壓縮動態網頁的內容,還可以使用class.gzip來對.php文件編碼,class.gzip通過在PHP腳本的開頭和結尾調用它的一些函數來壓縮網頁內容。如果整個站點都需要這樣的壓縮,可以在php.ini文件中的auto_prepend和auto_append中調用這些函數,但是會佔用一定的系統開銷。
PHP4.0.4推出了1種新的輸出緩沖的處理手段—ob_gzhandler,它的作用和class.gzip完全一樣,區別是可以直接把它加到php.ini 文件中,語法如下:
output_handler = ob_gzhandler;
這樣將激活PHP的輸出緩沖功能,並在發送內容前進行壓縮。如果不想在這里設置,只在需要的地方才改變這個默認設置(不壓縮),只要在需要壓縮的PHP源程序目錄中,修改一下.htaccess文件就行了,語法如下:
php_value output_handler ob_gzhandler
或者直接在PHP代碼中調用它:
ob_start(″ob_gzhandler″);
輸出緩沖的效果確實很理想,並且不會為伺服器帶來額外的系統開銷。要注意的一點是Netscape Communicator不支持圖像的壓縮。因此除非知道訪問者都使用Internet Explorer,否則必須禁止壓縮jpeg和gif圖象。
其它技巧
在編程時,使用一些小技巧也可以加快PHP的運行速度:
(1)用i+=1代替i=i+1,既符合c/c++的習慣,效率相對還更高。
(2)盡可能使用PHP內部函數。
(3)能使用單引號字元串時,盡量使用單引號字元串。單引號字元串的效率要高於雙引號字元串。
(4)用foreach代替while遍歷數組,foreach的效率明顯高於while循環,而且不需要調用reset函數。
使用第四個方法時要注意代碼的嚴謹性、安全性、不是所有的程序都適合用第四種方式優化。
『伍』 php 如何提高 「循環資料庫修改操作」的速度
合並你的sql。
『陸』 php多重循環的執行效率問題
如果是普通的網頁~而且用戶量大,建議使用緩存
如果僅僅是自己用PHP寫的一個用於執行某個任務的程序,使用sleep()函數,讓循環稍微停頓一下~
不過,在不影響效率的情況下,無法阻止PHP 調用CPU~
『柒』 提高PHP開發效率的技巧
用單引號代替雙引號來包含字元串,這樣做會更快一些。因為PHP會在雙引號包圍的字元串中搜尋變數,單引號則不會,注意:只有echo能這么做,它是一種可以把多個字元串當作參數的「函數」(譯註:PHP手冊中說echo是語言結構,不是真正的函數,故把函數加上了雙引號)。
1、如果能將類的方法定義成static,就盡量定義成static,它的速度會提升將近4倍。
2、$row[』id』] 的速度是$row[id]的7倍。
3、echo 比 print 快,並且使用echo的多重參數(譯註:指用逗號而不是句點)代替字元串連接,比如echo $str1,$str2。
4、在執行for循環之前確定最大循環數,不要每循環一次都計算最大值,最好運用foreach代替。
5、注銷那些不用的變數尤其是大數組,以便釋放內存。
6、盡量避免使用__get,__set,__autoload。
7、require_once()代價昂貴。
8、include文件時盡量使用絕對路徑,因為它避免了PHP去include_path里查找文件的速度,解析操作系統路徑所需的時間會更少。
9、如果你想知道腳本開始執行(譯註:即伺服器端收到客戶端請求)的時刻,使用$_SERVER[『REQUEST_TIME』]要好於time()。
10、函數代替正則表達式完成相同功能。
11、str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。
『捌』 php 31700次循環 用了160s 怎麼這么慢啊!!!!
這就是PHP的速度了,做為WEB語言,通常是不需要你這樣多次的循環的。
你的代碼我復制運行了,在CLI下也用了126秒。
還有,看你好像寫錯了,提醒你,如果你把 $strTemp = 換成 $strTemp .= 就要考慮一下內存問題了。