การมีเลขหน้าลดภาระเซิร์ฟเวอร์หรือไม่ (ทฤษฎี)


11

ฉันสงสัยว่าอะไรคือเหตุผลเบื้องหลังการให้เลขหน้า? มันใช้เพราะมันช่วยลดภาระบนเซิร์ฟเวอร์เนื่องจากเราจะ จำกัด จำนวนแถวที่ส่งคืนต่อหน้าทางเทคนิคหรือไม่

ฉันต้องการที่จะทำอะไรบางอย่างโดยไม่ต้องแบ่งหน้า แต่เนื่องจากฉันใหม่กับสิ่งนี้ (ฉันเป็นมือสมัครเล่น) เริ่มสงสัยว่ามันใช้ได้หรือไม่


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

3
การแบ่งหน้ามีไว้สำหรับมนุษย์มากกว่าของดีบี
Malfist

คำตอบ:


10

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

เหตุผลอื่น ๆ ได้แก่ :

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

ในทั้งสองกรณีนี้คุณไม่ต้องการให้ผู้ใช้รอ - ไม่ว่าจะเป็นข้อมูลที่พวกเขาจะไม่ได้ดูหรือข้อมูลทั้งหมดเมื่อพวกเขาได้รับมันด้วยการประมวลผลบางส่วน


2
+1 ฉันเขียนสิ่งที่คล้ายกัน แต่คุณเร็วเกินไป ให้ฉันเพิ่มว่าเนื้อหาการให้เลขหน้ายังใช้ (ab) เป็นวิธีในการแสดงการเพิ่มอีก
yannis

นอกจากนี้คุณยังสามารถสร้างหน้าโดยไม่ต้องค้นหาว่ามีกี่หน้าโดยรู้ว่ามีข้อมูลมากกว่าที่เหมาะกับหน้าปัจจุบันดีพอ
Carlo Kuip

3

มันแตกต่างกันไปขึ้นอยู่กับการใช้งาน

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


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

@ YannisRizos แน่นอน ฉันเพิ่งเห็นด้านมืดของเรื่องนี้กับฐานข้อมูลเชิงสัมพันธ์ที่มีโครงสร้างไม่ดีอย่างไม่น่าเชื่อ (แบบสอบถามจำนวนมากของเราเข้าร่วม 7 หรือ 8 ตารางที่แตกต่างกันเพื่อให้ได้ผลลัพธ์)
Steve Hill

@YannisRizos: define "stress on the db" คุณยังคงผลักคิวรี่สองแบบสอบถามข้ามบรรทัด คุณมีเลขในแบบสอบถาม (rowcount super-select) หรือแคชผลลัพธ์ในชั้นอื่นหรือไม่ มีตัวแปรหลายวิธีที่จะบอกว่ามีความเครียด db มากเกินไป ฉันจะยืนยันว่าทำอย่างถูกต้องในความรู้สึกของการทำธุรกรรม (คุณอนุญาตให้อ่านสกปรก / ไม่สอดคล้องกันนับในหน้า?) เพิ่ม db "ความเครียด" / โหลด แต่ลดความซับซ้อนของการเขียนโปรแกรม
Jé Queue

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

1

คุณค่าที่คุณได้รับมากที่สุดจากการแบ่งหน้าคือการเพิ่มความเร็วในการสมัครของคุณโดย:

1 - การ จำกัด ข้อมูลที่ส่งระหว่างไคลเอนต์และเซิร์ฟเวอร์ ไม่มีจุดที่จะอ่านลูกค้า 1000000 คนหากผู้ใช้กำลังมองหาลูกค้า 10 ราย

2- เร่งประสิทธิภาพการสืบค้นอย่างมีนัยสำคัญโดยดึงเฉพาะแถวที่สามารถพอดีกับมุมมองของผู้ใช้ ไม่มีจุดอ่านลูกค้า 1000000 ถ้าผู้ใช้จะดูลูกค้า 10 คนแรก

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

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

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


-4

