2015-06-23 3 views
1

Я работаю с ExtJS 4.x и Sencha Architect 2.2, но это должно иметь отношение к более поздним версиям и любому приложению, которое использует класс Ext.Loader для динамической загрузки скриптов, в том числе Sencha Touch.Отключить кэширование загрузчика сценария Sencha, но только при разработке/отладке

По умолчанию Ext.Loader добавляет ? _dc = ... кэша перебора параметров, чтобы убедиться, что последняя версия каждого сценария загружается в браузер. При развертывании в производственной или бета-тестовой среде это хорошо, так как это гарантирует, что пользователь/тестер получает последний скрипт каждый раз при развертывании и обновлении, но для среды разработки это не обязательно, потому что разработчики знают, как использовать методы браузера например ctrl + F5, чтобы перезагрузить все скрипты. Более того, при перегрузке приложения в браузере теряется возможность отладки кэша, поскольку точки останова теряются и т. Д.

Ошибка кэширования отключена установкой disableCaching на false в конфигурации Ext.Loader. Например:

Ext.Loader.setConfig({ 
    enabled: true, 
    disableCaching: false 
}); 

В этом фрагменте динамическая нагрузка включена и очистка кеша отключена. Однако существуют другие параметры конфигурации, описанные в документах API here.

В Sencha Architect этот код создан для вас в app.js, и вы не можете отредактировать его. У архитектора есть «настройка проекта», чтобы включить кеширование, но в версии 2.2 он не работает для ExtJS 4. Я предполагаю, что он работает отлично в более поздних версиях, но кажется, что это все или ничего, поэтому вы должны помнить о его отключении и перестроить для развертывания в среде, отличной от dev.

То, что я хочу, чтобы иметь возможность:

  1. Обход параметры по ошибке в версии 2.2 Architect
  2. Включить очистку кэша в «производстве», но не в разработчика без восстановить мое приложение

ответ

1

Ext.Loader.setConfig() можно назвать несколько раз с различными настройками, и настройки объединяются вместе. Для меня это было неясно в documentation, но, к счастью, это было более очевидно в source code.

Исходный код также показывает, что существует недокументированная форма setConfig, где он принимает Name и значение вместо объекта конфигурации, но, как это незарегистрированный я буду придерживаться переходящей в объекте, как это:

Ext.Loader.setConfig({disableCaching: false}); 

Зная, что это не повлияет на другие Ext.Loader конфиги, которые установлены в другом месте в вашем приложении вы можете поместить этот код везде после Ext загружен, но до Ext.onReady() называется. В Sencha Architect это может быть достигнуто путем помещения его в «JS Resource», как описано here.

Это решает первую часть моего вопроса, но я также хочу, чтобы иметь возможность включить кэш перебора покинуть без восстановления, поэтому я изменил код, чтобы проверить для «отладки» параметра URL, как это:

if (Ext.Object.fromQueryString(document.location.search).debug) { 
    Ext.Loader.setConfig({disableCaching: false}); 
} 

Теперь, когда я хочу, чтобы отладить мое приложение я могу использовать URL, который выглядит как:

http://myhost/.../app.html?debug=true 

и перебор кэш выключен. Я просто опускаю параметр debug, чтобы он снова включался.

1

Если вы используете Сенч команду вы можете обернуть строку, чтобы отключить кэш перебора в отладочном блоке, где-то в начале вашего app.js

// <debug> 
Ext.Loader.setConfig({disableCaching: true}); 
// </debug> 

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

+0

Хорошая идея @ cpastore84. Однако иногда бывает удобно использовать режим отладки в производстве. –