Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   javascript: действие выполнено слишком быстро (https://javascript.ru/forum/misc/18370-javascript-dejjstvie-vypolneno-slishkom-bystro.html)

Jude 28.06.2011 07:19

javascript: действие выполнено слишком быстро
 
Как написать скрипт, который будет выдавать alert при быстром нажатии на ссылки? Хоть алгоритм подскажите или дайте ссылку на статью какую:) Раньше в ВК было такое, сейчас - хз;)
Просто у меня всё на аяксе работает и хотелось бы хоть как-то запретить пользователям "баловаться" с сайтом (т.е. не давать загружать одно и то же очень быстро).

ksa 28.06.2011 09:16

Цитата:

Сообщение от Jude
Хоть алгоритм подскажите

Как вариант, фиксировать время нажатия в некую переменную и приследующем нажатии проверять сколько прошло времени...

Gozar 28.06.2011 09:24

Цитата:

Сообщение от Jude (Сообщение 110858)
т.е. не давать загружать одно и то же очень быстро

Чтобы не давать загружать одно и тоже нужно кэшировать результат и проверять его наличие в случае наличия не грузить с сервера. Запретить скачивать одно и тоже одним и тем же человеком можно только на сервере и не на 100%.

Jude 28.06.2011 09:44

Цитата:

Чтобы не давать загружать одно и тоже нужно кэшировать результат и проверять его наличие в случае наличия не грузить с сервера. Запретить скачивать одно и тоже одним и тем же человеком можно только на сервере и не на 100%.
Я сделал кеширование на стороне сервера, т.е. при заходе на страницу проверяется время последнего изменения файла (если он есть; + это позволяет отдавать кеш-файлы всем пользователям и хранить их достаточно долго) и этот же кеш-файл отдаётся пользователям, а если кеш-файла нету, то пользователь скачивает страничку и тем-самым создаётся кеш-файл.
Но дело даже не в этом, ведь если пользователь будет "бегать" по ссылкам, то нагрузка на сервер будет вполне хорошая, поэтому и нужно написать скрипт (см. первый пост). Каким образом можно кешировать на стороне клиента? localStorage не подходит, я не смог всё это объединить:(
Цитата:

Как вариант, фиксировать время нажатия в некую переменную и приследующем нажатии проверять сколько прошло времени...
Спасибо, попробую написать:)

Jude 28.06.2011 09:45

Цитата:

Чтобы не давать загружать одно и тоже нужно кэшировать результат и проверять его наличие в случае наличия не грузить с сервера. Запретить скачивать одно и тоже одним и тем же человеком можно только на сервере и не на 100%.
Я сделал кеширование на стороне сервера, т.е. при заходе на страницу проверяется время последнего изменения файла (если он есть; + это позволяет отдавать кеш-файлы всем пользователям и хранить их достаточно долго) и этот же кеш-файл отдаётся пользователям, а если кеш-файла нету, то пользователь скачивает страничку и тем-самым создаётся кеш-файл.
Но дело даже не в этом, ведь если пользователь будет "бегать" по ссылкам, то нагрузка на сервер будет вполне хорошая, поэтому и нужно написать скрипт (см. первый пост). Можно так же включить кеширование на стороне клиента, но с этим пока тестирую.
Цитата:

Как вариант, фиксировать время нажатия в некую переменную и приследующем нажатии проверять сколько прошло времени...
Хорошо, попробую написать:)

Gozar 28.06.2011 12:02

Jude,
Я ни слова не сказал, что кэшировать нужно на стороне сервера. Разве пользователь будет кликать на стороне сервера?
display:none


Цитата:

Сообщение от ksa (Сообщение 110865)
Как вариант, фиксировать время нажатия в некую переменную и приследующем нажатии проверять сколько прошло времени...

Да запрети просто доступ к сайту и всё. Пусть его никто не видит. Хуже вряд-ли можно придумать, чем сайт реагирующий на клики через раз, а ну да можно ещё пароль просить ввести каждые 30 секунд.

Ваша проблема похожа на надуманную.

melky 28.06.2011 12:13

Цитата:

Сообщение от Jude (Сообщение 110858)
Просто у меня всё на аяксе работает и хотелось бы хоть как-то запретить пользователям "баловаться" с сайтом (т.е. не давать загружать одно и то же очень быстро).

дайте пример. кликание на "новости" вконтакте?

ksa 28.06.2011 12:24

Цитата:

Сообщение от Gozar
Хуже вряд-ли можно придумать, чем сайт реагирующий на клики через раз

Согласен...

Jude 28.06.2011 12:51

Цитата:

Я ни слова не сказал, что кэшировать нужно на стороне сервера.
Это уже было сделано давно на случай, если у пользователя кеш будет отключен и для снятия нагрузки на сервер.
Цитата:

Да запрети просто доступ к сайту и всё. Пусть его никто не видит. Хуже вряд-ли можно придумать, чем сайт реагирующий на клики через раз
Почему через раз? Каждые 0,5-0,8 секунд отлавливать быстрые клики. Согласитесь, быстрее 1 секунды просто так не кликают по сайту:)

В общем, написал какую-то ересь:
function quickMouse()
{
	var date = new Date, s = date.getSeconds(),
		storage = globalStorage[document.domain],
		x = s-parseInt(storage['s']);
	storage['s'] = s;
	if(x<1)alert('Nah!');
}

<a href="/" onclick="quickMouse(); return false;">Клац</a>
<a href="/" onclick="quickMouse(); return false;">Клац</a>

Но что-то это очень ужасно выглядит:)
Цитата:

дайте пример. кликание на "новости" вконтакте?
А где там? Выше скрипт посмотрите, поймёте

Gozar 28.06.2011 21:00

Цитата:

Сообщение от Jude (Сообщение 110915)
В общем, написал какую-то ересь:

Ничего кроме ереси вы написать не сможете, т.к. вы поставили себе задачу написать ересь.

Представим на секунду, что я тот человек, который зашел на ваш сайт и который решил поиграть в быстрые клики т.к. меня взбесило то что "тупорылый сайт" указывает мне что делать и с какой скоростью кликать на ссылки. Я включаю мозг и за две минуты клепаю скрипт, который ajax-ами дергает одинаковую инфу с вашего сервера, не кликает на ссылки, а дергает запрос. Ваша ересь не сработает.

ps: Никакого LocalStorage не нужно чтобы сделать у одного блока display:none/block <--- кэш, т.к. запрос уже был, проверяем если блок есть, то инфу не дергаем, нет блока, дергаем


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