2017-06-27 4 views
-1

Ich zeige 3k Benutzer. Wenn der Render-Helfer link_to Rendering-Verlangsamung verarbeitet. Es benötigt viel Zeit.Langsame Verarbeitung, wenn Render-Helfer link_to

es ist meine Vorlage

- @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

_ "Ich zeige 3k Benutzer an. [...] Es braucht viel Zeit." _ - Zufall? ;-) – Stefan

+0

@Stefan ohne diesen Helfer dauert es 7 Sekunden. – Andy

+0

Oh, ich sehe, nur eine der 'link_to's oder alle drei? – Stefan

Antwort

1

einfache HTML-Rendering, anstatt die Helfer der Verwendung verbessert erheblich die benötigte Zeit zu machen. Es ist nicht so viel "link_to", das das Rendering belastet, sondern mehr von path_helper. Obwohl rohen html in der Ansicht Platzierung ist schneller als alle beide:

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

statt

link_to path_helper 

oder sogar (da der Helfer ist der größte Übeltäter)

<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

Ich habe auch das Tag mit dem href mit dem Pfad-Helfer getestet, und obwohl es fa ist ster als link_to mit dem Pfadhelfer, ist es langsamer als mit href als String. Sie können auch sehen, dass ich nicht .html_safe auf dem concanated href aufgerufen habe, was es auch noch schneller im Tag machen sollte.

+0

Der Client will nicht verwendet werden will_paginate – Andy

+1

Haben Sie versucht, direkt mit dem HTML-Link anstelle der Link_to Helfer? Delete ??? für alle drei link_to's ofc. Und ist das nicht falsch: "Sind Sie sicher, dass Sie # {user} löschen möchten?" sollte es nicht user.name oder sowas sein? –

+0

Nein, ich habe es nicht ausprobiert. Ich werde es jetzt versuchen. Wie für 'User.name', habe ich den Alias ​​to_s und die Getter-Methode im Modell, also ist alles in Ordnung. – Andy