Các tài liệu của apc.enable_cli
, mà kiểm soát xem APC nên được kích hoạt trong chế độ CLI, nói (trích dẫn):
Chủ yếu là để thử nghiệm và gỡ lỗi. Cài đặt này cho phép APC cho phiên bản CLI của PHP. Trong trường hợp bình thường , không lý tưởng để tạo, điền và tiêu diệt bộ nhớ cache APC trên mọi yêu cầu CLI, nhưng đối với các trường hợp thử nghiệm khác nhau rất hữu ích để có thể bật APC cho phiên bản CLI của PHP dễ dàng.
Có thể APC sẽ lưu trữ mã opcodes trong bộ nhớ, nhưng khi thực thi PHP chết ở cuối tập lệnh, bộ nhớ sẽ bị mất: nó sẽ không tồn tại giữa các lần thực thi tập lệnh. Vì vậy, opcode-cache trong APC là vô ích trong chế độ CLI: nó sẽ không tối ưu hóa bất cứ điều gì, vì PHP sẽ vẫn phải biên dịch lại mã nguồn thành mã opcode mỗi khi thực thi PHP được khởi chạy.
Trên thực tế, APC không "tối ưu hóa": cách tiêu chuẩn của thực hiện một kịch bản PHP là như thế này:
- đọc các tập tin, và biên dịch nó thành opcodes
- thực hiện opcodes
gì APC không được lưu trữ trong opcodes trong bộ nhớ, vì vậy việc thực hiện một kịch bản PHP trở thành:
- đọc opcodes từ bộ nhớ (nhanh hơn nhiều so với biên dịch mã nguồn)
- thực hiện opcodes
Nhưng điều này có nghĩa là bạn phải có một số vị trí trong bộ nhớ để lưu trữ các opcodes. Khi chạy PHP như một mô-đun Apache, Apache chịu trách nhiệm về sự tồn tại của phân đoạn bộ nhớ đó ... Khi PHP được chạy từ CLI, không có gì để giữ cho phân đoạn bộ nhớ ở đó, do đó nó bị phá hủy ở cuối thực thi của PHP.
(Tôi không biết làm thế nào nó hoạt động chính xác, nhưng nó là cái gì như thế, ít nhất là trong các nguyên tắc, ngay cả khi lời nói của tôi không phải là rất "kỹ thuật" ^^)
Hoặc, bởi "tối ưu hóa" bạn có nghĩa là một cái gì đó khác hơn so với bộ nhớ cache opcode, giống như chỉ thị cấu hình apc.optimization? Nếu vậy, chương trình này đã bị xóa do APC 3.0.13
Nguồn
2009-08-07 15:25:18
Từ tài liệu PHP: APC là một khuôn khổ tự do, cởi mở và mạnh mẽ cho bộ nhớ đệm và tối ưu hóa mã PHP trung gian. Đoán tôi đang tự hỏi về tối ưu hóa mã trung gian. Tôi dự định thực thi tập lệnh CLI chỉ một lần và sau đó nó sẽ chạy trong vài ngày, thực hiện một số mã trong vòng lặp. Vì vậy, APC không thực sự tăng tốc độ thực thi, chỉ cần thời gian để bắt đầu thực hiện? – Matic
http://pecl.php.net/package-info.php?package=APC&version=3.0.13 nói "Lỗi thời và loại bỏ trình tối ưu hóa apc"; Tôi chưa bao giờ nghe APC (ít nhất là trong các phiên bản gần đây) đã làm bất kỳ loại "tối ưu hóa" như những gì bạn có thể nghĩ về trình biên dịch có thể làm khi bạn lập trình C. Và tôi không nghĩ rằng nó sẽ giảm thời gian bắt đầu thực hiện, vì PHP sẽ phải được biên dịch thành mã opcode (trên phần này APC cho phép tăng lên rất lớn ... Khi nó có thể giữ những opcodes đó trong bộ nhớ giữa các kịch bản lệnh - mà tôi không nghĩ nó có thể làm trong CLI) –
Chỉ cần rõ ràng, sử dụng APC trong chế độ CLI vẫn còn khá hữu ích để lưu vào bộ nhớ đệm các đối tượng do người dùng tạo. Trong một kịch bản mà tôi đang làm việc, chúng ta sử dụng apc_store() và apc_fetch() để tận dụng bộ nhớ đệm đối tượng người dùng của APC trong một công việc cron chạy dài. – rinogo