Tối ưu CodeIgniter – Cache, tối ưu tốc độ

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 3 tháng 4, 2025

Trong quá trình phát triển ứng dụng web, tốc độ tải trang và hiệu suất xử lý đóng vai trò quan trọng đối với trải nghiệm người dùng. Bài học này sẽ hướng dẫn bạn:

  • Cách tối ưu tốc độ tải trang bằng hệ thống cache.
  • Cách nén tài nguyên tĩnh (CSS, JS, hình ảnh) để giảm thời gian tải.
  • Tối ưu truy vấn SQL để tăng hiệu suất xử lý dữ liệu.
  • Thực hành: Kích hoạt cache và tối ưu hóa một ứng dụng CodeIgniter.

Tối ưu CodeIgniter – Cache, tối ưu tốc độ

1. Tối ưu tốc độ tải trang với Caching

Caching là gì?

Caching giúp lưu trữ dữ liệu tạm thời để giảm thời gian tải lại trang, cải thiện tốc độ xử lý và giảm tải cho server.

Các loại cache trong CodeIgniter

  • Page Caching: Lưu toàn bộ trang web để tránh tải lại nội dung từ cơ sở dữ liệu.
  • Database Query Caching: Lưu kết quả truy vấn để giảm số lần truy vấn vào database.
  • Fragment Caching: Lưu trữ một phần nội dung trên trang để tăng tốc độ hiển thị.

Kích hoạt Page Caching

Bật cache trong CodeIgniter 4

Bạn có thể bật cache trong Controller bằng cách:

public function index()
{
    $this->cachePage(60); // Lưu cache trong 60 giây
    return view('homepage');
}

Lưu ý: Cache sẽ tự động xóa sau 60 giây.

Kích hoạt Database Query Caching

Bật cache cho truy vấn SQL

$db = \Config\Database::connect();
$query = $db->query("SELECT * FROM users");
$query->getResult(); // Kết quả sẽ được cache

Xóa cache khi dữ liệu thay đổi

$db->query("DELETE FROM users WHERE id = 1");
$db->query("RESET QUERY CACHE"); // Xóa cache để cập nhật dữ liệu mới

2. Nén tài nguyên tĩnh (CSS, JS, hình ảnh)

Bật Gzip Compression để giảm dung lượng tải trang

Trong CodeIgniter 4, bật Gzip bằng cách chỉnh sửa file .htaccess:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
</IfModule>

Hiệu quả: Giảm kích thước tải trang từ 30-70%.

Minify (nén) CSS và JavaScript

Bạn có thể dùng thư viện Minify để nén CSS và JS:

composer require matthiasmullie/minify

Nén CSS

use MatthiasMullie\Minify;

$minifier = new Minify\CSS();
$minifier->add('style.css');
$minifier->minify('style.min.css');

Nén JavaScript

$minifier = new Minify\JS();
$minifier->add('script.js');
$minifier->minify('script.min.js');

Hiệu quả: Giảm 50% dung lượng CSS, JS.

Tối ưu hình ảnh

Sử dụng ImageMagick hoặc TinyPNG API để giảm kích thước hình ảnh mà không giảm chất lượng.
Nén ảnh bằng CodeIgniter 4

$image = \Config\Services::image()
    ->withFile('image.jpg')
    ->resize(800, 600)
    ->save('image_optimized.jpg');

Hiệu quả: Giảm 30-60% kích thước hình ảnh.

3. Tối ưu truy vấn SQL để giảm thời gian xử lý

Chỉ lấy dữ liệu cần thiết

Không nên dùng

$this->db->query("SELECT * FROM users");

Nên dùng

$this->db->query("SELECT name, email FROM users WHERE status = 1");

Sử dụng Index trong MySQL

Thêm Index để tăng tốc độ truy vấn:

ALTER TABLE users ADD INDEX idx_email (email);

Hiệu quả: Giảm thời gian truy vấn từ vài giây xuống vài mili giây.

Sử dụng Query Builder thay vì câu lệnh SQL thủ công

Cách tốt hơn để truy vấn dữ liệu

$db = \Config\Database::connect();
$builder = $db->table('users');
$builder->select('name, email')->where('status', 1)->get();

4. Thực hành: Kích hoạt cache và tối ưu hóa một ứng dụng CodeIgniter

Bài tập thực hành

  1. Bật cache trang chủ của website với thời gian cache là 5 phút.
  2. Nén tất cả các file CSS, JS bằng Minify.
  3. Tối ưu hình ảnh trước khi tải lên.
  4. Tạo Index cho bảng Users để tăng tốc độ tìm kiếm.

Kết luận

Tóm tắt nội dung chính

  • Caching giúp tăng tốc độ tải trang bằng cách lưu dữ liệu tạm thời.
  • Nén CSS, JS, hình ảnh giúp giảm kích thước tài nguyên tĩnh.
  • Tối ưu truy vấn SQL bằng cách dùng Index và Query Builder.
  • Thực hành tối ưu hóa hiệu suất một ứng dụng CodeIgniter.

Ứng dụng thực tế

  • Tăng tốc website thương mại điện tử bằng cache và tối ưu dữ liệu.
  • Giảm tải cho server bằng cách sử dụng Gzip và Minify CSS/JS.
  • Cải thiện SEO nhờ tăng tốc độ tải trang.
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