PHP性能優(yōu)化方案

1阐虚、用單引號(hào)代替雙引號(hào)來(lái)包含字符串序臂,這樣做會(huì)更快一些。因?yàn)镻HP會(huì)在雙引號(hào)包圍的字符串中搜尋變量敌呈,單引號(hào)則不會(huì)贸宏,注意:只有echo能這么做,它是一種可以把多個(gè)字符串當(dāng)作參數(shù)的"函數(shù)"(譯注:PHP手冊(cè)中說(shuō)echo是語(yǔ)言結(jié)構(gòu)磕洪,不是真正的函數(shù),故把函數(shù)加上了雙引號(hào))诫龙。

2析显、如果能將類的方法定義成static,就盡量定義成static签赃,它的速度會(huì)提升將近4倍谷异。

3、$row['id'] 的速度是$row[id]的7倍锦聊。

4歹嘹、echo 比 print 快,并且使用echo輸出時(shí)用逗號(hào)而不是句點(diǎn)代替字符串連接效率更高孔庭,比如 echo $str1,$str2尺上。

5材蛛、在執(zhí)行for循環(huán)之前確定最大循環(huán)數(shù),不要把 count/strlen/sizeof 等每次都要重復(fù)做的但結(jié)果都一樣的事情放到 for 循環(huán)的條件語(yǔ)句中怎抛,另外最好運(yùn)用foreach代替for循環(huán)卑吭。

6、及時(shí)注銷那些不用的變量恳蹲,尤其是大數(shù)組鸡典,對(duì)象之類的杠园,以便釋放內(nèi)存。

7掷邦、require_once()代價(jià)昂貴,據(jù)測(cè)試數(shù)據(jù)來(lái)看椭赋,使用require_once比require慢3-4倍抚岗,具體的解決辦法可先檢查是否存在引用然后決定是都需要require。

8纹份、include和require文件時(shí)盡量不要使用相對(duì)路徑苟跪,因?yàn)槭褂孟鄬?duì)路徑的時(shí)候它會(huì)首先查找指定的php包含路徑,然后查找當(dāng)前目錄蔓涧,因此會(huì)檢查過(guò)多路徑件已,所以最佳選擇是使用絕對(duì)路徑。

9元暴、如果你想知道腳本開(kāi)始執(zhí)行(即服務(wù)器端收到客戶端請(qǐng)求)的時(shí)間篷扩,使用$_SERVER['REQUEST_TIME']要好于time()。至于$_SERVER['REQUEST_TIME']的作用茉盏,文檔解釋是該變量保存的是頁(yè)面請(qǐng)求開(kāi)始時(shí)的時(shí)間戳鉴未。從 PHP 5.1.0 起有效。和time函數(shù)效果一樣鸠姨。

10铜秆、能夠使用函數(shù)代替正則表達(dá)式的地方盡量使用函數(shù)來(lái)完成。

11讶迁、str_replace函數(shù)比preg_replace函數(shù)快连茧,但strtr函數(shù)的效率是str_replace函數(shù)的四倍。strtr() 函數(shù)的作用是轉(zhuǎn)換字符串中特定的字符巍糯。

12啸驯、不要做無(wú)謂的替換,即使沒(méi)有替換操作祟峦,使用 str_replace 也會(huì)為其參數(shù)分配內(nèi)存罚斗。很慢!解決辦法:用 strpos 先查找相關(guān)信息看是否需要替換宅楞,如果需要针姿,再替換袱吆。實(shí)際效率對(duì)比為:如果需要替換:效率幾乎相等,差別在 0.1% 左右搓幌。如果不需要替換:用 strpos 速度將提升 200%杆故。

12、如果一個(gè)字符串替換函數(shù)溉愁,可接受數(shù)組或字符作為參數(shù)处铛,并且參數(shù)長(zhǎng)度不太長(zhǎng),那么可以考慮額外寫一段替換代碼拐揭,使得每次傳遞參數(shù)是一個(gè)字符撤蟆,而不是只寫一行代碼接受數(shù)組作為查詢和替換的參數(shù)。

