เป็นความคิดที่ดีหรือไม่ที่จะรวมคำขอ HTTP หลายรายการเพื่อบันทึกแบนด์วิดท์


16

ฉันกำลังเตรียมแอปพลิเคชันหน้าเดียวซึ่งบางครั้งอาจใช้ผ่านการเชื่อมต่อมือถือที่ช้า บางส่วนของมันค่อนข้างหนักในแง่ของการร้องขอ API (การดึงทรัพยากรที่แตกต่างกันสิบประการสำหรับการแสดงผลหน้าจอใหม่)

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


3
"ความคิดที่ดี" คือสิ่งที่ตรงตามข้อกำหนดด้านประสิทธิภาพและการบำรุงรักษาซอฟต์แวร์ของคุณอย่างเพียงพอ
Robert Harvey

1
ประโยชน์ของการรวมการตอบกลับอาจไม่สำคัญอย่างที่คิด แต่เมื่อคุณแน่ใจว่าจะใช้ระบบรักษาความปลอดภัยและตรวจสอบให้แน่ใจว่าคำขอที่สามารถโหลดแบบขนานนั้นโหลดได้โดยไม่ปิดกั้นซึ่งกันและกัน วัดวัดวัด อย่าเดา
Lie Ryan

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

คำตอบ:


18

ข้อดีอย่างหนึ่งของ REST คือความสามารถในการแคชคำขอผ่านแคช HTTP แบบดั้งเดิม (สมมติว่านี่เป็นคำขอแคช)

เมื่อคุณมีคำขอเดี่ยวขนาดใหญ่ขึ้นใช้งานน้อยกว่าและอาจแตกต่างกันไป (ฉันจะดึงรายการa,b,c,dในครั้งนี้และรายการa,b,d,eในครั้งถัดไป) คุณทำให้คำขอมีแนวโน้มที่จะพลาดแคชและหมดอายุจากแคชที่อาจเป็น นั่งอยู่ระหว่างคุณกับแหล่งที่มา

เมื่อพิจารณาจากคำขอทั้งสองชุดที่กล่าวถึงข้างต้นคำขอที่สองอาจมีอัตราการเข้าชมแคช 75% และสามารถดึงข้อมูลได้เร็วขึ้นอย่างมากeแทนที่จะเป็นสี่สิ่ง

โปรดทราบว่าสิ่งนี้อาจไม่ปรากฏแก่ผู้ใช้ในทันทีเนื่องจากผู้ที่ทำแคชคำขอพลาดชุดแรกจะยังคงมีแคชหายไป

นี่ไม่ได้เป็นการบอกว่ามันจะเหมาะอย่างยิ่งสำหรับการเชื่อมต่อเครือข่ายมือถือที่มีโอกาสน้อยที่จะได้รับการเข้าชมแคชที่ไม่ใช่ในท้องถิ่น แต่สำหรับฮอตสปอตหรือสถานการณ์ wifi อื่น ๆ การใช้แคชอาจมีประโยชน์มากกว่า

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

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


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

8

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

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

หรือคุณต้องการทำทั้งสองวิธีในทุกโอกาส


5

ตรวจสอบบทความนี้บล็อก Dropbox เทค

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

สรุปสั้น ๆ:

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


แต่พวกเขาบอกว่ามันเป็นทางออกชั่วคราว
ymajoros

3

กล่าวโดยย่อ:แนวทางของคุณค่อนข้างถูกต้องและอาจได้รับประโยชน์จากบริการห่อหุ้ม

บริการนี้จะรวมการโทรครั้งเดียวที่มีอยู่เป็นวิธีบริการด้านเดียว การทำเช่นนั้นโดยการรวมการโทรจากไคลเอนต์เข้ากับด้านการบริการ & การใช้สายเดี่ยว, ปรมาณู, การพักสายที่คุณอาจมี

ดังนั้นคุณจะได้รับประโยชน์จาก REST ต่อไปเนื่องจากความสามารถในการแคชคำขอ

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

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