為什麼不優化下php,不優化是什麼意思

本文目錄一覽:

php有哪些優化技巧

優化的點有很多,看具體使用環境:

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

2、如果能將類的方法定義成 static,就盡量定義成 static,它的速度會提升將近 4 倍。

3、$row[‘id’] 的速度是$row[id]的 7 倍。

4、echo 比 print 快,並且使用 echo 的多重參數(譯註:指用逗號而不是句點)代替字符串 連接,比如 echo $str1,$str2。

5、在執行 for 循環之前確定最大循環數,不要每循環一次都計算最大值,最好運用 foreach 代替。

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

7、盡量避免使用__get,__set,__autoload。

8、require_once()代價昂貴。

9、include 文件時盡量使用絕對路徑,因為它避免了 PHP 去 include_path 里查找文件的速 度,解析操作系統路徑所需的時間會更少。

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

11、函數代替正則表達式完成相同功能。

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

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

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

15、用@屏蔽錯誤消息的做法非常低效,極其低效。

16、打開 apache 的 mod_deflate 模塊,可以提高網頁的瀏覽速度。

17、數據庫連接當使用完畢時應關掉,不要用長連接。

18、錯誤消息代價昂貴。

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

20、遞增一個全局變量要比遞增一個局部變量慢 2 倍。

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

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

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

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

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

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

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

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

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

30、 當操作字符串並需要檢驗其長度是否滿足某種要求時, 你想當然地會使用 strlen()函數。 此函數執行起來相當快,因為它不做任何計算,只返回在 zval 結構(C 的內置數據結構,用 於存儲 PHP 變量)中存儲的已知字符串長度。但是,由於 strlen()是函數,多多少少會有些 慢,因為函數調用會經過諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP 不區分函 數名大小寫)、哈希查找,會跟隨被調用的函數一起執行。在某些情況下,你可以使用 isset() 技巧加速執行你的代碼。 (舉例如下) if (strlen($foo) 5) { echo “Foo is too short”$$ } (與下面的技巧做比較) if (!isset($foo{5})) { echo “Foo is too short”$$ } 調用 isset()恰巧比 strlen()快,因為與後者不同的是,isset()作為一種語言結構,意味着它 的執行不需要函數查找和字母小寫化。 也就是說, 實際上在檢驗字符串長度的頂層代碼中你 沒有花太多開銷。

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

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

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

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

35、當你需要時,你總能把代碼分解成方法。

36、盡量採用大量的 PHP 內置函數。

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

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

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

40、在可以用 file_get_contents 替代 file、fopen、feof、fgets 等系列方法的情況下,盡量 用 file_get_contents,因為他的效率高得多!但是要注意 file_get_contents 在打開一個 URL 文件時候的 PHP 版本問題;

41、盡量的少進行文件操作,雖然 PHP 的文件操作效率也不低的;

42、優化 Select SQL 語句,在可能的情況下盡量少的進行 Insert、Update 操作(在 update 上,我被惡批過);

43、儘可能的使用 PHP 內部函數(但是我卻為了找個 PHP 裡面不存在的函數,浪費了本可 以寫出一個自定義函數的時間,經驗問題啊!);

44、 循環內部不要聲明變量, 尤其是大變量: 對象(這好像不只是 PHP 裡面要注意的問題吧?);

45、多維數組盡量不要循環嵌套賦值;

46、在可以用 PHP 內部字符串操作函數的情況下,不要用正則表達式;

47、foreach 效率更高,盡量用 foreach 代替 while 和 for 循環;

48、用單引號替代雙引號引用字符串;

49、“用 i+=1 代替 i=i+1。符合 c/c++的習慣,效率還高”

50、對 global 變量,應該用完就 unset()掉;

PHP的代碼可以被優化么?可以或不可以,用一句話說下即可

肯定可以,比如程序邏輯是否合理,能否節省效率。

優化的話,需要有一點的經驗。。

讓PHP網站跑的更快 如何優化PHP

php(做為現在的主流開發語言)是一種執行起來非常迅速的編程語言,但是比起僅僅優化代碼來說仍然值得優化php(做為現在的主流開發語言)本身。

本文我們將根據一些實效闡述為什麼優化php(做為現在的主流開發語言)本身要比優化代碼來的更貼切,以及為什麼需要理解根據php(做為現在的主流開發語言)在你的服務器上其他相關子系統的表現找出瓶頸並修復之。與此同時,我們也提到了如何優化您的php(做為現在的主流開發語言)代碼來讓他們擁有更快的執行速度。

獲得高性能

當我們談及好的性能,往往不僅僅是指您的php(做為現在的主流開發語言)代碼執行起來有多快。性能是一套在可量化評測和速度之間取出的平衡。僅僅依靠使用更少資源的代碼執行起來也許比在高速緩存中之行的代碼更慢,並且相同的一組(在高速緩衝中執行的)代碼可以在同時並發執行在一台Web服務器上。

在下面的例子中,A.php(做為現在的主流開發語言)算作一位儘可能跑得快的賽跑選手,而B.php(做為現在的主流開發語言)是一個幾乎可以以同一慢速永遠跑下去的馬拉松選手。輕負荷情況下,A.php(做為現在的主流開發語言)可以充分的快,但是當流量增加後,B.php(做為現在的主流開發語言)的性能表現將僅僅降低一點點而A.php(做為現在的主流開發語言)會垮掉。

