2009-10-01 28 views
7

Khi hiệu suất là quan trọng bao gồm bộ nhớ máy chủ, tôi tò mò nếu sử dụng đầu ra đệm như ob_start(); trong PHP có BẤT CỨ hiệu suất truy cập hơn không sử dụng nó? Liệu nó sử dụng nhiều bộ nhớ hơn hoặc bất cứ thứ gì để sử dụng nó?Có đầu ra đệm trong PHP đòi hỏi nhiều tài nguyên hơn?

Trong trường hợp của tôi trên một trang lưu lượng truy cập cao nơi tôi cần tất cả bộ nhớ tôi có thể cho memcache và APC và tất cả các hoạt động máy chủ khác tôi chỉ tò mò nếu tôi nên sử dụng nó hay không, lý do thực sự duy nhất có ích đối với tôi là để chuyển hướng trang, gửi tiêu đề tôi nên nói sau khi tiêu đề đã được gửi, trang web của tôi có tiêu đề, nội dung, thiết lập tệp chân trang nên đôi khi tôi cần chuyển hướng tùy thuộc vào nội dung trong tệp nội dung, nếu tiêu đề đã hiển thị màn hình ion tạo ra sự cố, sử dụng bộ đệm đầu ra là 1 giải pháp nhưng có các giải pháp khác nên chỉ tò mò về hiệu suất

Trả lời

1

Tôi nghĩ tốt nhất nên sử dụng nó với trang web có lưu lượng truy cập cao hoặc ít nhất là tắt tránh gửi phản hồi một phần qua mạng, vì nó có thể làm chậm phần còn lại của tập lệnh nếu người nhận cũng rất chậm.

Bằng cách gửi toàn bộ phản hồi trong một lần, bạn giải phóng tất cả các tài nguyên được tập lệnh php sử dụng, vì vậy nó hiệu quả hơn.

+0

tôi cũng chỉ đọc bộ đệm đầu ra abit abt PHP. tôi nghĩ rằng nó sẽ yêu cầu bộ nhớ máy chủ để lưu trữ toàn bộ trang b4 gửi nó ra như 1 mảnh phải không? vì vậy có khả năng nó sẽ sử dụng nhiều bộ nhớ hơn là không có bộ đệm? – iceangel89

+0

@ iceangel89 đó là mối quan tâm ban đầu của tôi và những gì tôi thực sự muốn tìm hiểu – JasonDavis

+0

Xin lỗi tôi quên đề cập đến điểm này ... Tôi nghĩ rằng đầu vào của bộ đệm đầu ra là rất quan trọng khi sử dụng gzhandler để nén. Để đệm đơn giản, nó lưu trữ tất cả mọi thứ trong bộ nhớ, nhưng tôi không nghĩ rằng bạn sẽ thấy một sự khác biệt rất lớn (các trang html lớn không đi hơn 200K, phải không?). Bạn có thể dễ dàng kiểm tra điều đó với memory_get_usage() có và không có đệm đầu ra. –

3

Có hai lý do tại sao sản lượng đệm rất hữu ích

  1. Để đạt hiệu quả vì vậy bạn không chờ đợi cho các ổ cắm mạng là sẵn mỗi lần bạn echo.
  2. Để tránh gửi tiêu đề quá sớm. Khi bạn đã gửi một số nội dung cho trình duyệt, các tiêu đề cũng phải được gửi, sau khi thực hiện xong thì bạn không thể sửa đổi chúng ví dụ: nếu bạn muốn đặt cookie hoặc thay đổi loại nội dung.

Có tất nhiên là hình phạt lưu trữ mọi thứ trong bộ nhớ cho đến khi kết thúc yêu cầu. Điều này nên, thông thường, là khá nhỏ so với kích thước tổng thể của quá trình PHP. Đó là, trừ khi, bạn có kế hoạch gửi một tập tin lớn xuống dây. Nếu đó là trường hợp bạn có thể xả bộ đệm định kỳ bằng ob_flush() và flush() (hoặc tạm thời vô hiệu hóa bộ đệm hoàn toàn) để giảm bộ nhớ cao nhất được sử dụng.

Theo ý kiến ​​của tôi, bạn nên luôn sẵn sàng và loại bỏ nó trong những trường hợp đặc biệt.

Các vấn đề liên quan