← về danh sách
·3 phút đọc

7 mẹo tối ưu PHP trên hosting chia sẻ

Hosting chia sẻ (shared hosting) thường bị giới hạn về CPU, RAM và số tiến trình. Tin tốt là phần lớn vấn đề chậm không nằm ở phần cứng, mà ở cách code và cấu hình. Dưới đây là vài mẹo mình hay áp dụng.

1. Bật OPcache

OPcache biên dịch sẵn mã PHP và lưu trong bộ nhớ, tránh phải đọc lại file mỗi request. Hầu hết host bật sẵn, nhưng bạn nên kiểm tra:

php
<?php
if (function_exists('opcache_get_status')) {
    $s = opcache_get_status();
    echo $s['opcache_enabled'] ? 'OPcache: BẬT' : 'OPcache: TẮT';
} else {
    echo 'OPcache không khả dụng';
}

Nếu được phép chỉnh php.ini (hoặc .user.ini), vài thông số đáng quan tâm:

ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=60

2. Giảm số lần đọc file

Mỗi lần gọi file_exists(), is_file(), glob()… là một lần chạm vào ổ đĩa. Với blog flat-file, hãy cache danh sách bài trong bộ nhớ thay vì quét thư mục nhiều lần:

php
function get_all_posts() {
    static $cache = null;          // chỉ quét đĩa một lần mỗi request
    if ($cache !== null) return $cache;

    $posts = [];
    foreach (glob(__DIR__ . '/posts/*.md') as $file) {
        $posts[] = doc_doc_bai($file);
    }
    return $cache = $posts;
}

3. Nén đầu ra

Bật nén gzip/deflate giúp giảm 60–80% dung lượng HTML truyền đi. Thêm vào .htaccess:

apache
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>

4. Đặt thời gian cache cho tài nguyên tĩnh

Ảnh, CSS, JS gần như không đổi — hãy bảo trình duyệt giữ lại:

apache
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 year"
</IfModule>

So sánh nhanh trước / sau

Đây là kết quả đo thử trên một trang blog tĩnh nhỏ của mình (thời gian tải trung bình):

Hạng mụcTrướcSauCải thiện
HTML tải về48 KB12 KB~75%
Thời gian phản hồi180 ms70 ms~61%
Số request149~36%

5. Dùng PHP phiên bản mới nhất

Mỗi phiên bản PHP mới thường nhanh hơn bản trước đáng kể. Trong cPanel, tìm mục Select PHP Version và chọn bản 8.x mới nhất mà host hỗ trợ.

6. Tránh autoload nặng nề

Nếu không thật sự cần, đừng kéo cả một framework lớn vào chỉ để render vài trang. Với blog này, toàn bộ "engine" gói gọn trong một file functions.php — không Composer, không hàng trăm class.

7. Đo trước khi tối ưu

Đừng đoán. Dùng một timer đơn giản để biết chỗ nào thật sự chậm:

php
$bat_dau = microtime(true);
// ... đoạn code cần đo ...
$ms = (microtime(true) - $bat_dau) * 1000;
error_log(sprintf('Khối A mất %.1f ms', $ms));

Quy tắc vàng: đo, sửa, đo lại. Tối ưu mà không đo thì chỉ là mê tín.

Chúc bạn có một website nhẹ và nhanh. Nếu áp dụng được mẹo nào, cứ thử đo lại để thấy sự khác biệt nhé.