⑴ 如何優化php性能
如果一個方法能被靜態,那就聲明它為靜態的,速度可提高1/4,甚至我測試的時候,這個提高了近三倍。
當然了,這個測試方法需要在十萬級以上次執行,效果才明顯。
其實靜態方法和非靜態方法的效率主要區別在內存:靜態方法在程序開始時生成內存,實例方法在程序運行中生成內存,所以靜態方法可以直接調用,實例方法要先成生實例,通過實例調用方法,靜態速度很快,但是多了會占內存。
任何語言都是對內存和磁碟的操作,至於是否面向對象,只是軟體層的問題,底層都是一樣的,只是實現方法不同。靜態內存是連續的,因為是在程序開始時就生成了,而實例申請的是離散的空間,所以當然沒有靜態方法快。
靜態方法始終調用同一塊內存,其缺點就是不能自動進行銷毀,而是實例化可以銷毀。
⑵ 如何對php代碼進行優化
在執行某段代碼的之前獲得microtime時間,然後在結束的時候再獲取一次,兩次時間相差即可。你也可以使用zend studio 的調 試功能,它可以標出程序的執行時間。
⑶ php代碼優化及php相關問題總結
1,在函數中,傳遞數組時
使用
return
比使用
global
要高效
比如
function
userloginfo($usertemp){
$detail=explode("|",$usertemp);
return
$detail;
}
$login=userloginfo($userdb);
比
function
userloginfo($usertemp){
global
$detail;
$detail=explode("|",$usertemp);
}
userloginfo($userdb);
要高效
2,(這個代碼用於得到程序目錄對應的網址,推薦使用)
$urlarray=explode('/',$HTTP_SERVER_VARS['REQUEST_URI']);
$urlcount=count($urlarray);unset($urlarray[$urlcount-1]);
$ofstarurl='http://'.$HTTP_SERVER_VARS['HTTP_HOST'].implode('/',$urlarray);
這段代碼比
$pre_urlarray=explode('/',$HTTP_SERVER_VARS['HTTP_REFERER']);
$pre_url=array_pop($pre_urlarray);
要高效
3,在循環中判斷時,數值判斷使用恆等要比等於高效
$a=2;$b=2;
比如
if($a==$b)$c=$a;
比
if($a===$b)$c=$a;
高效
4,mysql
查詢時盡量使用where
in
少用
limit
limit查多記錄的前幾條,
速度很快,
但是查詢最面幾條就會慢
使用in
.在查詢連續性記錄,非常快,
非連續性記錄第一次運行會稍微慢一點,但是之後將比較快!
5,NT伺服器數據操作穩定性不及unix/linux
6,輸出前使用盡量使用
ob_start();
可以加快輸出速度,適用NT或nuli/linux,對unlix類伺服器
如果使用
ob_start('ob_gzhandler');輸出效率將更高
7,判斷的時候盡量使用if($a==他的值)
否定的時候盡量使用if(empty($a)),因為這樣程序運行更快速
8,使用不等時
!=
與
<>
效率相當
9,個人經驗得
使用
$a="11111111111111";
的效率和
$a='11111111111111';
相當.並不象書本說的相差很大
10,使用規范的SQL語句,
會有利於MySQL的解析
11,使用
if($online){
$online1=$online;
setcookie('online1',$online,$cookietime,$ckpath,$ckdomain,$secure);
}
COOKIE將馬上生效
使用
if($online)
setcookie('online1',$online,$cookietime,$ckpath,$ckdomain,$secure);
COOKIE需要再刷新一次才能生效
12,使用
$handle=fopen($filename,wb);
flock($handle,LOCK_SH);
$filedata=fread($handle,filesize($filename));
fclose($handle);
比
file($filename);
無論在速度還是穩定上都要優秀
13,截斷字元串優化函數(可避免?字元出現)
function
substrs($content,$length)
{
if(strlen($content)>$length){
$num=0;
for($i=0;$i<$length-3;$i++)
{
if(ord($content[$i])>127)$num++;
}
$num%2==1
?
$content=substr($content,0,$length-4):$content=substr($content,0,$length-3);
$content.='
...';
}
return
$content;
}
比如$newarray[1]=substrs($newarray[1],25);
14,程序中屏蔽大小寫
for
($asc=65;$asc<=90;$asc++)
{
//strtolower()
此函數在一些伺服器會產生亂碼!
if
(strrpos($regname,chr($asc))!==false)
{
$error="為了避免用戶名混亂,用戶名中禁止使用大寫字母,請使用小寫字母";
$reg_check=0;
}
}
15,不使用
file();和不使用
fget();(不穩定或速度慢)
取一數組函數
function
openfile($filename,$method="rb")
{
$handle=@fopen($filename,$method);
@flock($handle,LOCK_SH);
@$filedata=fread($handle,filesize($filename));
@fclose($handle);
$filedata=str_replace("\n","\n<ofstar:>",$filedata);
$filedb=explode("<ofstar:>",$filedata);
//array_pop($filedb);
$count=count($filedb);
if($filedb[$count-1]==''){unset($filedb[$count-1]);}
return
$filedb;
}
//這個函數雖然代碼比較多,不過在速度和穩定性上優勢很大!
先寫到這
以上完全個人的一點小結,,不過正確性都經過反復測試,如果有朋友質疑,請先測試,再討論,謝謝!
⑷ php 讀取文件怎麼優化 [PHP 基礎編程]
首先得看你的基礎了,如果你有c或者c++的編程經驗,那再好不過了。如果你沒有,那麼也不要灰心,其實php很簡單,語法估計一個下午就可以搞定,難點在設計。並且你要建立起一個系統的知識框架,比如http協議,html,JavaScript,css(註:html,JavaScript,css只需初步了解,如果你一直做後台設計,可能這些你都接觸不到),另外就是和webserver這邊的,比如緩沖,資料庫的設計和優化等等。等你建立好自己的知識體系結構,那你也就算是精通php的web開發了。
⑸ PHP使用常量和數組哪個作為配置文件最方便,效率性能最高呢
根據演算法的時間復雜度分析,你的瓶頸絕對不會出現在這里。。。所以用數組也好,用常量也罷,不要花時間糾結在這上面,很可能你減少一次HTTP請求或者優化資料庫處理,帶來的優化效果遠比這個好得多
⑹ 如何徹底優化php程序降低CPU佔用
1、優化數據和邏輯和查詢。
2、改用php7,並且用嚴格模式編寫。
3、優化伺服器實現動靜分離比如把apache和iis換成nginx或nginx+apache。
⑺ PHP函數執行時間過長無響應,有什麼優化的辦法
這個優化要看下你資料庫的結構了,最簡單的使用 set_time_limit(0);函數修改php文件執行30秒的限制,禁對單個文件可用,這樣不需要修改php的配置!
⑻ 如何對低硬體配置的中小型php網站進行性能優化
本人對php不熟悉,現在採用PHP的magento開源項目來做,在盡量少代碼修改的情況下讓頁面載入快些(期望日IP少於2,000,PV少於50,000,首頁打開3s以內)。網站是運行在Digital ocean的VPS(1GB 內存,30GB SSD硬碟)上的,不能做負載均衡。
這個站的圖片比較多,也比較大,但總體數據量在10GB以下。在chrome下監控了打開速度,發現首頁文件等待時間達到了5s,而接收時間為幾百毫秒。另外一些靜態文件(JS,CSS很大,並且都在head內)也block住了其他頁面元素的下載和頁面渲染。所以需要對頁面和伺服器同時進行優化。
我的想法是從以下幾個方面來做:
1.首先從架構上使用lanmp(偏向這個)或者lamp。
打算使用網上的一鍵安裝包,不太清楚這幾個之間最佳的版本組合是什麼樣的(都用最新版本?)? 是自己單獨編譯還是一鍵安裝好?
2.服務端優化,主要使用緩存手段
1)Zend Optimizer優化PHP
2)APC、eaccelerator或者XCache對PHP緩存以及最新出來的Opcache。哪個比較好?
3)Varnish配合Nginx進行緩存靜態資源緩存。相對於squid,哪個比較好?
4)memcached進行資料庫緩存
1-4項同時使用不知道會不會有沒有沖突?或者有沒有更好的方案。因為不想對代碼進行大改,所以服務端緩存最佳實踐這塊請重點給出意見。
3. 使用CDN加速靜態資源
4. 優化靜態資源,使用minify來合並壓縮CSS,JS這些靜態資源
5. 啟用gzip
6. 對圖片和JS等靜態資源增加Expires頭,這條應該算頁面優化吧,放到後面來。
參考了一些資料後發現優化方法有很多,用的太多方法(特別是緩存手段)隱患越大,有沒有優化的最佳策略或者方法論(而不僅僅從工具上)?
⑼ php性能優化的幾個方法
面對一個性能問題是,第一步永遠是找到問題產生的原因,而不是去看技巧列表。搞明白產生瓶頸的原因,找到目標並且實施修復,然後再重新測試。查找瓶頸只是萬里長征的第一步,這里有些常用技巧,希望對最重要的第一步找到瓶頸能有所幫助。
使用監控方法(比如監控寶),進行benchmark和監控,網路,特別是網路狀況瞬息萬變,做得好的話5分鍾就可以找到瓶頸。
剖析代碼。必須了解那部分代碼耗時最多,在這些地方多多關注。
想找到瓶頸,請檢查每個資源請求(比如,網路、CPU、內存、共享內存、文件系統、進程管理、網路連接等等……)
先對迭代結構和復雜的代碼進行benchmark
在在真實負載下用真實數據進行真實測試,當然,如果可以最好用產品伺服器。
緩存
(Caching)
有些人認為緩存是解決性能問題最有效的辦法之一,試試這些:
使用OPCODE(操作碼)緩存,這樣腳本就不會在每次訪問時重新編譯一次。比如:啟用Windows平台上的windows緩存擴展。可以緩存opcode,文件,相對路徑,session數據和用戶數據。
考慮在多伺服器環境下使用分布式緩存
在調用imap_header()之前先調用imap_headers()
編譯
vs. 解釋(Compiling vs. Interpreting)
將PHP源碼編譯成機器碼。動態解釋執行同樣的編譯,但它是按行執行的。編譯為opcode是折中選擇,它可以將PHP源碼翻譯為opcode,之後opcode再轉為機器碼。以下為關於編譯與解釋的相關技巧:
上線之前將PHP代碼編譯為機器碼。opcode緩存盡管並不是最好的選擇,但依舊比解釋型來得強。或者,考慮將PHP代碼編譯成一個C擴展。
PHP的opcode編譯器(bcompiler)還不能在產品環境中使用