Ответ
Misha v.3 30.08.2011 17:28
вы работаете с ограниченными ресурсами.
делаете заведомо долгую работу.
в этом случае запросто можете не вписаться в имеющиеся ресурсы (процессорное время, память и timeout браузера).
например вчера сервер был не нагружен, поэтому sql скрит загрузился на 2.5 мин, и браузер дождался ответа.
сегодня сервер был загружен и загрузка данных происходила 3.5 мин и браузер отвалился по таймауту.
пользователь от таких неопределённостей ни фига не счастлив (нет ничего хуже, когда система то работает, то -- нет). к тому-же ему придётся повторно качать на сервер большой файл (а каналы бывают несимметричные + медленные, т.е. upload больших файлов может быть не в радость).
если подумать заранее и сразу сделать как следует, то как раз пользователь страдать не будет.
например:
файл загрузился, вы его записали, поставили нужные флаги для cron-а и пользователю в окошке написали, что обработка начнётся через 3 мин. 40 сек (вам известно когда запускается скрипт обработки из крона, т.е. можете посчитать).
заодно браузеру отдали указание сделать refresh через эти самые 3:40
пройдёт это время -- браузер сам обновит страницу и пользователь увидит сообщение, что данные загружаются (или распаковываются, ведь вы из sh-скрипта тоже можете выставлять флаги текущего состояния).
очередной авто-рефреш через 30 сек -- и довольный пользователь видит или "данные загружаются" или "данные успешно загружены".
при этом и серверные ресурсы вы сберегли: не создавали один долгий процесс, потребляющий много памяти который мог-бы и не вписаться в лимиты), который должен был сначала получить многомегабайтный файл от пользователя (в память), потом сохранить, потом выполнить пару долгих внешних скриптов (распаковка + загрузка данных).