1

私のアプリは、予定を予約するために利用可能なスロットを含むユーザーのカレンダーを生成します。訪問者のタイム ゾーンを自動的に検出し、訪問者のタイム ゾーンでのユーザーの空き時間を表示します。

検出されたタイム ゾーンは表示のレンダリングに使用されるため、フラグメント キャッシュは機能しません。

このビューは、訪問者が予定の時間枠を予約するために選択できる 100 以上のリンクを生成します。ベンチマークは、リンクの生成がビューの最も遅い部分であることを示しており、リンクごとに約 0.5 ミリ秒かかります。

ERB をループしてハイパーリンクを生成する最も効率的な方法は何ですか?

link_to Rails ヘルパーの代わりに HTML の使用を開始しました。開発では 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_idしていますtimeslot.

于 2013-10-25T06:05:15.033 に答える