13堂污、使用選擇分支語(yǔ)句(即switch case)好于使用多個(gè)if家肯,else if語(yǔ)句。

14盟猖、不要濫用 @ 操作符讨衣。雖然 @ 看上去很簡(jiǎn)單,但是實(shí)際上后臺(tái)有很多操作式镐。用 @ 比起不用 @反镇,效率差距:3 倍。特別不要在循環(huán)中使用 @ 娘汞。

15歹茶、打開(kāi)apache的mod_deflate模塊,可以提高網(wǎng)頁(yè)的瀏覽速度你弦。mod_deflate 模塊提供了DEFLATE 輸出過(guò)濾器惊豺,允許服務(wù)器在將輸出內(nèi)容發(fā)送到客戶端以前進(jìn)行壓縮,以節(jié)約帶寬禽作。具體如何設(shè)置請(qǐng)參考相關(guān)文檔尸昧。

16、在方法中遞增局部變量旷偿,速度是最快的彻磁。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。而遞增一個(gè)全局變量要比遞增一個(gè)局部變量慢2倍狸捅。

17、在方法中遞增一個(gè)對(duì)象屬性(如:$this->num++)要比遞增一個(gè)局部變量(如:$num)慢3倍累提。

18尘喝、遞增一個(gè)未預(yù)定義的局部變量要比遞增一個(gè)預(yù)定義的局部變量慢9至10倍。

19斋陪、僅定義一個(gè)局部變量而沒(méi)在函數(shù)中調(diào)用它朽褪,同樣會(huì)減慢速度(其程度相當(dāng)于遞增一個(gè)局部變量)置吓。PHP大概會(huì)檢查看是否存在全局變量。

20缔赠、方法調(diào)用看來(lái)與類中定義的方法的數(shù)量無(wú)關(guān)衍锚,因?yàn)槲?在測(cè)試方法之前和之后都)添加了10個(gè)方法,但性能上沒(méi)有變化嗤堰。

21戴质、派生類中的方法運(yùn)行起來(lái)要快于在基類中定義的同樣的方法。

22踢匣、調(diào)用帶有一個(gè)參數(shù)的空函數(shù)告匠,其花費(fèi)的時(shí)間相當(dāng)于執(zhí)行7至8次的局部變量遞增操作。類似的方法調(diào)用所花費(fèi)的時(shí)間接近于15次的局部變量遞增操作离唬。

23后专、Apache解析一個(gè)PHP腳本的時(shí)間要比解析一個(gè)靜態(tài)HTML頁(yè)面慢2至10倍。盡量多用靜態(tài)HTML頁(yè)面输莺,少用腳本戚哎。

24、除非腳本可以緩存嫂用,否則每次調(diào)用時(shí)都會(huì)重新編譯一次型凳。引入一套PHP緩存機(jī)制通常可以提升25%至100%的性能尸折,以免除編譯開(kāi)銷啰脚。

25、盡量做緩存实夹,可使用memcached橄浓。memcached是一款高性能的內(nèi)存對(duì)象緩存系統(tǒng),可用來(lái)加速動(dòng)態(tài)Web應(yīng)用程序亮航,減輕數(shù)據(jù)庫(kù)負(fù)載荸实。對(duì)運(yùn)算碼 (OP code)的緩存很有用,使得腳本不必為每個(gè)請(qǐng)求做重新編譯缴淋。

