модуль AbstractController::Caching::Fragments
Кэширование фрагментов используется для кэширования различных блоков в представлениях без кэширования всего действия в целом. Это полезно, когда определенные элементы действия часто изменяются или зависят от сложного состояния, в то время как другие части редко изменяются или могут быть объединены несколькими участниками. Кэширование выполняется с помощью помощника cache в представлении действия. См. ActionView::Helpers::CacheHelper для получения дополнительной информации.
Хотя настоятельно рекомендуется использовать кэширование с истечением срока действия на основе ключей (см. ссылки в CacheHelper для получения дополнительной информации), также можно вручную истекать кэши. Например:
expire_fragment('name_of_cache')
Общедоступные методы экземпляра
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 68
def combined_fragment_cache_key(key)
head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
tail = key.is_a?(Hash) ? url_for(key).split("://").last : key
cache_key = [:views, ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"], head, tail]
cache_key.flatten!(1)
cache_key.compact!
cache_key
end Учитывая ключ (как описано в expire_fragment), возвращает массив ключей, подходящий для чтения, записи или истечения срока действия кэшированного фрагмента. Все ключи начинаются с :views, за которыми следуют ENV["RAILS_CACHE_ID"] или ENV["RAILS_APP_VERSION"] при необходимости, затем любые значения префикса ключа контроллера, заканчивающиеся указанным значением key.
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 132
def expire_fragment(key, options = nil)
return unless cache_configured?
key = combined_fragment_cache_key(key) unless key.is_a?(Regexp)
instrument_fragment_cache :expire_fragment, key do
if key.is_a?(Regexp)
cache_store.delete_matched(key, options)
else
cache_store.delete(key, options)
end
end
end Удаляет фрагменты из кэша.
key может принимать одну из трех форм:
-
String- Обычно это путь, напримерpages/45/notes. -
Hash- Обрабатывается как неявный вызовurl_for, например{ controller: 'pages', action: 'notes', id: 45} -
Regexp- Удалить любой фрагмент, соответствующий шаблону, поэтому%r{pages/\d*/notes}может удалить все заметки. Убедитесь, что в регулярном выражении не используются якоря (^или$), так как фактическое имя файла, соответствующее шаблону, выглядит так:./cache/filename/path.cache. Примечание: истечение срока действияRegexpподдерживается только в кэшах, которые могут перебирать все ключи (в отличие от memcached).
options передается в метод delete хранилища кэша (или delete_matched, для Regexp ключей).
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 105
def fragment_exist?(key, options = nil)
return unless cache_configured?
key = combined_fragment_cache_key(key)
instrument_fragment_cache :exist_fragment?, key do
cache_store.exist?(key, options)
end
end Проверяет, существует ли кэшированный фрагмент из местоположения, указанного key, (см. expire_fragment для допустимых форматов).
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 93
def read_fragment(key, options = nil)
return unless cache_configured?
key = combined_fragment_cache_key(key)
instrument_fragment_cache :read_fragment, key do
result = cache_store.read(key, options)
result.respond_to?(:html_safe) ? result.html_safe : result
end
end Считывает кэшированный фрагмент из местоположения, указанного key, (см. expire_fragment для допустимых форматов).
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 80
def write_fragment(key, content, options = nil)
return content unless cache_configured?
key = combined_fragment_cache_key(key)
instrument_fragment_cache :write_fragment, key do
content = content.to_str
cache_store.write(key, content, options)
end
content
end Записывает content в местоположение, указанное key, (см. expire_fragment для допустимых форматов).
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.