Анимация
JavaScript


Главная  Библионтека 

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

28: open(CF, •>Scounterfile") j

die "Оппйка при открьпии Scounterfile: 5Г

29: print CF $hits; 30: close(CF); 31:

32: release lockQ; t Спишем блокировку

Проведем анализ программы.

• Строка 18: Без блокировки не обойтись, поскольку с файлом счетчика посещений могут выполнять операции чтения и записи несколько процессов одновременно.

• Строки 20-23. Считывается содержимое файла, имя которого указано в переменной Scounterfile. Пока это и есть количество посещений.

• Строка 30. Содержимое счетчика посещений снова записывается в файл,

имя которого указано в переменной $counterfile.

• Строка 32. Снимается блокировка.

Большая часть программы, представленной в листинге 23.3, не должна отпугивать вас неизвестными элементами. Однако обратите внимание на выполнение операции

блокировки файла и примеры с использованием блокировок, описанные на 15-м занятии, "Обработка данных в Perl".

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

говорить о приемлемой точности показаний счетчика.

Графический счетчик посещений

Чтобы изюминку в оформление счетчика посещений, можно воспользо-

ваться различными способами. Остановимся на трех. Первый предполагает составление графического изображения, представляющего все возможные значения счетчика, и его отображение при необходимости. Этот метод отличается большими временными затратами при увеличении числа посетителей Web-узла.

Второй метод состоит в использовании CGI-профаммы на языке Perl, которая бы сама генерировала нужные графические изображения для счетчика посещений. Модуль GD, доступный в CPAN, как раз предназначен для создания графических изображений с использованием Perl-программ Воспользуйтесь им, чтобы внести в свой счетчик элемент оригинальности. К сожалению, подробное знакомство с модулем GD выходит за рамки этой книги.

Проще всего создать изображений, представляющих цифры от 0 до 9. Затем при увеличении показаний счетчика ваша программа может выводить HTML-код с дескрипторами <1ПО>, которые поместят эти цифры на нужное место (рис. 23.6). По вам, конечно, придется создать изображения, представляющие эти цифры. CGI-программа на языке Perl, представленная в листинге 23.4, написана в предположении, что файлы изображений имеют следующие имена: digitO.jpg, digitl.jpg и т.д., вплоть до файла digit 9jpg



10 3 4

<IKG SRC=digit l.jpg"> <IKG SaC»digit Oopg"> <IHG SRC-digltJ.jpg"> <IHG SRC=digit 4opg">

Рис. 23.6. РеЕу1ат реб1 графического посе

Для обеспечения работоспособности счетчика запускайте грамму в режиме серверного включения, как было описано на 20-м занятии, "Работа с HTML-кодом и CGI-программами", Если, например, СОЬпрограмму такого счетчика назвать graphical hits.cgi, то с помощью дескрипторов SSI ее можно включить в любую страницу:

<!-execcgi="/cgi-bin/graphical hits.cgi"-->

Исходный код графического счетчика посещений Web-страницы представлен в листинге 23.4.

1: f !/usr/bin/perl -W

3: V£e strict;

4: ШЭ Fcntl (i(:flcck);

S:- 1НЭ CGE qw(:all);

7: ny $lockfiIe=/tmp/webcount Icck;

8: Щ/ Scounterfile=/web/httpd7countfile;

9: ny Simage url=http: www,server.com/images;

11: subgetjock {

12: open(SEM, ">$Iockfile-)

13: I I die He удается создать семафор: $!";

14: flock(SEH, LOCK EX) I I die "Блоюювка не удалась: $!";

15: }

16: sub release lock { 17: close(SEM);

18: }

19: get lock{); t Вьпотеже блоюровт и ожвдатме. 20: my $hits=0;

21: if ( open(CF, $counterfile) ) { 22: $Mts=<CR>;

23: close(CF);

24: }

25: $hits++; 26:

27: open(CF, ">5counterfile") II

die "Ошибка при открытии $counterfile: $!";

print CF $hits; close(CF);

release lock(); f Снятие блотровт

29: 30: 31: 32:

jf теперь создаем дкрры <IMG>.

33: print header;

34: foreach my $drgit {split( , $hits)) {

35: print <IMG SRC=$image url/digit ?digit.jpg>";

36; }



Листинг 23.0 сути повторяет листинг 23.3, но содержит небольшие отличия.

Строка 9. Здесь в переменной Siiiiage url содержится базовый иКЬдля изображений цифр. Однако следует помнить, что это должен быть URL, которым для загрузки изображений воспользуется броузер, а не полный путь к файлам изображений, находящихся на локальном диске.

Строк 35. Число в счетчике посещений its - дробится на отдельные символы, и каждая цифра по очереди присваивается переменной Затем для каждой цифры создаются дескрипторы <IMG>

Резюме

На этом занятии вы познакомились с двумя методами реализации анимации на Web-страницах. Вы можете воснользоваться методом выталкивания страниц сервером (server push), чтобы заставить броузеры постоянно обновлять Web-страницы Если этот метод вам не подходит или он не поддерживается определенным типом броузера, то для нолучения аналогичных эффектов можно использовать метод вытаскивания страниц со стороны клиента (client pull). Кроме того, вы узнали о счетчиках посещений Web-страниц, а также о причинах их вопиющей неточности.

Вопросы и ответы

Почему не работает метод вггалкивания страниц сервером?

Данный метод может не работать по различным причинам. Во-первых, push-технологию должен поддерживать броузер. Во-вторых, Web-сервер должен запускать CGI-профаммы без анализа заголовков. И, наконец, ваш офамма должна работать корректно. При запуске CGI-программы из командной строки, убедитесь, что результаты выводятся через регулярные интервалы времени и при этом верны.

Если счетчики посещений настолько плохи, то существует ли надежный способ оценить посещаемость Web-узла?

Практически нет. Анализ обращений к серверу по системному журналу дает такие же неточные результаты, как и использование счетчика посещений. Можно подсчитать количество обращений к конкретной странице с помощью гиперссылки с перенаправлением (см. материал 20-го занятия, "Работа с HTML-кодом и CGI-программами"). Другой вариант - вынудить посетителей физически заполнять некоторую форму. Использование метода POST при обработке данных HTML-форм является единственным способом, позволяющим со стопроцентной гарантией избежать кэ-

щирования страниц ргоху-сервером.

Семинар

Контрольные вопросы

1. Какие функции из модуля CGI нужно использовать для реализации метода выталкивания страниц сервером?

a) multipart start и miiltipart end.



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