3. Новости. Или почти Cookies...
Долгое время, бродя по флэшовым страничкам, я
почему-то пришел к мысли, что в последнее время
сильно распространилась мода на флэш-ролики с
"распределенной загрузкой". Помнится, были
времена, когда даже нормальный "прелоадер" был
редкостью, и приходилось просто тупо сидеть и
смотреть на слово Loading..., не имея ни малейшего
понятия, сколько звуков, в формате ADPCM напихал в
ролик его автор, и сколько еще времени
понадобится, чтобы посмотреть, наконец, на его
творение, имея цпс 200-300. Сейчас же особым шиком
считается сделать страничку, на которой почти
невесомое "интро" запускается почти сразу же и по
мере загрузки начинает обрастать новыми деталями,
звуками, и плавно переходит в какое-нибудь
навороченное меню абсолютно космического дизайна.
Вы тоже были на таких страничках ? Не знаю как
вам, а мне такой подход к созданию флэшовых
роликов очень нравится. И почему-то мне кажется,
что за таким подходом будущее. Есть только у
такого подхода один недостаток - создатель
странички почти всегда почему-то считает, что все
посетители заходят к нему в первый раз. А создание
кнопки "Skip intro" противоречит самому принципу
распределенной загрузки - тормоза получатся, если
попытаться перейти на еще не загруженный кадр. И
тут возникает простая до безобразия мысль. А что
если этот кадр уже загружен ? Что если этот swf
уже спокойно лежит в кэше браузера и ждет когда же
его, наконец, загрузят ? А что собственно нам
мешает проверить в первом кадре ролика по действию
If Frame Is Loaded ("метка самого последнего
кадра") не лежит ли наш .swf в кэше ? И если это
условие выполнится можно будет сделать вывод
насчет того, что к вам заглянул старый знакомый и
можно даже выделить специальную переменную на то,
чтобы поздороваться с ним как-нибудь по особенному
или, например, вывести специально для него
кнопочку "Skip Intro". Дальше больше - к примеру,
обновляете вы свою страничку пару раз в месяц,
тогда вполне можно сообщить посетителю, что
новенького появилось на вашей страничке за время
его отсутствия. Сделать это можно простым способом
- что мешает нам после каждого обновления
создавать отдельный .swf c "новостями" в пару
строк ? И хранить на сервере последние штук 5-6
новостных небольших флэшовых роликов ? Сами уже,
наверное, догадались, как их показать :) Конечно!
Это очень просто! Помните старый фокус с
незаметной подгрузкой нового ролика ? Именно это
способ и можно использовать. Все как обычно -
делаем ролик, в котором первый кадр пуст и
содержит только, например вот такие действия
If Frame Is Loaded ("end1")
Set Variable: "_level0:variable1" = "1"
End Frame Loaded
Stop
во второй кадр вставляем текст новости, а
третьему с этим же текстом (иногда полезно сделать
этот третий ключевой кадр), присваиваем метку
"end1". Потом, действием Load Movie... (после
положительного результата проверки наличия
основного ролика в кэше) загружаем все эти
маленькие .swf в основной. Если посетитель уже
видел какую-либо новость, то она уже есть у него в
кэше и переменную, прописанную в первом кадре этой
новости, увидит основной .swf. Поскольку разные
новостные ролики передают в основной ролик разные
переменные, в случае если соответствующая
переменная не равна единице, даем команду
загруженному ролику перейти на метку "endxx", а
если равна - не даем и загруженный ролик остается
невидимым. Можно даже организовать навигацию по
новостям, с автоматическим выводом в начале первой
новости, которую посетитель не видел (которой нет
в кэше браузера).
Сложновато конечно слегка получится, но зато
только средствами Flash :)
4. Определяем быстродействие компьютера в
он-лайн.
Итак, давайте посмотрим, что еще можно применить
для наших антинаучных экспериментов из богатого
(только на первый взгляд, к сожалению...)
ассортимента действий Flash4. Get URL- старо, If
Frame Is Loaded - слишком скучно, Load Movie - уже
было... Ага ! Вот что мне нравится из Actions, это
GetTimer ! Интересная штукенция :) Давайте
попробуем приспособить ее к какому-нибудь
общественно-полезному делу.
Вы когда-нибудь замечали что некоторые .swf ролики
подтормаживают ? Да, иногда сидя за PIII-600
забываешь, что есть компьютеры слегка помедленнее
:) А что есть тормоза при воспроизведении .swf ?
Это просто процесс происходящий с компьютером,
который не может выполнить заданную в ролике
последовательность действий с заданной в этом же
ролике частотой кадров. А от чего зависят тормоза
? Правильно - тормоза однозначно зависят от
производительности компьютера пользователя и от
числа свободных ресурсов на этом компьютере. Если
бы можно было оценить тормоза в цифрах, по этим
цифрам можно было бы судить о производительности
системы. Использование GetTimer дает нам
уникальную возможность в цифрах оценить тормоза
компьютера посетителя вашей флэшовой странички.
Итак, задача упрощается. Для определения
быстродействия компьютера необходимо взять таймер
(например, в первом пустом кадре сделать Set
Variable: "time1" = GetTimer ), потом загрузить
процессор так, чтобы даже PIII-600 немного
призадумался, потом в еще одном пустом ключевом
кадре сделать Set Variable: "time2" = GetTimer. В
результате разница time2 - time1 будет практически
линейно зависеть от частоты процессора (конечно не
загруженного в этот момент другими непосильными
задачами :)
Как показывает мировая практика, наилучшим
способом затормозить процессор является действие
Duplicate Movie Clip. Попробуем использовать для
этого что-то очень похожее на исходник про
звездное небо (со странички с исходниками :).
Создадим Символ вида Movie Clip содержащий
маленькую белую точку и поместим этот символ в
основную сцену с присвоением ему Instance Name "star".
Далее, в первом кадре берем таймер, во втором
что-то вроде
Set Variable: "number" = 1
Loop While (number <= 5000)
Duplicate Movie Clip ("/star", "zvezda" & number, number)
Set Property ("zvezda" & number, Visibility) = 0
Set Variable: "number" = number +1
End Loop
В третьем кадре похожим циклом уничтожаем все
эти 5000 точек и, наконец, в четвертом снова берем
таймер и вычисляем разницу. Кстати цифра 5000
взята абсолютно с потолка - попробуйте
поэкспериментировать сами :)
Один из самых первых моих опытов по определению
быстродействия лежит
вот тут, а вы попробуйте придумать что-нибудь
сами (так получится намного интереснее :) Пока я
встречал еще только одну попытку вычислять
быстродействие. Очень интересный подход к этой
задаче продемонстрировал некто
c y b e t* . Архив с его
3dflash bench можно взять тут. Применений
этому можно придумать массу - например, пере
направлять пользователей со слабыми процессорами
на более другой урл или просто отключать для них
самые навороченные графические эффекты :)
|