Почему настройка cacheTimeout для renderView() в приложении ColdBox не действует?

Я разрабатываю приложение ColdBox с модулями и хотел использовать его функции кэширования для кэширования представления в течение некоторого времени.

component{
  property name="moduleConfig" inject="coldbox:moduleConfig:mymodule";

  ...

  function widget(event, rc, prc){
    var viewData = this.getData();

    return renderView(
      view = "main/widget",
      args = viewData,
      cache = true,
      cacheSuffix = ":" & moduleConfig.entryPoint,
      cacheTimeout = 2
    );
  }
}

Я попытался установить конфигурацию кэширования по умолчанию, добавив следующую информацию в свой Cachebox.cfc и удалив cacheTimeout из приведенного выше кода:

cacheBox = {
  defaultCache = {
    objectDefaultTimeout = 1, //two hours default
    objectDefaultLastAccessTimeout = 1, //30 minutes idle time
    useLastAccessTimeouts = false,
    reapFrequency = 5,
    freeMemoryPercentageThreshold = 0,
    evictionPolicy = "LRU",
    evictCount = 1,
    maxObjects = 300,
    objectStore = "ConcurrentStore", //guaranteed objects
    coldboxEnabled = false
  },

  caches = {
    // Named cache for all coldbox event and view template caching
    template = {
      provider = "coldbox.system.cache.providers.CacheBoxColdBoxProvider",
      properties = {
        objectDefaultTimeout = 1,
        objectDefaultLastAccessTimeout = 1,
        useLastAccessTimeouts = false,
        reapFrequency = 5,
        freeMemoryPercentageThreshold = 0,
        evictionPolicy = "LRU",
        evictCount = 2,
        maxObjects = 300,
        objectStore = "ConcurrentSoftReferenceStore" //memory sensitive
      }
    }
  }
};

Хотя на кеширование это никак не повлияло. Я также попытался добавить указанную выше конфигурацию в свой Coldbox.cfc.

Даже если я создам совершенно новое тестовое приложение через CommandBox через coldbox create app MyApp, а затем только установлю кэширование в Cachebox.cfc на одну минуту, установлю viewCaching = true в Coldbox.cfc и установлю event.setView( view="main/index", cache=true ) в Main.cfc, оно не работает как ожидал.

Что бы я ни делал, представление всегда сохраняется в кэше не менее 5 минут.

Есть ли что-то, что мне не хватает?


person Sebastian Zartner    schedule 16.02.2017    source источник
comment
Как вы подтверждаете количество времени, в течение которого представление кэшируется?   -  person Brad Wood    schedule 16.02.2017
comment
Поскольку этот вопрос опубликован в команде CFML slack, я ответил вам там (не могу воспроизвести). Как только мы выясним, в чем заключается ваша проблема, мы можем вернуться и обновить ответ здесь, поскольку SO действительно подходит для обмена вопросами и ответами.   -  person Brad Wood    schedule 17.02.2017


Ответы (2)


Убедитесь, что вы включили кэширование представлений в конфигурации ColdBox. Перейдите в файл /config/ColdBox.cfc и добавьте этот ключ:

coldbox = {
  // Activate view caching
  viewCaching = true
}

Кроме того, вы опечатались в имени CFC, которое вы изменили для кэширования выше? Эти изменения должны быть в файле /config/CacheBox.cfc, а не в файле /config/ColdBox.cfc.

person Evagoras Charalambous    schedule 16.02.2017
comment
Нет, viewCaching = true этого не меняет, к сожалению. Изначально у меня был конфиг в /config/Cachebox.cfc, затем я переместил его для проверки в /config/Coldbox.cfc. Представление всегда кэшируется на 5 минут. Я обновил свой вопрос с этой информацией. - person Sebastian Zartner; 16.02.2017

Очевидно, что также reapFrequency в /config/ColdBox.cfc необходимо установить на меньшее значение, чтобы запись кэша могла быть удалена раньше.

Однако, как указано в в документации:

Задержка в минутах для получения кеша (Не гарантируется)

Не гарантируется, что кешированный элемент действительно будет удален после этого времени, поэтому может случиться так, что кеш станет пустым через 3 минуты, даже если reapFrequency установлено на 1.

person Sebastian Zartner    schedule 20.02.2017