- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева

В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
И если в будущем будет изменен параметр users_block_size = 100; то это уже изменение алгоритмов выборки, и без той самой записи в куках на каком блоке мы остановили показ не обойтись.
И да при изменении users_block_size = 100; в меньшую сторону, и если пользователь вышел зашел, он может увидеть тех кого видел ранее, при изменении в большую сторону, ему могут быть не показаны некоторые аватары вообще, он их пропустит. также как и пропустит закрыв и открыв браузер.
--
resume_user_id = 2000000; // с этого пользователя мы возобновляем процесс
а этот параметр тоже надо хранить в куках при закрытии браузера.
--
Вывод: либо пишем и читаем куки, либо просто крутить по кругу не заморачиваясь кого показали, не успел посмотреть, посмотрит на следующем кругу)
--
А еще, если же нам нужна синхронизация между всеми пользователями для показа им одинаковых блоков, то и ненужно нам по заданию выходит запоминать кого посмотрел и на каком остановился тот или иной пользователь.
А чем вас вариант с генерацией наального id пользователя на сервере не устраивает? Ну т.е. на сервере раз в 5 минут (или сколько там по условию должен блок ротироваться) запускается скрипт. Вычисляет начального пользователя, с которого надо показывать блок, записывает это хоть в БД, хоть в файл.
При отдаче страницы пользователю уходит это значеине и размер блока, тогда на клиенте случайный полльзователь будет вычислять элементарно -
где user_max - это значение, сгенерированное первым скриптом.
Напишу еще вариант. Если я правильно понял, то профили должны выводиться у всех юзеров одинаковые (т. е из одного блока). А точнее синхронно, ОК? Тогда вот это должно сработать (https://jsfiddle.net/azrrLza4/):
var userBlocks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'a', 'b', 'c', 'd', 'e']; // Блоки пользователей
var maxBlockLimit = 15; // 15 or userBlocks.length - последний блок
var minBlockLimit = 1; // первый блок
var interval = 5000, time = Date.now(), startTime = 1430250266922; // Интервал, время сейчас, время запуска (должно быть постоянным или должно заново выставляться сервером после полного перебора всех блоков)
var block; // ID нашего будущего блока
block = Math.floor((time - startTime)/interval);
block = (block > maxBlockLimit) ? block % maxBlockLimit : block; // Проверяем не вышли ли за пределы
console.log('Block id is "' + userBlocks[block] + '"'); // вот и сам блок
После того, как получим нужный блок - начать ротировать сам блок с пользователями, пока не кончится интервал.
В идеале, чтобы у всех пользователей нашей страны и вообще всего мира отображались одни и те же блоки пользователей, то время (var time) придется выставлять сервером.
Решение оказалось достаточно простым, но мой 140-й IQ напрочь отказался его выдавать раньше 2-дневного срока. Наверное, нужно заново пересдать тест...
var start_time = 1430271008102;
var init_user_id = 2000000;
var users_max = 3000000;
var users_min = 1000000;
var users_block_size = 100;
var users_block_period = 300000;
var users_block_count = Math.floor((users_max - users_min) / users_block_size);
var users_block_offset = Math.ceil((users_max - init_user_id) / users_block_size);
user_id = users_max - (Math.floor((new Date().getTime() - start_time) / users_block_period) % users_block_count + users_block_offset) % users_block_count * users_block_size - Math.floor(Math.random() * users_block_size);
Всем большое спасибо за подсказки!
А на словах-то вы можете пояснить, что сделали?
Дикий пионер, добавила сдвиг по блокам, привязанный ко времени модификации скрипта и который не выходит за границы общего диапазона. Синхронизация по времени обеспечивается использованием new Date().getTime(), в независимости от часового пояса у всех пользователей время - одинаковое (нет необходимости использовать серверное время).