Игнорирование некоторых атрибутов при кэшировании - PullRequest
0 голосов
/ 13 октября 2019

В приложении на Rails 6 я добавляю некоторое кэширование в список пользователей.

В настоящее время мой код выглядит как

# users/index.html.erb

<table>
  <tbody>
    <%= render @users %>
  </tbody>
</table> 

# users/_user.html.erb

<% cache(user)do %>
<tr>
  <td>
    <%= user.name %>
   </td>
   <td>
     <%= user.status %>
   </td>
</tr>

Кэширование работает, но фрагменты недействительнывсякий раз, когда атрибут updated_at изменяется.

Однако, чтобы оптимизировать его, я бы хотел сделать его недействительным только при изменении одного из отображаемых атрибутов. Например, я не хочу новый фрагмент, когда пользователь обновляет свой собственный пароль.

Каков предпочтительный способ достижения этого? Код ниже, кажется, работает, но я хотел бы убедиться, что он не имеет откатов.

<% cache [user.name, user.status] do %>

Является ли это предпочтительным способом также при включении в ключ нескольких атрибутов? Т.е.

   <% cache [user.name, user.status, user.email, user.role, user.whatever] do %>

Более того, допустим, я хочу кэшировать всю таблицу. Какой ключ я должен использовать? @users на самом деле не работает.

1 Ответ

0 голосов
/ 13 октября 2019

Вы можете добавить cached: true при рендеринге коллекции @users https://guides.rubyonrails.org/caching_with_rails.html#collection-caching

Я не вижу смысла в оптимизации кеша отдельного пользователя на этом уровне оптимизации (как частопользователь изменяет свой пароль или другой не важный атрибут?). Я не думаю, что отсутствие такой оптимизации реально повлияет на вашу производительность. Вы это тестировали или просто хотите это сделать? Не надейтесь на вещи, если вам не нужно, я готов поспорить, что есть вещи лучше оптимизировать с большим эффектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...