我的应用会生成一个用户的日历,其中包含预约约会的可用插槽。它会自动检测访问者的时区,并在访问者的时区显示用户的可用性。
由于检测到的时区用于呈现显示,因此片段缓存将不起作用。
该视图会生成100多个链接,访问者可以选择这些链接预订约会的时间段。基准测试表明,生成链接是视图中最慢的部分 - 每个链接 0.5ms 。
循环ERB并生成超链接的最有效方法是什么?
我们开始使用HTML而不是link_to Rails帮助程序 - 这在开发中快2倍但在生产中却不那么快 - 我们的结论是Heroku必须优化这些Rails帮助程序。
<a href="/<%= @profile.profile_url %>/
appointments_calendars/<%= @appointments_calendar.id %>/
booked_events/new?
timezone_name=<%= @timezone.name %>&
event_slot_id=<%= event_id %>"
class="left-slot open-slot" rel="nofollow">
<%= timeslot.strftime("%l:%M%p") %></a>
,其中 @ profile.profile_url 是一个字符串, @ appointmentments_calendar.id 是来自activerecord对象的整数。 @ timezone.name 是一个字符串。它们不会在循环中更改 - 也就是说,它们是在页面呈现时生成的,并且不会更改。
event_id 是一个整数,时间段是一个时间。它们对于循环中的每个链接都是不同的。
我想知道是否有一种在Ruby / Rails中根据字符串缓冲的工作方式生成此HTML链接的最佳方法。
循环是一个每天运行的整数范围,
(first_hour..last_hour).step(1.hour).each
或者,是否有更快的方法在不依赖ERB的Rails中执行此操作?
答案 0 :(得分:2)
您可以尝试以下方式:
# somewhere before the loop starts:
<% slug = "/#{@profile.profile_url}/appointments_calendars/#{@appointments_calendar.id}/booked_events/new?timezone_name=#{@timezone.name}&event_slot_id=" %>
然后你可以做
<a href="<%= slug + event_id %>" class="left-slot open-slot" rel="nofollow">
<%= timeslot.strftime("%l:%M%p") %>
</a>
我不知道这是否会成为瓶颈,尽管它更具可读性。我怀疑生成链接的时间很长也可能与您定义event_id
和timeslot
有关。