2017-06-27 4 views
-1

3kユーザーを表示しています。レンダリングヘルパーlink_toは、レンダリングの処理速度を低下させます。それは多くの時間がかかります。レンダーヘルパーの処理が遅いlink_to

は、それはかなりのヘルパーを使用するのではなく、プレーンなHTMLをレンダリング私のテンプレート

- @user.each do |user| 
     %tr 
     %td= link_to_user_modal user 
     %td.text-right 
      = link_to edit_user_path(user.id), 
        class: 'btn btn-default btn-xs', 
        title: 'Edit' do 
      %span.glyphicon.glyphicon-pencil 

      = link_to user, 
        method: :delete, 
        title: 'Delete', 
        data: { confirm: "Are you sure you want to delete #{user}?" }, 
        class: "btn btn-danger btn-xs" do 
      %span.glyphicon.glyphicon-trash 
+0

_ "3kユーザーを表示しています。[...]時間がかかります。" _ - 偶然? ;-) – Stefan

+0

@Stefanこのヘルパーなしでは7秒かかります。 – Andy

+0

ああ、私は、 'link_to'のうちの1つ、または3つ全てのうちの1つだけを見ていますか? – Stefan

答えて

1

向上レンダリングするのに必要な時間です。 レンダリングに負担をかけるほどの "link_to"ではなく、path_helperの方が多くあります。ビュー内の生のHTMLを配置すると、両方のいずれよりも速いものの:

<a href="the/path/the_helper/would/render/#{user.id}" target="_blank" class="whatever">Edit</a> 

代わりに

link_to path_helper 

あるいは(ヘルパーが最大の原因であるため)

<a href="#{path_helper}" target="_blank">edit</a> 

check ruby-prof for the call trace - the only line that was changed was link_to to pure html with the id inserted dynamically into the href string

また、パスヘルパーを使用してhrefでタグをテストしましたが、それはfaですlink_toよりもパスヘルパーとステレオでは、文字列としてのhrefよりも遅いです。また、私はconcanated hrefで.html_safeを呼び出さなかったことがわかります。これはタグ内でもより速くレンダリングするはずです。

+0

クライアントはwill_paginateを使いたくない – Andy

+1

link_toヘルパーの代わりにhtmlを直接使ってみましたか? Delete ???すべての3つのlink_toのofc。そして、これは間違っていません: "#{ユーザー}を削除してもよろしいですか?"それはuser.nameなのではないでしょうか? –

+0

いいえ、私はそれを試していません。私は今しようとします。 'User.name'については、モデルにto_sエイリアスとゲッターメソッドがありますので、すべてうまくいきます。 – Andy

関連する問題