Hướng dẫn php opcodes - php opcodes

PHP Opcode Cache: Bài viết này sẽ hướng dẫn các bạn cách cài đặt một số PHP Opcode Cache (APC, XCache, eAccelerator) để tăng tốc cho những website WordPress sử dụng W3 Total Cache. Bài viết này sẽ hướng dẫn các bạn cách cài đặt một số PHP Opcode Cache (APC, XCache, eAccelerator) để tăng tốc cho những website WordPress sử dụng W3 Total Cache.

Hướng dẫn php opcodes - php opcodes

1. Trước khi cài đặt:

Đăng nhập bằng tài khoản quản trị vào trong server qua ssh hoặc bằng một phương pháp khác (phụ thuộc vào nhà cung cấp server), để cài đặt những thành phần sau

- PECL:

yum install php-pear

- PHP Development package:

yum install php-devel

- Cập nhật lại GCC:

yum install gcc make

- Cài đặt ZLIB:

yum install zlib-devel

- Cài đặt PCRE:

yum install pcre-devel

2. Cài đặt PHP Opcode Cache

Lưu ý: Không nhất thiết phải cài đặt đồng thời cả APC, XCache và eAccelerator. Cài đặt thành công một PHP Opcode Cache thôi cũng là đủ rồi

2.1. Cài đặt Alternative PHP Cache (APC):

Sử dụng một trong 2 phương pháp dưới đây để cài đặt PHP Opcode Cache APC:

Cài đặt qua công cụ PECL:

pecl install apc

Hoặc qua công cụ yum:

yum install php-pecl-apc

2.2. Cài đặt XCache

Sử dụng một trong 2 phương pháp dưới đây để cài đặt PHP Opcode Cache XCache:

Cài đặt qua công cụ yum:

yum install php-xcache

Hoặc qua mã nguồn (Cách này tương đối phức tạp):

cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/

(Lưu ý: thay đổi /var/www/vhosts/domain.com/httpdocs bằng đường dẫn đến thư mục root của website)/var/www/vhosts/domain.com/httpdocs bằng đường dẫn đến thư mục root của website)

2.3. Cài đặt eAccelerator

Sử dụng một trong 2 phương pháp dưới đây để cài đặt PHP Opcode Cache eAccelerator:

Cài đặt qua công cụ yum:

yum install php-eaccelerator

Hoặc qua mã nguồn (Cách này tương đối phức tạp):

yum install php-devel
0

(Lưu ý: thay đổi /var/www/vhosts/domain.com/httpdocs bằng đường dẫn đến thư mục root của website)/var/www/vhosts/domain.com/httpdocs bằng đường dẫn đến thư mục root của website)

2.3. Cài đặt eAccelerator

Sử dụng một trong 2 phương pháp dưới đây để cài đặt PHP Opcode Cache eAccelerator:

Hướng dẫn php opcodes - php opcodes

PHP là một ngôn ngữ lập trình được giải thích (với các hình thức trung gian được lưu trong bộ nhớ cache và JIT), và cốt lõi của nó là động cơ Zend. Nó thực hiện một chương trình PHP và sử dụng "opcodes" làm đơn vị thực thi của nó.

Opcode là một hướng dẫn đầy đủ Php VM, có thể hoặc không có toán hạng. Các cấu trúc này chứa một đơn vị thực thi đơn giản và đơn lẻ, và có một tập hợp hữu hạn của các opcode như vậy.


Hãy xem xét một đoạn trích Hello-World tương tự như dưới đây:

yum install php-devel
1

Mã PHP này, khi biến thành các mã hóa mà động cơ zend có thể tiêu thụ sử dụng

yum install pcre-devel
6 opcode, với chuỗi (
yum install pcre-devel
7) làm toán hạng của nó.

Sử dụng các tiện ích mở rộng móc vào động cơ Zend hoặc sử dụng các trình gỡ lỗi như

yum install pcre-devel
8, có thể kết xuất một danh sách các opcodes cho một đoạn/tệp PHP nhất định.

