91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP性能問題分析+優化的案例

發布時間:2020-10-31 01:22:24 來源:億速云 閱讀:525 作者:小新 欄目:編程語言

小編給大家分享一下PHP性能問題分析+優化的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

什么情況下,遇到了PHP性能問題?
   1 PHP語法使用的不恰當
   2 使用PHP語言做不了它不擅長做的事
   3 用php語言連接的服務不給力
   4 PHP自身的短板
   5 我也不知道的問題

性能問題解析

       PHP的性能問題,占整個項目性能問題的比例 不到50%

       性能優化項目,不要局限于僅優化PHP

   php語言級的性能優化
           |
           |
           |
   php周邊問題的性能優化
           |
           |
           |
   php語言自身分析,優化



PHP 壓力測試工具ab簡介

Apache Benchmark(ab)(可以自行下載)
   ab是由Apache提供的壓力測試軟件,安裝apache服務器時會自帶該壓測軟件。


如何使用?

   ./ab -n1000 -c100 http://www.baidu.com/

        -n請求數

                -c并發數

                        url目標壓測地址


PHP-壓力測試工具使用演示


   主要關注 每秒并發盡可能的多

   請求耗時盡可能的少

多使用PHP自身能力

   優化:少寫代碼,多用PHP自身能力

       性能問題: 自身代碼冗余較多,可讀性不佳,并且性能低

   為甚性能低?
        PHP代碼需要編譯解析為底層語言,這一過程每次請求都會處理一遍,開銷大。

   好的方法:
       多使用PHP內置變量\常量\函數

PHP自身能力性能測試之代碼準備

   
php代碼運行流程


*.php ---Scanner---> Exprs -----Parser--->Opcodes---Exec--->Output


php內置函數之間的性能測試

   優化點:php內置函數的性能優劣

       情況描述: php內置函數,之間依然存在塊慢差異
       好的建議: 多去了解PHP內置函數的時間復雜度


php內置函數之間的性能測試之代碼測試



   isset($arr[$i]); //平均50ms
   array_key_exists($i,$arr);//平均85ms


減少PHP魔法函數的使用

   情況描述:  PHP提供的魔法函數,性能不佳
   為什么性能低 為了給PHP程序猿省事 PHP語言為你做了很多

   好的方法   盡可能規避使用PHP魔法函數




PHP 禁用錯誤抑制符

   @的實際邏輯

       在代碼開始前 結束后 增加 Opcode 忽略報錯

   php -dv|d.active=1 -dv|d.execute=0 at.php

   只是想查看并不是真的想執行

PHP-合理的使用內存和正則表達式

   優化點:合理使用內存

   PHP有內存回收機制保底,但也請小心使用內存

   好的建議  
        利用unset() 及時釋放不使用的內存(注:unset()出現注銷不掉的情況)


   盡量少的使用正則表達式

       正則表達式的回溯開銷較大,

   好的建議:
       利用字符串處理函數,實現相同邏輯


PHP-避免在循環內做運算

   優化點:避免在循環內做運算

   情況描述:
       循環內的計算式將會被重復計算

   代碼示例:
       <?php
           $str = "hello world";
           for($i=0;$i<strlen($str);$i++)
           {
               //do something
           }


PHP-減少計算密集型業務

   PHP不適合密集型運算的場景

   PHP語言特性決定了PHP不適合做大數據量運算


PHP適合場景

   適合銜接Webserver與后盾服務,UI呈現


PHP-務必使用帶引號字符串做鍵值

   PHP會將沒有引號的鍵值當做常量,產生查找常量的開銷

   嚴格使用引號的字符串作為鍵值


PHP周邊問題的分析與闡述

   PHP周邊都有什么?

       linux運行環境  php   硬盤(文件存儲)  數據庫(例如mysql) 緩存 網絡


php周邊對PHP程序的影響分析



減少文件類的操作

   常見PHP場景的開銷次序:

       讀寫磁盤 讀寫數據庫 讀寫內存 讀寫網絡數據

       讀寫內存 << 讀寫數據庫 < 讀寫磁盤 < 讀寫網絡數據


減少PHP發起網絡請求
   
   網絡請求的坑:
       1 對方接口的不確定因素
       2 網絡穩定性
   優化網絡請求

       1 設置超時時間
           連接超時 200ms
           讀超時   800ms
           寫超時   500ms
       
       2 將串行請求并行化

           1 curl_multi_*()
           2 使用swoole擴展

       curl_multi_*()不是很好,因為他是按最長的一個返回的時間來定的

       curl_multi_add_handle 向curl批處理會話中添加單獨的curl句柄
       curl_multi_close 關閉一組cURL句柄
       curl_multi_exec 運行當前cURL句柄的子連接
       curl_multi_getcontent 如果設置了CURLOPT_RETURNTRANSFER,則返回獲取的輸出的文本流
       curl_multi_info_read 獲取當前解析的cURL的相關傳輸信息
       curl_multi_remove_handle 移除curl批量處理句柄資源中的某個句柄資源
       curl_multi_select 等待所有cURL批處理中的活動連接
       curl_multi_setopt Set an option for the cURL multi handle
       curl_multi_strerror - Return string describing error code


       推薦swoole擴展來做


壓縮PHP輸出的利與弊
   壓縮php接口的輸出
   如何壓縮?

       使用Gzip即可

   利  利于我們的數據輸出,Client端能更快獲取數據
   弊  額外的CPU開銷

PHP緩存復用

   什么情況下做輸出內容的緩存?
       多次請求,內容不變情況


Smarty調優和重疊時間窗口思想

   Smarty開啟 caching

   重疊時間窗口思想  

       串行:
           Process1 Process2 Process3 Process4

       重疊時間窗口:

           process1
               process2
                   process3
                       process4

   后一個任務不強依賴前一個任務的時候,可以使用重疊時間


PHP旁路處理方案

   一般普通的:x.php -> Process1 ->process2 ->process3 -> process4->
   
   旁路方案: x.php -> Process1 ->process2(同時) ->Process3 (同時) -->Process4->

以上是PHP性能問題分析+優化的案例的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武威市| 道真| 霞浦县| 郎溪县| 花垣县| 祁东县| 攀枝花市| 武定县| 汝城县| 蒙阴县| 阳曲县| 麻江县| 达孜县| 钟祥市| 汤原县| 隆子县| 鄂温| 资溪县| 荔浦县| 扶风县| 双柏县| 崇信县| 楚雄市| 阳东县| 古浪县| 紫金县| 荆门市| 东辽县| 建平县| 时尚| 定西市| 宜宾县| 南丹县| 惠安县| 霍林郭勒市| 崇信县| 通江县| 柏乡县| 云龙县| 永顺县| 天水市|