главная -- web-design -- неожиданные применения Flash (3)           вернуться на главную
На это месте могла находиться Ваша РЕКЛАМА!

     Неожиданные применения Flash: Rambler's Top100

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 можно взять тут. Применений этому можно придумать массу - например, пере направлять пользователей со слабыми процессорами на более другой урл или просто отключать для них самые навороченные графические эффекты :)

Продолжение: Часть1, Часть2, Часть4  
  Rambler's Top100          

Сайт создан в системе uCoz