Bài viết được sự cho phép của tác giả Lê Chí Dũng PHP 8 bổ sung một trình biên dịch JIT vào lõi của PHP có khả năng tăng tốc hiệu suất đáng kể. Có một số chú thích được thực hiện về tác động thực tế đối với các ứng dụng web trong thực tế. Tôi cũng muốn dành một bài đăng trên blog về cách thiết lập JIT, vì có một số điều cần chia sẽ. Thành thật mà nói, thiết lập JIT là một trong những cách cấu hình tiện ích mở rộng PHP khó hiểu nhất mà tôi từng thấy. May mắn thay, có một số phím tắt cấu hình có sẵn để dễ thiết lập hơn. Vẫn tốt để biết sâu về cấu hình JIT. Trước hết, JIT sẽ chỉ hoạt động nếu opcache được bật, đây là mặc định cho hầu hết các cài đặt PHP, nhưng bạn nên đảm bảo rằng nó Việc kích hoạt bản thân JIT được thực hiện bằng cách chỉ định Lưu
ý nếu
bạn đang chạy PHP qua dòng lệnh, bạn cũng có thể chuyển các tùy chọn này qua cờ
Nếu chỉ thị này bị loại trừ, giá trị mặc định được đặt thành 0 và JIT sẽ không chạy. Nếu bạn đang thử nghiệm JIT trong tập lệnh CLI, bạn sẽ cần sử dụng
Sự khác biệt giữa Trước khi tiếp tục, hãy đảm bảo JIT thực sự hoạt động, tạo một tập lệnh PHP có thể truy cập thông qua trình duyệt hoặc CLI (tùy thuộc vào nơi bạn đang thử nghiệm JIT) và xem đầu ra của
Đầu ra sẽ giống như sau:
Nếu Tiếp theo, có một số cách để định cấu hình JIT (và đây là nơi chúng ta sẽ đi vào mớ hỗn độn cấu hình). Bạn có thể
cấu hình khi JIT nên chạy, bao nhiêu nó nên cố gắng tối ưu hóa, vv Tất cả các tùy chọn này được cấu hình sử dụng một mục cấu hình duy nhất (!):
Bây giờ, con số đó có nghĩa là gì? Các RFC liệt kê các nghĩa của mỗi trong số họ. Xin lưu ý bạn: đây không phải là một mặt nạ bit, mỗi số chỉ đơn giản là đại diện cho một tùy chọn cấu hình khác. RFC liệt kê các tùy chọn sau: #O – Mức độ tối ưu hóa
#T – kích hoạt JIT
#R – phân bổ đăng ký
#C – cờ tối ưu hóa CPU cụ thể
Dù sao, nội bộ đề xuất Vì vậy, cài đặt ini (hoặc cờ
Nhân tiện, hãy nhớ rằng đó Bạn hỏi mặc định nào? Đó sẽ
là Chờ đã, đó không phải là cấu trúc giống như bitmask kỳ lạ mà chúng ta đã thấy trước đó? Đúng vậy: sau khi RFC ban đầu được thông qua, nội bộ nhận ra rằng các tùy chọn giống như bitmask-like không phải là tất cả đều thân thiện với người dùng, vì vậy họ đã thêm hai bí danh được dịch thành bitmask-like. Có Sự khác biệt giữa hai chức năng này là Function JIT sẽ chỉ cố gắng tối ưu hóa mã trong phạm vi của một chức năng duy nhất, trong khi Tracing JIT có thể xem xét toàn bộ dấu vết ngăn xếp để xác định và tối ưu hóa mã nóng. Internals khuyến nghị sử dụng Tracing JIT vì nó có thể hầu như luôn cho kết quả tốt nhất. Vì vậy, tùy chọn duy nhất bạn thực sự cần đặt để kích hoạt JIT với cấu hình tối ưu của nó là |