26准给、當(dāng)操作字符串并需要檢驗(yàn)其長(zhǎng)度是否滿足某種要求時(shí),你想當(dāng)然地會(huì)使用strlen()函數(shù)重抖。此函數(shù)執(zhí)行起來(lái)相當(dāng)快露氮,因?yàn)樗蛔鋈魏斡?jì)算,只返回在zval 結(jié)構(gòu)(C的內(nèi)置數(shù)據(jù)結(jié)構(gòu)钟沛,用于存儲(chǔ)PHP變量)中存儲(chǔ)的已知字符串長(zhǎng)度畔规。但是,由于strlen()是函數(shù)恨统,多多少少會(huì)有些慢叁扫,因?yàn)楹瘮?shù)調(diào)用會(huì)經(jīng)過(guò)諸多步驟三妈,如字母小寫化(譯注:指函數(shù)名小寫化,PHP不區(qū)分函數(shù)名大小寫)莫绣、哈希查找畴蒲,會(huì)跟隨被調(diào)用的函數(shù)一起執(zhí)行。在某些情況下对室,你可以使用isset() 技巧加速執(zhí)行你的代碼模燥,如下面的例子:


if(strlen($str) < 6) {echo'str不滿6個(gè)字符'; }??>

(與下面的技巧做比較)


if(!isset($str{6})) {echo'str不滿6個(gè)字符'?; }??>

調(diào)用isset()比strlen()快,因?yàn)閕sset()作為一種語(yǔ)言結(jié)構(gòu)软驰,意味著它的執(zhí)行不需要函數(shù)查找和字母小寫化涧窒。也就是說(shuō),實(shí)際上在檢驗(yàn)字符串長(zhǎng)度的頂層代碼中你沒(méi)有花太多開(kāi)銷锭亏。

27纠吴、當(dāng)執(zhí)行變量$i的遞增或遞減時(shí),$i++會(huì)比++$i慢一些慧瘤。這種差異是PHP特有的戴已,并不適用于其他語(yǔ)言,所以請(qǐng)不要修改你的C或Java代碼并指望它們能立即變快锅减,沒(méi)用的糖儡。++$i更快是因?yàn)樗恍枰?條指令(opcodes),$i++則需要4條指令怔匣。后置遞增實(shí)際上會(huì)產(chǎn)生一個(gè)臨時(shí)變量握联,這個(gè)臨時(shí)變量隨后被遞增。而前置遞增直接在原值上遞增每瞒。這是最優(yōu)化處理的一種金闽,正如Zend的PHP優(yōu)化器所作的那樣。牢記這個(gè)優(yōu)化處理不失為一個(gè)好主意剿骨,因?yàn)椴⒉皇撬械闹噶顑?yōu)化器都會(huì)做同樣的優(yōu)化處理代芜,并且存在大量沒(méi)有裝配指令優(yōu)化器的互聯(lián)網(wǎng)服務(wù)提供商和服務(wù)器。

28浓利、并不是事必面向?qū)ο?OOP)挤庇,面向?qū)ο笸_(kāi)銷很大,每個(gè)方法和對(duì)象調(diào)用都會(huì)消耗很多內(nèi)存贷掖。

29嫡秕、并非要用類實(shí)現(xiàn)所有的數(shù)據(jù)結(jié)構(gòu),數(shù)組也很有用苹威。

30淘菩、不要把方法細(xì)分得過(guò)多,仔細(xì)想想你真正打算重用的是哪些代碼。

31潮改、能使用PHP內(nèi)置函數(shù)的地方盡量使用PHP內(nèi)置函數(shù)。

32腹暖、如果在代碼中存在大量耗時(shí)的函數(shù)汇在,你可以考慮用C擴(kuò)展的方式實(shí)現(xiàn)它們。

33脏答、評(píng)估檢驗(yàn)(profile)你的代碼糕殉。檢驗(yàn)器會(huì)告訴你,代碼的哪些部分消耗了多少時(shí)間殖告。Xdebug調(diào)試器包含了檢驗(yàn)程序阿蝶,評(píng)估檢驗(yàn)總體上可以顯示出代碼的瓶頸。

34黄绩、mod_zip可作為Apache模塊羡洁,用來(lái)即時(shí)壓縮你的數(shù)據(jù),并可讓數(shù)據(jù)傳輸量降低80%爽丹。

