Những mẹo hay tối ưu code PHP lập trình viên bắt buộc phải biết

Với một chương trình PHP hoàn chỉnh hoặc với số lượng lớn người sử dụng cùng lúc, nếu mã nguồn được viết hợp lí, chương trình của bạn được tăng tốc đáng kể. Tối ưu và tăng tốc xử lý khi lập trình PHP không chỉ giúp website chạy ổn định mà còn giúp tiết kiệm tài nguyên xử lý của máy chủ website.

Khi học và làm việc với PHP lần đầu, đa phần các lập trình viên đều có xu hướng học lướt các kiến thức căn bản để tập trung vào phần viết ứng dụng. Cũng chính vì lý do đó mà phần lớn những điểm nhấn quan trọng trong PHP thường là sẽ bị bỏ qua.

Bài viết này, với mong muốn tổng hợp và đưa đến cái nhìn bao quát, đầy đủ trong lập trình PHP. Qua đó giúp các bạn có cái nhìn đầy đủ và hiểu sâu các vấn đề hơn.

 

1. Dùng các chức năng có sẵn của PHP

Không việc gì mà bạn không dùng đến những function có sẵn của PHP. ví dụ như hàm sort (sắp xếp), lấy ngẫu nhiên random, loại bỏ phần tử, tất cả đều đã được PHP hỗ trợ sẵn mà bạn không cần phải viết lại, vì nó sẽ tối ưu code trong lập trình php, làm tốc độ thực thi của script giảm.

 

2. Dùng echo thay thế print

Echo luôn luôn hoạt động nhanh hơn print, vì echo không có return gì cả, trong khi print thì luôn return true hay false (0 | 1).

<?php
print('Hello world!');
echo 'Hello world!';
?>

3. Dùng nháy đơn thay vì nháy kép (“)

Nếu bạn chỉ đơn thuần là lưu một chuỗi vào một biến thì hãy dùng dấu nháy đơn, bởi vì PHP sẽ phải mất thời gian để kiểm tra giá trị trong dấu nháy kép xem nó có chưa biến nào không để lấy giá trị biến đó, ví dụ như echo “$a”. Trong khi nháy đơn thì không kiểm tra, vì nội dung bên trong nháy đơn chắc chắn là chuỗi.

Xét ví dụ sau:

<?php
$str = 'world';
$a = 'Hello ' . $str;
$b = "Hello $str";
?>

4. Dùng === thay vì ==

Nếu bạn dùng === để so sánh, thì phạm vi kiểm tra sẽ hẹp lại cho tốc độ thực thi nhanh hơn.

5. Nên Tính toán 1 lần trong vòng lặp

Đối với những hàm tính toán mà có thể sử dụng một lần, hãy đưa nó vào biến để đỡ phải tính đi tính lại nhiều lần

Ví dụ:
chưa tối ưu

for( $i=0; i< count($arrA); $i++){
echo count($arrA);
}

đã tối ưu

$len = count($arrA);
for( $i=0; i< $len; $i++){
echo $len;
}

6. Tối ưu code PHP bằng tham chiếu trong function

Nếu sử dụng tham chiếu trong function mà không gây ảnh hưởng tới logic trong bài toán thì bạn nên sử dụng, việc thao tác tham chiếu nhanh hơn tham trị, vì thế nó rất có lợi trong tối ưu code PHP

chưa tối ưu

 

<?php
// passing by value
function computeValue( $param ){
// Something goes here
foreach( $param as $k => $value){
$param[$k] = $value + 1;
}

return $param;
}
$x = array();
for( $i =0; $i<99; $i++){
$x[$i] = $i;
}
// array with 100 elements each incremented by 1
print_r(computeValue( $x));

?>

 

đã tối ưu

<?php
// passing by reference
function computeValue( &$param ){
// Something goes here
foreach( $param as $k => $value){
$param[$k] = $value + 1;
}
}
$x = array();
for( $i =0; $i<99; $i++){
$x[$i] = $i;
}
computeValue( $x);

// array with 100 elements each incremented by 1
print_r( $x );

?>

7. Dùng Method và Class khi cần thiết

Chỉ khi thực sự cần mới nên tạo class và method.

8. Tắt thông báo debug

Bạn nên tắt thông báo khi sản phẩm đã được xuất bản vì thông báo lỗi sẽ được ghi thường xuyên ra log, gây ra giảm tốc độ, tốn kém tài nguyên và không tốt chút nào cho hệ thống.

9. Sử dụng cache

Hãy dùng cache để hạn chế việc phải load toàn bộ dữ liệu trên database, giúp tăng tốc và tối ưu hệ thống.

10. Đóng kết nối

Hãy unset các biến không dùng tới hoặc close connection của database khi thực hiện tác vụ để tránh lãng phí bộ nhớ