讓我們來通過一個事實來驗證此說法更深遠的本質意義。假設我們需要讀取一個250K的文件並生成一個關於此文件的HTML概要。我們寫了兩個腳本來做同樣一件事:hare.php(做為現在的主流開發語言)將一次性讀取整個文件到內存中,然後一步執行到位;而tortoise.php(做為現在的主流開發語言)每次只讀取文件的一行,並且決不超過內容容量。結果Tortoise.php(做為現在的主流開發語言)因為多次讀寫需要更多的系統回應而慢得多。”

程序每執行一次,hare.php(做為現在的主流開發語言)需要0.04秒CPU執行時間和10Mb的內存,而tortoise.php(做為現在的主流開發語言)需要0.06秒CPU執行時間和5Mb的內存。服務器共有100Mb實際內存容量並且其CPU有99%是空閑的。我們同時假定執行這樣一個簡單事件不產生內存碎片。

當有10各程序並發執行時,hare.php(做為現在的主流開發語言)將發生內存溢出(10 ×10 = 100)。與此同時,tortoise.php(做為現在的主流開發語言)仍將有50Mb空餘內存可用!11個程序並發執行將使hare.php(做為現在的主流開發語言)徹底“潰敗”因為它開始需要使用虛擬內存——執行速度有可能降低到其常規速度的一半以下;而且現在每一個單獨程序進程需要0.08秒CPU執行時間。而此期間,tortoise.php(做為現在的主流開發語言)仍舊運行在其常規CPU執行時間——0.06秒!

以下表格中,執行得更快的php(做為現在的主流開發語言)腳本使用粗體區分開來:

——————————————————————————————

| 連接數 | 每執行1次HTTP請求所需CPU執行時間(秒)| 每執行10次HTTP請求所需CPU執行時間(秒)| 每執行11次HTTP請求所需CPU執行時間(秒)|

——————————————————————————————

| hare.php(做為現在的主流開發語言) | 0.04 | 0.04 | 0.88(內存溢出) |

——————————————————————————————

| tortoise.php(做為現在的主流開發語言) | 0.06 | 0.60 | 0.66 |

——————————————————————————————

如您在上例中看到的,獲得更好的性能不再僅僅是寫出執行起來更快的php(做為現在的主流開發語言)程序。高性能php(做為現在的主流開發語言)表現需要對底層硬件知識以及操作系統、軟件支持如Web服務器、數據庫等有一個良好認識和理解。

瓶頸

以上兩個例子讓我們看到了(性能)下降的瓶頸所在。當擁有無限大容量的內存時,hare.php(做為現在的主流開發語言)的確是始終比tortoise.php(做為現在的主流開發語言)快。但是,僅僅認為內存是php(做為現在的主流開發語言)整體性能的瓶頸所在顯得過於單純——實際上遠不止這些:

(a) 網絡

你的網絡有可能是最大的瓶頸所在。如果你有10M的帶寬——最多你只能獲得1M/秒的傳輸速度。如果假設每個php(做為現在的主流開發語言)頁為30k,那麼每秒僅僅只傳輸33頁就將使你的網絡帶寬達到飽和。更多導致瓶頸產生的因素包括頻繁訪問低速DNS,或者網絡設備僅能獲得十分有限的存儲。

(b) CPU

如果你監視一下你的CPU負荷情況,發送一個純靜態HTML頁面並不會增加CPU負擔——就像我們以上提到的,此時瓶頸在於網絡。當然啦,對於由php(做為現在的主流開發語言)生成的複雜動態頁面,你的CPU速度自然將成為限制因素之一。擁有包含多個CPU的服務器或者一個服務器陣列將減輕因CPU帶來的影響。

做企業網站是asp的好優化還是php的好優化

建議選擇PHP,優化方面來說,兩個都差不多,但是PHP相對安全性高,因為ASP的團隊已經停止維護ASP了,PHP是開源免費的,每年仍然有很多大神在不斷完善這個程序。

PHP還有很多現成免費的CMS框架 ,比如織夢CMS 帝國CMS等,做站成本低,容易維護~

為什麼 PHP 一直在優化程序執行效率,而不優化數據庫連接

至於像java之類那樣「真正意義上的連接池」技術,在PHP上是根本不可行的。

PHP就是被設計成每次運行完以後銷毀一切狀態,任何數據都不會帶到下一個執行環境上去的。

所以不可能內置一個全功能的「連接池」,而只能從第三方擴展里實現。

如果你需要全功能連接池技術,那你就不能用PHP而需要用常駐內存型的語言,比如Java,ASPX,Ruby,Python,等等。

幫忙給優化一下PHP代碼,執行很慢

寫的話 很麻煩 給你個思路

你這個 主要是因為你是3次循環 並且每次都是在循環裡面查詢

那你可以 先把所有的數據一次性都調出來,然後在用循環去拼湊數據 ,這樣不會查詢數據庫

另外 循環的時候可以把已經拼湊好的數據 直接UNSET 減少下一次子循環的循環次數、

原創文章,作者:LFVM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/148431.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LFVM的頭像LFVM
上一篇 2024-11-03 15:16
下一篇 2024-11-03 15:16

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台服務器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種數據庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論