35筑煮、在可以用file_get_contents替代file、fopen粤蝎、feof真仲、fgets等系列方法的情況下,盡量用file_get_contents初澎,因?yàn)樗男矢叩枚?但是要注意file_get_contents在打開(kāi)一個(gè)URL文件時(shí)候的PHP版本問(wèn)題;

36秸应、盡量的少進(jìn)行文件操作,雖然PHP的文件操作效率也不低的碑宴。

37软啼、優(yōu)化Select SQL語(yǔ)句,除非表字段墓懂,SQL關(guān)鍵字盡量用大寫代替小寫焰宣。

38、循環(huán)內(nèi)部不要聲明變量捕仔,尤其是大變量:對(duì)象匕积,解決辦法是循環(huán)之前預(yù)定義需要聲明的變量。

39榜跌、多維數(shù)組盡量不要循環(huán)嵌套賦值闪唆。

40、在可以用PHP內(nèi)部字符串操作函數(shù)的情況下钓葫,不要用正則表達(dá)式悄蕾。

41、foreach效率比while和for更高。

42帆调、用i+=1代替i=i+1奠骄。符合c/c++的習(xí)慣,效率還高;

43番刊、對(duì)global變量含鳞,應(yīng)該用完就unset()掉;

44、有意忽略php關(guān)閉標(biāo)簽(即?>)芹务。

45蝉绷、寫入或保存文件前,請(qǐng)先確保目錄是可寫的枣抱,假如不可寫熔吗,輸出錯(cuò)誤信息。這會(huì)節(jié)約你很多調(diào)試時(shí)間佳晶。特別是 linux 系統(tǒng)中桅狠,需要處理權(quán)限,目錄權(quán)限不當(dāng)會(huì)導(dǎo)致很多很多的問(wèn)題宵晚,文件也有可能無(wú)法讀取等等垂攘。比如下面的例子:


$contents =?"All the content";

$file_path =?"/var/www/project/content.txt";

file_put_contents($file_path ,$contents);??>

這大體上正確淤刃,但有些間接的問(wèn)題晒他,file_put_contents 可能會(huì)由于幾個(gè)原因失敗:

(1)父目錄不存在

(2)目錄存在,但不可寫

(3)文件被寫鎖住?

所以寫文件前做明確的檢查更好逸贾,正確寫法如下:

查看代碼打印


$contents='測(cè)試內(nèi)容';

$dir='/var/www/project';

$file_path=$dir."/content.txt";

if(is_writable($dir)){

file_put_contents($file_path,$contents);

}else{

die('目錄不存在或者目錄不可寫陨仅!'?);

}??>

46、不要依賴submit按鈕值來(lái)檢查表單提交行為铝侵,比如下面的情況:


