Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Кэш и Flash (http://www.flasher.ru/forum/showthread.php?t=144382)

Koby 10.09.2010 15:36

Кэш и Flash
 
Здравствуйте
При написании приложения для одной из социальных сетей у меня возникла проблема: после первого запуска приложения, оно сохраняется в кэш, а мне надо что бы при повторном заходе оно загружалось заново. Возможен ли такой вариант?

и ещё вопрос,
При запуске приложения существует ли возможность не полностью загружать флешку, например при нажатии на кнопку, подгружать определенную часть?

littleannika 10.09.2010 15:54

ответ о чайника, прошу не бить :))
полагаю, что на первый вопрос ответ скорее нет, чем да. кеш штука страшная.
а вот второе я видела сплошь и рядом) когда флешка грузится кусочками (99% флешсайтов, при переходе из одного раздела в другой грузят новые куски).
так что решение видимо в том, чтобы сначала грузился некий загрузчик, а потом уже на основе данных из соцсети он подгружал дальше то, что надо

Obi 10.09.2010 16:29

Хороший ответ от чайника, бить нет необходимости.

Koby 10.09.2010 20:13

Спасибо=)

Тогда другой вопрос, я пишу что то вроде Измерителя Скорости Интернета, при первом запуске результат получается приемлимый, а при повторной загрузке кэш все сбивает..
существует ли альтернативный способ измерения, и какими способами его можно реализовать..

у меня была идея подгружать swf в главную прогу, а потом выгружать..
что на это скажете?

Rzer 10.09.2010 20:35

Добавлять к адресу загружаемого файла мистический: url + "?" + Math.random()

gloomyBrain 10.09.2010 20:50

Правильнее добавлять время в миллисекундах:
Код AS3:

request.url += "?nocashe=" + new Date().getTime();


Koby 10.09.2010 21:11

Все заработало)
Спасибо):)

expl 11.09.2010 02:04

Цитата:

Сообщение от gloomyBrain (Сообщение 934998)
Правильнее добавлять время в миллисекундах:
Код AS3:

request.url += "?nocashe=" + new Date().getTime();


А совсем правильно - настроить сервер, чтобы он отдавал новую версию файла сразу после побновления, а не после истечетния выставленного по дефолту времени

Зачем при каждом запросе то файл перегружать?
(Оказывается, протокол http позволяет сообщать бравзеру о необходимости перезагрузки файла. Только по умолчанию сервер врет, что файл не обновился где-то в течении суток)

Котяра 11.09.2010 02:23

Цитата:

Сообщение от expl (Сообщение 935030)
(Оказывается, протокол http позволяет сообщать бравзеру о необходимости перезагрузки файла. Только по умолчанию сервер врет, что файл не обновился где-то в течении суток)

А по-подробнее?

А мужики то не знали..

Я делал специальные загрузчики/отдатчики-антикэш на серваке, которые
Код AS3:

get_uncached_file(file_url)

либо добавляли
Код AS3:

 file_url?номер_ревизии_файла_в_репозитории

либо, если нет репы, то
Код AS3:

file_url?дата_изменения_файла

либо
Код AS3:

file_url?константа_которую_меняю_ручками_на сервере_при_очень_нужном_апдейте_всего


gloomyBrain 11.09.2010 12:05

@expl
Цитата:

А совсем правильно - настроить сервер, чтобы он отдавал новую версию файла сразу после побновления, а не после истечетния выставленного по дефолту времени

Зачем при каждом запросе то файл перегружать?
(Оказывается, протокол http позволяет сообщать бравзеру о необходимости перезагрузки файла. Только по умолчанию сервер врет, что файл не обновился где-то в течении суток)
Мне что, больше делать нечего - сервер настраивать? Самый простой способ будет послать POST запрос, т.к. они вообще не могут кешироваться.

@Котяра
у меня обычно так - при сборке приложения в рантайме основной модуль загружает с сервера список модулей с их версиями. Далее в конец запроса добавляется номер последней версии и все, что не обновилось, берется из кеша

expl 11.09.2010 21:56

Цитата:

А по-подробнее
Вот поподробнее не могу - апач настраивал серверист.
Вобщем php-шники должны быть в курсе.

Кстати, первая строчка сверху в Google, вроде в тему:
Настройка времени кеширования запроса апач

Цитата:

у меня обычно так - при сборке приложения в рантайме основной модуль загружает с сервера список модулей с их версиями. Далее в конец запроса добавляется номер последней версии и все, что не обновилось, берется из кеша
Раньше так мы и делали, только не версию, а дату последнего изменения скрипт выдирал

Цитата:

Мне что, больше делать нечего - сервер настраивать?
Тут уж кому что - кому удобнее написать простенький скрипт и грузить его флешкой (у нас постоянно там какой-нибудь файл забывали добавить), а кому проще настроить сервер и не париться с этим на клиенте

mikhailk 11.09.2010 23:46

А я лично отдаю решение вопросов что грузить, что не грузить на усмотрение флэшплеера.

При загрузке приложение скачивает xml-ку с перечнем библиотечных файлов и честно грузит их. Если они уже есть в кэше, они загрузятся сразу, если их там нет (в списке новые версии, пользователь кэш браузера чистил и пр.) - значит загрузятся с сервера. Понятно, что библиотечные файлы должны иметь уникальное собственное имя или уникальное имя каталога, в котором лежат.

