Spec-Zone.ru › Ruby on Rails 5.2

модуль AbstractController::Caching::Fragments

Кэширование фрагментов используется для кэширования различных блоков внутри представлений без кэширования всего действия целиком. Это полезно, когда определённые элементы действия часто изменяются или зависят от сложного состояния, в то время как другие части редко изменяются или могут быть разделены между несколькими сторонами. Кэширование выполняется с помощью помощника cache , доступного в Action View. Дополнительную информацию см. в ActionView::Helpers::CacheHelper.

Хотя настоятельно рекомендуется использовать кэширование с истечением срока действия на основе ключей (см. ссылки в CacheHelper для получения дополнительной информации), также возможно вручную истекать кэши. Например:

expire_fragment('name_of_cache')

Открытые методы экземпляров

combined_fragment_cache_key(key) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 88
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
  [ :views, (ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"]), *head, *tail ].compact
end

Принимая во внимание ключ (как описано в expire_fragment), возвращает массив ключей, подходящий для чтения, записи или истечения срока действия кэшированного фрагмента. Все ключи начинаются с :views, за которыми следуют ENV или ENV , если установлены, за которыми следуют любые значения префиксов ключей, относящихся ко всему контроллеру, заканчивающиеся указанным значением key.

expire_fragment(key, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 148
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 может принимать одну из трёх форм:

  • Строка - обычно имеет вид пути, например, pages/45/notes.

  • Хэш - обрабатывается как неявный вызов url_for, например, { controller: 'pages', action: 'notes', id: 45}

  • Регулярное выражение - удалит любой фрагмент, который соответствует, поэтому %r{pages/\d*/notes} может удалить все заметки. Убедитесь, что вы не используете якоря в регулярном выражении (^ или $), потому что фактическое имя файла, соответствующее шаблону, выглядит как ./cache/filename/path.cache. Примечание: истечение срока действия регулярных выражений поддерживается только в кэшах, которые могут итерировать по всем ключам (в отличие от memcached).

options передаётся методу кэша delete (или delete_matched, для ключей-регулярных выражений).

fragment_cache_key(key) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 69
      def fragment_cache_key(key)
        ActiveSupport::Deprecation.warn(<<-MSG.squish)
          Calling fragment_cache_key directly is deprecated and will be removed in Rails 6.0.
          All fragment accessors now use the combined_fragment_cache_key method that retains the key as an array,
          such that the caching stores can interrogate the parts for cache versions used in
          recyclable cache keys.
        MSG

        head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
        tail = key.is_a?(Hash) ? url_for(key).split("://").last : key
        ActiveSupport::Cache.expand_cache_key([*head, *tail], :views)
      end

Принимая во внимание ключ (как описано в expire_fragment), возвращает ключ, подходящий для чтения, записи или истечения срока действия кэшированного фрагмента. Все ключи начинаются с views/, за которыми следуют любые значения префиксов ключей, относящихся ко всему контроллеру, заканчивающиеся указанным значением key. Ключ расширяется с помощью ActiveSupport::Cache.expand_cache_key.

fragment_exist?(key, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 121
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 для допустимых форматов).

read_fragment(key, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 109
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 для допустимых форматов).

write_fragment(key, content, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 96
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–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API