if($_POST['submit'?] ==?'Save'?) {?//Save the things }??>

上面大多數(shù)情況正確灼伤,除了應(yīng)用是多語(yǔ)言的。 'Save' 可能代表其它含義咪鲜,你怎么區(qū)分它們呢狐赡,因此,不要依賴于submit按鈕的值疟丙。正確寫法如下:


if( $_SERVER['REQUEST_METHOD'?] ==?'POST'?andisset($_POST['submit'?]) ) {?//Save the things }??>

47颖侄、不要直接使用 $_SESSION 變量

舉個(gè)簡(jiǎn)單的例子:

$_SESSION['username'] = $username; 或者 $username = $_SESSION['username'];

這會(huì)導(dǎo)致某些問(wèn)題,如果在同個(gè)域名中運(yùn)行了多個(gè)應(yīng)用享郊,session 變量可能會(huì)沖突览祖,兩個(gè)不同的應(yīng)用可能使用同一個(gè)session key,例如炊琉,一個(gè)前端門戶展蒂,和一個(gè)后臺(tái)管理系統(tǒng)使用同一域名。對(duì)于這種情況,解決方案如下锰悼,使用應(yīng)用相關(guān)的key和一個(gè)包裝函數(shù):


define('APP_ID','abc_corp_ecommerce');

functionsession_get($key){

$k=APP_ID.'.'.$key;

if(isset($_SESSION[$k])){

return$_SESSION[$k];

}

return false;

}

functionsession_set($key,$value){

$k=APP_ID.'.'.$key;

$_SESSION[$k]=$value;

return true;

}?>

48柳骄、將你的工具函數(shù)封裝到類中,假如你在某文件中定義了很多工具函數(shù)松捉,如下:


functionutility_a(){

//This function does a utility thing like string processing

}

functionutility_b(){

//This function does nother utility thing like database processing

}

functionutility_c(){

//This function is ..

}?>

但這些函數(shù)的使用分散到應(yīng)用各處夹界,那么你可以將他們封裝到某個(gè)類中:


classUtility {

public static functionutility_a(){}

public static functionutility_b(){}

public static functionutility_c(){}

}?>

調(diào)用方法如:$a=Utility::utility_a(); 或者 $b=Utility::utility_b();

這樣做的好處是,如果php內(nèi)建有同名的函數(shù)隘世,這樣就可以避免沖突,維護(hù)起來(lái)也相當(dāng)容易鸠踪。

49丙者、使用array_map快速處理數(shù)組,比如說(shuō)你想 trim 數(shù)組中的所有元素营密,新手可能會(huì):

查看代碼打印


foreach($arras$c => $v) { $arr[$c] = trim($v); }?>

但和上面的比起來(lái)使用 array_map 更簡(jiǎn)單械媒,比如:


$arr = array_map('trim',$arr);??>

這會(huì)為$arr數(shù)組的每個(gè)元素都申請(qǐng)調(diào)用trim函數(shù),另一個(gè)類似的函數(shù)是 array_walk评汰,具體用法請(qǐng)查閱文檔學(xué)習(xí)更多技巧.

50纷捞、使用 php filter 驗(yàn)證數(shù)據(jù),你肯定曾使用過(guò)正則表達(dá)式驗(yàn)證 email 被去,ip地址等主儡,可以嘗試使用 php內(nèi)置的 filter 擴(kuò)展來(lái)完成相關(guān)驗(yàn)證和檢查輸入。

51惨缆、確保你的腳本由始至終都使用單一的數(shù)據(jù)庫(kù)連接糜值,在開(kāi)始處正確的打開(kāi)連接,使用它直到結(jié)束坯墨,最后關(guān)閉它寂汇,像下面這種在函數(shù)中打開(kāi)連接是非常糟糕的:


functionadd_to_cart() {

$db =newDatabase();

$db->query("INSERT INTO cart .....");

}

functionempty_cart() {

$db =newDatabase();

$db->query("DELETE FROM cart .....");

}?>

以上事例因?yàn)閯?chuàng)建連接需要時(shí)間和占用內(nèi)存,所以會(huì)拖慢應(yīng)用的速度捣染。數(shù)據(jù)庫(kù)的鏈接最好使用單例模式骄瓣。

----------------------------------------------------------------

【40個(gè)技巧優(yōu)化您的PHP代碼】

PHP代碼優(yōu)化

1.如果一個(gè)方法能被靜態(tài),那就聲明他為靜態(tài)的耍攘,速度可提高?1/4;

2.echo的效率高于print,因?yàn)?echo沒(méi)有返回值榕栏,print返回一個(gè)整型?;

3.在循環(huán)之前設(shè)置循環(huán)的最大次數(shù),而非在在循環(huán)中?;

4.銷毀變量去釋放內(nèi)存少漆,特別是大的數(shù)組?;

5.避免使用像__get, __set, __autoload等魔術(shù)方法?;//程序設(shè)計(jì)

6.requiere_once()?比較耗資源?;

7.在includes?和requires中使用絕對(duì)路徑臼膏,這樣在分析路徑花的時(shí)間更少?;

8.如果你需要得sexinsex到腳本執(zhí)行時(shí)的時(shí)間,?$_SERVER['REQUSET_TIME']優(yōu)于time();

