Почему настройка 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 минут.

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

2 ответа

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

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

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

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

Хотя, как говорится в документации:

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

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

Другие вопросы по тегам