Как использовать ignore_user_abort() для повышения производительности


Если Вы когда-нибуть хотели сделать так, чтобы скрипт закончил свои функции после того, как пользователь прервал работу скрипта, тогда ignore_user_abourt() как раз используется для этих целей.

Описание

int ignore_user_abort([bool] $settings)

Устанавливает, необходимо ли прерывать работу скрипта при отключении клиента

Параметры

$settings - Если параметр задан, то функция устанавливает заданный параметр $settings функции ignore_user_abort в ini настройку. Если же параметр не задано, то функция вернут предыдущее значение без его изменения.

Примеры

Когда вы используете фунцию ignore_user_abort(true) в вашем скрипте, то скрипт будет продолжать исполнать свои функции даже если пользователь закрил вкладку или остановил загрузку страницы в браузере. Как Вы можете использовать это? Одним из вариантов использование этой функции будет: возвращение даных пользователю и завершение соединения с клиентом, а в то время вы можете исполнять какие-либо другие задачи, которые не нуждаются в пользователе.

Следующий пример отправляет $response пользователю, закрывает соединение и потом исполняет do_function_that_takes_five_minutes().

ignore_user_abort(true);
header("Connection: close");
header("Content-Length: " . mb_strlen($response));
echo $response;
flush();
do_function_that_takes_five_minutes();

Выглядит просто. Вы так же можете перенаправить пользователя. В ниже приведенном примере, добавлена функция session_write_close(), которая записывает даные сессии и завершает ее. Если вы не зделаете этого, тогда любые модивикации в $_SESSION не будут записаны до тих пор, пока не закончится исполнение функции do_function_that_takes_five_minutes

ignore_user_abort(true);
session_write_close(); 
header("Location: $redirect_url");
flush();
do_function_that_takes_five_minutes();

Вы так же можете увеличить время выполнения скрипта используя set_time_limit() функцию.

Заключение

Это крутая техника для того, чтобы дать мгновенный ответ пользователю и сделать Ваше веб-приложение более быстрым.

Спасиоб за внимание!

Тема: 
LikeMe: