2017-02-16 8 views
2

Я разрабатываю приложение ColdBox с модулями и хотел использовать его функции кеширования для кэширования представления в течение некоторого времени.Почему параметр cacheTimeout для renderView() в приложении 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 минут.

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

+0

Как вы подтверждаете время, в течение которого кэшируется представление? –

+0

Поскольку этот вопрос перекрестно размещен в команде CFML slack, я ответил вам (я не могу воспроизвести). Как только мы выясним, в чем проблема, мы можем вернуться и обновить ответ здесь, так как SO действительно подходит для повторного и четвертого вопросов Q & A. –

ответ

1

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

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

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

+0

Нет, 'viewCaching = true' не изменит это, к сожалению. Сначала у меня была конфигурация в '/ config/Cachebox.cfc', а затем была перенесена в целях тестирования в'/config/Coldbox.cfc'. Представление всегда кэшируется в течение 5 минут. Я обновил свой вопрос с этой информацией. –

0

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

Хотя, как documentation states:

Задержка в минутах, чтобы произвести кэш пожинать (не гарантировано)

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

Смежные вопросы