在開發基於PHP的Web應用程式時,僅僅解決問題和專案要求是不夠的。存儲,內存和CPU數量等伺服器資源有助於託管的價格; 這就是開發人員在開發Web應用程式時應該考慮這些資源的原因。除此之外,應用程式必須順利運作。在Web應用程式中有數百種方法可以進行某種效能優化,以下為大家總結介紹PHP效能優化的一些方法。
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.065473079681396 Time for singleQuotes(): 0.027308940887451Time for singleQuotes(): 0.027308940887451
從這個測試開始,與雙引號的字串測試相比,單引號的字串運行速度快兩倍以上。毫秒的差異可能看起來可以忽略不計,但這種效能提升將有助於每分鐘數百名使用者存取的網路應用程式。因此,如果需要顯示變數的值,則只用雙引號回顯; 如果沒有,那麼用單引號回顯字串要快得多。
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 *。查询返回的列越多,内存和处理能力就越大。
7、缩小CSS和JavaScript
性能优化的另一种方法是缩小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效能最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!