Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
Hôm nay, mình giới thiệu tới các bạn một kỹ thuật rất phổ biến khi làm việc với PHP nhưng cũng còn nhiều người chưa biết. Đã là dân lập trình, hẳn không ai trong chúng ta chưa từng nghe qua 2 cụm từ: "Biên dịch" và "Thông dịch". Và hầu như ai cũng biết là các chương trình dạng "biên dịch" sẽ chạy nhanh hơn so với các chương trình dạng "thông dịch", nhưng tại sao nó lại như vậy và có cách nào để cải thiện vấn đề này không. Bài viết sau, nhằm mục đích chia sẽ tới mọi người rõ hơn vì sao "thông dịch" chậm hơn "biên dịch" và 1 giải pháp giúp cải thiện đó là APC - Alternative PHP Caching
Hình 1: Object PHP Lifecycle. Như chúng ta thấy trong hình trên, mỗi request đến file PHP sẽ được tiến hành xử lý thông qua 4 bước trước khi trả kết quả về cho người dùng. Quá trình này là cần thiết cho việc thực thi lệnh lần đầu, nhưng thực sự không cần thiết cho những lần gọi sau đó, vì quá trình vẫn thực hiện đầy đủ 4 bước, dù file PHP không hề có sự thay đổi. Điều này chính là nguyên nhân chính dẫn tới việc "Thông dịch" chậm hơn nhiều so với "Biên dịch".
Hình 2: Object PHP Lifecycle after Caching. Sau khi được cache lại, quá trình thực hiện chỉ còn thông qua 2 bước là quét dữ liệu từ cache và thực thi lệnh. Như vậy nhanh hơn rất nhiều so với trước đó. Và theo đó, trong lần thực thi đầu tiên, ngoài việc chạy 4 bước như trên, thì code sẽ được lưu thêm vào cache để tăng tốc cho lần sau. Cái này gọi là lỗ trước, lời sau, mà lần sau thì lời to mà ^^
APC - Alternative PHP Caching - Opcode Caching Tool
1 - Giới thiệu:
APC là một FREE PHP Extension, là một công cụ hỗ trợ opcode caching rất đơn giản và cũng không kém phần hiệu quả. Ngoài ra, APC còn có thể dùng cho việc data caching.
2 - Cài đặt
APC có phiên bản dành cho Windows lẫn cho Linux. Tuy nhiên, vì blog của mình chủ yếu nói trên Linux, nên mình cũng chỉ tập trung cho cài đặt cho Linux.
Bạn thực hiện lần lượt các câu lệnh sau để tiến hành cài đặt APC vào LAMP Server
yum install php-pear yum install httpd-devel yum install pcre-devel cd /usr/src wget http://pecl.php.net/get/APC-3.1.9.tgz tar -xvzf APC-3.1.9.tgz cd APC-3.1.9 phpize ./configure --enable-apc --enable-apc-mmap --with-apxs --with-php-config=/usr/bin/php-config make make install
3 - Cấu hình APC cho PHP
gedit /etc/php.ini
Thêm các dòng sau vào cuối file
[APC] extension = apc.so apc.enabled = 1 apc.shm_size = 32 apc.ttl = 7200 apc.user_ttl = 7200 Sau đó restart lại Apache /etc/init.d/httpd restart
Vậy là xong, quá trình cài đặt cho APC Opcode Caching hoàn tất.
4 - APC Admin
Copy file apc.php từ thư mục gốc vào thư mục chạy web, ví dụ như sau:
mkdir /var/www/html/apcadmin cp apc.php /var/www/html/apcadmin/index.php gedit /var/www/html/apcadmin/index.php
Sửa dòng sau:
defaults('ADMIN_PASSWORD','password');
Thành
defaults('ADMIN_PASSWORD','123456'); // Có thể thay bằng password khác, nhưng phải khác giá trị ban đầu
Sau đó vào trình duyệt, nhập vào url: http://localhost/apcadmin để vào trang admin của APC
5 - Disable APC cho PhpMyAdmin gedit /etc/httpd/conf/httpd.conf
Copy dán đoạn sau vào cuối file
<Directory /var/www/html/phpmyadmin> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all php_flag apc.cache_by_default Off </Directory>
Sau đó restart lại Apache server
/etc/init.d/httpd restart
Như vậy là hoàn tất mọi thao tác cài đặt, cấu hình APC cho PHP để opcode caching. Thao tác caching sẽ tự động mà chúng ta không cần tác động gì thêm.
Hy vọng bài viết giúp mọi người thành công
Theo Minh Quang Trần