Возможно ли установить время жизни кэша(dojo-приложения) браузера средствами dojo?

140 views
Skip to first unread message

Ильдар Гильфанов

unread,
Mar 4, 2011, 7:31:22 AM3/4/11
to RU DojoToolkit JS Framework
слыхал есть вариант установки непосредственно через серверное
приложение, пока не разбирался.

Спасибо.

Алексей Александров

unread,
Mar 4, 2011, 7:35:13 AM3/4/11
to ru-dojo-js...@googlegroups.com
Видимо вы имеете ввиду заголовок Cache-Control?

4 марта 2011 г. 15:31 пользователь Ильдар Гильфанов <igil...@gmail.com> написал:
слыхал есть вариант установки непосредственно через серверное
приложение, пока не разбирался.

Спасибо.

--
Вы получили это сообщение, поскольку подписаны на группу RU DojoToolkit JS Framework.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу ru-dojo-js...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу ru-dojo-js-frame...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/ru-dojo-js-framework?hl=ru.




--
Alexey Aleksandrov

Ильдар Гильфанов

unread,
Mar 4, 2011, 9:06:06 AM3/4/11
to RU DojoToolkit JS Framework
при установки в Cache-Control: no-cache - не может быть кэширован, то
что мне и нужно.
но походу вариант ненадежный http://www.sql.ru/forum/actualthread.aspx?tid=735770
надо поэкспериментировать на различных браузерах...

Спасибо.

Ильдар Гильфанов

unread,
Mar 4, 2011, 9:08:55 AM3/4/11
to RU DojoToolkit JS Framework
можно указать в HTML <meta http-equiv="Cache-Control" content="no-
cache"/>

http://www.xiper.net/manuals/html/meta-tags/http-equiv/cache-control.html

Eugene Lazutkin

unread,
Mar 5, 2011, 1:52:21 PM3/5/11
to RU DojoToolkit JS Framework
Ещё помогает заголовок Expires установленный в "прошлое". Обычно его
устанавливают вместе с Cache-Control: no-cache --- это связано с тем
что разные proxy могут иметь разные ошибки в коде и спаривание
помогает добиться консистентности.

On Mar 4, 6:35 am, Алексей Александров <alexeyaleksand...@gmail.com>
wrote:


> Видимо вы имеете ввиду заголовок Cache-Control?
>
> 4 марта 2011 г. 15:31 пользователь Ильдар Гильфанов

> <igilfa...@gmail.com>написал:

Georgy Turevich

unread,
Mar 6, 2011, 4:51:01 AM3/6/11
to ru-dojo-js...@googlegroups.com
А что если вручную поиграться значением djConfig.cacheBust ?
Раз в какое то время сервер будет обновлять значение этой переменной - тогда исходные файлы будут грузиться заново.

--

5 марта 2011 г. 21:52 пользователь Eugene Lazutkin <eugene....@gmail.com> написал:



--
Георгий, +7 921 384 81 25

Ильдар Гильфанов

unread,
Mar 16, 2011, 6:28:17 AM3/16/11
to RU DojoToolkit JS Framework
свойство cacheBust конфигуратора djConfig в версии 1.6.0 не
поддерживается http://dojotoolkit.org/api/1.6/djConfig

Georgy Turevich

unread,
Mar 16, 2011, 8:01:27 AM3/16/11
to ru-dojo-js...@googlegroups.com
А что это за ссылка?
Вы уверены, что она отображает актуальную информацию?


Если глянуть в код загрузчика - http://download.dojotoolkit.org/release-1.6.0/dojo-release-1.6.0/dojo/_base/_loader/hostenv_browser.js (242-246 строки)

То можно увидеть, что там все еще используется cacheBust.

--

16 марта 2011 г. 13:28 пользователь Ильдар Гильфанов <igil...@gmail.com> написал:

свойство cacheBust конфигуратора djConfig в версии 1.6.0 не
поддерживается http://dojotoolkit.org/api/1.6/djConfig


Ильдар Гильфанов

unread,
Mar 16, 2011, 11:25:10 AM3/16/11
to RU DojoToolkit JS Framework
Спасибо.

Из топика http://javascript.ru/forum/misc/12324-kehshirovanie-javascript.html

сделал следующее:
<script type="text/javascript" src="dojo/dojo.js?x=1"
djConfig="parseOnLoad:true, isDebug:false, cacheBust:x=1"></script>


Ильдар Гильфанов

unread,
Mar 16, 2011, 6:17:36 AM3/16/11
to RU DojoToolkit JS Framework
Вот хорошая статья http://nkoksharov.blogspot.com/2008/10/html.html,
интересно распространяется ли данный вариант на файлы JavaScript.

Ильдар Гильфанов

unread,
Mar 25, 2011, 4:27:58 AM3/25/11
to RU DojoToolkit JS Framework
пытаюсь на лету (уже в загруженной странице) настроить конфигуратор
так чтобы файлы грузились заново:

dojo.config.cacheBust = Math.random();

dojo.require("app.Application", false);

