25.09.2016, 19:07
|
|
Аспирант
|
|
Регистрация: 30.09.2014
Сообщений: 32
|
|
Воу-воу, господа! Так. Я проникся всем что прочитал. Ещё раз повторю вопрос свой последний. Если я посылаю асинхронный ajax запрос, то до того, как он дойдёт до конца, другие скрипты на странице не будут выполняться, я верно понял? Например, тот же таймер. А если будут, могу ли я параллельно считывать данные из файла. Любого txt файла, например считать строку через 5 секунд после начала выполнения асинхронного ajax запроса?
|
|
25.09.2016, 20:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
usesa,
просто начитать плясать от печки. Что есть некий индикатор? Этой шкале нужно знать что будем считать и какую величину взять за 100%.
Так как и с загрузкой файла, так и загрузкой POST данных проблем не будет - клиент знает размер отправляемых данных, скорость соединения, просчитать и отобразить это на индикаторе не составит труда.
Но загрузка ваших десятков тысяч строк, пусть это будет десятки/сотни Кб, это ведь при нормальном соединение малый промежуток времени. Если это отображать, то индикатор застынет где-то у конца. А что ему отображать далее, если клиент понятия не имеет через какое время ответит сервер? А это время у вас может достигать десятки секунд.
И что вы собираетесь отображать? Включайте гифку, и весь индикатор тогда.
А ведь можно и не ждать. Отправили данные, сервер подтвердил принято, клиент разорвал соединение. Вы как разработчик решаете прерывать ли работу серверного скрипта или нет. Можно продолжать работу, обрабатывая данные, можно их поставить в задачу для cron. Это не столь важно. Главное, что если обрабатываются строки и обрабатываются в цикле, то серверный сценарий уж точно может знать сколько ему по времени/процентах еще работать. Следовательно он может писать статус своей работы, а клиент после отправки данных уже в фоновом режиме опрашивает этот статус каждую секунду, отображая тот самый прогресс работы, который вы так хотите.
|
|
25.09.2016, 21:41
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от usesa
|
Например, тот же таймер
|
Какой еще таймер?
Запрос потому и асинхронный, что функция ответа выполняется по событию. Пока этого события нет, все работает как обычно. Учи прерывания.
Времеми на ожидание ответа тебе за глаза хватит. Посылай по одной строке и все будет меееедленно.
Сообщение от usesa
|
через 5 секунд после начала выполнения асинхронного ajax запроса?
|
Переверни в голове свои представления о вебе. Все наоборот. Начало никого не колебет, всех интересует каков будет конец у бойца.
Устроено вот так.
1 Сделали объект
2 Запрограммировали событие ответа = функция
3 Сделали запрос
Все. Теперь когда ответ придет, та самая функция его и получит, когда придет. Обработает и запустит все снова, с строки 1.
https://developer.mozilla.org/en-US/...XMLHttpRequest
В лайбах вроде жиквери все уже уютненько.
|
|
25.09.2016, 21:43
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
Включайте гифку
|
Ты выбрал уже одну из двух? )))
|
|
25.09.2016, 21:50
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
Но загрузка ваших десятков тысяч строк
И что вы собираетесь отображать?
можно их поставить в задачу для cron
|
Щаз у него опять пукан бомбанет лол. На четвертой странице по-прежнему бредит гифками и уже до крона добрался.
Не пудри читателю мозг. У него банальная задача сделать очередь загрузки аяксом. Есть 10К строк, он поделил на 100, получил 100, отгрузил 100, php обработал, что-то там сохранил, ответил 200 ОК и закрылся. Браузер получил, передал в скрипт, скрипт сдвинул прогресс на 1%, взял следующие 100, отгрузил 100, php обработал, что-то там сохранил, ответил 200 ОК и так далее пока строки не кончатся. По 100 уезжает, по 1% продвигается. Элементарно. Просто сервер придется дергать 100 раз. Ну и что? Он все равно железный.
|
|
25.09.2016, 21:55
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Если ты открываешь страницу на которой 100 фоток, то сервер будет дернут 100 раз. Ну и пусть дергается хоть на каждую строку. Это же явно административная задача.
|
|
25.09.2016, 22:05
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
писать статус своей работы, а клиент после отправки данных уже в фоновом режиме опрашивает этот статус каждую секунду
|
Куда писать? Запрос-1 откроет процесс-1, а запрос-2 откроет процесс-2. Еще найди фичу php, есть такая, которая процессами управляет, или писать/читать надо будет в файл, короче говоря ты мамкин теоретег когда бы взялся свои эти советы реализовать, сразу бы научился свободу любить по крону, лол.
Ну и главное, раз в секунду. То есть 60 раз в минуту дрыгать php, поднимать параллельный процесс, чтобы только файлик прочесть. Запросы по таймеру делаются когда данные поступают случайно и неизвестно откуда, скажем кто-то тебе написал привет, а он еще на сервере. В случае ТС данные конкретно все у него и все известно заранее. Сценарий выше.
|
|
25.09.2016, 22:13
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Поскольку ТС не колется о конкретике, то можно предполагать плохое. Например если для обработки важно получить все данные, какая-то статистика. Тогда прогресс будет показывать просто исход очереди на сервер, что и без таймеров заметно рендерится. Когда все строки из очереди отгрузятся, сервер запустит процесс обработки и тогда уже понадобится гифка с сиськами.
Вообще такая хрень через html не делается. Для этого есть shell и bash. Открыл консоль, запустил процесс и пялься себе на экран, смотри как он идет во всех подробностях.
|
|
26.09.2016, 02:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от warren buffet
|
Есть 10К строк, он поделил на 100, получил 100, отгрузил 100, php обработал, что-то там сохранил, ответил 200 ОК и закрылся. Браузер получил, передал в скрипт, скрипт сдвинул прогресс на 1%, взял следующие 100, отгрузил 100, php обработал,
|
даже так!? А ничего что серверу нужно все, дабы что-то в нем выбрать?
Плыви мимо, опять написал поноса на целый роман.
|
|
26.09.2016, 02:56
|
|
Аспирант
|
|
Регистрация: 30.09.2014
Сообщений: 32
|
|
Так-то рацзерно есть в мыслях у вас, судари. Но разбивать запрос поэтапно не выйдет хотя бы потому что строки сравниваются на потенциальные дубли и прочее. Не вижу возможности разбивать запрос порционно. Поэтому и ищу возможность выводить данные в процессе работы скрипта.
|
|
|
|