Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การแสดงผลบางส่วนใช้เวลาเท่าไร?

ฉันได้ยินจากคนบางคนที่กังวลเกี่ยวกับการแยกมุมมอง Rails ขนาดใหญ่ออกเป็นส่วนที่เล็กกว่า:การแสดงบางส่วนใช้เวลานานเท่าใดจริง ๆ ผลกระทบด้านประสิทธิภาพของการโทรบางส่วนจะมีมากกว่าประโยชน์ในด้านความสามารถในการอ่านโค้ดหรือไม่

ฉันใช้ตัวเลขบางส่วนเพื่อยกตัวอย่างว่าการเรนเดอร์บางส่วนแบบง่ายเมื่อเปรียบเทียบกับการเรนเดอร์แบบอินไลน์ เพื่อให้เราสามารถพูดคุยเกี่ยวกับการแลกเปลี่ยนในภายหลัง นี่คือรหัสที่ฉันใช้วัดประสิทธิภาพในแอป Rails ใหม่ล่าสุด (พร้อม config.cache_classes = true ):

app/views/test/show.html.erb
<% require 'benchmark'
   Benchmark.bmbm do |x|
     x.report "inline" do
       10000.times do -%>
         <p>Hello!</p>
    <% end
     end
     x.report "partial" do
       10000.times do -%>
         <%= render partial: "hello" %>
    <% end
     end-%>
<% end -%>
app/views/test/_hello.html.erb
<p>Hello!</p>

และผลลัพธ์ (โดยใช้ Ruby 2.1 และ Rails 4.0.2 บน Retina Macbook Pro รุ่น 15 นิ้ว ปี 2013):

Rehearsal -------------------------------------------
inline    0.010000   0.000000   0.010000 (  0.007045)
partial   0.970000   0.090000   1.060000 (  1.050433)
---------------------------------- total: 1.070000sec

              user     system      total        real
inline    0.010000   0.000000   0.010000 (  0.005529)
partial   0.920000   0.070000   0.990000 (  0.997491)

ดังนั้น การเรนเดอร์บางส่วนจึงทำงานโดยเฉลี่ยประมาณ 0.1ms บนเครื่องที่รวดเร็ว มันช้ากว่าการเรนเดอร์แบบอินไลน์มาก แต่เร็วพอที่คุณจะสังเกตเห็นได้ยากเมื่อคุณมีสิ่งต่าง ๆ เช่น การสร้าง URL ตัวช่วย Rails และเวลาในการแสดงผลของเบราว์เซอร์ให้นึกถึง

ความเร็วไม่ใช่ทุกอย่าง

หากประสิทธิภาพของการเรนเดอร์บางส่วนแย่ลงมาก ฉันยังคงต้องตัดสินใจแยกมุมมองที่กว้างใหญ่ออกไป

มีวลีที่ว่า Make It Work, Make It Right, Make It Fast. เมื่อคุณพยายามแก้ไขมุมมองที่ใหญ่เกินไป คุณกำลังพยายามออกจากโหมด "ทำให้ใช้งานได้" และคุณไม่สามารถข้ามไปที่ "ทำให้เร็ว" ได้ คุณจะทำให้โค้ดดูแลรักษาได้น้อยลง และคุณอาจพลาดโอกาสในการจัดองค์ประกอบใหม่ ซึ่งอาจนำไปสู่โอกาสในการแคช ซึ่งอาจนำไปสู่ประโยชน์ด้านประสิทธิภาพที่มากขึ้นไปอีก

คุณจะไม่รู้จนกว่าจะวัดผล

คุณไม่ต้องเชื่อตัวเลขของฉัน ฉันขอแนะนำว่าคุณทำไม่ได้! ไลบรารีเกณฑ์มาตรฐานของ Ruby มีเครื่องมือง่ายๆ ในการรันการวัดประสิทธิภาพของคุณเอง นอกจากนี้ยังมีเครื่องมือสำหรับสร้างโปรไฟล์เต็มสแต็กของคุณ เช่น New Relic และ MiniProfiler ฉันใช้ทั้งสามสิ่งนี้เป็นประจำในการทำงานประจำวันของฉัน

เมื่อคุณสร้างโปรไฟล์ โปรไฟล์ในโหมดการผลิตเสมอ! สภาพแวดล้อมการพัฒนา Rails จะโหลดคลาสและมุมมองใหม่โดยอัตโนมัติ ซึ่งมีประโยชน์ในขณะพัฒนา แต่จะทำลายประสิทธิภาพการทำงานของคุณ