1. 程式人生 > >PHP Coding Tips程式碼優化備忘錄

PHP Coding Tips程式碼優化備忘錄

1. 檢查伺服器環境,是否win系統;

<?php

$is_win = DIRECTORY_SEPARATOR == '//';

?>

2. 使用$_SERVER['REQUEST_TIME']代替time();

time()會引來一次函式呼叫, 而如果對時間的精確值要求不高,  可以使用$_SERVER['REQUEST_TIME']代替,

3. 用FALSE表示錯誤, 用NULL表示不存在;

對於操作類的函式, 失敗返回FALSE, 表示”操作失敗了”。 

    而對於查詢類的函式, 如果找不到想要的值, 則應該返回NULL, 表示”找不到”

4. 用字串函式代替正則

例如:

strpbrk()

strncasecmp()

strpos()/strrpos()/stripos()/strripos()

5. 不要用常量代替字串

- 需要查詢雜湊表兩次

- 需要把常量名轉換為小寫(進行第二次查詢的時候)

- 生成 E_NOTICE 警告

- 會建立臨時字串

6. 不要把 count/strlen/sizeof 放到 for 迴圈的條件語句中

for ($i=count($res);$i>=0;$i--){

do_sth($res[i]);

}

7. 檢視指令碼記憶體使用量

memory_get_usage()

單位是位元組,寫指令碼的時候記得unset物件或者大陣列,不知道哪裡用了記憶體,就用上面的方法跟蹤

8. 檢視指令碼執行時間

<?php
class Timer {   
private static $__startTime = 0;   
private static $__stopTime  = 0;   
private static $__timeSpent = 0;   
  
public static function start(){   
self::$__startTime = microtime(true);
} 
public static function stop(){   
self::$__stopTime  = microtime(true);
}  
public static function spent() {   
self::$__timeSpent = self::$__stopTime-self::$__startTime; 
return round(self::$__timeSpent, 5);
}  
}
Timer::start();
...
Timer::stop();
echo Timer::spent();
?>

9. 用帶目錄路徑提高 PHP 檔案訪問效率

需要包含其他 PHP 檔案的時候,使用完整路徑,或者容易轉換的相對路徑。

<?php

include 'file.php'; // bad approach

incldue './file.php'; // good

include '/path/to/file.php'; // ideal

?>

10. 如果能將類的方法定義成static,就儘量定義成static,它的速度會提升將近4倍;

11. 登出那些不用的變數尤其是大陣列,以便釋放記憶體;

12. 使用PHP的Gzip載入CSS檔案

<?php
if(extension_loaded('zlib')){//檢查伺服器是否開啟了zlib拓展
ob_start('ob_gzhandler');
}
//如果處理的是js檔案,則使用 header ("content-type:application/x-javascript; charset: gb2312");
header ("content-type: text/css; charset: gb2312");//注意修改到你的編碼
header ("cache-control: must-revalidate");
$offset = 60 * 60 * 24;//css檔案的距離現在的過期時間,這裡設定為一天
$expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";
header ($expire);
ob_start("compress");
function compress($buffer) {//去除檔案中的註釋
  $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
  return $buffer;
}
 
//包含你的全部css文件
include('global.css');
include('layout.css');
 
if(extension_loaded('zlib')){
ob_end_flush();//輸出buffer中的內容,即壓縮後的css檔案
}
?>

13. 迴圈內部不要宣告變數,尤其是大變數和物件;

14. foreach效率更高,儘量用foreach代替while和for迴圈;

15. 使用func_get_args()獲取匿名形參;

function foo() {       
    $args = func_get_args();       
    foreach ($args as $k => $v) {         
        echo "arg".($k+1).": $v\r\n";
    }   
}

16. 不用第三變數交換倆個變數的值;

list($a,$b) = array($b,$a);

17. 用switch代替條件判斷語句塊:

if( $a ){
}elseif($b){
}elseif($c || $d){
}

可以寫為:

swithc(TRUE){
case $a:
break;
case $b:
            break;
case $c:
case $d:
            break;
}