การแบ่งหน้าในใจของฉันคือแม่ของการมองโลกในแง่ดีก่อนวัยอันควรทั้งหมด การเขียนเว็บไซต์ของคุณโดยไม่มีเลขหน้าก็โอเคอย่างแน่นอน

หากคุณพบว่าหลังจากที่วางจำหน่ายคุณกำลังโหลดข้อมูลมากเกินไปในการโทรครั้งเดียวหรือผู้ใช้ของคุณต้องรอข้อมูลที่พวกเขาต้องการเพราะมันเป็นข้อมูลที่กำลังโหลดไม่ว่างที่พวกเขาไม่ต้องการไปข้างหน้าและเขียนโซลูชัน Ajax ซึ่งโหลดหน้าเว็บขณะที่ผู้คนเลื่อนลงเท่านั้น (ดู: Twitter, Tumblr, การค้นหารูปภาพของ Google)

แก้ไข: ย่อหน้าที่สองด้านบนเขียนขึ้นโดยมีข้อสันนิษฐานว่าคำตอบทั่วไปจะเป็น "แต่ถ้าคุณรู้ว่าคุณกำลังจะเลขหน้าบางจุดคุณอาจทำได้เร็วกว่าจะเสียเวลาพัฒนาสิ่งที่คุณกำลังจะโยน ไป."

เช่นเดียวกับการเป็นแม่ของการเพิ่มประสิทธิภาพก่อนวัยอันควรทั้งหมดฉันคิดว่าการให้เลขหน้าเป็นฝันร้าย UXและมีวิธีแก้ปัญหาที่ดีกว่าซึ่งไม่ต้องการการพัฒนาเพิ่มเติมมากนักบนหน้าทั้งหมด

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


5
ฉันไม่เห็นด้วยอย่างยิ่งกับข้อความนี้การให้เลขหน้าไม่ใช่เพื่อเพิ่มประสิทธิภาพฐานข้อมูล แต่เป็นเรื่องเกี่ยวกับการให้ข้อมูลในกลุ่มคนที่จัดการได้ คุณจะสามารถอ่าน Harry Potter ได้ไหมถ้าอยู่ในหน้าเดียว คุณจะสามารถยื่นภาษีได้หรือไม่หากรหัสภาษีเป็นหน้าเดียวทั้งหมด
Malfist

@ มัลลิสต์: เหตุผลเดียวที่คุณไม่สามารถจัดการสิ่งเหล่านั้นในหน้าเดียวก็เพราะหน้าตัวเองนั้นใหญ่เกินไป นี่ไม่ใช่ปัญหาในหน้าเว็บ ดังนั้นเว็บไซต์ที่ฉันอ้างถึงได้ค้นพบทางออกที่ดีกว่าในการให้เลขหน้าในขณะที่ Lolcats มีเกือบ 2,000 หน้าซึ่งเป็นไปไม่ได้ที่จะแบ่งหน้าในแบบที่สมเหตุสมผล แต่มันคือ downvote ของคุณใช้มันอย่างที่คุณต้องการ
pdr

1
@ มัลลิสต์: การแยกสิ่งต่าง ๆ ออกเป็นส่วนที่จัดการได้นั้นยุติธรรมพอถ้าชิ้นส่วนเหล่านั้นไม่เปลี่ยน ถ้าฉันอ่านหน้า 1-4 แล้วฉันต้องการกลับมาครั้งต่อไปและอ่านหน้า 5 แต่ในหลายกรณีเว็บไซต์ที่ให้เลขหน้าเป็นรายการสิ่งของล่าสุดเป็นอันดับแรก ดังนั้นเมื่อฉันกลับไปที่หน้า 5 ในภายหลังมันแสดงให้เห็นครึ่งหนึ่งของหน้า 3 และครึ่งหนึ่งของหน้า 4 จากครั้งล่าสุดที่ฉันอยู่ที่นั่นเพราะมี 1.5 หน้าใหม่ในรายการ
pdr

2
-1 อย่างที่ฉันไม่เห็นด้วยกับสิ่งนี้เช่นกัน ฉันไม่แน่ใจด้วยซ้ำว่าจะเริ่มอธิบายสาเหตุที่ใด
Craige

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