Анимация
JavaScript
|
Главная Библионтека Какой бы из методов вы ни использовали при написании они в чем-то окажутся несовместимыми с тем или иным броузером. Тем не менее вам придется принимать решение по выбору "наименьшего зла" и писать соответствующий программный код. Счетчики посещений На Web-страницах иногда можно увидеть нечто, именуемое счетчиком щелчков или индикатором числа посещений. Предположительно он отражает, сколько раз посетили данную Web-страницу. Пример такого индикатора показан на рис. 23.3. 1 ш%:шът в Ш Р j Щг Been Visited 20398721 Рис. 23.3. Гример индикатора посещений Web-страницl Показания счетчиков посещений связаны с множеством проблем. Прежде всего, что означает это число? Можно предположить, что большое значение этого числа "щелчков" говорит о высокой популярности данной страницы. Но разве популярность страницы означает, что она так уж хороша? Совсем необязательно. Посетив какую-нибудь Web-страницу, вы либо находите нужную информацию, либо нет. Качество страницы - в ее значимости именно для вас, а не для других. По сути, счетчик посещений - это своего рода конкурс красоты с незрячими членами жюри. Представленное счетчиком число совсем не означает число людей, посетивших вашу страницу. В лучшем случае - это просто неточная оценка. Почему же эти счетчики так неточны? Вероятно, на это есть несколько причин. Прежде всего, следует сказать, что нет такого правила, которое бы предписывало, чтобы счетчик посещений начинал отсчет с нуля. Когда вам выдавали чековую книжку, то номер первого чека разве б1л равен #1? По всей вероятности, при заказе чековой книжки вам разрешалось выбрать начальный номер чека. И если у вас есть некоторый опыт в общении с банковскими служащими, вы выберете в качестве начального номер побольше, чтобы тем самым создать впечатление, что у вас довольно продолжительные отношения с этим банком. Маленький номер может заставить клерка дважды проверить ваш идентификатор и не исключено, что он вообще откажется принимать чек. Администраторы Web-узлов часто устанавливают начальные значения счетчиков посещений большими, чтобы их Web-узлы выглядели более "популярными", чем они есть на самом деле. Вторая проблема, связанная со счетчиками посещений, - это Web-роботы, которые также называются пауками, червями и пр. Они представляют собой автоматические процессы поиска данных в Web (иногда просто с целью отыскать некоторую справочную информацию, а иногда для построения индексов интересных Web-узлов) Вы когда-нибудь интересовались, как AltaVista, Google или HotBot строят свои индексы? Они "просматривают" Web, посещают "нужные" страницы, что в конце концов приводит к "взлету" показаний счетчиков на незаслуженную высоту. Следующая проблема связана с кнопкой Refresh (Обновить) Web-броузеров. При каждом "обновлении" счетчик посещений делает новую "зарубку". Тогда выходит, что если щелчок на кнопке перезагрузки увеличивает показания счетчика, то эти показания на самом деле не означают количество посетителей вашего узла, не так ли? Последняя и самая важная проблема связана с кэщированием. Па 17-м занятии, "Введение в CGI", б]ла приведена схема подключения броузера к Web-серверу В ней не учтены некоторые важные детали, которые показаны на рис. 23.4. Если Web-броузер размещен внутри домена такого крупного провайдера услуг Internet (ISP), как aol.com или home.com с многомиллионным отрядом абонентов, то такой ISP использует кэширующее устройство, именуемое proxy-сервером. Это кэши-рующее устройство можно рассматривать как посредника между Web-броузером и Web-сервером После щелчка на гиперсс1лке некоторой Web-страницы этот запрос отправляется ргоху-серверу, который "достает" эту страницу для вас из Internet и отправляет ее обратно вашему броузеру. При этом proxy-сервер сохраняет копию этой страницы для "себя" (рис. 23.5). Если кто-нибудь еще в том же домене запросит ту же страницу, proxy-сервер не станет утруждать себя повторной ее загрузкой из Internet, a воспользуется сохраненной (на всякий случай) копией. Документ А 4 - Документ А Web-сервер Документ А Рис. 23.4. Proxy-сервер тает" страницу для брора Web-cepeep (,. II IMIIII-Щ Proxy-
Дсжумежг А Документ А Рис. 23,5. Proxy-сервер сч1вает страницу из своего При сохранении на proxy-сервере копии страницы искусственно уменьшается количество посещений, отображаемых счетчиком. При кэшировании функция remote host часто будет возвращать одно и то же значение, даже несмотря на то, что страница запрашивается различными пользователями. Пользователи Web, находящиеся в больших организациях и университетах, часто защищены системами-брандмауэрами (firewall), которые действуют подобно proxy-серверам. Каждый запрос страницы, исходящий от одного из этих узлов, скорее всего не будет учтен в счетчике посещений, поскольку он перехватывается proxy-сервером. А теперь венно, перейдем к счетчику посещений Если, прочитав предыдущий раздел, вы еще не отложили эту книгу в сторону, то можно предположить, что вас интересует создание такого счетчика посещений для своей Web-страницы. Есть два основных типа счетчиков посещений для Web-страниц: текстовый и графический. Сначала рассмотрим текстовый счетчик, а затем - графический, после обсудим возможности улучшения "моделей" счетчиков. Для обеспечения работоспособности счетчика посещений используйте возможности серверных включений (server-side include - SSI), с которыми вы познакомились на 20-м занятии, "Работа с HTML-кодом и CGI-программами". Если, например, организации работы такого счетчика назвать то с помощью дескрипторов SSI ее можно включить в любую страницу: <!-lexec cgi="/cgi-bin/hits.cgi"-> Исходный код CGI-программы счетчика посещений представлен в листинге 23.3. 23.3. fp сч поcеWe[ра :L: *!/usr/bin/perl -« 3: use strict; 4: use Fcntl qw(:floclc); 5: use CUE qw(:all); 7: ny Ssemaphore file=/tmp/webcount lock; 8! ny Scounterfile=/web/httpd/countfile; 9: sub get lock { 10: open(SEM, ">Ssemaphore file") 11: Ij die "He улегся сгждагь оаувфср: $!"; 12: flock(SEM, LOCK EX) II die "БггккрсвкаlEyipracb: $!"; 13: > 14: HKupiH СННЛИН бскирсЕки 15: Slib releasejock { 16: close(SEH); 17: } 18: get lock(); t БгкЕрзвка и сжфрнсе. 19: шу ts=0; 20: if (cp£X{{CF, $CDurerfil) } { 21: $hit£3=<CS; 22: close{CF); 23: } 24: $hit£jf+; tУйепинение сячкка islmm на 1. 25: Efl header; 26: print -Вы стали $hits посетитепем-; 27: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 [ 111 ] 112 113 114 115 116 117 118 119 120 121 122 |