1

我的应用程序会生成一个用户日历,其中包含可用于预约的空档。它会自动检测访问者的时区,并在访问者的时区显示用户的可用性。

由于检测到的时区用于渲染显示,因此片段缓存将不起作用。

该视图生成 100 多个链接,访问者可以选择这些链接来预订预约时间段。基准测试表明生成链接是视图中最慢的部分——每个链接大约需要 0.5 毫秒

循环 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 %>&amp;
event_slot_id=<%= event_id %>"
class="left-slot open-slot" rel="nofollow">
<%= timeslot.strftime("%l:%M%p") %></a>

其中 @profile.profile_url是一个字符串,@appointments_calendar.id是一个来自 activerecord 对象的整数。@timezone.name是一个字符串。它们不会在循环中更改 - 也就是说,它们是在页面呈现时生成并且不会更改。

event_id是一个整数,timeslot是一个时间。它们对于循环中的每个链接都是不同的。

我想知道是否有基于字符串缓冲的工作原理在 Ruby/Rails 中生成此 HTML 链接的最佳方法。

循环是一个整数范围,每天运行,

(first_hour..last_hour).step(1.hour).each

或者,在不依赖 ERB 的 Rails 中有没有更快的方法来做到这一点?

4

1 回答 1

2

您可以尝试以下方法:

# somewhere before the loop starts:
<% slug = "/#{@profile.profile_url}/appointments_calendars/#{@appointments_calendar.id}/booked_events/new?timezone_name=#{@timezone.name}&amp;event_slot_id=" %>

然后你可以做

<a href="<%= slug + event_id %>" class="left-slot open-slot" rel="nofollow">
  <%= timeslot.strftime("%l:%M%p") %>
</a>

我不知道这是否会成为瓶颈,尽管它会更具可读性。我怀疑生成链接的时间很长也可能与您定义event_idtimeslot.

于 2013-10-25T06:05:15.033 回答