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,