Вместо второго setTimeout использовать setInterval http://javascript[dot]ru/
А на счет кода он просто создаст одновременно(за проход цикла) 20 setTimeout и все
По-моему Мы по разному понимаем значение слова эффективность.
Для меня эффективность - когда пользователю(именно пользователю) удобно и комфортно будет работать.
Для одной компании, я разрабатывал сайт (чуть сложнее визитки). Все я сделал на чистом PHP(перезагрузка и т.д). Когда я пришел сдавать проект я про себя ужаснулся. Не потому, что что-то не работало. А потому, скорость инета там была <=256. Все эти прорисовки страницы и т.д. Там время шло на секунды. Буквально за день-два я переписал его с использованием jQuery. Причем оглядываясь назад, я понимаю, что использовал его не эффективно. Скорость работы увеличилась в разы админка начала летать.
Сейчас для этой компании я пишу программу, плюс сейчас же разрабатывается дизайн еще нескольких сайтов для них же(группа компаний). А все дело как раз в эффективности работы не с точки зрения времени, а юзабилити. Простое, понятное юзабилити Вы не сможете реализовать на PHP.
Это же скрытие страницы. Каким образом Вы сделаете, что бы можно было скрыть одновременно 5 элементов.(Выделить 5 элементов и нажав скрыть их) На Jquery легко. +как бонус вместо 5 запросов к Бд - только один.
Я уж молчу про перетаскивание (сортировку) товаров на странице.
На счет быстродействия всегда ajax быстрее перезагрузки страницы(часть(кусок контента) всегда меньше целого(всей страницы)). По крайней мере я не могу придумать ситуация когда это случится.
Да пользователь действительно может не знать, что такое ajax. Но он всегда увидит результаты его работы.
Ему ничего поднять не надо ему надо вернуть результат запроса. Выполнился или нет.
caballero пишет:
Понимаете в чем разница для админок и прочих ответственных страниц. Загрузка страницы целиком это как транзакция в БД. Либо загрузилась либо вывалилась ошибка. С асинхронкой юзер на странице может видеть одно (инфа то висит не перегружается) а на бакенде уже совсем другое. при обычной загрузке страницы - рассинхронизация данных невозможна.
Тут все тоже самое. Я не знаю как вы это делаете, обычно если нужен рез-т ответа, а это как транзакция в БД. То делается callback функция, которая и проверяет ответ сервера, если он + то одно(типа сохранено и т.д) если - произошла ошибка
А чтобы user видел что программа что-то делает до получения ответа и вешается картинка типа обрабатываем рез-т. Пока она работает, он ничего не делает не сможет делать.
такого вообще не должно быть - это неоттестированый проект с багами. Тут уж без разницы аякс или нет.
Т.е если в момент запроса упал сервер БД, еще что-то у Вас это ни как не проверяется???
Ага а логи ошибок пишут для чего интересно????
caballero пишет:
А кто уберет твой div если яваскрипт глюкнет (обычное дело) и событие не сработает
С чего он должен глюкнуть-то. Потому что кто-то плохо написал.
P.S В настройках $.ajax есть параметр timeout(по моему так), он за это отвечает.
Крайний вариант F5
Вообще то в админке важно именно работа с данными которые в БД причем работа надежная без сюрпризов.
caballero пишет:
Конечно в таких специфических случах я сам использую аякс. Но речь то шла о перепиливвании админки. То есть технической страницы где нет необходимости вешать какие то прибамбасы.
caballero пишет:
Гораздо проще принять переменную с $_REQUEST , проапдейтить базу и показать/непоказать елемент с помощью старого доброго if else - несколько строк делов, чем писать файл для ответа аяксу писать сами аякс вызовы и обработчики событий потом запаковать распаковать ответ потом писать обновление елемента ползая по DOM модели, следить чтобы юзер там не тыкал чего пока запрос идет и т.д.
Какая разница в реализации...
Я же написал логику с PHP и jQuery там все до момента отдачи рез-та одинаково.
А после первого запроса идут проверки
Запрос удачный
jQuery: возвращаем флаг 1(true) не важно. Нужно только конвертнуть в Json(в ручную сформировать)
PHP: Делаем запрос в БД, по новой создаем страницу и т.д
Не удачный(ошибка)
jQuery: возвращаем флаг 0 (Выводим сообщение об ошибке)
PHP: Выводим сообщение об ошибке
При jQuery ползать по дому не страшно(да и просто все-таки движок свой они постоянно улучшают оптимизируют), при смене класса(вообще не надо $(this)).
В других случаях это тоже абсолютно не критично
caballero пишет:
А заблокировать дивом чем лучше. Хотя я сам синхронные вызовы как то ни разу не пользовал -какой смысл использовать аякс без асинхронки.
Просто показываем пользователю, что идет процесс обработки рез-та. Див перекрыл всю страничку, по середине какая-нибудь gif-ка. Все красиво.
P.S Я просто как бы к чему так спорю. Очень глупо загружать целую библиотеку ради одной функции. Если уж решили ей воспользоваться, то пользоваться нужно по максиму.(Сложно да ни сколько. Есть много ресурсов и инфы.) (Добавление)
3d_killer пишет:
по поводу пинания кнопок как раз столкнулся, нашел решение дивом закрывать все это дело типо так
Ну если привести спеуиально подобранный пример тогда конечно.
Какой процент составляют страницы где надо скрыть один элемент да еще и в БД запомнить.
А если не один элемент а 5 разнызх и 5 запросов к серверу?
Вся админка это скрыть, переместить и т.д все действия для одного элемента в основном.
$('#id1,#id2,#id3,#id4,#id5').... Для 5 элементов
5 запросов это как-то не очень правильно. Ну уж если совсем необходимо процедуры MySQL
caballero пишет:
Вообще то у аякса там параметр где то есть - блокировать браузер - зачем мучатся с дивами.
Вот этого делать не стоит. Паника у User-a начнется. Браузер просто зависнет и все.
На счет индексации, это все глупости. HTML 5 history API и все проиндексируется.
Теперь на счет всего остального.
Простой пример.
Надо сделать страницу не видимой.
Вариант PHP(полная перезагрузка) этапы
1 Отправляем запрос GET
2 Выполняем запрос MySQL на скрытие
3 Выполняем запрос на вывод всех страницы из MySQL (причем тут уже нет КЭША ни MySQL
удален при UPDATE ни html страницы(т.к она изменилась), максимум закэшированы картинки)
4 Формируем всю страницу и выводим ее + снова инициализирем все плагины и т.д что повешано на страницу это тоже время
Правильно??? Если я что-то не правильно указал Вы поправьте меня
Вариант jQuery+Ajax+PHP
1 Определяем id элемента, который надо скрыть
2 Отправляем запрос GETJSON
3 Выполняем запрос MySQL на скрытие и отправляем флаг о рез-те
4 Меняем класс у картинки.(одна строчка кода 2 команды addClass().removeClass())
Все...
Сами подумайте будет ли тут выигрыш в скорости. (Добавление)
P.S У Google есть рекомендации как сделать так, чтобы сайт использующий ajax нормально проиндексировался.