Rails - ใช้การแสดงผลมุมมองช้า ๆ หรือไม่


16

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

ดังนั้นการฝึกหัดมีจำนวนมากเป็นเรื่องไม่ดี

ฉันควรลดจำนวนชิ้นงานเพื่อปรับปรุงเวลาในการแสดงผลมุมมองหรือไม่

ขอบคุณ

คำตอบ:


5

ฉันรู้ว่าไม่มีความแตกต่างของประสิทธิภาพการแสดงผลอย่างมีนัยสำคัญระหว่างหลายส่วนและมุมมองเดียวเมื่อคุณแสดงเนื้อหาเดียวกัน

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

ในทางกลับกันฉันมักจะพิจารณาว่ามีการแยกเป็นส่วน ๆ ของบทคัดย่อที่ควรใช้อย่างน้อยจาก 2 แห่งที่แตกต่างกันเพื่อแสดงให้เห็นถึงการมีอยู่ของพวกเขา เหตุผลอื่นที่ใช้ partials คือเมื่อคุณต้องการแสดงผลมุมมองเดียวกัน แต่โหลด partials ต่างกันตามตรรกะทางธุรกิจบางอย่างที่คุณมี

UPDATE:

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

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

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

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

การอ่านรหัสเป็นสิ่งที่สำคัญที่สุดที่เราสามารถทำได้เพื่อเป็นฐานรหัสซอฟต์แวร์


ดังนั้นโดยทั่วไปถ้าฉันไม่ต้องการบางส่วนถ้ารหัสนั้นจะไม่ถูกนำมาใช้ซ้ำโดยคอนโทรลเลอร์อื่น o โหลดใหม่แบบไดนามิกฉันไม่ควรใช้งาน partials? และสิ่งนี้จะปรับปรุงเวลาในการแสดงผลมุมมอง?
Mr_Nizzle

@Mr_Nizzle: ฉันได้อัปเดตคำตอบของฉันเพื่อครอบคลุมปัญหาที่เพิ่มขึ้นตามความคิดเห็นของคุณ ฉันหวังว่าคำอธิบายที่อธิบายนี้จะเข้าใจได้ง่ายขึ้น ... ฉันเพิ่งรู้ว่าย่อหน้าที่สองของฉันในคำตอบสามารถเข้าใจผิด
Patkos Csaba

ขอบคุณชายCode readabilityนั่นคือสิ่งที่เกี่ยวกับ
Mr_Nizzle

22

ฉันไม่เห็นด้วยกับคำตอบทั้งสอง ฉันได้คัดลอกและวางโค้ดจากบางส่วนไปยังตำแหน่งที่มีอยู่ในมุมมองพาเรนต์บางส่วนและมีการวนซ้ำ 500 ครั้งซึ่งใช้เวลาปิด 600ms มากในการแสดงมุมมอง <% = render xyz%> อยู่ในความคิดของฉันเสียมาก

ตัวอย่างเวลารวมในการแสดงผล:

Before:
5759.8ms
5804.2ms
5973.6ms

After:
5268.7ms
5201.6ms
5222.4ms

Diff = 5846 - 5231 = 615 ms

แก้ไข

ฉันสิ้นสุดการไม่แสดง _partials ทั้งหมดภายใน _model บางส่วนแล้วลดลงเหลือ ~ 2000ms ที่จุดนี้ฉันพยายามย้าย _model บางส่วนลงในดัชนีอย่างไรก็ตามสิ่งนี้ไม่มีผลต่อเวลาในการเรนเดอร์ดังนั้นฉันจึงเดาว่า ทำมัน.


การค้นหาที่น่าสนใจในบางส่วนซ้อนกัน คุณหมายถึงการไม่ลดลงหนึ่งส่วนลดลง 600ms หรือไม่และการยกเลิกชิ้นส่วนทั้งหมดลดลง 3800 มิลลิวินาทีหรือไม่ คุณสามารถปล่อยแอพตัวอย่างสำหรับสิ่งนั้นได้ไหม
lulalala

