วิธีรับเวลาดำเนินการในคอนโซลราง?


104

ฉันต้องการเปรียบเทียบเวลาในการดำเนินการPost.allและSELECT * FROM posts(หรือข้อความอื่น ๆ ) ฉันจะหาเวลาดำเนินการได้Post.allอย่างไร

คำตอบ:


240
timing = Benchmark.measure { Post.all }

คุณลักษณะต่างๆของวัตถุที่ส่งกลับ (Benchmark :: TMS) จะได้รับบริการที่นี่


5
ฉันพบว่าโพสต์นี้มีประโยชน์มาก: caseyscarborough.com/blog/2013/07/22/…
hernanvicente

@Bohdan จะดีกว่าไหมหากจะเพิ่มคำตอบหรือความคิดเห็นอื่นโดยอ้างอิงถึงอัญมณีมาตรฐาน ips คุณได้ทำการแก้ไขคำตอบครั้งใหญ่ซึ่งมีการเปลี่ยนแปลงอย่างมากและค่อนข้างลดความเหมาะสมของการโหวตลงไปแล้ว
Shadwell

@Bohdan อัพโหวต. คุณสามารถเปลี่ยนคำตอบที่ยอมรับได้ตลอดเวลาเช่นกันหากคำตอบใหม่เหมาะสมกว่า
Shadwell

4

ด้วยอัญมณีมาตรฐาน - ips :

2.3.0 :001 > require 'benchmark/ips'
=> true 
2.3.0 :002 > Benchmark.ips do |x|
2.3.0 :003 >       x.report("add: ") { 1+2 }
2.3.0 :004?>       x.report("div: ") { 1/2 }
2.3.0 :005?>       x.report("iis: ") { 1/2.0 }
2.3.0 :006?>   end
Warming up --------------------------------------
           add:    280.299k i/100ms
           div:    278.189k i/100ms
           iis:    266.526k i/100ms
Calculating -------------------------------------
           add:      11.381M  4.5%) i/s -     56.901M in   5.010669s
           div:       9.879M  4.6%) i/s -     49.518M in   5.024084s
           iis:       9.289M  4.2%) i/s -     46.376M in   5.001639s

0

นี่คือวิธีวัดประสิทธิภาพอัตโนมัติในคอนโซลรางโดยใช้ gem: https://github.com/igorkasyanchuk/execution_time

มันแสดงข้อมูลที่คล้ายกันซึ่งคุณเห็นแล้วในระหว่างการร้องขอ

ตัวอย่าง:

[METRICS] Completed in 908.3ms | Allocations: 2894 | ActiveRecord: 0.9ms (queries: 13)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.