我相信可以对我的大部分网站进行页面缓存,但有一件事情阻挡了我,那就是我的闪现消息会不显示或者在错误的时候显示。
我正在考虑的一个解决方法是将闪现消息写入 cookie,在通过 JavaScript 读取和显示它,并在消息被显示后清除 cookie。
有没有人尝试过这样做并获得成功,或者有更好的方法?
谢谢。
我相信可以对我的大部分网站进行页面缓存,但有一件事情阻挡了我,那就是我的闪现消息会不显示或者在错误的时候显示。
我正在考虑的一个解决方法是将闪现消息写入 cookie,在通过 JavaScript 读取和显示它,并在消息被显示后清除 cookie。
有没有人尝试过这样做并获得成功,或者有更好的方法?
谢谢。
after_filter :write_flash_to_cookie
def write_flash_to_cookie
cookie_flash = cookies['flash'] ? JSON.parse(cookies['flash']) : {}
flash.each do |key, value|
if cookie_flash[key.to_s].blank?
cookie_flash[key.to_s] = value
else
cookie_flash[key.to_s] << "<br/>#{value}"
end
end
cookies['flash'] = cookie_flash.to_json
flash.clear
end
您不必缓存整个页面。尝试片段缓存API
不显眼的Flash 把Flash消息放入cookie中,然后通过JavaScript显示它。它提供了原始和Bootstrap风格的JS显示逻辑。它能够在正常请求和ajax请求中工作。它也很容易与AngularJS等框架连接。
这是一个老问题...但我通过将闪存消息包含在我的缓存键中来解决了它。
caches_action :show, cache_path: proc { |c|
most_recent_update_time = MyClass.order('updated_at DESC').limit(1).first.try(:updated_at).to_i
{ tag: most_recent_update_time.to_s + c.flash.collect{|x| x}.join }
}
我不使用Rails,但这是我在Python中使用UUID的方法:
# set flash messages like this
def flash(self, title, body):
session['flash_messages'].append({
'title': title,
'body': body,
'uuid': uuid().hex # stores a UUID as a string
})
...
self.flash('foo', 'bar')
然后在基础模板中我有这个:
<script type="text/javascript"></script>
我来为那些 Python 编程有困难的人们解释一下:
现在,如果这个页面从缓存中拉出来,它就没问题了。在第二步,对于 cookie 的测试将通过,因为它已经被设置了,而且信息也不会被显示。