18. switch和in_array要確定變數型別, 防止隱形的型別轉換

switch( strval($name) ){
case 'good':
break;
case 'day':
break;
case 'world':
break;
}

19. PHP轉發中文名檔案下載程式碼

<?php
$file = "/tmp/中文名.tar.gz";
 
$filename = basename($file);
 
header("Content-type: application/octet-stream");
 
//處理中文檔名
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = rawurlencode($filename);
if (preg_match("/MSIE/", $ua)) {
 header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
 header("Content-Disposition: attachment; filename*=\"utf8''" . $filename . '"');
} else {
 header('Content-Disposition: attachment; filename="' . $filename . '"');
}
 
header("Content-Length: ". filesize($file));
readfile($file);

20. 使用Glob()查詢檔案

<?php
    $files = glob('*.{php,txt}', GLOB_BRACE);   
    print_r($files); 
    /* 輸出: 
    Array (     
        [0] => phptest.php     
        [1] => pi.php
        [2] => test.txt 
        ) 
    */

21. PHP系統常量

    行號 (__LINE__);
    檔案 (__FILE__);
    目錄 (__DIR__);
    函式名 (__FUNCTION__);
    類名 (__CLASS__);
    方法名 (__METHOD__); 
    名字空間 (__NAMESPACE__);

22. 生成唯一的ID

<?php
// 字首 echo uniqid('foo_'); 
/* 輸出 foo_4bd67d6cd8b8f */

23.字串壓縮

<?php
    $string  =  "abcdefg...";
    $compressed = gzcompress($string);   
    echo "Original size: ". strlen($string)."\r\n"; 
    /* 輸出原始大小 Original size: 800 */   
    echo "Compressed size: ". strlen($compressed)."\r\n"; 
    /* 輸出壓縮後的大小 Compressed size: 418 */   
    // 解壓縮 
    $original = gzuncompress($compressed);

相關推薦

PHP Coding Tips程式碼優化備忘錄

1. 檢查伺服器環境,是否win系統; <?php $is_win = DIRECTORY_SEPARATOR == '//'; ?> 2. 使用$_SERVER['REQUEST_TIME']代替time(); time()會引來一次函式呼叫, 而

php程式碼優化

      1、用單引號代替雙引號來包含字串,這樣做會更快一些。因為PHP會在雙引號包圍的字串中搜尋變數,單引號則不會,注意:只有echo能這麼做,它是一種可以把多個字串當作引數的函式(譯註:PHP手冊中說echo是語言結構,不是真正的函式,故把函式加上了雙引號)。    

php程式碼優化方法,加速執行速度的技巧總結

1. 儘量採用大量的PHP內建函式。2. echo 比 print 快。3. 不要把方法細分得過多,仔細想想你真正打算重用的是哪些程式碼?4. 在執行for迴圈之前確定最大迴圈數,不要每迴圈一次都計算最大值。5. 登出那些不用的變數尤其是大陣列,以便釋放記憶體。6. 並非要

php-程式碼優化準則

用單引號代替雙引號來包含字串,這樣做會更快一些。因為PHP會在雙引號包圍的字串中搜尋變數,單引號則不會,注意:只有echo能這麼做,它是一種可以把多個字串當作引數的“函式”(譯註:PHP手冊中說echo是語言結構,不是真正的函式,故把函式加上了雙引號)。   1、如果能將類的方法定義成static,就儘量定義

php程式碼優化 細節方案

編輯處理: 1. If a method c++an be static, declare it static. Speed improvement is by a factor of 4. 如果一個方法可靜態化,就對它做靜態宣告。速率可提升至4倍。   2. ech

php coding中的一些小問題

span jquery tle net lan serial param utf func 最近在SAE上寫微博應用,碰到一些小問題,記下來,以供參考: 1、出錯提示: Fatal error: Can‘t use function return value

PHP程序性能優化的50種方法

裝配 參數 c++ 例如 request glob pro 編譯 釋放內存 用單引號代替雙引號來包含字符串,這樣做會更快一些。因為 PHP 會在雙引號包圍的 字符串中搜尋變量,單引號則不會,註意:只有 echo 能這麽做,它是一種可以把多個字符 串當作參數的&ldquo

