Diễn đàn Tuổi trẻ Việt Nam | 2TVN Forum
Quảng cáo, giới thiệu dịch vụ: Thực hiện tối ưu hóa code trong php căn bản FfWzt02
Diễn đàn Tuổi trẻ Việt Nam | 2TVN Forum
Quảng cáo, giới thiệu dịch vụ: Thực hiện tối ưu hóa code trong php căn bản FfWzt02



#1

20.06.16 18:30

thamkk0212

thamkk0212

Thành viên nhút nhát

Thành viên nhút nhát
Thực hiện tối ưu hóa code php cơ bản đến nâng cao , đào tạo hoàn cảnh tối ưu hóa code php nếu với có nhiều người sử dụng cùng lúc , mã nguồn được viết có lí , có xác xuất cải thiện các tiêu chuẩn của bạn được tăng một cách đáng kể.
Những năm nay , học lập trình php đã trở nên một trong những tiếng nói phổ dụng nhất trong lập trình web php. Phần ưu tú của PHP là mã nguồn mở , miễn phí và không request cấu hình có máy chủ cao. Tuy nhiên , PHP có một số điểm yếu , một trong số đó là tốc độ. Dù có vậy , nếu mã nguồn được viết có lí , sử dụng PHP bạn không có một sự hạn chế hay một trường hợp ngoại lệ nào cả có xác xuất tạo được ứng dụng chạy với tốc độ vượt trội.
Các lừa dối tăng tốc
Để có xác xuất giảng giải rỏ rành , chúng ta bắt đầu bằng một ví dụ:
require_once 'my_functions.php';
function format_str( $str )
$str = str_replace( '0' , '1' , $str );
return $str;

$my_array = array( );
// Mã nguồn để đưa dữ liệu vào $my_array ở đây
for ( $i = 0; $i < count(="" $my_array="" );="" $i++="" ) ="">
if ( ereg( '^[0-9]+$' , $my_array[$i] ) && ( strlen( $my_array[$i] ) > 1 ) )
$my_array[$i] = format_str( $my_array[$i] );
print $my_array[$i].”
”; 
vấn đề đầu tiên là việc sử dụng require_once làm tiêu chuẩn chậm đi , khi đó php cơ bản sẽ phải kiểm tra xem file đã được nạp trước đó chưa. Tất nhiên , trong nhiều trường hợp , điều này là không tránh khỏi. Nhưng nếu hão huyền sự cần thiết , bạn nên sử dụng require hoặc include thay vì require_once/include_once.
...
require 'my_functions.php'
...
Với đoạn mã trên , ở mỗi vòng lặp , PHP sẽ phải chạy count( $my_array ) và so sánh kết quả với $i. Tuy nhiên , vì dữ liệu của $my_array là không đổi , chạy count với mỗi lần lặp là không để ý thiết. Vòng lặp trên có xác xuất được viết lại nhanh hơn như sau:
...
$c = count( $my_array );
for ( $i = 0; $i < $c;="" $i++="" )="">
...
Hoặc gọn hơn , có xác xuất viết:
...
for ( $i = 0 , $c = count( $my_array ); $i < $c;="" $i++="" )="">
...
Như vậy , count( $my_array ) sẽ chỉ phải chạy một lần độc nhất vô nhị , ngay cả khi mảng có vài nghìn phần tử.
Một vấn đề nữa với đoạn mã trên là việc sử dụng print , trong trường hợp này bạn nên sử dụng echo vì echo nhanh hơn khoảng 20% so với print. Lí do giản đơn nguyên do là vì print làm nhiều việc hơn echo. Một là print thêm vào cuối chuỗi thông số một dấu xuống dòng ( \n ) , hai là nó cũng trả về kết quả ( luôn là 1 ). Khi dùng echo , bạn còn có xác xuất đưa cả 2 chuỗi vào làm thông số , như vậy khóa học lập trình php sẽ không phải làm thao tác nối 2 chuỗi lại với nhau và chỉ đưa từng chuỗi ra màn hình một.
Đoạn mã trên còn sử dụng dấu nháy kép bao quanh
. Ví như sử dụng nháy đơn , PHP sẽ không phải tìm biến PHP cũng như các giá trị đặc biệt khác trong chuỗi ( nếu như \n , \r , \t ) và vì vậy thản nhiên sẽ nhanh hơn.
Dòng mã in dữ liệu ra màn hình vì vậy có xác xuất viết thành:
...
echo $my_array[$i] , '
';
...
ngoại giả , đoạn mã trên sử dụng ereg để kiểm tra xem chuỗi chỉ bao gồm một hoặc nhiều chữ số. Bạn không nên dùng ereg mặc dù ereg có vẻ dễ dàng để xử lý hoặc sử dụng hoặc quản lý hơn với nhiều người. Thay vào đó nên sử dụng preg_match , lí do nguyên do là vì preg_match có hiệu quả y sì kèm theo phần ưu tú vượt trội về tốc độ. Kể từ PHP 5.3.0 , ereg không còn được xứng đáng được đề nghị hoặc đề xuất sử dụng , dùng ereg sẽ gây ra khuyến cáo E_DEPRECATED. Dòng trên có xác xuất viết lại thành:
...
if ( preg_match( '!^[0-9]+$!' , $my_array[$i] ) && ( strlen( $my_array[$i] ) > 1 ) )
...
Thay vì sử dụng strlen như ở trên , bạn cũng có xác xuất sử dụng isset( $my_array[$i]1 ). isset là một kiến trúc tiếng nói , không phải là hàm như strlen vì vậy sử dụng isset sẽ nhanh hơn strlen. Tất nhiên bạn không có một sự hạn chế hay một trường hợp ngoại lệ nào cả có xác xuất thêm kiểm tra độ dài vào ngay trong preg_match – tuy nhiên , đây chỉ là một nếu để giúp bạn đọc hiểu được vấn đề.
if ( preg_match( '!^[0-9]+$!' , $my_array[$i] ) && isset( $my_array[$i]1 ) )
...
Đoạn mã trên cũng sử dụng str_replace để thay thế tuốt 0 thành 1 trong chuỗi. Ví như mục đích chỉ giản đơn có vậy , bạn nên sử dụng strtr thay vì str_replace vì strtr có xác xuất thực thi nhanh hơn 4 lần. Na ná , str_replace cũng nhanh hơn preg_replace và preg_replace cũng nhanh hơn ereg_replace rất nhiều. Trần vào hoàn cảnh , đôi lúc bạn chẳng thể thuần tuý sử dụng strtr mà phải sử dụng str_replace hay thậm chí preg_replace , nhưng dù trong trường hợp nào bạn cũng không nên sử dụng ereg_replace vì mọi việc đều có xác xuất làm được với preg_replace.
#2

10.03.17 22:38

uknown6

uknown6

Thành viên Lòng Cốt

Thành viên Lòng Cốt

Bình luận bằng facebook

   

Quyền hạn của bạn

   
Bạn không có quyền trả lời bài viết