Chiến thắng php 8

Lần trước, chúng ta đã xem xét các cách mà PHP 8. 0 đã trở nên chặt chẽ hơn. Hôm nay, chúng ta xem xét bước tiếp theo để PHP trở nên nhanh hơn

Một số nền tảng

Máy tính không thực sự hiểu ngôn ngữ lập trình; . Có nhiều cách để chuyển từ một ngôn ngữ mà con người có thể đọc được như PHP hoặc Rust sang một bộ hướng dẫn mà máy tính có thể hiểu được.

Cách cơ bản nhất và thường hiệu quả nhất là biên dịch mã nguồn thân thiện với con người trực tiếp thành hướng dẫn CPU "Trước thời hạn" (AOT). Các hướng dẫn đó sau đó được lưu vào tệp thực thi độc lập "nhị phân". Một số ngôn ngữ phổ biến áp dụng phương pháp này bao gồm C, C++ và Rust.

Phương pháp dịch ít hiệu quả nhất nhưng thường dễ viết nhất là các ngôn ngữ được giải thích, thường được gọi là "ngôn ngữ kịch bản". " Trong trường hợp này, có một chương trình "thông dịch viên" dịch từng câu lệnh của mã nguồn thành mã máy khi nó được "thực thi". " PHP 3 hoạt động như vậy, đó là lý do tại sao PHP 3 lại chậm một cách đáng kinh ngạc so với PHP hiện đại

Một cách tiếp cận khác là sử dụng một "máy ảo". " Một máy ảo hoạt động theo cách tương tự như một trình thông dịch, nhưng trước tiên, nó chuyển đổi mã nguồn thành một ngôn ngữ đơn giản hơn, về cơ bản là một ngôn ngữ kịch bản cấp rất thấp, sau đó có thể được thông dịch nhanh hơn nhiều. Cách tiếp cận này ngày nay rất phổ biến vì nó mang lại sự cân bằng tốt giữa độ phức tạp, dễ phát triển và hiệu suất. Đôi khi quá trình chuyển đổi "ngôn ngữ đơn giản hơn" đó xảy ra trước thời hạn—như trong Java, C# hoặc Go—và đôi khi nó diễn ra ngay lập tức—như trong PHP, Python hoặc Javascript. Java gọi phiên bản đơn giản hóa đó là "bytecode". "PHP sử dụng thuật ngữ" opcodes ". Đó là cùng một ý tưởng

vừa kịp giờ

Xu hướng mới nhất trong biên dịch là giới thiệu trình biên dịch "Just in Time", hay JIT. Trình biên dịch JIT bắt đầu với ngôn ngữ trung gian được đơn giản hóa và thay vì diễn giải ngôn ngữ đó, nó sẽ nhanh chóng chuyển đổi ngôn ngữ đó thành mã máy, lưu trữ mã máy đó trong bộ nhớ và thực thi mã đó.

Trình biên dịch JIT rất phức tạp, bởi vì để có được hiệu suất tốt từ chúng, bạn thường cần phải chọn lọc xem phần nào của ngôn ngữ trung gian được biên dịch thành mã máy và phần nào không. Không phải lúc nào chuyển đổi sang mã máy cũng nhanh hơn, tùy thuộc vào các chi tiết cụ thể của mã và ngôn ngữ được đề cập. Ngoài ra, quá trình chuyển đổi mã được đơn giản hóa thành mã máy gốc có thể mất nhiều thời gian hơn là chỉ chạy mã được đơn giản hóa một lần và hoàn tất mã đó.

Vì lý do đó, hầu hết các trình biên dịch JIT đều phân tích mã khi nó đang chạy để xác định phần nào sẽ mang lại hiệu quả tốt nhất cho đồng tiền và sau đó chỉ biên dịch các bit đó. Về lý thuyết, kết quả cuối cùng là chương trình thực sự chạy nhanh hơn khi nó chạy và khi trình biên dịch JIT trong máy ảo tìm hiểu phần nào của mã để vừa tối ưu hóa.

