PHP Framework Các giải pháp điều chỉnh hiệu suất cho ứng dụng web của bạn
Bài đăng này đã không được cập nhật trong 7 năm
Hiệu suất cho ứng dụng web
Có nhiều yếu tố ảnh hưởng tới hiệu suất ứng dụng Web của bạn. Một số về môi trường, một số liên quan đến mã nguồn của bạn, và cũng có liên quan tới Framework bạn đang triển khai.Trong bài viết này, mình sẽ liệt kê các yếu tố này và giải thích cách bạn có thể cải thiện hiệu suất ứng dụng bằng cách điều chỉnh các yếu tố này.
Tối ưu hóa môi trường PHP
Để có được hiệu suất tối đa, việc cấu hình môi trường PHP cũng rất quan trọng.
- Sử dụng phiên bản PHP ổn định mới nhất. Các bản phát hành chính của PHP có thể mang lại những cải tiến hiệu suất đáng kể.
- Bật bộ nhớ đệm bytecode bằng Opcache (PHP 5.5 trở lên) hoặc APC (PHP 5.4). Bộ nhớ đệm của Bytecode tránh thời gian dành cho việc phân tích cú pháp và bao gồm các tập lệnh PHP cho mọi yêu cầu gửi đến.
- Điều chỉnh bộ nhớ cache realpath ()
Tắt chế độ gỡ lỗi
Với các PHP Framework đều hỗ trợ việc debug, Khi bật chế độ gỡ lỗi, Framework sẽ mất thêm thời gian để tạo và ghi lại thông tin gỡ lỗi. Vì vậy điều này khi chạy ứng dụng trong quá trình sản xuất, bạn nên tắt chế độ gỡ lỗi.
Với các Framework đều hỗ trợ việc thiết lập debug:
- Laravel: Ứng dụng Laravel bạn có thể tham khảo cấu hình tại đây.
- Yii 2: Ứng dụng Yii 2, bạn có thể đặt dòng mã sau đây vào đầu tập lệnh nhập để vô hiệu chế độ gỡ lỗi:
defined('YII_DEBUG') or define('YII_DEBUG', false);
Lưu ý: Giá trị mặc định của YII_DEBUG là false. Vì vậy, nếu bạn chắc chắn rằng bạn không thay đổi giá trị mặc định ở nơi khác trong mã ứng dụng của mình, bạn chỉ cần xóa dòng trên để vô hiệu hoá chế độ gỡ lỗi.
Sử dụng các kỹ thuật Caching
Bạn có thể sử dụng các kỹ thuật bộ nhớ đệm khác nhau để cải thiện đáng kể hiệu suất của ứng dụng của bạn. Chẳng hạn: nếu ứng dụng của bạn cho phép người dùng nhập văn bản ở định dạng Markdown, bạn có thể xem xét việc lưu trữ nội dung Markdown đã được phân tích cú pháp để tránh phân tích cú pháp văn bản Markdown giống nhau trong mọi yêu cầu. Đơn giản hơn, thay vì mỗi request thì cần xử lý, thì bạn chỉ cần xử lý một lần đầu, sau đó lưu vào bộ nhớ cache, những request tiếp theo chỉ cần lấy từ bộ nhớ cache mà không cần phải xử lý.
Bật Schema Caching
Tương tự với các truy vấn CSDL, thông tin CSDL được lấy ra sẽ được lưu trong bộ nhớ cache và được sử dụng lại trong các request tiếp theo. Với các PHP Framework đều hỗ trợ:
- Laravel: Bạn có thể tham khảo tại mục caching.
- Yii 2. Bạn chỉ cần thiết lập cấu hình trong ứng dụng, bằng việc thiết lập tham số [[yii\db\Connection::enableSchemaCache]] có giá trị true.
return [
// ...
'components' => [
// ...
'cache' => [
'class' => 'yii\caching\FileCache',
],
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=mydatabase',
'username' => 'root',
'password' => '',
'enableSchemaCache' => true,
// Duration of schema cache.
'schemaCacheDuration' => 3600,
// Name of the cache component used to store schema information
'schemaCache' => 'cache',
],
],
];
Đóng gói và nén các tập tin Assets
Một trang web phức tạp thường bao gồm nhiều tệp CSS và / hoặc JavaScript. Để giảm số lượng yêu cầu HTTP và kích thước tải xuống tổng thể của những tài sản này, bạn nên cân nhắc việc kết hợp chúng vào một tệp duy nhất và nén nó. Điều này có thể cải thiện đáng kể thời gian tải trang và giảm tải của máy chủ
Tối ưu hóa cơ sở dữ liệu
Khi cơ sở dữ liệu chứa số lượng dữ liệu khổng lồ và dữ liệu lưu trữ là không hợp lệ, việc tìm nạp dữ liệu mới nhất có thể tốn kém nếu không có cơ sở dữ liệu thích hợp và thiết kế truy vấn.
Một kỹ thuật tổng quát để cải thiện hiệu suất của các truy vấn DB là tạo các index cho các cột của bảng mà cần phải được lọc. Ví dụ: nếu bạn cần tìm kiếm hồ sơ người dùng theo tên người dùng, bạn nên tạo một index về tên người dùng. Lưu ý rằng trong khi lập chỉ mục có thể làm cho các truy vấn SELECT nhanh hơn nhiều, nó sẽ làm chậm INSERT, UPDATE và DELETE truy vấn.
Cuối cùng nhưng không kém phần quan trọng, sử dụng LIMIT trong các truy vấn SELECT của bạn. Điều này tránh việc tìm nạp một lượng dữ liệu quá lớn từ cơ sở dữ liệu và làm mệt mỏi bộ nhớ được phân bổ cho PHP.
Sử dụng Plain Arrays
Xử lý Data Offline
Khi một yêu cầu liên quan đến một số hoạt động đòi hỏi nhiều tài nguyên, bạn nên nghĩ đến các cách để thực hiện những thao tác đó ở chế độ ngoại tuyến mà không cần phải chờ cho người dùng kết thúc.
Có hai phương pháp để xử lý dữ liệu ngoại tuyến: pull và push.
Trong phương pull, bất cứ khi nào một yêu cầu liên quan đến một số thao tác phức tạp, bạn tạo một nhiệm vụ và lưu nó trong một kho lưu trữ liên tục, chẳng hạn như cơ sở dữ liệu. Sau đó bạn sử dụng một quy trình riêng (chẳng hạn như một công việc cron) để kéo các nhiệm vụ và xử lý chúng. Phương pháp này rất dễ thực hiện, nhưng nó có một số nhược điểm. Ví dụ, quá trình công việc cần phải kéo theo định kỳ từ kho lưu trữ tác vụ. Nếu tần số kéo quá thấp, các tác vụ có thể được xử lý với sự chậm trễ lớn, nhưng nếu tần số quá cao, nó sẽ đưa lên trên cao.
Trong phương pháp đẩy, bạn sẽ sử dụng hàng đợi thông báo (ví dụ: RabbitMQ, ActiveMQ, Amazon SQS, v.v.) để quản lý các tác vụ. Bất cứ khi nào một nhiệm vụ mới được đưa vào hàng đợi, nó sẽ bắt đầu hoặc thông báo cho quá trình xử lý tác vụ để kích hoạt quá trình xử lý.
Tham khảo thêm: Laravel Caching https://scotch.io/tutorials/caching-in-laravel-with-speed-comparisons
All rights reserved