완료!
여기에서 동일한 작업을 수행하려는 사람은이를 수행하는 방법에 대한 간단한 개요를 제공합니다. 이 솔루션을 직접 변경하거나 조정해야 할 수도 있습니다.
캐시 키를 사용하는 경우에만 작동합니다. 내 경우에는 2 가지 유형이 있습니다. A contact.hash_key
및 message.hash_key
모든 메시지 캐시는 부모 연락처 캐시 내에 보관됩니다. 그래서 본질적으로 :
<div id='contact-hash'>
<div id='message-hash-1'>
<div id='message-hash-2'>
<div id='message-hash-3'>
우선 우리는 메시지를 순환하여 캐시되어 있는지 확인해야합니다. 그들이 있다면 당신은 단지 캐시 된 사본을 렌더링 할 수 있습니다. 당신은 Rails.cache.read
방법을 사용하여이 작업을 수행 할 수 있습니다
messages.each do |message|
cache = Rails.cache.read 'views/'+message.hash_key
if cache.nil? == false
%><%= cache.html_safe %><%
end
end
그래서 지금 우리는 캐시 그게 전부의 메시지 목록이 이미로드되어 있습니다. 그렇다면 새로운 메시지는 어떻습니까? 사용자가 지루한 페이지로드를 기다리지 않도록하기 위해 ajax를 통해 이들을로드 할 수 있습니다.
내 AJAX 호출에서 "/messages?cid=<%[email protected]_key%>"
을 쿼리하는 위의 질문에서 알 수 있습니다. 이것은 messages controller
을 호출하고 index view
을 렌더링합니다.
렌더링 된 뷰를 DOM에로드하기 전에 우리는 먼저 DOM에 캐시를 쓰고 싶습니다. 놀랍게도, 우리가 읽는 데 사용하는 동일한 message.hash_key입니다. 그래서보기에
: 어떤 상황에서 문제가 해결되지 않으면
<%
cache(message[:hash_key]) do
%>
<div class='message'>
This is a new message from the server.
</div>
<%
end
%>
는 또한 그것을 캐싱 대신 컨트롤러에 Rails.cache.write 'foo', 'bar'
을 사용할 수 있습니다 (신 밖에 프로그래머 많은 응용 프로그램 순열을 알고있다) 보기 수준.
그리고 거기 있습니다. 이제 새 hash_key를 목록에 추가 한 다음 AJAX 호출의 결과로 DOM에 다시 뷰를 렌더링 할 수 있습니다.
이제 목록의 새로운 hash_key를 사용하여 반복 할 수 있으며 캐시 된 사본으로 나타납니다.
이것은 가장 훌륭한 해결책 일 수도 있고 그렇지 않을 수도 있습니다. 누군가가 그것을 간소화하거나 그것에 대한 조언을 해주기를 원한다면 그것을 향상시킬 수 있으면 좋을 것입니다.