Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очень странное поведение (https://javascript.ru/forum/misc/21201-ochen-strannoe-povedenie.html)

popov654 04.09.2011 21:16

Ну мало ли, кто-то будет создаваться дольше... Я на Java уже писал сетевое приложение, реально с этим делом сталкивался. Правда там запросы создавались в разных потоках... :)

popov654 04.09.2011 21:49

Всё! Победа! Наконец-то всё работает так, как оно и должно работать в идеале. Теперь я ставлю в ближайшей перспективе такие две цели:

1) Сделать красивый анимированный прогрессбар (сам прогрессбар уже есть), который будет отображать РЕАЛЬНЫЙ ход выполнения запроса
2) Сделать передачу методом POST всех строк сразу (либо в формате JSON, либо "склеив" их вручную). Это должно дать существенный выигрыш в скорости + избавить мои бедные логи от замусоривания бесконечными запросами к одному и тому же PHP-скрипту.

Есть только одна проблема: вторая задача слегка перечёркивает первую, поскольку в этой ситуации отследить реальную степень готовности вряд ли возможно... Кто что думает на этот счёт? :)

popov654 06.09.2011 01:00

Ребят, ну подскажите кто-нибудь)
Я же ведь пока делать ничего не могу, пока не определюсь, надо ли GET на POST будет заменять... :)

melky 06.09.2011 02:49

Цитата:

Сообщение от popov654 (Сообщение 124813)
2) Сделать передачу методом POST всех строк сразу (либо в формате JSON, либо "склеив" их вручную). Это должно дать существенный выигрыш в скорости + избавить мои бедные логи от замусоривания бесконечными запросами к одному и тому же PHP-скрипту.

звучит хорошо !) посмотрим,как это на деле будет)

popov654 06.09.2011 04:50

:D
У меня вначале POST использовался) Только передавалась всегда вся форма, что было весьма нерационально. Плюс скрипт записи был довольно сложный. Теперешний способ даёт крайне хорошие результаты при маленьких изменениях (1-29 запросов к БД), но совершенно чудовищные показатели при запросах больших, когда требуется проапдейтить хотя бы полтаблицы (и это при том, что я ВСЮ таблицу сократил в два раза!)
Только что проверял такую масштабную модификацию, это адова жесть. 20-25 секунд ожидания даже на локалке (!)
Я уже не говорю про бедные лог-файлы Апача - ничего себе 580 запросов за одно редактирование :)
Там кстати после всей этой радости ещё запускается маленький cleanup таблицы для совместимости со старыми версиями (удалить записи-"пустышки"). В итоге около 30 секунд приходится ждать до завершения. При сохранении при помощи кнопки снизу один раз браузер и вовсе завис в состоянии загрузки, уже после алерта с успешным завершением :(

Так что, видимо, буду переделывать.

Однако, смущает проблема с индикацией: если я сделаю POST, невозможно будет отследить прогресс запроса. Или всё-таки есть способ это сделать?

ОлегА 06.09.2011 08:11

Вам видимо доставляет большое удовольствие писать такие большие сообщения )) мне аж читать лень... :)

ваый 06.09.2011 09:11

1. Вообще это должно делаться методом POST. Уже потому что для сохранения данных этот метод и предназначен. POST и PUT. Метод GET предназначен для получения данных. Что мешает передавать на сервер не всю форму, а лишь измененные записи? Id: value.

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

3. Использовать AJAX, а не image.src. В принципе, это автоматом, если перепишешь на POST.

4.
Цитата:

Сообщение от popov654
если я сделаю POST, невозможно будет отследить прогресс запроса

А это нафиг и не нужно, понимаешь? Ты не файл загружаешь, чтобы показывать прогресс. Ты просто выполняешь запрос, который будет отрабатывать за доли секунды (ну если сделаешь нормально, а не как сейчас, когда за 25 секунд), зачем тут прогресс бар?

popov654 07.09.2011 00:16

Да вот как видите, пока не сделал, не догадался. :( Кто же мог подумать, что это так долго будет происходить?
Хотя в принципе этого и следовало ожидать, 500-1000 запросов, 40 миллисекунд таймаут... Получаем 20-40 секунд времени на выполнение.
Из плюсов - ну во-первых всю форму не грузить когда пару оценок поменяли. Это вроде объективно.
Плюс код серверного скрипта, который вносит данные в базу, сократился до 8 строк (10 с небольшим с учётом всяких cleanup-ов). Было раза в 3 больше кода, кроме того, тот код был очень плохой (из-за плохой сопровождаемости, например он был чувствителен к ширине таблицы, которая задавалась в нём жёстко).
Ещё что было плохо - ну например, куча лишних записей в базе, не несущих никакой смысловой нагрузки, т.е. пустых, записываемых, что называется, "для симметрии".

А самое главное, я хотел попробовать AJAX в деле. Или передача данных через картинки - это не AJAX? Вроде бы это в учебнике в том же разделе описывалось...

Ну если время сократится так значительно, можно разумеется и без индикации обойтись. Впрочем, в случае загрузки файла я тоже не знаю как индикацию делать... Вот ВКонтакте это сделали - интересно, как)

popov654 07.09.2011 01:57

Кстати, я сделал индикатор прогресса. Работает красиво, но код пока не очень хороший, поскольку я что-то налажал с получением координат элементов и вынужден был прописать числовые значения, что считается плохой практикой. Впрочем, сойдёт пока, всё равно от этого отказаться придётся потом :)

popov654 07.09.2011 07:32

Старая версия будет доступна пока по адресу http://popov654.pp.ru/livemarks_old/login.html


Часовой пояс GMT +3, время: 00:23.