И чего-то мне кажется, если файл resource003.swf (а еще пуще - resourceConfig.xml) в браузере закэшировался, то никакие пляски с бубном на стороне сервера ничего не изменят. Пользователи смотрят приложение через такой зоопарк браузеров, что где-нибудь что-нибудь у кого-нибудь закэшируется по-любому.

expl 12.09.2010 00:09

Цитата:

Сообщение от mikhailk (Сообщение 935149)
И чего-то мне кажется, если файл resource003.swf (а еще пуще - resourceConfig.xml) в браузере закэшировался, то никакие пляски с бубном на стороне сервера ничего не изменят. Пользователи смотрят приложение через такой зоопарк браузеров, что где-нибудь что-нибудь у кого-нибудь закэшируется по-любому.

Ну, я бы не называл использование функционала http плясками с бубном (.htaccess всего-навсего поправить)
А по поводу зоопарка бравзеров - чтож, посмотрим, если огребем проблем - сделаем загрузку списка файлов,
но пока надеемся на автоматику - все же на один файл меньше грузить и гемора тоже поменьше. Так что пока обкатываем этот подход.

gloomyBrain 12.09.2010 00:18

@mikhaik
Цитата:

если файл resource003.swf (а еще пуще - resourceConfig.xml) в браузере закэшировался, то никакие пляски с бубном на стороне сервера ничего не изменят.
На сколько я знаю, процесс загрузки происходит примерно так:

0) получаем имя необходимого файла

1) смотрим есть ли файл в кеше - да есть
1.1) если есть - посылаем запрос на сервер с указанием даты, когда закешировали файл
1.2) получаем ответ от сервера - изменился файл или нет с той поры
1.3) если не изменился - грузим из кеша

2) файла нет в кеше или он устарел - грузим заново

И это есть общепринятый алгоритм для всех браузеров. Так что, по идее, если файл есть в кеше - все зависит от сервера

@expl
Цитата:

Тут уж кому что - кому удобнее написать простенький скрипт и грузить его флешкой (у нас постоянно там какой-нибудь файл забывали добавить), а кому проще настроить сервер и не париться с этим на клиенте
Сервер может пойти двумя путями - либо выдавать заголовок last-modified с текущей датой (тогда можно считать, что в кеш ничего не попадает), либо сохранять какой-то конфиг в БД и при каждом запросе отдавать last-modified оттуда.
Первый вариант не подходит в силу своей бесполезности.
Второй - в силу того, что наши серверники любят экономить запросы к БД и бьют меня линейкой за такое предложение =)

Может есть еще какой-то мистический 3-й вариант, но пока, на мой взгляд, он один - грузить конфиги с версиями во флеш, а уже оттуда обращаться с дописыванием версии в конец запроса.

UPD
Да, для Apache 2.1 модуль mod_mem_cashe перестал быть экспериментальным и позволяет хранить в оперативной памяти сервера дату последней модификации файла. Но memCahse? стоит ли оно того в данном случае?

expl 12.09.2010 12:01

Цитата:

Сервер может пойти двумя путями - либо выдавать заголовок last-modified с текущей датой (тогда можно считать, что в кеш ничего не попадает), либо сохранять какой-то конфиг в БД и при каждом запросе отдавать last-modified оттуда.
Первый вариант не подходит в силу своей бесполезности.
Второй - в силу того, что наши серверники любят экономить запросы к БД и бьют меня линейкой за такое предложение =)
Цитата:

Да, для Apache 2.1 модуль mod_mem_cashe перестал быть экспериментальным и позволяет хранить в оперативной памяти сервера дату последней модификации файла. Но memCahse? стоит ли оно того в данном случае?
Даже так...
Надо попытать нашего сервериста на предмет этих граблей

mikhailk 12.09.2010 20:06

Цитата:

Сообщение от gloomyBrain (Сообщение 935158)
@mikhaik

На сколько я знаю, процесс загрузки происходит примерно так:

0) получаем имя необходимого файла

1) смотрим есть ли файл в кеше - да есть
1.1) если есть - посылаем запрос на сервер с указанием даты, когда закешировали файл
1.2) получаем ответ от сервера - изменился файл или нет с той поры
1.3) если не изменился - грузим из кеша

2) файла нет в кеше или он устарел - грузим заново

И это есть общепринятый алгоритм для всех браузеров. Так что, по идее, если файл есть в кеше - все зависит от сервера

Не буду спорить.

Я как раз сейчас последний проект работал в команде, где второй AS3-программист исходил именно из этого. По каждому уровню у него грузилось несколько файлов - и xml-ки и картинки и swf-ки и 3ds-модельки... Уровней более 10, т.е всего около сотни файлов. Когда уже приложение было собрано и начали активно дорабатывать и заменять уровни, влетели в проблему с кэшированием по полной. :)

etc 13.09.2010 11:54

А у нас был xml-файлик с timestamp-ами всех файлов. Загрузка файликов производилась по ссылке file.ext?12345678. xml-файлик при это обновлялся после обновления файла. В результате старые файлы не загружались по новой, а новые — из кеша.

mikhailk 13.09.2010 12:50

а что происходило, если пользователь у себя кэш почистил ручками?
или там для старых было без "?12345678" ?

etc 13.09.2010 13:38

Цитата:

Сообщение от mikhailk (Сообщение 935434)
а что происходило, если пользователь у себя кэш почистил ручками?
или там для старых было без "?12345678" ?

Если он почистил кеш, то он будет грузить все заново в любом случае.

Для всех файлов был указан timestamp.


Часовой пояс GMT +4, время: 22:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.