每日一"膠"

Thursday, 30 October 2008

  • [轉貼] 38條PHP編碼優化加速技巧

     

    1. 儘量採用大量的PHP內置函數。

    2. echo 比 print 快。

    3. 不要把方法細分得過多,仔細想想你真正打算重用的是哪些代碼?

    4. 在執行for循環之前確定最大循環數,不要每循環一次都計算最大值。

    5. 註銷那些不用的變量尤其是大數組,以便釋放內存。

    6. 並非要用類實現所有的數據結構,數組也很有用。

    7. $row['id']的效率是$row[id]的7倍。

    8. 在包含文件時使用完整路徑,解析操作系統路徑所需的時間會更少。

    9. 如果你想知道腳本開始執行(譯註:即服務器端收到客戶端請求)的時刻,使用$_SERVER['REQUEST_TIME']要好於time()。

    10. 檢查是否能用strncasecmp,strpbrk,stripos函數代替正則表達式完成相同功能。

    11. str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。

    12. 如果一個字符串替換函數,可接受數組或字符作為參數,並且參數長度不太長,那麼可以考慮額外寫一段替換代碼,使得每次傳遞參數是一個字符,而不是只寫一行代碼接受數組作為查詢和替換的參數。

    13. 使用選擇分支語句(譯註:即switch case)好於使用多個if,else if語句。

    14. 用@屏蔽錯誤消息的做法非常低效。

    15. 打開apache的mod_deflate模塊。

    16. 數據庫連接當使用完畢時應關掉。

    18. 錯誤消息代價昂貴。

    19. 儘量不要在for循環中使用函數,比如for ($x=0; $x < count($array); $x)每循環一次都會調用count()函數。

    20. 在方法中遞增局部變量,速度是最快的。幾乎與在函數中調用局部變量的速度相當。

    21. 遞增一個全局變量要比遞增一個局部變量慢2倍。

    22. 遞增一個對象屬性(如:$this->prop++)要比遞增一個局部變量慢3倍。

    23. 遞增一個未預定義的局部變量要比遞增一個預定義的局部變量慢9至10倍。

    24. 僅定義一個局部變量而沒在函數中調用它,同樣會減慢速度(其程度相當於遞增一個局部變量)。PHP大概會檢查看是否存在全局變量。

    25. 方法調用看來與類中定義的方法的數量無關,因為我(在測試方法之前和之後都)添加了10個方法,但性能上沒有變化。

    26. 派生類中的方法運行起來要快於在基類中定義的同樣的方法。

    27. 調用帶有一個參數的空函數,其花費的時間相當於執行7至8次的局部變量遞增操作。類似的方法調用所花費的時間接近於15次的局部變量遞增操作。

    28. 用單引號代替雙引號來包含字符串,這樣做會更快一些。因為PHP會在雙引號包圍的字符串中搜尋變量,單引號則不會。當然,只有當你不需要在字符串中包含變量時才可以這麼做。

    29. 用echo 輸出多個字符串時,用逗號代替句點來分隔字符串,速度更快。

    30. Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。儘量多用靜態HTML頁面,少用腳本。

    31. 除非腳本可以緩存,否則每次調用時都會重新編譯一次。引入一套PHP緩存機制通常可以提升25%至100%的性能,以免除編譯開銷。

    32. 儘量做緩存,可使用memcached。memcached是一款高性能的內存對象緩存系統,可用來加速動態Web應用程序,減輕數據庫負載。對運算碼(OP code)的緩存很有用,使得腳本不必為每個請求做重新編譯。

    33. 當操作字符串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因為它不做任何計算,只返回在zval 結構(C的內置數據結構,用於存儲PHP變量)中存儲的已知字符串長度。但是,由於strlen()是函數,多多少少會有些慢,因為函數調用會經過諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫)、哈希查找,會跟隨被調用的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。

    Ex.(舉例如下)
    if (strlen($foo) < 5) { echo “Foo is too short”; }
    vs.(與下面的技巧做比較)
    if (!isset($foo{5})) { echo “Foo is too short”; }

    調用isset()恰巧比strlen()快,因為與後者不同的是,isset()作為一種語言結構,意味著它的執行不需要函數查找和字母小寫化。也就是說,實際上在檢驗字符串長度的頂層代碼中你沒有花太多開銷。

    34. 當執行變量$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用於其他語言,所以請不要修改你的C或Java代碼並指望它們能立即變快,沒用的。++$i更快是因為它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會產生一個臨時變量,這個臨時變量隨後被遞增。而前置遞增直接在原值上遞增。這是最優化處理的一種,正如Zend的PHP優化器所作的那樣。牢記這個優化處理不失為一個好主意,因為並不是所有的指令優化器都會做同樣的優化處理,並且存在大量沒有裝配指令優化器的互聯網服務提供商(ISPs)和服務器。

    35. 並不是事必面向對象(OOP),面向對象往往開銷很大,每個方法和對象調用都會消耗很多內存。

    36. 如果在代碼中存在大量耗時的函數,你可以考慮用C擴展的方式實現它們。

    37. 評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug調試器包含了檢驗程序,評估檢驗總體上可以顯示出代碼的瓶頸。

    38. mod_zip可作為Apache模塊,用來即時壓縮你的數據,並可讓數據傳輸量降低80%。

