Hãy dùng SplFixedArray cho dữ liệu vài 1k records nhé.

Hãy dùng SplFixedArray cho dữ liệu vài 1k records nhé.

rong PHP, nếu bạn biết trước kích thước 1 array, mảng..bạn nên sử dụng SplFixedArray thay vì kiểu array truyền thống. Chương trình sử dụng SplFixedArray sẽ chạy nhanh hơn và tiết kiệm RAM hơn khá nhiều.

Dù trên PHP7,   Zend đã cố gắng optimize PHP engine nhiều nhưng chúng ta vẫn sẽ thấy sự khác biệt lớn bằng một vài đoạn code ví dụ dưới đây.

Đoạn code mình làm ví dụ trong trường hợp tính toán 2 array bình thường. Nếu có bạn hỏi vì sao mình phải tạo 2 array. Câu trả lời là việc lưu trữ sẽ trở nên “vô nghĩa” nếu các “thứ” được lưu ko được truy vấn và sử dụng. Việc  đó giống như các bạn lưu 1 đoạn JSON string vào table trong các CSDL (mấy em cũ cũ, hay các thể loại ko support JSON data) và sau này than trời vì không cách nào truy vấn cái cục JSON đó cả.  

Đoạn code minh họa cho việc sử dụng array truyền thống.

<?php
 
$start = microtime(true);
$totalItems = 100000;
 
$array1 = [];
$array2 = [];
$result = [];
 
for ($i = 0; $i < $totalItems; $i ++) {
    $array1[$i] = rand(1, 100);
    $array2[$i] = rand(1, 100);
}
 
 
for ($i = 0; $i < $totalItems; $i ++) {
    $result[$i] = $array1[$i] + $array2[$i];
}
 
echo sprintf("Total time: %s second \n", (microtime(true) - $start));
echo sprintf("Highest memory: %s MB \n", memory_get_peak_usage(true) / 1024.0 / 1024.0);

Và đoạn code việc sử SplFixedArray.

<?php
 
$start = microtime(true);
$totalItems = 100000;
 
$array1 = new SplFixedArray($totalItems);
$array2 = new SplFixedArray($totalItems);
$result = new SplFixedArray($totalItems);
 
for ($i = 0; $i < $totalItems; $i ++) {
    $array1[$i] = rand(1, 100);
    $array2[$i] = rand(1, 100);
}
 
for ($i = 0; $i < $totalItems; $i ++) {
    $result[$i] = $array1[$i] + $array2[$i];
}
 
echo sprintf("Total time: %s second \n", (microtime(true) - $start));
echo sprintf("Highest memory: %s MB \n", memory_get_peak_usage(true) / 1024.0 / 1024.0);

Khi chạy thử 2 đoạn mã trên, chúng ta có kết quả như bên dưới.

Tiêu chíArray[]SplFixedArray
PHP5 – Total time(s)0.3195s0.287s
PHP5 Highest memory(MB)40.75MB17 MB
PHP7 – Total time(s)0.197s0.1966s
PHP7 Highest memory(MB)22MB8MB

Tóm lại

Cuộc sống sẽ tươi vui hơn, bồ bạn sẽ happy hơn nếu như trong khi lập trình PHP, nếu biết trước kích thước của mảng ta nên dùng class SplFixedArray thay vì array[]. Chúc vui!