1、PHP版本很重要
PHP版本7比PHP5快得多。從最初版本開始,PHP版本完全支持兩年。以下是受支持的PHP版本。
在這兩個版本之間遷移時會出現兼容性問題,但優勢,尤其是性能提升,將超過開發成本和修改時間。如果您使用下面的以下版本,我建議您升級到當前版本的PHP以獲得更好的性能。
2、單引號和雙引號使用很重要
這似乎是開發人員應該關注的最后一件事,但是已經進行了大量測試來證明使用單引號,特別是在較大的循環和字符串中,比使用雙引號要快得多。在顯示字符串本身之前,雙引號字符串將首先查找其中的某些變量; 這就是為什么它比用單引號打印字符串稍微慢一些。當您考慮PHP項目的性能優化時,字符串的單引號的使用很重要。
function doubleQuotes($iterations) { doubleQuotes($iterations) { $temp_str = "";= ""; $start_time = microtime(true);= microtime(true); for ($x=0; $x<$iterations; $x++) {for ($x=0; $x<$iterations; $x++) { $temp_str .= "Hello World! ";.= "Hello World! "; }} echo "Time for doubleQuotes(): " . (microtime(true)-$start_time) . "</br>";"Time for doubleQuotes(): " . (microtime(true)-$start_time) . "</br>";}}function singleQuotes($iterations) {function singleQuotes($iterations) { $temp_str = '';= ''; $start_time = microtime(true);= microtime(true); for ($x=0; $x<$iterations; $x++) {for ($x=0; $x<$iterations; $x++) { $temp_str .= 'Hello World! ';.= 'Hello World! '; }} echo 'Time for singleQuotes(): ' . (microtime(true)-$start_time) . '</br>';'Time for singleQuotes(): ' . (microtime(true)-$start_time) . '</br>';}}doubleQuotes(500000);(500000);singleQuotes(500000);(500000);Time for doubleQuotes(): 0.065473079681396Time for doubleQuotes(): 0.065473079681396Time for singleQuotes(): 0.027308940887451Time for singleQuotes(): 0.027308940887451
從這個測試開始,與帶雙引號的字符串測試相比,帶單引號的字符串運行速度快兩倍以上。毫秒的差異可能看起來可以忽略不計,但這種性能提升將有助于每分鐘數百名用戶訪問的Web應用程序。因此,如果需要顯示變量的值,則只用雙引號回顯; 如果沒有,那么用單引號回顯字符串要快得多。
3、循環中計數函數的影響
循環主要用于遍歷數組; 但是如果循環的條件使用count函數來計算數組元素的數量,那么使用這個函數會產生開銷。
for ($x=0; $x<count($arr); $x++) { } ($x=0; $x<count($arr); $x++) { }$count = count($arr);= count($arr);for ($x=0; $x<$count; $x++) { }for ($x=0; $x<$count; $x++) { }
使用循環遍歷數組的最佳方法是將數組中的元素數存儲一次,然后將該變量用于循環條件。因為如果count函數用于for循環或循環,那么每次循環迭代時,程序都會重新計算數組,這會增加每次迭代中的進程數。開發人員應該在循環中使用count的唯一方法是在循環內部進行數組處理。
4、關閉或取消設置變量
查詢數據庫時,必須建立連接,一種方法是聲明連接變量。我們都知道使用或聲明的每個變量都使用內存,因此在查詢或所有查詢完成后關閉連接是一個好習慣。、
$conn = new mysqli($servername, $username, $password, $dbname);= new mysqli($servername, $username, $password, $dbname);//查詢//查詢$conn->close();->close();$myfile = fopen("sample-file.txt", "r") or die("Unable to open file!");= fopen("sample-file.txt", "r") or die("Unable to open file!");//讀取內容//讀取內容fclose($myfile);($myfile);
與打開文件類似,在讀取或寫入文件后,必須關閉處理連接的變量。即使多人訪問Web應用程序的相同請求,關閉連接也將大大節省內存使用量。
5、靜態方法或屬性使用較少的資源
類中的靜態方法在使用時不需要實例化其類。與公共方法或屬性不同,需要在訪問它之前對其實例化進行實例化,可以直接調用靜態方法。當只有一個方法的類被從其他類中調用很多時,必須將此方法聲明為靜態方法。這將減少應用程序的內存使用量,因為變量或類實例化需要內存。
6、優化SQL查詢
連接不僅會使代碼更短,而且性能提升也很重要。初學者通常對第一個表進行選擇查詢,然后根據第一個選擇查詢的結果進行另一個選擇查詢。
$query1 = mysql_query("SELECT id FROM users");= mysql_query("SELECT id FROM users");while ($row = mysql_fetch_assoc($query1)) {while ($row = mysql_fetch_assoc($query1)) { $query2 = mysql_query("SELECT * FROM user_info WHERE user_id = {$row['id']}");= mysql_query("SELECT * FROM user_info WHERE user_id = {$row['id']}");}}
此外,具有多個數據庫查詢的HTTP請求在Web開發中是禁忌的。如果無法使用連接查詢相關數據庫表,則需要對該數據庫進行規范化。
使用SQL查詢進行性能優化的另一種方法是將索引添加到某些列。這樣,使用索引列檢索記錄將更快。盡管與常規列相比,索引需要額外的存儲空間,但對記錄具有快速檢索率是一種良好的用戶體驗。通常,需要編制索引的列是JOIN,ORDER BY,GROUP BY和WHERE子句中使用的列。
SELECT * FROM employees WHERE address LIKE '%Kansas City%'* FROM employees WHERE address LIKE '%Kansas City%'
在查詢中使用通配符肯定會使過濾結果變得更加容易,但這種查詢是Web應用程序放慢速度的主要原因之一。不是使用字符串來存儲像城市和國家這樣的重復值,而是將這些類型的字段存儲為整數并使用另一個數據庫表來存儲這些整數及其各自的字符串值。以這種方式,使用這些字段的檢索現在將需要整數而不是字符串。
SELECT id, first_name, last_name FROM employees, first_name, last_name FROM employees
如果可能,如果您不打算使用數據庫表的所有列,則只指定要使用的SELECT查詢中的哪些列而不是SELECT *。查詢返回的列越多,內存和處理能力就越大。
性能優化的另一種方法是縮小JS和CSS代碼; 這將使人們無法閱讀,但當我們談論生產中的Web應用程序時,代碼的可讀性不是優先事項。同時縮小代碼會減小文件的大小,從而縮短加載時間。瀏覽器可以快速解析這些文件,因為省略了注釋和空格,從而減少了忽略它的過程。當混淆代碼使其無法被人閱讀時,只需對需要保護的代碼進行模糊處理,因為此過程可能會破壞代碼。
8、使用CDN優化性能
Web應用程序通常使用Bootstrap和jQuery等庫,加載這些文件的最佳方式是通過內容交付網絡,如Cloudflare。要優化Web應用程序的性能,請利用內容交付網絡(CDN)。我們的大多數圖像,CSS或JS文件都是靜態的,因此在靠近用戶所在位置的服務器上維護內容的緩存副本是明智的。通過這種方式,數據傳播的距離更短,執行速度更快,這將減少應用程序的延遲。需要性能改進的Web應用程序必須考慮使用CDN來下載資源。CDN允許用戶從更近的源下載內容,而不是從托管整個應用程序的位置加載內容,這將極大地影響應用程序的加載時間。
9、Web應用程序流量
另一件需要考慮的事情是流量以及應用程序響應用戶請求的速度。在Web應用程序中,常見問題是流量,訪問系統的用戶數量以及服務器處理特定請求的請求和響應的能力。比如Stackify Retrace可以監控應用程序的流量。
Retrace確保您的應用程序完美地滿足您的需求。Retrace支持Microsoft Azure,Amazon AWS和Google GCP,以最大限度地提高基于云的監控功能,從而確保應用程序的質量。
以上就是怎么進行PHP性能優化的詳細內容,更多請關注 其它相關文章!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答