在我的页脚中显示当前年份的最轻量级方式是啥?
Posted
技术标签:
【中文标题】在我的页脚中显示当前年份的最轻量级方式是啥?【英文标题】: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 这是一个有趣的观点。
【参考方案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
,不值得寻找替代方案。
【讨论】:
关于果味。看起来很有用。其他人的链接:github.com/marcandre/fruity【参考方案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
建议的内容(缓存)
【讨论】:
以上是关于在我的页脚中显示当前年份的最轻量级方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在我的页脚中,当我的屏幕宽度小于 700 像素时,如何将社交图标分成 2 行?