Счетчик Просмотра страницы как на StackOverFlow

Для передачи параметров в маршруте используйте массив с именами параметров в качестве ключей:

{{ route('shop.order.test', ['id' => $id, 'grouping' => $form['grouping']]) }}

Laravel Doc

10
задан TimLeung 29 October 2008 в 14:06
поделиться

7 ответов

Счетчик я оптимизировал работы как это:

UPDATE page_views SET counter = counter + 1 WHERE page_id = x
if (affected_rows == 0 ) {
   INSERT INTO page_views (page_id, counter) VALUES (x, 1)
}

Таким образом, Вы выполняете 2 запроса для первого представления, другие представления требуют только 1 запроса.

8
ответ дан 3 December 2019 в 15:23
поделиться

Я сделал два наблюдения относительно счетчика представлений stackoverflow:

  • Существует a link элемент в заголовке, который обрабатывает инициирование обновления количества. Для этого вопроса разметка похожа на это:
    <link href="/questions/246919/increment-view-count" type="text/css" rel="stylesheet" />
    Я предполагаю, что Вы могли поразить тот URL для обновления viewcount, на самом деле никогда не просматривая страницу, но я не попробовал его.

  • У меня был uservoice билет, где ответ от Jeff указал, что представления не увеличены от того же IP дважды подряд.

11
ответ дан 3 December 2019 в 15:23
поделиться

Можно реализовать IHttpHandler, чтобы сделать это.

0
ответ дан 3 December 2019 в 15:23
поделиться

Эффективный путь может быть: Сохраните свои счетчики в Объекте приложения, можно сохранить его в файл/DB периодически и на приложении близко.

6
ответ дан 3 December 2019 в 15:23
поделиться

Я - поклонник стиля @Guillaume реализации. Я использую прозрачный обработчик GIF и очереди в оперативной памяти для пакетной обработки наборов изменений, которые затем периодически сбрасываются с помощью отдельного потока, созданного в global.asax.

Обработчик реализует IHttpHandler, обрабатывает параметры запроса, например, идентификатор страницы, язык и т.д., обновляет очередь, затем response.writes прозрачный GIF.

Путем перемещения персистентных изменений в отдельном потоке, чем пользовательский запрос Вы также имеете дело намного лучше с потенциальными проблемами сериализации от выполнения нескольких серверов и т.д.

Конечно, Вы могли просто заплатить кому-то еще, чтобы сделать работу также, например, с прозрачным gifs.

0
ответ дан 3 December 2019 в 15:23
поделиться

Для меня лучший способ состоит в том, чтобы иметь поле в таблице вопроса и обновить ее, когда к вопросу получают доступ

UPDATE Questions SET views = views + 1 WHERE QuestionID = x

Объект приложения: IMO не масштабируем, потому что может закончиться большим потреблением памяти, поскольку к большему количеству вопросов получают доступ.
Таблица Page_views: никакая потребность к, необходимо сделать дорогостоящее соединение после

0
ответ дан 3 December 2019 в 15:23
поделиться

Вместо того, чтобы делать вызов базы данных каждый раз, когда база данных поражается, я бы увеличивал счетчик, используя объект кеша и в зависимости от того, сколько посещений вы получаете на свой сайт каждый день, когда вы отправляете обращения к странице в базу данных каждое сотое попадание на сайт. Это намного быстрее, чем обновление базы данных при каждом обращении.

Или другое решение - анализ файла журнала IIS и обновление обращений каждые 30 минут через службу Windows. Это то, что я реализовал, и это творит чудеса.

4
ответ дан 3 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: