什么是在我的页脚中显示当前年份的最轻量级方法?

时间:2014-05-07 09:27:22

标签: css ruby-on-rails ruby ruby-on-rails-4

我想在页脚中创建copyright (c) 2014通知。

但我希望它能在所有年/月/天内循环,而不必改变它。

我有一个_footer.html.erb部分我正在这样做。

明显简单的答案就是说<%= Time.now.year %>

这意味着每次加载视图时,都必须在最后执行Ruby调用。考虑到这将出现在网站的每个页面上,并且必须为每个负载进行Ruby调用,这看起来有点贵。

是否有更轻量级/简化的方式,可以缓存值并从缓存中显示?

5 个答案:

答案 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)

You could use Javascript,如下:

 var currentyear = new Date().getFullYear();
 $(".element").html(currentyear);

或者更好的方法是使用@iceman建议的内容(缓存)