Danh sách các opcodes bị bỏ lại sau đó có thể được kiểm tra để so sánh sự khác biệt về hiệu suất và thông tin nội bộ khác. Mặc dù điều này nghe có vẻ như là một hình thức gỡ lỗi khá trần tục, nhưng nó có thể giúp xử lý các phần bên trong của Zend Engine cho một đoạn mã/tệp PHP nhất định, mà không cần phải biên dịch PHP từ nguồn hoặc phải sử dụng trình gỡ lỗi đầy đủ.

Liệt kê các opcodes cho một đoạn trích rất hữu ích để nhanh chóng nắm được lớp dưới của đoạn trích. Nó cũng có thể tiết lộ một số cảnh báo hiệu suất nhất định và các khu vực bị bỏ qua.

yum install php-devel
1

Snippet PHP ở trên tạo ra một danh sách opcode như thế này:

yum install php-devel
3

PHP có tối ưu hóa nội bộ mà nó kết hợp nhiều cuộc gọi

yum install pcre-devel
9 cho một opcode
yum install pcre-devel
6 duy nhất và opcode sau tối ưu hóa có thể tiết lộ điều này:

yum install php-devel
4
yum install php-devel
5

Bán mã hóa

Tiện ích mở rộng OPCache của PHP, trình gỡ lỗi

yum install pcre-devel
8 được đóng gói và tiện ích mở rộng PECL của Vulcan Logic (VLD) cung cấp các cách dễ dàng để đổ tất cả các opcodes cho một đoạn trích hoặc tệp đã cho.

Bất kể cách truy xuất mã hóa được truy xuất, tất cả chúng đều chứa tên opcode và không hoặc nhiều toán hạng mà opcode sử dụng.

Kết xuất opcodes bằng tiện ích mở rộng opcache

Tiện ích mở rộng OPCache của PHP có một chỉ thị INI, in các opcodes. Đầu ra khá đơn giản và hỗ trợ đầu ra opcode trước và sau khi tối ưu hóa. Tiện ích mở rộng Opcache phải được bật cho việc này để hoạt động.OPCache extension must be enabled for this to work.

pecl install apc
2 chấp nhận giá trị hex để định cấu hình đầu ra opcode. Thắt hoặc đặt thành
pecl install apc
3 để vô hiệu hóa đầu ra.

  • pecl install apc
    4: Opcodes đầu ra trước khi tối ưu hóa.prior to optimizations.
  • pecl install apc
    5: Opcodes đầu ra sau khi tối ưu hóa.After optimizations.
  • pecl install apc
    6: Opcodes đầu ra với ngữ pháp không có ngữ cảnh
  • pecl install apc
    7: Opcodes đầu ra với các hình thức gán đơn tĩnh.


yum install php-devel
6
yum install php-devel
7

Với

pecl install apc
5, có thể xác định mã sau khi tối ưu hóa opcode.

yum install php-devel
8
yum install php-devel
9

Kết xuất opcodes bằng cách sử dụng yum install pcre-devel8

yum install pcre-devel
8 là một trình gỡ lỗi có trọng lượng nhẹ nhưng PHP hỗ trợ bảo hiểm mã, gỡ lỗi bước và in mã hóa.
yum install pcre-devel
8 là một phần của dự án PHP và có sẵn kể từ PHP 5.4.

Trên hầu hết các kho phần mềm Linux,

yum install pcre-devel
8 có sẵn với các tên gói như
yum install php-pecl-apc
3 hoặc
yum install php-pecl-apc
4.

Đối với các hệ thống Windows, thực thi

yum install php-pecl-apc
5 thường được gói cùng với
yum install php-pecl-apc
6 có thể thực thi trong cùng một thư mục.

yum install gcc make
0
yum install gcc make
1

Dump Opcodes bằng Vulkan Logic Dumper (VLD)

Phần mở rộng PECL từ Derick Rethans là một trong những dự án đầu tiên cung cấp các tính năng kết xuất opcode và nó cũng được duy trì ngày hôm nay.

Phần mở rộng phải được cài đặt đầu tiên bằng cách sử dụng các nhị phân được biên dịch sẵn hoặc bằng cách biên dịch nó từ nguồn.

yum install gcc make
2
yum install gcc make
3

