استریم پروکسی پیشرو در برابر بافر کردن پاسخ کامل
هنگامی که دانلود در پروکسی منتظر به نظر میرسد، استریم، بافر پیشخوانی و پردازش پاسخ کامل را از هم جدا کنید.
وقتی دانلود منتظر به نظر میرسد، سه رویداد را جدا کنید: رسیدن سرآیندهای پاسخ، رسیدن بایتهای بدنه، و توانایی برنامه برای استفاده یا نمایش نتیجه. یک نشانگر بارگذاری بهتنهایی نمیتواند مشخص کند کدام یک تأخیر دارد.
مراحل عادی استریم میتوانند همپوشانی داشته باشند:
origin produces a chunk → proxy forwards bytes → client consumes themپروکسی میتواند هنگام بازپخش، محتوای واجد شرایط را در حافظه نهان بنویسد. نهانسازی نیازی به انتظار برای کل فایل ندارد. read_ahead_gap در Squid واکشیای را کنترل میکند که جلوتر از تحویل اجرا میشود و نوع دیگری از بافرینگ است.
فشار معکوس میتواند خواندنهای بالادست را موقتاً متوقف کند وقتی کلاینت کند صفهای خروجی را پر میکند. Content-Length نیز طول را بدون نیاز به بافر کامل فراهم میکند. کدگذاری HTTP/1.1 chunked تحویل تدریجی را ممکن میکند، اما اگر مؤلفهای پیشین دادهها را نگه دارد، نمیتواند تأخیر کم را تضمین کند.
سپس مراحل پردازش را بررسی کنید. بازنویسی یا بازرسی ممکن است به بخشی یا تمام بدنه نیاز داشته باشد. فشردهسازی و قالببندی برنامه میتواند خروجی مفید را به تأخیر بیندازد. در سمت کلاینت، روشی که منتظر آرایه کامل بایتها میماند دیرتر برمیگردد و مرورگر ممکن است بایتها را پیش از توانایی نمایش دریافت کند.
پس از CONNECT موفق، یک پروکسی معمولی جریان سرویس را بدون نیاز به طول نهایی فایل تونلشده بازپخش میکند. پیش از تغییر تنظیمات بافر یا مهلت زمانی، نخستین رویداد گمشده در بالا را دنبال کنید. وقتی curl ناظر است، گزینه no-buffer آن مرحله خروجی محلی را تغییر میدهد.