Як відключити буферизацію виводу.

У процесі роботи php-скрипти можуть виводити результати по мірі виконання закладеного в них сценарію або накопичувати дані, чекаючи повного виконання сценарію і завершення роботи скрипта. Вибір одного з цих варіантів залежить від значення, присвоєного в налаштуваннях інтерпретатора php змінної, що відповідає за буферизацию виведення даних. Змінити його можна кількома способами.
Інструкція
1
Якщо відключити буферизацію виводу потрібно для всіх виконуваних на сервері або на сайті php-скриптів, найправильніше зробити це через файл php.ini. При запуску кожного скрипта інтерпретатор мови php читає налаштування з цього файлу конфігурації, тому помістити в нього директиву відключення буферизації виведення результатів роботи скриптів - найбільш оптимальне рішення. Відкрийте файл у текстовому редакторі і за допомогою діалогу пошуку знайдіть директиву з назвою output_buffering. Її значенням може бути як целочисленная, так і логічна (On або Off) змінна, тому замість присвоєного за замовчуванням значення впишіть Off або 0. Якщо цієї директиви немає в конфігураційному файлі, додайте в кінець записів додатковий рядок: output_buffering = Off
2
При необхідності скасувати буферизацию виведення для скриптів окремої папки або групи вкладених папок, краще зробити це через файл htaccess. Знайдіть його в потрібному каталозі і відкрийте в текстовому редакторі. Якщо такого файлу ще немає, створіть новий. Директива, яку слід додати, аналогічна описаній в попередньому кроці, але перед нею треба помістити позначку про те, що мова йде про одну з налаштувань php. Повністю цей рядок має виглядати так: php_flag output_buffering offСозданний файл htaccess помістіть у верхню папку ієрархії каталогів, для яких повинна виконуватися директива.
3
Щоб відключити буферизацію в одному окремо взятому php-скрипті, використовуйте одну з вбудованих функцій цієї мови. ob_get_flush () повертає поточний зміст буфера, потім обнуляє його і відключає буферизацію виводу. ob_end_flush () робить те ж саме, але поточний зміст буфера не повертає в викликала її змінну, а відправляє на пристрій виведення. Функція ob_end_clean () просто стирає поточні дані перед відключенням буферизації. Скориставшись однією з цих функцій, не забудьте знову включити буферизацию - для цього призначена функція ob_start ().
Іноді для виведення web-сторінки використовується буферизація, що дозволяє мінімізувати число спроб вивести HTML або дані з коду на ASP-сторінках в клієнтському браузері і збільшити тим самим загальну продуктивність. TCP/IP сконструйований таким чином, що клієнту відправляти дані ефективніше великими блоками.
Вам знадобиться
  • -HTML-редактор.
Інструкція
1
Сторінка стає більш повільної через буферизації - від того, що відправляється користувачам тільки після остаточного формування. Тому для станиць, які генеруються скриптами дуже довго, можна відключати буферизацию або повністю, або частково.
2
Використовуйте команду Response.Buffer = False для повного відключення буферизації. Цей метод дозволить висилати дані користувачеві відразу.
3
Використовуйте метод Response.Flush. Для часткового відключення буферизації знадобиться більш складний алгоритм дій, проте вона представляється більш кращою. Для неї використовується метод Response.Flush, яким клієнту відправляється весь HTML, що накопичився в буфері.
4
Наприклад, після згенерованої першої сотні рядків таблиці, що має загальний розмір у тисячу рядків, ASP-скріптии викликають Response.Flush для того, щоб відправити першу порцію сторінки клієнтському браузеру. Такий підхід дозволяє користувачеві бачити цю першу сотню рядків ще доти, як буде готова вся таблиця. Більше того, є можливість і далі в ході генерування нового рядка відправити її клієнтові такими ж частинами.
5
Подібна робота з буфером є найбільш оптимальною, їй досягається відчутний приріст рівня продуктивності і можливість завантажувати розраховуються протягом тривалого терміну сторінки поетапно, не примушуючи відвідувачів ресурсу до довгого очікування завантаження перед чистим вікном браузера.
6
Розбийте сторінку на складові елементи. Важливо пам'ятати, що деякими браузерами не підтримує відображення елементів таблиці - вони будуть чекати її закриття. У такому випадку потрібно імітувати таке закриття - наприклад, об'ємну таблицю можна розбити по сто рядків, як описано вище. У такому випадку після того, як буде згенеровано чергова суб-таблиця, її можна відправляти користувачам за допомогою методу Response.Flush.
7
Застосуйте метод Flush. У деяких випадках можлива ситуація, коли технологія часткового відключення буферизації витрачає високі обсяги пам'яті сервера в зоні генерування дуже великих сторінок. Без використання методу Flush не вдасться забезпечити вірне використання цієї технології і уникнути небажаного перевитрати системного ресурсу. Недоліком методу є той факт, що для вірного зображення у користувача таблиці на екрані необхідно забезпечувати створення стовпців однакової ширини в кожній з суб-таблиць.
Зверніть увагу
Багато браузери не відображають ділянку таблиці без тега TABLE.