Kiểm tra các opcodes

Bài viết xuất sắc của Nikita Papov với cái nhìn sâu sắc về máy ảo và mã hóa của PHP

Danh sách các opcodes, bây giờ có thể xem xét một số chi tiết nội bộ có thể không rõ ràng ngay lập tức. Các tối ưu hóa nội bộ cũng có thể tiết lộ một số trí tuệ thông thường có thể không đúng ngày hôm nay.

Hiện tại, có hơn 200 opcodes trong động cơ Zend. Một danh sách, và định nghĩa của chúng có thể được nhìn thấy từ nguồn PHP.


Các ví dụ sau sử dụng đầu ra opcode của opcache.

Đầu ra opcode được nhóm theo đơn vị mã và giúp kiểm tra chúng dễ dàng hơn:

yum install gcc make
4
yum install php-devel
8
yum install gcc make
6

Phần

yum install php-pecl-apc
7 chứa mã thực thi chính, gần giống với các chức năng
yum install php-pecl-apc
8 khác trong C hoặc rỉ sét.

Mỗi phần (

yum install php-pecl-apc
7 và
yum install php-xcache
0 trong ví dụ này), nó hiển thị thông tin bổ sung cung cấp bối cảnh.


yum install gcc make
7
  • yum install php-xcache
    1 Có 4 mã hóa.
  • yum install php-xcache
    2 Số lượng đối số Đơn vị mã thực hiện.
  • yum install php-xcache
    3 Số biến trong đơn vị mã.
  • yum install php-xcache
    4 Số biến tạm thời trong đơn vị mã.

yum install gcc make
8

Dòng này giải thích mức độ thông tin gỡ lỗi. Điều này có thể dao động từ

yum install php-xcache
5 đến
yum install php-xcache
6 đến
yum install php-xcache
7 đến
yum install php-xcache
8 và
yum install php-xcache
9, với một số đường chuyền khác ở giữa. Mức độ thông tin gỡ lỗi được kiểm soát với cài đặt
pecl install apc
2 INI


yum install gcc make
9

Dòng này chỉ đơn thuần hiển thị đường dẫn tệp và phạm vi của các dòng của khối mã đã cho. Trong ví dụ này, khối

yum install php-pecl-apc
7 nằm trong tệp
cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
2, từ các dòng
cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
3 đến
cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
4.

Các dòng được đánh số từ 1.


Sau thông tin meta là danh sách các opcodes cho mỗi khối mã. Trong đầu ra opcache opcode, chúng bắt đầu từ

cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
5.

Tiếp theo là số là tên opcode, và sau đó bất kỳ toán hạng nào cho opcode.

Giải thích việc sử dụng từng opcode không nằm trong phạm vi của bài viết này, nhưng hầu hết các opcode đều được ghi lại và thường tự giải thích.

Trong ví dụ này ở khối đầu tiên:

yum install zlib-devel
0

Tập hợp các opcodes này khởi tạo một cuộc gọi chức năng (

cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
6) đến toán hạng
yum install php-xcache
0 và gửi một giá trị chuỗi
cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
8 cho nó. Sau cuộc gọi (
cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
9), khối mã
yum install php-eaccelerator
0S Một giá trị của số nguyên
cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
3.

Trong khối thứ hai:

yum install zlib-devel
1

Nó tạo ra một biến

yum install php-eaccelerator
2 và gán đối số đầu tiên cho hàm đó.

Thứ hai, Opcode

yum install php-eaccelerator
3 Concatenates
yum install php-eaccelerator
4 với biến
yum install php-eaccelerator
2. Lưu ý cách động cơ Zend biến một phép nội suy biến được trích xuất kép thành mã opcode
yum install php-eaccelerator
3. Giá trị kết quả được lưu trữ tại
yum install php-eaccelerator
7 và được sử dụng với opcode
yum install pcre-devel
6 sau.

Cuối cùng, khối mã

yum install php-eaccelerator
0S
yum install php-devel
00 trở lại cho người gọi.


Opcodes cũng có thể chứa các bước nhảy đến một số gợi ý trong cùng một khối.

yum install zlib-devel
2

Mã trong vòng

