Để cung cấp một số ngữ cảnh:Cách sử dụng bộ nhớ apache PHP thực sự hoạt động như thế nào?
Tôi đã thảo luận với một đồng nghiệp gần đây về việc sử dụng Tự động tải trong PHP. Tôi đã tranh luận ủng hộ họ, anh ta chống lại.
Quan điểm của tôi là Trình nạp tự động có thể giúp bạn giảm thiểu sự phụ thuộc nguồn thủ công, do đó có thể giúp bạn giảm lượng bộ nhớ được tiêu thụ khi bao gồm nhiều tệp lớn mà bạn có thể không cần.
Câu trả lời của ông là bao gồm các tệp mà bạn không cần không phải là vấn đề lớn bởi vì sau khi tệp được đưa vào khi nó được lưu trong bộ nhớ của tiến trình con Apache và phần bộ nhớ này sẽ có sẵn cho các yêu cầu tiếp theo. Ông lập luận rằng bạn không nên quan tâm về số lượng các tập tin được bao gồm bởi vì đủ sớm tất cả chúng sẽ được nạp vào bộ nhớ và sử dụng theo yêu cầu từ bộ nhớ. Do đó bộ nhớ là ít hơn của một vấn đề và chi phí của cố gắng để tìm tập tin bạn cần trên hệ thống tập tin là nhiều hơn nữa của một mối quan tâm.
Anh ấy là một người thông minh và có xu hướng biết những gì anh ấy đang nói. Tuy nhiên, tôi luôn nghĩ rằng bộ nhớ được sử dụng bởi Apache và PHP là đặc thù cho yêu cầu cụ thể đó được xử lý. Mỗi yêu cầu được chỉ định một lượng bộ nhớ bằng với tùy chọn bộ nhớ PHP_limit và bất kỳ quá trình biên soạn và xử lý nguồn nào chỉ hợp lệ cho tuổi thọ của yêu cầu.
Ngay cả với bộ đệm mã hóa như APC, tôi cho rằng yêu cầu riêng lẻ vẫn cần tải từng tệp trong phần bộ nhớ riêng của nó và APC chỉ là một phím tắt để nó được biên dịch trước cho quá trình phản hồi .
Tôi đã tìm kiếm một số tài liệu về điều này nhưng chưa quản lý để tìm bất kỳ nội dung nào cho đến thời điểm này. Tôi thực sự sẽ đánh giá cao nếu ai đó có thể chỉ cho tôi bất kỳ tài liệu hữu ích về chủ đề này.
UPDATE:
Chỉ cần làm rõ, phần thảo luận autoloader là nhiều hơn một bối cảnh :).
Có thể không rõ ràng nhưng câu hỏi chính của tôi là về việc Apache sẽ gộp lại các tài nguyên của nó để trả lời nhiều yêu cầu (đặc biệt là bộ nhớ được sử dụng bởi các tệp được bao gồm) hoặc liệu mỗi yêu cầu có cần lấy lại mã được yêu cầu không đường dẫn thực hiện tách biệt với các yêu cầu khác được xử lý từ cùng một quá trình.
ví dụ: Tệp 1, 2, 3 và 4 có kích thước bằng nhau là 100KB. Yêu cầu A bao gồm tệp 1, 2 và 3. Yêu cầu B bao gồm tệp 1, 2, 3 và 4.
Trong suy nghĩ của mình, yêu cầu A sẽ tiêu thụ 300KB cho toàn bộ quá trình thực hiện và Yêu cầu B sẽ chỉ tiêu thụ thêm 100KB vì các tệp 1,2 và 3 đã có trong bộ nhớ.
Trong tâm trí của tôi là 300KB và 400KB vì chúng đều được xử lý độc lập (nếu theo cùng một quy trình).
Điều này đưa anh ta trở lại lập luận của mình rằng "chỉ cần bao gồm nhiều 'cos bạn sẽ sử dụng nó" như trái ngược với tôi "chỉ bao gồm những gì bạn cần để giữ cho kích thước yêu cầu xuống".
Điều này khá cơ bản đối với cách tôi tiếp cận xây dựng một trang web PHP, vì vậy tôi rất muốn biết liệu tôi có bị đánh dấu ở đây hay không.
Tôi cũng luôn tin tưởng rằng đối với bộ nhớ trang web quy mô lớn là tài nguyên quý giá nhất và quan tâm nhiều hơn kiểm tra hệ thống tệp cho trình tải tự động có thể được hạt nhân lưu trong bộ nhớ cache.
Bạn nói đúng, đã đến lúc chuẩn bị!
Cảm ơn Matthew, tôi đã chỉnh sửa bài đăng gốc chỉ trong trường hợp giúp, nhưng tôi chắc chắn sẽ chạy một số bài kiểm tra! – Sirhara
Tôi không chắc chắn cách mod_php xử lý phục vụ cùng một trang, nhưng nếu bạn sử dụng bộ nhớ cache opcode, thì các tệp PHP sẽ tự động nằm trong bộ nhớ dùng chung. Cách tôi hiểu vani PHP, là trên mỗi yêu cầu tập tin được mở, phân tích cú pháp, và thực hiện ... vì vậy tôi không chắc chắn nơi chia sẻ bộ nhớ sẽ xảy ra. Tôi nghĩ rằng nó vẫn đi xuống để điểm chuẩn ... sử dụng một cái gì đó như 'ab' để chạy thử nghiệm. Tôi chắc rằng bạn sẽ thấy rằng có hay không bạn sử dụng Tự động tải xuống tùy theo sở thích cá nhân ... Tôi không nghĩ hiệu suất sẽ khác biệt đáng kể. – Matthew