từ sự hiểu biết của tôi, nếu bạn sử dụng một chương trình đệm ẩn PHP như APC, eAccelerator, v.v ... thì opcodes sẽ được lưu trữ trong bộ nhớ để thực hiện nhanh hơn khi có yêu cầu tiếp theo. Câu hỏi của tôi là, tại sao nó không phải là tốt hơn/nhanh hơn để biên dịch kịch bản của bạn, giả sử bạn đang sử dụng một trình biên dịch như phc hoặc thậm chí HPHP (mặc dù tôi biết họ có vấn đề với cấu trúc động)? Tại sao phải lưu trữ opcodes vì chúng phải được Zend Engine đọc lại, sử dụng các hàm C để thực thi nó, khi bạn chỉ có thể biên dịch và bỏ qua bước đó?Câu hỏi về bộ nhớ cache PHP vs biên dịch
Trả lời
Bạn không thể đơn giản biên dịch sang c và có tập lệnh php của bạn thực hiện theo cùng một cách. HPHP thực sự biên dịch, nhưng nó không hỗ trợ toàn bộ superset của các tính năng php.
Trình biên dịch khác thực sự chỉ nhúng trình thông dịch php vào nhị phân, do đó bạn chưa thực sự biên dịch mã.
PHP không có nghĩa là được biên soạn. opcode caching rất nhanh và đủ tốt cho 99% các ứng dụng trên mạng. Nếu bạn có mức lưu lượng truy cập của facebook và bạn đã tối ưu hóa db cuối của mình, việc biên dịch có thể là cách duy nhất để tăng hiệu suất.
PHP không phải là lớp mỏng đối với thư viện std c.
gracias dành thời gian để trả lời. Bạn có thể giải thích thêm ý nghĩa của bạn khi bạn nói "PHP không phải là một lớp mỏng đối với thư viện std c"? – blacktie24
Nếu PHP không có eval()
, có thể bạn sẽ có thể thực hiện một bản dịch nhị phân PHP được biên dịch trực tiếp một cách dễ dàng. Nhưng kể từ khi PHP có thể tự động xây dựng/thực thi các kịch bản trên bay qua eval(), nó không thể thực hiện một nhị phân đầy đủ. Bất kỳ nhị phân nào cũng nhất thiết phải chứa toàn bộ PHP vì trình biên dịch sẽ không biết mã động của bạn có thể làm gì. Bạn sẽ đi từ một kịch bản 1 hoặc 2k nhỏ thành một nhị phân lớn megabyte.
thx để trả lời! Giả sử tôi không sử dụng eval() và tôi gặp vấn đề về cấu trúc động (có một câu hỏi khác về trình biên dịch và cấu trúc động trong một chuỗi khác, mà tôi đã đăng dưới dạng nhận xét theo câu hỏi ban đầu), sau đó có thể hiệu quả để biên dịch? – blacktie24
Tôi không biết về 'hiệu quả', nhưng không thể thấy tại sao nó không thể thực hiện được. –
- 1. Câu hỏi bộ nhớ cache SQL Server
- 2. Câu hỏi về hiệu suất cho phụ thuộc bộ nhớ cache SQL
- 3. Câu hỏi về cách tính năng bộ nhớ cache của AppFabric có thể được sử dụng
- 4. Câu hỏi về PHP Ngày
- 5. Tắt dịch bộ nhớ cache
- 6. C++ chỉnh bộ nhớ câu hỏi
- 7. Các câu hỏi về Linux Kiểu thẻ nhớ
- 8. CakePHP 2.1: Bộ nhớ cache của trình duyệt vs Xem bộ nhớ cache
- 9. cấp phát bộ nhớ động câu hỏi
- 10. Vài câu hỏi về các phiên PHP
- 11. Câu hỏi về giấy phép di chuyển ReSharper Câu hỏi
- 12. Phỏng vấn câu hỏi: thừa và bộ nhớ đệm
- 13. Câu hỏi về Quản lý ViewModel (DesignTime Vs Run Time)
- 14. Một số câu hỏi về đồng bộ hóa chủ đề
- 15. Câu hỏi về bộ lọc grails
- 16. câu hỏi về mysql_real_escape_string
- 17. Basic C++ nhớ câu hỏi
- 18. câu hỏi phân bổ bộ nhớ liên quan đến vector
- 19. Câu hỏi về C bitfields
- 20. Các câu hỏi để biên dịch sang LLVM
- 21. Câu hỏi về dịch vụ vị trí nền iPhone 4
- 22. Câu hỏi về các tiêu đề được biên dịch trước trong Visual C++
- 23. Một số câu hỏi về dịch vụ Grails
- 24. Câu hỏi về bao gồm trang html trong PHP
- 25. Một số câu hỏi về dma_alloc_coherent
- 26. Câu hỏi về tài nguyên web Maven
- 27. Câu hỏi về sản lượng var_dump
- 28. phiên dịch vs Trình biên dịch vs máy ảo
- 29. C# - GC.GetTotalMemory() Câu hỏi
- 30. Câu hỏi về round_up macro
Ngoài ra còn có phần 2 cho câu hỏi này, mà tôi đã bắt đầu một chuỗi riêng biệt cho: http://stackoverflow.com/questions/6525187/why-are-dynamic-constructs-difficult-for-php-compilers-hphp – blacktie24