Monday, 20 October 2008

  • 灰色世界

    接二連三也發生了不少不愉快的事

    真的灰暗, 實在令人痛心

    壓迫....無奈.......與悲痛........令人傷心

    真要那麼灰暗嗎? 一直也要在灰暗下過日子?

     

    會考.....傷心.....傷神:(........

Saturday, 18 October 2008

Monday, 13 October 2008

  • 小朋友

    不太想說的是,,,,人也是如此

    近日走到街上, 也看到很多"大大小小"的小朋友

    表現的行為也令人喜出望外, 也有些令人拍案叫絕!

    記得有一天, 在某廣場旁走過, 看到一個小學生, 身子不高,大約一百二十厘米左右

    望着望着它實在難教人不笑他XD, 那人身穿睡衣睡褲, 上面印上卡通Keroro的公仔

    而腳穿的鞋..卻是一雙有"超人"公仔的拖鞋,

    左手執M記紙袋, 右手一個吃了兩口漢堡包

    不止如此, 他從我身後走過...........跑過我....................

    ====================================================================

    明天再說吧^3^..............

Friday, 10 October 2008

  • 淺談Pascal動畫製作的奧秘

    看了那Pascal動畫, 不停的 loop gotoxy原來也大有奧秘,

    今天一於說說 gotoxy 這 function 吧

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

    gotoxy(variableA,variableB);

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

    以上為Pascal gotoxy的語法

    請設 variableA 及 variableB 的DataType為 integer

    gotoxy的定義為: 把輸入遊標(cursor)移到DOS視窗下指定座標

    座標就是 variableA 及 variableB

    variableA為X的座標值, 而variableA則為Y的座標值

    gotoxy(5,10);
    以上Pascal語法則代表把遊標(cursor)移在坐標為(5,10) 的位置
    即左邊空掉5格, 上邊空掉10格

    Gotoxy Function 和 Delay Function 配合會很好玩呢

    大家要慢慢體會^.^

Tuesday, 07 October 2008

  • 利益的啟示

    人.........在吃虧時就會說一句.....................不公平

    人.........在利益當前時.........就會正義起來

    人.........在沒物質利益時正義起來...........就代表被虛無的利益推動

    利益.....人人也視他為目標......但也時時成為利益的獵物

    不公平......代表利益錯配

    說不公平的.......只有吃虧的人

    吃虧的人...........大叫一句不公平........和有利益人的抗衡

    最終....人人也撲空了......為的......也是利益

    公平.......是吃虧的人的利劍

    利益.......卻是利益守護者的長槍

    兩者一爭....最後.......

    利劍折斷, 長槍丟了

    也是一場空.............................

Monday, 06 October 2008

Friday, 03 October 2008

  • 升旗伍...Program的反思

    今天是"升旗伍", 無聊的我再次與Pascal同路..

    面對這麼可怕的程式...往往有不少反思

    可怕? 我為啥要怕.....怕就怕在程式部份的評分原則

    有點令人不寒而慄.... 在設計時...繁複的設計就叫人耐人尋味

    當初希望程式更具親和力-_-但一看評分準則 卻是天與地之比

    繁複的源代碼只會令老師找到更多扣分的地方

    而且評分原則不是程式的流暢道, 也不是程式的親和力

    竟是去看Style及Structure...歎惜的一點, Structure那邊更教人無奈

    評分準則過於空笵, 實在難以符合, 就算有很高的親和力, 也不會得到高的分數

    先不談這, 在一個用家的角度, 一個具親和力的程式定比一個Structure及Style做得好的程式好用

    例子?.....就拿Windows及Linux來看吧, Windows的成功莫過於他使程式更易使用

    而Linux? 需是 Open Sources 的 OS, 但親和力及兼容性不足而未能普及

    就算應用, 一般也用在伺服器方面.取其穩定性及安全性...

    不看Linux及Windows, 反看 Discuz! 及 PHPBB

    兩個也是全球數一數二的多用戶討論區程序, 一個坐擁最多的華人用戶,

    另一個就是世界知名....Discuz!走的是娛樂路線, PHPBB走的是專業路線

    但是PHPBB一直不能進駐中華市場, 就是因為Discuz!做到的就是User-friendly

    無論是前台或是後台, Discuz!一直比PHPBB User-friendly

    雖然PHPBB的coding一直也比Discuz!好, 但由於繁複的後台而趕走了不少用戶呢

    所以親和力及兼容性才是程式加分的重要因素, 但是佔分的偏偏卻是Structure及Style

    無疑Structure及Style對於程式的可展性及二次開發也有用途

    但我想親和力及兼容性應是佔分最大的一部分.........

    最後...事實不能改變, 但是..............

    討得用戶開心才是致勝之道!! 才是成功之道!!

Thursday, 02 October 2008

  • 發現....人就是這麼可悲........

    話說, 金錢是人類生活的必需品, 衣.食.住.行.也需要它

    同時也是人類文明的象徵...但是今天, 金錢被某些人指成是萬惡之首

    也有人說金錢是不淨之物....不論打劫, 犯毒, 仇殺...無一與金錢無關

    人類造就了金錢, 但金錢卻造就了罪惡

    人們每天為錢奔波, 每天為錢工作...但是到最後.....也是輕輕的走了

    但是請注意, 這並不代表他會"輕輕的來".......

    金錢......令多少多少投機者....每天在大海中沖浪

    時高時低... 但每一次大浪也有不少人失足..結果倍伴他們的..是失意, 是唏噓.........

    是金錢...造就了他們, 還是....不清楚....

  • Visit kit92cc's Xanga Site
    • Name: Kit.T
    • Gender: Male
    • Member Since: 9/18/2008

Weblog Archives

Don't worry - your calendar is here… to see it in action just click "Save" above and refresh the page.

About Me

  • Nothing can be said...xdd