11.Giảm số lần kết nối với database

Đừng cố truy vấn database nhiều lần trong khi công việc của bạn chỉ cần 1 lần
Hãy xem 2 ví dụ sau để hiểu rõ hơn
Chưa tối ưu, gọi nhiều lần

 

<?php
$con=mysqli_connect("localhost","username","somepassword","anydb");

if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL" ;
mysqli_connect_error();
}

function insertValue( $val ){
mysqli_query($con,"INSERT INTO tableX (someInteger) VALUES ( $val )");
}

for( $i =0; $i<99; $i++){
// Calling function to execute query one by one
insertValue( $i );
}
// Closing the connection as best practice
mysqli_close($con);

?>

 

Đã tối ưu, gọi 1 lần

<?php
$con=mysqli_connect("localhost","username","somepassword","anydb");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL" ;
mysqli_connect_error();
}

function insertValues( $val ){
// Creating query for inserting complete array in single execution.
$query= " INSERT INTO tableX(someInteger) VALUES .implode(',', $val)"; 
mysqli_query($con, $query);
}

$data = array();
for( $i =0; $i<99; $i++){
// Creating an array of data to be inserted.
$data[ ] = '(" ' . $i. '")' ;
}
// Inserting the data in a single call
insertValues( $data );
// Closing the connection as a best practice
mysqli_close($con);

?>
 

12. Ưu tiên dùng switch case trong những câu điều kiện thích hợp

13. Sử dụng Json

Hãy dùng Json thay vì XML trong những rest API hay web service. Bởi đơn giản Json được PHP hỗ trợ nhiều function như là json_encode, json_decode rất nhanh. Còn nếu dùng XML bạn sẽ phải đọc XML dùng regular expression để parse ra,… tốn thời gian!

14. Sử dụng isset

Dùng hàm isset bất cứ lúc nào có thể thay vì sử dụng count(), strlen(), sizeof() để kiểm tra giá trị trả về lớn hơn 0

đã tối ưu

 
if(isset($returnValue)){
// do something here
}

không tối ưu

 

if(count($returnValue) > 0){
// do something here
}

15. Đừng back folder khi gọi lại file

Thói quen back folder của một số lập trình viên cần phải xem xét lại vì khi back folder, hệ thống phải cần thời gian tìm kiếm và định hình đường dẫn. Điều đó sẽ làm cho ứng dụng tốn tài nguyên trong việc thực hiện thao tác này.

Cụ thể:

<?php
require_once '../../path/config.php';
?>


Khắc phục:

<?php
require_once BASE.'/path/config.php';
?>


BASE là một hằng được định nghĩa từ đầu để chỉ ra đường dẫn vật lý tới thư mục của ứng dụng.

16. Nối chuỗi bằng dấu "," sẽ nhanh hơn dấu "."

Thói quen khi lập trình PHP thường là nối chuỗi và biến bằng dấu ".". Nhưng thực tế là khi nối chuỗi bằng dấu "," thì tốc độ xử lý của ứng dụng sẽ được cải tiến và nhanh hơn rất nhiều

<?php
echo $str1 . $str2;
echo $str1 , $str2; // Nhanh hơn
?>

 

17. Luôn dùng dấu nháy để truy cập khóa của 1 mảng

Thực tế là các lập trình viên hay bỏ qua điều này vì sự rườm rà của cách viết. Nhưng nếu không có nó thì ứng dụng sẽ lại chậm đi một chút. Vì khi đó nó sẽ xem khóa đó là một hằng, và tìm xem có hằng nào định nghĩa hay không? Như vậy sẽ làm code chạy chậm đi do phải mất thời gian xử lý tác vụ biên dịch hằng. Ví dụ:

<?php
$a = $b['abc']; // nhanh hơn
$a = $b[abc];
?>

18. Sử dụng ip2long() vàlong2ip() để lưu trữ địa chỉ IP như một số nguyên thay vì chuỗi string

19. ++$i thực hiện nhanh hơn $ i++, vì vậy ta nên chọn ++$i tại tất cả những nơi mà có thể 

 

20. Việc ngăn chặ bắt lỗi bằng @ sẽ làm rất chậm tiến trình thực hiện ​

 

Như vậy mình đã chia sẻ cho các bạn các cách để tối ưu hóa code trong lập trình php. Đây hoàn toàn là những kinh nghiệm mình có được trong lúc lập trình. Tuy nhiên khi mới bắt đầu học lập trình php các bạn hãy chú trọng hơn về các cú pháp. Khi đã cứng tay rồi hay bắt đầu học cách tối ưu hóa code. Nếu các bạn có các cách tối ưu hóa nào khác, hãy đừng ngần ngại comment ngay bên dưới để chia sẻ cho mình nhé.

+2