yum install php-devel
01 và vòng loại (
yum install php-devel
02) có nghĩa là việc thực thi sẽ "nhảy" từ con trỏ này sang con trỏ khác, có thể nhìn thấy từ các opcodes:

yum install zlib-devel
3

Opcode

yum install php-devel
03 có nghĩa là việc thực thi sẽ được nhảy đến vị trí
yum install php-devel
04, đó là vòng loại (
yum install php-devel
02). Giá trị của vòng loại sau đó được lưu trữ trong
yum install php-eaccelerator
7 và việc thực hiện tiếp tục đến
yum install php-devel
07.

Ở vị trí

yum install php-devel
07, nó chứa opcode
yum install php-devel
09, có nghĩa là nhảy đến vị trí
yum install php-devel
10 nếu giá trị trong
yum install php-eaccelerator
7 không bằng không.


Kiểm tra các opcodes trước và sau khi tối ưu hóa có thể tiết lộ một số cải tiến để tận dụng chúng.

Ví dụ, PHP loại bỏ một số khối mã

yum install php-devel
12 nhất định nếu nó có thể xác định ưu tiên các điều kiện sẽ không bao giờ được thực thi.

yum install zlib-devel
4

Điều kiện

yum install php-devel
12 (
yum install php-devel
14) sẽ không bao giờ đúng, vì vậy PHP có thể tối ưu hóa đoạn này để loại bỏ hoàn toàn khối này.

Trước khi tối ưu hóa::

yum install php-devel
6
yum install zlib-devel
6

Sau khi tối ưu hóa

yum install php-devel
8
yum install zlib-devel
8

PHP cũng có thể tìm ra các mẫu tối ưu hóa hơn và loại bỏ các opcode:

yum install zlib-devel
9

Hằng số

yum install php-devel
15 đề cập đến ID phiên bản PHP và nó không thay đổi đối với một thiết lập PHP nhất định. Trình tối ưu hóa OPCode PHP có thể loại bỏ khối này nếu phiên bản PHP hiện tại không đáp ứng điều kiện trong khối
yum install php-devel
12 này và kết quả trong danh sách opcode như thế này:

yum install zlib-devel
8

Tuy nhiên, nếu khối mã này nằm trong không gian tên, trình tối ưu hóa không thể áp dụng tối ưu hóa này vì mã có thể khai báo hằng số

yum install php-devel
15 trong không gian tên đó.

yum install pcre-devel
1
yum install pcre-devel
2

Lưu ý các vị trí

cd /usr/local/src && wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz && tar -xzf xcache-3.2.0.tar.gz && cd xcache-3.2.0
phpize && ./configure --with-php-config=/usr/bin/php-config --enable-xcache --enable-xcache-optimizer --enable-xcache-coverager && make && make install
cp /var/www/vhosts/domain.com/httpdocs/media/wp-content/plugins/w3-total-cache/ini/xcache.ini /etc/php.d/
5 và
yum install php-devel
19 cố gắng giải quyết hằng số
yum install php-devel
15 và hàm
yum install php-devel
21 trong không gian tên hiện tại
yum install php-devel
22. Điều này không tối ưu vì trình tối ưu hóa không thể tối ưu hóa điều này một cách an toàn hơn nữa.

yum install pcre-devel
3

Với tiền tố

yum install php-devel
23, trình tối ưu hóa biết không thử và giải quyết các tên hàm và hàm trong không gian tên hiện tại và do đó cho phép sử dụng mã hóa tốt hơn:

yum install pcre-devel
4

Ở dạng tối ưu hóa:

yum install zlib-devel
8

PHP cung cấp nhiều cách khác nhau để truy xuất mã hóa nội bộ của nó cho một đoạn/tệp nhất định. Phần mở rộng opcode đi kèm,

yum install pcre-devel
8 và mở rộng VLD có thể kết xuất các opcode với nhiều cấp độ tối ưu hóa, điểm nhập và điểm nhảy.

OPCodes giúp kiểm tra các cấu trúc cấp thấp hơn của mã PHP nhất định và có thể giúp áp dụng các tinh chỉnh để hỗ trợ tối ưu hóa.