【问题标题】:What is the most lightweight way to show the current year in my footer?在我的页脚中显示当前年份的最轻量级方式是什么?
【发布时间】:2014-06-24 04:47:32
【问题描述】:

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

但我希望它在所有年/月/日中循环,而无需我进行更改。

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

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

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

有没有更轻量级/流线型的方式,也许可以缓存值并从缓存中显示?

【问题讨论】:

  • 你可以片段缓存页脚
  • 从缓存中检索一个值似乎比调用Time.now.year更昂贵
  • 版权的目的是写副本的年份,所以应该是静态的,如 2014 年。不是吗?
  • @Stefan 是这样吗?我将如何测试它?
  • @Yule 这是一个有趣的观点。

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


【解决方案1】:

当涉及到表演时,你不应该相信你的直觉,衡量是更明智的。

以下示例将计算 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,不值得寻找替代方案。

【讨论】:

【解决方案2】:

我很确定在每次请求时重新计算 Time.now.year 会更快。

从缓存中获取该值将导致从磁盘加载文件或通过套接字连接到 memcached 等服务。这听起来比做这个简单的Time.now.year 计算要贵得多。

【讨论】:

    【解决方案3】:
    <%= cache 'time_of_year', expires_in: 1.day do %>
        <%= Time.now.year %>
    <%= end %>
    

    在这里阅读更多。 http://guides.rubyonrails.org/caching_with_rails.html

    IMO,我认为这不会让它变得更快,甚至可能会更慢。

    【讨论】:

    • 谢谢。我现在只使用香草Time.now.year...但是如果我需要像这样的片段缓存,我会回到这个答案。非常感谢!
    • @marcamillion 请考虑将其标记为答案。
    【解决方案4】:

    我不会为此担心太多,但如果您必须优化它,您的ApplicationHelper 中可能会有类似的内容:

    def current_year
      @year ||= Time.now.year
    end
    

    并在您的视图中使用current_year

    您也可以使用简单的caching 来完全避免调用。

    就我个人而言,我发现这两种方法都是矫枉过正,无缘无故地剥夺了可读性/可维护性:)

    【讨论】:

      【解决方案5】:

      You could use Javascript,像这样:

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-11
        • 1970-01-01
        • 2013-12-20
        • 2011-01-08
        • 2011-07-17
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        相关资源
        最近更新 更多