2013-10-25 153 views
1

我的应用程序会生成用户的日历,其中包含可用于预约约会的插槽。它会自动检测访客的时区,并在访客的时区显示用户的可用性。在Rails部分中生成链接的最有效方法是什么?

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

该视图生成100多个链接,访问者可以选择该链接预订约会的时间段。基准测试显示,生成链接是视图中速度最慢的部分 - 每个链接需要大约0.5ms

通过ERB循环并生成超链接的最有效方法是什么?

我们开始使用HTML代替link_to Rails帮助程序 - 开发速度提高了2倍,但生产率提高了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是一个字符串。它们不会在循环中更改 - 也就是说,它们在页面呈现时不会更改而生成。

事项标识是一个整数,时隙是时间。循环中的每个链接都不相同。

我想知道是否有一种最佳的方式来在Ruby/Rails中根据字符串缓冲的工作原理生成此HTML链接。

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

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

另外,有一个更快的方式在不依赖于雇员再培训局的Rails这样做呢?

+0

你是如何定义'event_id'和'timeslot'每次? – tyler

回答

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有关。

+0

谢谢。我玩过这个解决方案,但没有看到明显的性能增益。我认为有人可能会有一些关于Ruby/Rails如何使用字符串的较低级知识来指向最佳模式。如上所述,event_id是一个整数,时隙是一个时间。 event_id来自一个散列。我一直在倾注每一行,并且没有比这个链接慢的东西。再次感谢。 –

+0

使用上面的代码,只注释'href'部分,对其进行基准测试,然后仅注释'timeslot'部分,对其进行基准测试,然后同时对两者进行注释并进行基准测试。这应该让你知道问题出在哪里。 – tyler

+0

谢谢。不幸的是,我今天做了一些优化 - 就像通常那样 - 没有“吸烟枪”。只需通过代码逐行执行并寻找低效率即可。但是,谢谢你,你的回答是我的问题。 –

相关问题