PHP緩存加速優化

環境變量 生效 install PE spa -- TE file with php加速優化 LNMP環境 根據之前部署過的LNMP環境配置 配置環境變量 LC_ALL echo ‘export LC_ALL=C‘ >> /etc/profile source

JAVA程式碼優化5個細節

1、儘量指定類、方法的final修飾符 帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String,整個類都是final的。為類指定final修飾符可以讓類不可以被繼承,為方法指定final修飾符可以讓方法不可以被重寫。如果指定了

多條件if...else...選擇語句程式碼優化

偶爾間又看到了自己的部落格,突然發現好久沒有寫部落格了。看到自己的部落格現在瀏覽量還算挺不錯的,所以決定重新開始寫一些部落格,不過我已經轉行前端兩年了,所以不會像以前那樣寫C++和演算法了,現在以寫前端的內容為主。 最近在寫業務程式碼時,發現有一段業務的邏輯非常蛋疼,由於選擇邏輯太多,所以需要

PHP之smarty程式碼之if else if程式碼的使用

if,elseif,else Smarty 中的 if 語句和 php 中的 if 語句一樣靈活易用,並增加了幾個特性以適宜模板引擎. if 必須於 /if 成對出現. 可以使用 else 和 elseif 子句. $smarty->assign("sex","2");//賦值

java基礎學習總結(十六):程式碼優化

程式碼優化的目標是: 1、減小程式碼的體積 2、提高程式碼執行的效率 程式碼優化細節 (1)儘量指定類、方法的final修飾符     帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.Strin

軟體工程學習筆記《三》程式碼優化和效能測試

如何在開源社群提問? 如果你提問沒有人回答!那麼是不是沒有人會呢?其實不然!可能你提問的方式本身就是不對的,我們來看看大牛是怎樣提問的?一起來學一下 https://github.com/seajs/seajs/issues/545 程式碼審查 程式碼優化

四十三條純乾貨 Java 程式碼優化建議

(1)儘量指定類、方法的 final 修飾符 帶有 final 修飾符的類是不可派生的。在 Java 核心 API 中,有許多應用 final 的例子,例如 java.lang.String,整個類都是 final 的。為類指定 final 修飾符可以讓類不可以被繼承,為方法指定 final 修

php網站速度效能優化(轉)

一個網站的訪問開啟速度至關重要,特別是首頁的開啟載入過慢是致命性的,本文介紹關於php網站效能優化方面的實戰案例:淘寶首頁載入速度優化實踐 。想必很多人都已經看到了新版的淘寶首頁,它與以往不太一樣,這一版頁面中四處彌散著個性化的味道,由於獨特的個性化需求,前端也面臨各方面的技術挑戰:  

JAVA程式設計119——事務控制/動態代理/程式碼優化

一、優化方案:將代理類單獨抽取出來封裝成為一個代理工廠 package com.mollen.config; import com.mollen.utils.TransactionManager; import net.sf.cglib.proxy.Enhancer; import n

python高階-程式碼優化

一、函式返回值快取 class memoization: known = dict() '''用這個裝飾耗時0.5秒''' def __init__(self, fn): self.fn = fn def __cal

php分頁程式碼封裝

1.xx <?php require_once '../include.php'; $sql = "select * from i_admin"; $totalRows = getResultNum($sql); // var_dump($totalRows); $pageSiz

web開發效能優化---程式碼優化

原文:https://blog.csdn.net/fuyifang/article/details/40519421  1、合理使用快取使用 提高效能最好最快的辦法當然是通過快取來改善,對於任何一個web開發者都應該善用快取。Asp.net下的快取機制十分強大,用好快取機制可以讓我

《深入應用C++11:程式碼優化與工程級應用》勘誤表

轉自:http://www.cnblogs.com/qicosmos/p/4562174.html   整理一下吧,原文好亂。。。。。。。。。。。。。。。   page 4, 倒數第9,10行註釋中的變數名e和f應該改為g和h   page16,