我想在页脚中创建copyright (c) 2014
通知。
但我希望它能在所有年/月/天内循环,而不必改变它。
我有一个_footer.html.erb
部分我正在这样做。
明显简单的答案就是说<%= Time.now.year %>
。
这意味着每次加载视图时,都必须在最后执行Ruby调用。考虑到这将出现在网站的每个页面上,并且必须为每个负载进行Ruby调用,这看起来有点贵。
是否有更轻量级/简化的方式,可以缓存值并从缓存中显示?
答案 0 :(得分:8)
在表演方面,你不相信自己的直觉,衡量它是明智之举。
以下示例将计算Time.now.year
所花费的时间与从Redis或Memcached中提取值所花费的时间进行比较:
require 'redis'
R = Redis.new
R.set('year', Time.now.year)
require 'memcached'
M = Memcached.new
M.set('year', Time.now.year)
require 'fruity'
compare(
compute: -> { Time.now.year },
redis: -> { R.get('year').to_i },
memcache: -> { M.get('year') }
)
输出:
Running each test 256 times. Test will take about 2 seconds.
compute is faster than memcache by 11x ± 1.0
memcache is faster than redis by 3x ± 0.1
也就是说,只需致电Time.now.year
,就不值得寻找替代方案。
答案 1 :(得分:3)
<%= cache 'time_of_year', expires_in: 1.day do %>
<%= Time.now.year %>
<%= end %>
在这里阅读更多内容。 http://guides.rubyonrails.org/caching_with_rails.html
国际海事组织,我认为这不会让它变得更快,甚至可能更慢。
答案 2 :(得分:3)
我很确定在每次请求时重新计算Time.now.year
都会更快。
从缓存中获取该值将导致从磁盘加载文件或通过套接字加载到服务(如memcached)。对我而言,这听起来比进行这个简单的Time.now.year
计算更加昂贵。
答案 3 :(得分:2)
我不会为此担心,但如果你必须对其进行优化,你可以在ApplicationHelper
中找到类似的东西:
def current_year
@year ||= Time.now.year
end
并在您的观看中使用current_year
。
您还可以使用简单的caching来完全避免通话。
就我个人而言,我发现这两种方法都是一种过度杀伤,从而没有充分的理由而忽略了可读性/可维护性:)
答案 4 :(得分:1)
var currentyear = new Date().getFullYear();
$(".element").html(currentyear);
或者更好的方法是使用@iceman
建议的内容(缓存)