?

Log in

No account? Create an account
Счётчики "Нравится / Не нравится" будут усовершенствованы -- следите за рекламой! - Коммик, Just Коммик — LiveJournal
November 6th, 2014
11:22 am

[Link]

Previous Entry Share Next Entry
Счётчики "Нравится / Не нравится" будут усовершенствованы -- следите за рекламой!
Сначала о проблеме, которая обнаружилась вчера --  в первый день их использования. Дело в том, что, скажем, первый счётчик, показывающий количество посещений поста, с точки зрения вашего браузера выглядит совершенно одинаково для всех постов всех пользователей -- как картинка:

<img src="http://earthmicrosystems.com/lj_counters.php?type=counter" />

Трюк состоит в том, что, когда ваш браузер запрашивает эту картинку у моего скрипта lj_counters.php, последний рисует её по-разному для разных постов. Когда же вы нажимаете кнопку "Back"/"Назад" в браузере, чтобы вернуться во френд-ленту, браузер не запрашивает снова картинку у меня, а использует ту, которую он получил от меня в последний раз, рисуя её во всех постах одинаково, сбивая, тем самым, читателей с толку.

Для интересующихся технической стороной дела, опишу процесс построения счетчика в виде серии диалогов.

Действующие лица:
Браузер -- это ваш браузер;
Сервер -- мой уеб-сервер Apache, находящийся где-то в Вирджинии;
Скрипт -- мой PHP-скрипт lj_counters.php, находящийся на том же компьютере, что и Сервер;
База Данных -- MySQL, сидящая на том же компьютере, что и Сервер.

Браузер, увидев в описании страницы поста ссылку на картинку (http://earthmicrosystems.com/lj_counters.php?type=counter), посылает запрос Серверу:

Браузер: Сервер, дай мне вот эту картинку (lj_counters.php?type=counter).
Сервер: Скрипт, это к тебе.
Скрипт: Сервер, с какой страницы пришел запрос?
Сервер: http://stalinist.livejournal.com/1109528.html.
Скрипт: Ага, значит, пользователь 'stalinist', а номер поста 1109528. База Данных, у тебя есть 'stalinist' в списке?
База Данных: Дай проверить... Так, 'son_of_a_bitch', 'stirlitz', 'stroumboulopoulos'... Нет, нету.
Скрипт: Сервер, пошли этот запрос в LiveJournal, пусть пришлют список тех, кто записал 'stalinist'а во френды.
(Минутное ожидание)
Сервер: Скрипт, вот тебе свежий список от LiveJournal.
Скрипт: База Данных, вот тебе список, обнови таблицу пользователей.
База Данных: Подожди, у меня не сто рук! Тут еще 5 твоих собратьев задают вопросы! (WRITE LOCK)
(Миллисекундное ожидание)
Скрипт: Ну что, теперь есть 'stalinist'?
База Данных: Да, теперь есть.
Скрипт: Хорошо, сколько у него уже было посетителей поста 1109528?
База Данных: Пока ни одного, он же новенький.
Скрипт: Хорошо, добавь одного. А я сейчас картинку нарисую с цифрой 1. Сервер, вот тебе картинка для Браузера.
Сервер: Браузер, получай картинку!

Если картинка запрашивается вашим браузером, когда вы, скажем, во френд-ленте -- http://stalinist.livejournal.com/friends/, -- моему скрипту негде взять информацию о том, в каком посте эта картинка расположена, поэтому счетчики рисуются пустыми.

Однако и эта проблема, и проблема, описанная в начале (когда все счетчики во френд-ленте рисуются одинаковыми), легко преодолевается, если каждый пост будет иметь уникально идентифицируемый счетчик -- к пример, вот такой:

<img src="http://earthmicrosystems.com/lj_counters.php?type=counter&user=stalinist&post=1109528" />

В этом случае, даже если нет необходимой информации о пользователе и номере поста в запросе браузера, она будет находится в самой ссылке счетчика, в переменных user и post. Недостаток этого в  том, что автору поста придется определить номер своего поста и вставить эту информацию в ссылку счетчика перед публикацией поста, но достигнутое преимущество -- показ счетчиков даже во френд-ленте и возможность голосовать оттуда -- с лихвой покроет эти лишние хлопоты!

Ждите обновления!

Tags:

(Leave a comment)

Powered by LiveJournal.com