Java là ngôn ngữ phổ biến đầu tiên có JIT trong máy ảo của nó. Hầu hết các công cụ Javascript chính hiện nay cũng làm như vậy. Và, kể từ PHP 8. 0, PHP đã tham gia danh sách đó

PHPJIT

JIT mới của PHP đã có từ lâu. Nó thực sự đã được phát triển trong vài năm và gần như được xuất xưởng ở dạng sớm hơn trong PHP 7. 4. Làm việc hướng tới việc làm cho PHP có khả năng JIT là động lực dẫn đến việc viết lại chính công cụ đã mang lại 7. 0 tăng hiệu suất lớn của nó

PHP JIT được xây dựng như một phần mở rộng cho bộ đệm opcode. Điều đó có nghĩa là nó có thể được kích hoạt và vô hiệu hóa khi tự xây dựng PHP hoặc trong thời gian chạy, thông qua php.ini

Làm thế nào để cấu hình nó

Tiện ích mở rộng JIT bị tắt theo mặc định. Nó có thể được kích hoạt trong php.ini bằng cách đặt opcache.jit_buffer_size thành giá trị khác không. Điều đó kiểm soát dung lượng bộ nhớ mà JIT có thể lấp đầy bằng mã máy được tối ưu hóa của nó. Tuy nhiên, nhiều hơn không phải lúc nào cũng tốt hơn vì JIT cũng có thể lãng phí thời gian biên dịch mã không thực sự mang lại lợi ích khi được biên dịch.

Cài đặt chính khác là opcache.jit, kiểm soát bốn mức độ gây hấn của JIT. Các cấp độ này được biểu thị dưới dạng số có 4 chữ số, mặc dù chúng không thực sự là các giá trị số mà là bốn điều khiển mức độ gây hấn khác nhau. RFC và tài liệu có nhiều chi tiết hơn, vì vậy chúng tôi sẽ không đi vào chi tiết ở đây

Không có cấu hình tốt nhất toàn cầu cho JIT. Như thường xảy ra với các công cụ nâng cao như thế này, bạn sẽ cần thử nghiệm với ứng dụng của riêng mình và điều chỉnh nó một cách thích hợp.

Nó sẽ giúp?

Nhưng JIT sẽ cải thiện hiệu suất? . "Đối với các ứng dụng web, có lẽ. Đối với PHP như một hệ sinh thái, vô cùng

PHP, theo thiết kế, thường chạy trong cấu hình không chia sẻ gì cả. Sau mỗi yêu cầu được xử lý, chương trình sẽ thoát hoàn toàn. Điều đó mang lại cho JIT rất ít thời gian để phân tích và tối ưu hóa mã, đặc biệt là vì hầu hết mã trong một yêu cầu web điển hình chỉ được thực thi một lần khi yêu cầu được xử lý tuyến tính. Bên cạnh đó, phần lớn nhất của các ứng dụng đó thường là I/O (chủ yếu nói chuyện với cơ sở dữ liệu) và JIT hoàn toàn không thể giúp gì được với điều đó. Các điểm chuẩn đã được xuất bản cho đến nay cho thấy JIT chỉ cung cấp một mức tăng nhẹ cho hiệu suất trong các ứng dụng PHP điển hình chạy qua PHP-FPM hoặc Apache.

Trường hợp JIT có tiềm năng thực sự hữu ích là trong các trường hợp sử dụng mà ngày nay PHP thường không được xem xét. Các trình nền liên tục, trình phân tích cú pháp, máy học và các quy trình sử dụng nhiều CPU chạy dài khác là nơi mang lại lợi ích thực sự. Giống như hỗ trợ Giao diện chức năng nước ngoài (FFI) (phần 1, phần 2, phần 3) được thêm vào PHP 7. 4, mục tiêu ở đây là cho phép PHP thoát khỏi vai trò là ngôn ngữ web hạng nhất và trở thành ngôn ngữ máy chủ chung hạng nhất

PHP-Parser là "một trình phân tích cú pháp PHP được viết bằng PHP. " Đó là từ cùng một Nikita Popov mà chúng tôi đã đề cập trong suốt loạt bài này và được sử dụng bởi nhiều công cụ phân tích tĩnh trên thị trường hiện nay, chẳng hạn như PHPStan. Nikita đã báo cáo rằng PHP-Parser chạy trong một số trường hợp nhanh gấp đôi với công cụ JIT mới

Các ứng dụng liên tục như React PHP hoặc AmPHP cũng có thể sẽ thấy một sự cải thiện đáng chú ý, mặc dù không nhiều bằng chúng có xu hướng thực hiện nhiều I/O (trong đó JIT không hữu ích)

Có các thư viện máy học dành cho PHP, chẳng hạn như Rubix ML hoặc PHP-ML. Chúng không được sử dụng rộng rãi như các thư viện Python tương đương của chúng, một phần là do, theo diễn giải, chúng có xu hướng chậm hơn các thư viện C có trình bao bọc Python đẹp mắt. Tuy nhiên, với JIT, các tác vụ sử dụng nhiều CPU này có thể sẽ nhanh bằng hoặc thậm chí có thể nhanh hơn các tác vụ có sẵn trong các ngôn ngữ khác.

PHP không còn là ngôn ngữ kịch bản web nhanh nhất. Giờ đây, nó là một ngôn ngữ xử lý dữ liệu chung hiệu năng cao khả thi, đưa những người làm việc bền bỉ, học máy và các tác vụ CPU cao khác vào tay hàng triệu nhà phát triển PHP hiện có trên khắp thế giới.

Chúng tôi chủ yếu cảm ơn Dmitry Stogov và Zeev Suraski vì nỗ lực trong nhiều năm để biến RFC này thành hiện thực

Tính năng nào của PHP 8. 0 sẽ giúp bạn tiết kiệm nhiều nhất khi gõ? . quảng bá

Bạn có thể dùng thử các bản phát hành trước của PHP 8. 0 hôm nay trên Nền tảng. sh, chỉ với một thay đổi một dòng. Hãy thử và cho chúng tôi biết các tính năng yêu thích của bạn là gì

PHP 8 JIT là gì?

PHP 8. 0 mang đến sự hỗ trợ cho Biên dịch đúng lúc (JIT). Các ngôn ngữ lập trình được giải thích thuần túy không có bước biên dịch và trực tiếp thực thi mã trong máy ảo. Trên thực tế, hầu hết các ngôn ngữ được giải thích bao gồm cả PHP đều có một bước biên dịch nhẹ để cải thiện hiệu suất của nó.

PHP có JIT không?

PHP JIT được triển khai như một phần gần như độc lập của OPcache . Nó có thể được bật/tắt tại thời điểm biên dịch PHP và tại thời điểm chạy.

Làm cách nào để bật JIT trong PHP 8?

Dành cho PHP 8. 0, quá trình biên dịch JIT được bật thông qua cùng tiện ích mở rộng OPcache này . Vì vậy, bước đầu tiên trong việc bật tính năng biên dịch JIT cho dự án của bạn là đảm bảo tiện ích mở rộng OPcache đã được cài đặt và kích hoạt. Để kiểm tra xem bạn đã cài đặt chưa, bạn có thể chạy php -i trên dòng lệnh để in ra phpinfo().

Phiên bản PHP 8 có ổn định không?

Phần kết luận. Điều cần thiết là luôn cập nhật PHP từ quan điểm bảo mật. Hiệu suất PHP nhanh hơn rất quan trọng ngoài bảo mật vì người dùng cuối đang trở nên ít chịu đựng hơn đối với các trang web và ứng dụng chậm. Theo các điểm chuẩn khác nhau trên web, PHP 8 nhanh hơn đáng kể so với PHP 7.