Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Впрочем, есть отличная цитата и на ваш случай
По поводу цифр о 90% времени — я уже привёл их для себя. Включил голову и дописал 6 строчек кода. Что я делаю неправильно?
В целом AJAX даёт меньшую нагрузку на сервер, чем генерация полноценных страниц хотя бы за счёт отсутствия необходимости применения шаблонизатораВы, видимо, используете какой-то неправильный шаблонизатор.
мы используем даже передачу данных через TCP-сокет в веб-страницах нашего приложения вместо AJAX-запросовВы явно путаетесь в терминологии, потому что в этой фразе мешаете мягкое с кислым. Что такое, по-вашему, ajax-запрос, как не соединение браузера с TCP-сокетом веб-сервера? Не заставляйте меня Вас прилюдно позорить :)
Смотря в каких случаях… количество запросов для обоих случаях не изменитсяНе совсем так. Как показывает практика, когда внедряешь для какого-нибудь функционала работу без перезагрузки страницы, им гораздо чаще начинают пользоваться. Иногда на порядок или два. И получается, что время ответа бекенда почти одинаково (напомню, что время рендеринга шаблонов должно быть минимальным в нормальном случае), а число запросов к бекенду сильно возрастает. Я именно это имею ввиду, когда пишу, что в общем случае использование ajax увеличивает нагрузку на бекенд.
К тому же перезагрузка страницы вызывает как минимум проверку на обновление некоторых статических данных — скриптов, картинок, стилейC чего бы, если веб-сервер, их отдающий, обычно сообщает браузеру, что эта информация должна кешироваться и ее не надо каждый раз загружать снова? Зачастую, как раз проблема — обновить закешированную статику в браузере пользователя.
достаточно неплохо владею теорией по сетямЧитая Ваши реплики, склонен считать, что эта фраза означает скорее «я знаю много умных слов из теории сетей».
TCP и AJAX — это разные уровни сетевых технологийНу да, я же написал, что Вы путаете мягкое с кислым. Работа аякса невозможна без использования ТСР-сокетов. Потому что аякс по сути — это ХТТП-запрос к серверу, использующему TCP-сокеты для работы с клиентом. И ему совсем необязательно передавать в одностороннем порядке данные от сервера к клиенту.
не будем забывать, что в AJAX запросы архитектурно асинхронныеНе будем забывать, что JS поддерживает и синхронный обмен запросами. Почему об этом мало кто знает, я не в курсе.
Я не говорю, что проблема нерешаемая — но в TCP такого нетЯ рыдаю под столом, честно. Вы сейчас хотите сказать, что HTTP работает через UDP-сокеты? Блин, ну правда, не отжигайте у всех на виду.
Есть более серьёзный проект, в котором задержки из-за периодического открытия TCP-соединений для AJAX-запросов — это плохо. Нормальный веб-сервер не пробовали использовать?
Поскольку почти во всех браузерах существует способ в некоторых случаях открыть TCP-соединениеНу да, HTTP работает по TCP. Покажите мне хоть один браузер, который не умеет работать с ним :)
мы предпочитаем использовать егоОй, освежите всё же свои знания. Ну правда. У вас така-а-а-я каша в голове…
AJAX… обладает ограничениями и недостатками, которых лишён TCP
Где именно я это хочу сказать?
TCP быстрее.
то — дань модульности и универсальности решенияЭта фраза характеризует вашу систему с нелучшей стороны. Я действительно начинаю убеждаться, что дело не в AJAX. А как обычно.
Возможность передачи данных сервером без запроса клиентом — удобно… для чата или другой передачи данных между пользователямиУуу, как всё запущено. Вы о тройном рукопожатии что-нибудь слышали? TCP не возможен без установки соединения, которое инициализируется клиентом. Клиент всегда есть. И сервер тоже. Только они могут местами меняться. Похоже, пора давать ссылки на RFC. Я не люблю тыкать в мануал незнакомых людей, но Вы всячески к этому меня подводите. У меня сложилось впечатление, что Вы явно знаете о многих кусочках теории работы сетей, но цельной картины у Вас в голове нет.
Вы же в рассуждениях, видимо, считаете, что возможность использования технологии и возможность её _ограниченного_ использования — это одно и то же.Не приписывайте мне то, о чем я не говорил. Я лишь пытаюсь донести до Вас, что Вы или не представляете до конца, о чём пытаетесь спорить, или не можете это нормально выразить словами. Или и то, и то.
Было бы весьма неплохо, если бы вы указали на конкретные пробелы в моих знаниях
работать старшим разработчиком в области создания серверных компонент как-то тяжеловато, будучи таким недалёким.Я уже смирился, что мир несовершенен, и многие люди занимают должности, не имея на то достаточной квалификации.
Камаз не является специализацией технологии генерации крутящего момента
Я не сравниваю TCP и TCPДа сравниваете, сравниваете. Вы ж прямо написали, что TCP быстрее, чем ответы от веб-сервера. Но при этом не сказали, что подразумеваете, что TCP соединение с Вашим сервером уже установлено, а в случае использования Вами AJAX оно фактически устанавливается каждый раз заново. Иначе собственно непонятно за счет чего быстрота. И так, и так браузеру придется соединиться с TCP-сокетом сервера. Веб-сервер это или же ваш демон — какая разница? Накладные расходы на вызов XMLHttpRequest не дадут существенного увеличения времени установки TCP-соединения.
Поэтому AJAX не гарантирует порядка запросов и ответовГм. Не совсем так. Я не зря упоминал про синхронные запросы в JS. Другое дело, что текущие реализации XHR, насколько мне известно, не поддерживают полноценный pipelining, а поддержка браузером persistent connection с сервером зависят больше от принимающего сервера, нежели от умения XHR отправлять заголовок Keep-Alive. Ну то есть, определенный смысл в Ваших действиях есть, но вопрос невозможности отказаться от прямого соединения (Java, кстати, или Flash?) в пользу дееспособной конфигурации веб-сервера остается открытым.
Теперь снова Ваш ход — чем это характеризует систему с нелучшей стороны?Пальцем в небо. Я писал не про FastCGI, посмотрите внимательно на цитату, которую я там выделил.
А я и не говорил ничего противоречащего. Я говорил про обмен данными по соединению, а не про его установку.А ну надо же. Оказывается, у нас уже что-то там с чем-то соединено, и сервер просто использует это соединение. Ну-ка ткните-ка меня в цитатку из предыдущих сообщений, где Вы говорили, что соединение состоялось. Без этой цитаты из Ваших фраз следует как раз то, о чем я писал выше — в предыдущих комментариях Вы фактически говорите, что инициатором передачи файла клиенту является сервер. Что полностью противоречит принципам TCP. Учитесь правильно формулировать свои мысли.
Вы говорили, что, имея возможность используя AJAX, я могу использовать TCP.Не говорил. Не путайте причину и следствие. Я говорил, что AJAX в принципе невозможен без TCP: «Работа аякса невозможна без использования ТСР-сокетов». Про то, что AJAX предоставляет все возможности TCP я не упоминал. Цитату в студию, если таки упоминал.
А конкретней?
Темы тормозов _из-за высокой нагрузки на сервер_ мы в нашем обсуждании не касались.И всё-таки у меня стойкая мысль, что проблемы производительности Вашего продукта — не в AJAX'е. Тут нужно глубже копать, у меня нет достаточной информации. Но интуиция пока утверждает, что Ваших костылей можно было бы избежать. Но эт уже отдельный разговор.
В отношении меня вы это пока не обосновалиСчитайте, что под недостаточной квалификацией я имел в виду, что Вы не умеете полно и точно излагать свои мысли. Вам повезло, что я терпелив и подвел Вас к точной формулировке того, что Вы имели в виду в предыдущих постах ;)
сайт должен быть доступен в любом случае, все его функцииНет. Большинство функций — да. Все — нет.
1. <input type="hidden" name="xcode" id="r2d2" value="0"> 2. document.getElementById("r2d2").value = 776; 3. проверяю в php $_REQUEST['r2d2'] == 776
Удивительно, но многие простенькие боты заполняют все неизвестные поля.В этом ничего удивительного, в той теме, где мы это обсуждали я объяснял почему это так :) И так делают не просто многие боты, таким интеллектом обладает большинство ботов-автоматов. Даже если автомат заточен под конкретный движок, пара изменений в стандарте форм этого движка — и автобот обломается.
Возможности защиты с JS — практически безграничны, но все таки его некоторые отключают.
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
// тут код скрипта
} else {
// тут выдаётся сообщение о том, что запрос был послан не через Ajax
}
* This source code was highlighted with Source Code Highlighter.
getUrl('javascript:flash_ok();'); stop();
<script language='JavaScript'>
init = 0; setTimeout(init_form,1500);
function flash_ok() { init = 1; }
function init_form() {
if (init == 1) { //загружаем флеш-форму } else { //загружаем форму через ajax }
</script>
Сама форма полностью создаётся javascript-методом динамчески. Таким образом, форму может увидить лишь пользователь, у которого отработал соответствующий скрипт.
Методы защиты веб-формы без капчи