9.能使用字符處理函數(shù)的示损,盡量用他們渗磅,因?yàn)樾矢哂谡齽t?;//php100.com

10.str_replace?字符替換比正則替換?preg_replace快,但strtr?比str_replace又快?1/4;

11.如果一個(gè)函數(shù)既能接受數(shù)組又能接受簡(jiǎn)單字符做為參數(shù),例如字符替換始鱼,并且參數(shù)列表不是太長(zhǎng)仔掸,可以考慮多用一些簡(jiǎn)潔的替換語(yǔ)句,一次只替換一個(gè)字符医清,而不是接受數(shù)組做為查找和替換參數(shù)起暮。大事化小,?1+1>2;

12.用@?掩蓋錯(cuò)誤會(huì)降低腳本運(yùn)行速度?;

13.$row['id']?比$row[id]速度快?7倍会烙,建議養(yǎng)成數(shù)組鍵加引號(hào)的習(xí)慣?;

14.錯(cuò)誤信息很有用;

15.在循環(huán)里別用函數(shù)负懦,例如?For($x=0; $x < count($array); $x), count()?函數(shù)在外面先計(jì)算?;

16.在方法里建立局部變量速度最快,?97xxoo幾乎和在方法里調(diào)用局部變量一樣快?;

17.建立一個(gè)全局變量要比局部變量要慢?2倍;

18.建立一個(gè)對(duì)象屬性(類里面的變量?)例如($this->prop++)?比局部變量要慢?3倍;

19.建立一個(gè)未聲明的局部變量要比一個(gè)初始化的局部變量慢?9-10倍;

20.聲明一個(gè)未被任何一個(gè)函數(shù)使用過(guò)的全局變量也會(huì)使性能降低?(和聲明相同數(shù)量的局部變量一樣?)柏腻,PHP?可能去檢查這個(gè)全局變量是否存在?;

21.方法的性能和在一個(gè)類里面定義的方法的數(shù)目沒(méi)有關(guān)系纸厉,因?yàn)槲姨砑?10個(gè)或多個(gè)方法到測(cè)試的類里面?(這些方法在測(cè)試方法的前后?)后性能沒(méi)什么差異;

22.在子類里方法的性能優(yōu)于在基類中?;//PHP100中文網(wǎng)

23.只調(diào)用一個(gè)參數(shù)并且函數(shù)體為空的函數(shù)運(yùn)行花費(fèi)的時(shí)間等于?7-8次$localvar++?運(yùn)算,而一個(gè)類似的方法?(類里的函數(shù))運(yùn)行等于大約?15次$localvar++?運(yùn)算;

24.Surrounding your string by ‘ instead of ” will make things interpret a little faster since php looks for variables inside “…” but not inside ‘…’. Of course you can only do this when you don’t need to have variables in the string.

25.當(dāng)輸出字符串時(shí)用逗號(hào)代替點(diǎn)分割更快些五嫂。注意:這只對(duì)?echo起作用颗品,這個(gè)函數(shù)能接受一些字符串作為參數(shù)?;

26.在apache?服務(wù)器里一個(gè)?php腳本頁(yè)面比相應(yīng)的HTML靜態(tài)頁(yè)面生成至少要多花?2-10倍的時(shí)間,建議多用些靜態(tài)?HTML頁(yè)面和少量的腳步;

27.除非你的安裝了緩存沃缘,不然你的?php腳本每次被訪問(wèn)都需要被重編譯躯枢。建議安裝個(gè)?php緩存程序,這樣通過(guò)去除一些重復(fù)的編譯來(lái)很明顯的提高你?20-100%的性能;

28.建議用memcached?槐臀,高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng)锄蹂,提高動(dòng)態(tài)網(wǎng)絡(luò)應(yīng)用程序性能,減輕數(shù)據(jù)庫(kù)的負(fù)擔(dān)?;