@ lulalala ใช่แน่นอนและฉันไม่สามารถขอโทษเหมือนเดิมสำหรับการทำงานของฉันและตอนนี้ฉันได้ย้ายมันออกจาก Rails ไปยัง Django ดังนั้นไม่ได้ติดต่อกับรหัสนั้นอีกต่อไป เมื่อมองไปที่ไวแอตต์บาร์เน็ตต์ตอบแล้วตอนนี้ฉันก็ไม่แน่ใจเหมือนกันว่าจริง ๆ แล้วส่วนที่ทำอยู่นั้นกำลังเข้าถึงฐานข้อมูลที่ไม่มีประสิทธิภาพซึ่งรหัสที่ไม่ได้ใช้ของฉันก็กำลังหลีกเลี่ยงอยู่
AJP

1
ฉันพบสิ่งเดียวกัน การโค๊ดโค้ดจากเศษชิ้นส่วนและยกเลิกการเพิ่มมุมมองก็ทำให้ฉันมีประสิทธิภาพเพิ่มขึ้น ~ 450ms เช่นกัน
bcackerman

1
จากประสบการณ์ของฉันในการใช้ Rails ด้วยมุมมอง HAML มีชิ้นส่วนเล็ก ๆ จำนวนมากที่แสดงผลได้ช้ามาก ดูเหมือนว่าจะมีค่าใช้จ่ายคงที่สำหรับทุกส่วนเช่นเดียวกับการรวบรวมขยะที่เตะเข้ามาเมื่อแสดงผลเป็นจำนวนมากในมุมมอง การใช้บางส่วนในตาราง 50 รายการทำให้การแสดงผลหน้าเว็บลดลง 500 ms
d4n3

2
Rails 4: ฉันเพิ่งลบพาร์ติชั่นที่ซ้อนกันสองสามพันบนแอพขนาดใหญ่และเร่งความเร็วได้อย่างมาก ไม่มีตัวเลข แต่ใช่ถ้าคุณกำลังมีปัญหาเรื่องประสิทธิภาพการทำงานมันจะคุ้มค่าที่จะลบบางส่วนที่ซ้อนกันเพื่อดูว่ามันช่วยได้หรือไม่
Rick Smith

5

ไม่ใช่คนที่แต่งตัวประหลาดในรถไฟ แต่มุมมองบางส่วนไม่น่าจะเป็นปัญหาสำหรับทุกคน ดูเหมือนว่าคุณกำลังเลือก SELECT N + 1 อยู่นิดหน่อย ดูสิ่งต่าง ๆ จากมุมมองของเซิร์ฟเวอร์ฐานข้อมูลเพื่อให้แน่ใจว่าคุณไม่ได้ตีมันลงบนเยื่อกระดาษ


2

ทำงานกับแอพ Rails 4.2 ในตอนนี้โดยเฉลี่ยแล้วการเคลื่อนไหวช้าที่ใช้เวลาประมาณ 745ms โดยเฉลี่ย

เมื่อฉันลบรหัสออกจากชิ้นงานและวางลงในเทมเพลตหลักเวลาที่ใช้ในตอนนี้จะเฉลี่ยน้อยกว่า 25ms

จำนวนการโทรเพื่อแสดงผลมีเพียง 29 ชิ้นเท่านั้น


2

แม้ว่าคุณจะไม่มีปัญหา n + 1และฐานข้อมูลทั้งหมดทำงานล่วงหน้า (พูดกับ CTE แบบเรียกซ้ำ) พาร์ติชันที่ซ้อนกันยังคงช้ามาก Haml และ Erb ต่างก็มองฉันช้า บน Rails 5.1.4 ฉันเห็นมิลลิวินาทีสองสามวินาทีสำหรับแต่ละส่วนรวมถึงบางครั้งบางคราวที่แย่กว่านั้นมาก (อาจสอดคล้องกับการรวบรวมขยะ)

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


0

ความเชื่องช้าจำนวนมากที่เกิดขึ้นในส่วนที่ซ้อนกันเกิดขึ้นในระหว่างการพัฒนาเท่านั้น สลับเป็นการผลิตเพื่อทดสอบ


บางทีคุณสามารถแสดงความคิดเห็นได้ว่าเหตุใดรุ่นของการพัฒนาจึงช้าลงอย่างเห็นได้ชัดและมีความเหมาะสมยิ่งขึ้นเมื่อใช้โหมดใดสำหรับการทดสอบใด
Kain0_0

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