файл заново не грузиться :-(

может нужно вызвать дополнительную функцию для обновления применяемых
настроек? если есть то какую?

Спасибо.

Georgy Turevich

unread,
Mar 25, 2011, 4:41:11 AM3/25/11
to ru-dojo-js...@googlegroups.com
Ильдар,

Ваш компонент заново не грузится, потому что он помечен как загруженный. Покопайтесь внутри функции require, и посмотрите в каких случаях она делает запрос на сервер для получения содержания компонента.

Но вот лично мне - непонятно для чего это нужно?
Если вы нам объясните реальную причину, мы вам поможем по другому организовать вашу систему.

--

25 марта 2011 г. 11:27 пользователь Ильдар Гильфанов <igil...@gmail.com> написал:
--
Вы получили это сообщение, поскольку подписаны на группу RU DojoToolkit JS Framework.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу ru-dojo-js...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу ru-dojo-js-frame...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/ru-dojo-js-framework?hl=ru.

Ильдар Гильфанов

unread,
Mar 25, 2011, 6:00:19 AM3/25/11
to RU DojoToolkit JS Framework
Я разрабатываю корпоративное приложение (т.е. не сайт). В начале
разработки клиентскую часть разбил на 2 странички login.html и
application.html, в обоих страницах используется dojo и+ свои
написанные компоненты(используя dojo). Проблема в том что с данным
приложением будет работать контингент пользователей у которых "слабое"
интернет-соединение. Представьте себе: после успешной авторизации на
страничке login.html, приложение перенаправляет на страничку
application.html, вот тут все файлы которые уже были использованы
грузятся заново, а это время. Сделав приложение одностраничной,
процесс загрузки файлов и в целом архитектура приложения стали более
привлекательными. Например: чтобы выйти из системы, достаточно
отобразить блок (контейнер <div id="login">), вместо того чтобы
перенаправить на страничку login.html и соотв. грузить все заново (а
это около 456 Кб). Но хотелось бы чтобы после успешной авторизации
заново грузились только свои файлы(виджеты), так как они периодически
обновляются. Не всякий пользователь догадается нажать на волшебную
кнопку(браузера) "Обновить".

Спасибо.

Georgy Turevich

unread,
Mar 25, 2011, 6:44:42 AM3/25/11
to ru-dojo-js...@googlegroups.com
Все равно непонятно - зачем вам заново грузить компоненты.
Это же код - написал - залил на сервер, и он там лежит не изменяясь.

> так как они периодически обновляются

Периодически это как?
Они генерируются на серверной стороне?
Зачем?

--


25 марта 2011 г. 13:00 пользователь Ильдар Гильфанов <igil...@gmail.com> написал:

Спасибо.

--
Вы получили это сообщение, поскольку подписаны на группу RU DojoToolkit JS Framework.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу ru-dojo-js...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу ru-dojo-js-frame...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/ru-dojo-js-framework?hl=ru.

Ильдар Гильфанов

unread,
Mar 25, 2011, 7:23:45 AM3/25/11
to RU DojoToolkit JS Framework
Предметная область предполагает периодические поправки в алгоритмы и
прочее,
например появилось новое поле,
для этого поля нужно реализовать различные манипуляции, а это
изменение в компонентах.
Не всегда бывает идеально в отношении правильности поставленной
задачи.
Поэтому приходиться прибегать к экстремальному программированию.
Я понимаю Вас что это как-то странно, но система должна в этом случае
быть гибкой.
То что файл (js) лежит на сервере, это не означает что у клиента он
всегда будет в последней версии,
это объясняется наличием у браузера кеша.
Периодически это по-разному. Например: в течение дня, в течение 3
часов.
Причем психология у большинства пользователей закрепилась в отношении
того, что если в приложение обновилось,
то надо выйти из системы и снова войти - это издержки desktop-
приложений.
На сервере ничего не генерируется, файлы статичные js и html.

Ильдар Гильфанов

unread,
Mar 25, 2011, 7:27:57 AM3/25/11
to RU DojoToolkit JS Framework
Георгий вы написали хотя бы одно web-приложение корпоративного
масштаба используя JavaScript?

Спасибо.

Georgy Turevich

unread,
Mar 25, 2011, 8:08:55 AM3/25/11
to ru-dojo-js...@googlegroups.com
Писал. И асинхронные методики использовал, когда слова AJAX еще не было придумано.
И desktop-like приложения (аля gmail), когда dojo был 1.1 версии.

Эта задача решается просто, причем несколькими путями. К примеру, во время очередной загрузки на production - ваш deployment-система создает файлик с датой деплоймента. JS-скрипты раз в интервал (1/5/20 минут) проверяют этот файл. Если дата изменилась, то просят пользователя перегрузить интерфейс, или сами принудительно его перегружают при очередном действии пользователя.

Плюс первоначальная ваша задача - по инвалидации кэша dojo-приложения - тоже решается просто. Для этого нужны модуль нужно удалить из переменной dojo._loadedModules. Поисследуйте функцию dojo.require ( http://download.dojotoolkit.org/release-1.6.0/dojo-release-1.6.0/dojo/_base/_loader/loader.js ), как я вам советовал ранее.

--

25 марта 2011 г. 14:27 пользователь Ильдар Гильфанов <igil...@gmail.com> написал:
Георгий вы написали хотя бы одно web-приложение корпоративного
масштаба используя JavaScript?

Спасибо.

--
Вы получили это сообщение, поскольку подписаны на группу RU DojoToolkit JS Framework.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу ru-dojo-js...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу ru-dojo-js-frame...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/ru-dojo-js-framework?hl=ru.

Ильдар Гильфанов

unread,
Mar 25, 2011, 8:19:19 AM3/25/11
to RU DojoToolkit JS Framework
Здорово, низкий поклон создателям dojo
Reply all
Reply to author
Forward
0 new messages