29.使用ip2long()?和long2ip()函數(shù)把?IP地址轉(zhuǎn)成整型存放進(jìn)數(shù)據(jù)庫(kù)而非字符型峰档。這幾乎能降低?1/4的存儲(chǔ)空間败匹。同時(shí)可以很容易對(duì)地址進(jìn)行排序和快速查找?;

30.使用checkdnsrr()?通過(guò)域名存在性來(lái)確認(rèn)部分?email地址的有效性,這個(gè)內(nèi)置函數(shù)能保證每一個(gè)的域名對(duì)應(yīng)一個(gè)?IP地址;//?程序設(shè)計(jì)

31.如果你在使用php5和?mysql4.1以上的版本讥巡,考慮使用mysql_*的改良函數(shù)?mysqli_*;

32.試著喜歡使用三元運(yùn)算符?(?:);

33.在你想在徹底重做你的項(xiàng)目前掀亩,看看?PEAR有沒(méi)有你需要的。PEAR是個(gè)巨大的資源庫(kù)欢顷,很多?php開(kāi)發(fā)者都知道;

34.使用highlight_file()?能自動(dòng)打印一份很好格式化的頁(yè)面源代碼的副本?; //程序設(shè)計(jì)

35.?使用error_reporting(0)?函數(shù)來(lái)預(yù)防潛在的敏感信息顯示給用戶槽棍。理想的錯(cuò)誤報(bào)告應(yīng)該被完全禁用在?php.ini文件里√浚可是如果你在用一?個(gè)共享的虛擬主機(jī)炼七,php.ini你不能修改,那么你最好添加?error_reporting(0)函數(shù)布持,放在每個(gè)腳本文件的第一行?(或用?require_once()?來(lái)加載)這能有效的保護(hù)敏感的?SQL查詢和路徑在出錯(cuò)時(shí)不被顯示?;

36.使用?gzcompress()?和gzuncompress()對(duì)容量大的字符串進(jìn)行壓縮?(解壓)?在存進(jìn)(取出?)數(shù)據(jù)庫(kù)時(shí)豌拙。這種內(nèi)置的函數(shù)使用?gzip算法能壓縮到90%;

37.通過(guò)參數(shù)變量地址得引用來(lái)使一個(gè)函數(shù)有多個(gè)返回值。你可以在變量前加個(gè)“?&”來(lái)表示按地址傳遞而非按值傳遞?;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末题暖,一起剝皮案震驚了整個(gè)濱河市按傅,隨后出現(xiàn)的幾起案子捉超,更是在濱河造成了極大的恐慌,老刑警劉巖唯绍,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拼岳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡况芒,警方通過(guò)查閱死者的電腦和手機(jī)惜纸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绝骚,“玉大人耐版,你說(shuō)我怎么就攤上這事⊙雇簦” “怎么了椭更?”我有些...
    開(kāi)封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛾魄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)湿滓,這世上最難降的妖魔是什么滴须? 我笑而不...
    開(kāi)封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮叽奥,結(jié)果婚禮上扔水,老公的妹妹穿的比我還像新娘。我一直安慰自己朝氓,他們只是感情好魔市,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赵哲,像睡著了一般待德。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枫夺,一...
    開(kāi)封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天将宪,我揣著相機(jī)與錄音,去河邊找鬼橡庞。 笑死较坛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扒最。 我是一名探鬼主播丑勤,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吧趣!你這毒婦竟也來(lái)了法竞?” 一聲冷哼從身側(cè)響起耙厚,我...
    開(kāi)封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爪喘,沒(méi)想到半個(gè)月后颜曾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秉剑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年泛豪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侦鹏。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诡曙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出略水,到底是詐尸還是另有隱情价卤,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布渊涝,位于F島的核電站慎璧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跨释。R本人自食惡果不足惜胸私,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳖谈。 院中可真熱鬧岁疼,春花似錦、人聲如沸缆娃。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贯要。三九已至暖侨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郭毕,已是汗流浹背它碎。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留显押,地道東北人扳肛。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像乘碑,于是被迫代替她去往敵國(guó)和親挖息。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容