การใช้ AJAX จะปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์อย่างกว้างขวางหรือไม่


10

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

คำตอบ:


14

ขึ้นอยู่กับสิ่งที่คุณทำและวิธีที่คุณทำ

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

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

  • การเพิ่มประสิทธิภาพ AJAX อื่นคือการโหลดข้อมูลมากขึ้นเมื่อคุณเลื่อน ในกรณีนั้นหากผู้ใช้ไม่เลื่อนลงไปเรื่อย ๆ นั่นเป็นการสูญเสียการประมวลผล

แน่นอนว่าการติดตั้งใช้งานจริงสามารถบิดเบือนผลลัพธ์ได้ทั้งสองวิธีนี่คือผลลัพธ์ทั่วไปที่สมมติว่ามีการใช้งานที่ดีพอสมควร


คำถามจริงที่นี่คือสิ่งที่เปลี่ยนแปลงเมื่อคุณย้ายไปที่วิธี AJAX ในการทำสิ่งต่าง ๆ ? คุณสามารถกำจัดงานที่เสียไปก่อนหน้านี้ด้วยการย้ายไปที่ AJAX หรือแค่แบ่งมันออกเป็นชิ้นเล็ก ๆ ? (และเพิ่มค่าใช้จ่ายในกระบวนการ)
SplinterReality

3

แน่นอนมันทำหน้าที่ลดภาระของเซิร์ฟเวอร์ ดูการนำเสนอนี้ @ jsconf'09 - วิธีที่ Facebook ใช้ ajax ในการทำเช่นนั้น

Ajax เป็น async การสื่อสารเซิร์ฟเวอร์ - และคุณสามารถใช้สิ่งนั้นได้หลายวิธี ผู้คนใช้เพื่อโหลด JSON แบบง่ายไปยังเว็บแบบเรียลไทม์และทุกสิ่งในระหว่างนั้น

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


3

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

มันเป็นเหมือนความตายจากการตัด 1,000 ครั้ง - ไม่มีคำขอใดที่มีขนาดใหญ่และในตัวเอง แต่น้ำหนักรวมเป็นนักฆ่า โดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มพิจารณาว่าคำขอขนาดเล็กเหล่านี้มีราคาแพงพอที่จะทำหน้าที่เป็นคำขอเต็มหน้า ในทั้งสองกรณีคุณอาจเรียกใช้ผ่านเว็บแอปพลิเคชันทั้งหมดกดปุ่มฐานข้อมูลและรอคำตอบขณะที่นั่งอยู่บนการเชื่อมต่อ HTTP ที่มีค่า

นี่คือตัวอย่างของวิธี ajax สามารถได้รับน่าเกลียดบนเซิร์ฟเวอร์จริงอย่างรวดเร็ว ลอง "ผู้บริหารแดชบอร์ด" ทั่วไปที่มี 4 ช่องสำหรับวิดเจ็ต สมมติว่า CEO ชอบรายงานการขายเต็มรูปแบบทางด้านขวารายชื่อผู้มีรายได้สูงสุด 10 อันดับแรกที่อยู่ตรงกลางและรายงานราคาหุ้นของ บริษัท ทางด้านขวา และสมมติว่าเราจะทำสิ่งนี้ผ่านการร้องขอรีโมต ajax แบบง่าย ตอนนี้หน้าของคุณต้องใช้การปัดเศษ HTTP 4 ครั้ง (หน้าหลักรายงานแดชบอร์ดแต่ละรายการ) กับเซิร์ฟเวอร์โดยไม่คำนึงถึงสไตล์ชีตบัญชีรูปภาพและเนื้อหาอื่น ๆ แต่ละอันต้องใช้เว็บสแต็คเต็มรูปแบบในการดำเนินการ - คุณจะต้องกดฐานข้อมูลและแสดง HTML โดยใช้เฟรมเวิร์กเว็บของคุณใช่ไหม ตอนนี้คูณ CEO เดียวด้วยผู้ใช้ระยะไกล 2000 คนซึ่งบางคนมีการเชื่อมต่อที่ไม่แน่นอน

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


1
คุณสามารถยกตัวอย่างคำขอขนาดเล็กที่คุณต้องการใน AJAX ที่คุณไม่ต้องการเป็นอย่างอื่นได้หรือไม่?
jhocking

1
แน่นอนว่าเคยสังเกตว่าเว็บไซต์นี้สามารถบอกคุณได้ไหมว่ามีคนตอบคำถามแล้ว สามารถทำได้ผ่านคำขอ ajax ขนาดเล็ก . .
ไวแอตต์บาร์เน็ตต์

@WyattBarnett AJAX ไม่จำเป็นต้องหมายถึงการลงคะแนนเลือกตั้ง คุณสามารถแทนที่การโหลดเต็มหน้าด้วยการโหลดบางส่วนได้ ในหลายกรณีสามารถเพิ่มโหลดเซิร์ฟเวอร์ แต่ฉันไม่คิดว่ามันจะเป็นจริงใน "กรณีส่วนใหญ่"
Davy8

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

1
โปรดทราบว่าหน่วยเลือกตั้ง / หน่วยเลือกตั้งที่มีความยาวชุดย่อยเพียงของ AJAX (ตามที่ระบุไว้ที่นี่) ยังเรียกว่า“ดาวหาง” WebSockets ซึ่งช่วยให้“true” เลือกตั้งฟรีผลักดันหรือฝั่งเซิร์ฟเวอร์ (server-initiated) AJAX จะช่วยลดการสูญเสียทรัพยากรที่จำเป็นสำหรับชนิดของคุณลักษณะนี้
Alan H.

2

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

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


0

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

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

แน่นอนวิธีเดียวที่จะรู้ได้ในกรณีเฉพาะของคุณคือลองทำดู


1
ฉันมีปัญหาในการคิดตัวอย่างที่ใช้ AJAX จะทำให้คำขอมากกว่าทำแบบเดียวกันโดยไม่ใช้ AJAX คุณยกตัวอย่างได้ไหม
jhocking

1
HTML แสดงผลเสมอในฝั่งไคลเอ็นต์
Jonas

1
สันนิษฐานว่าเขาสะกดคำผิดและหมายถึง "การจัดการ" และไม่ใช่ "การแสดงผล"
jhocking

เริ่มต้นจากมุมมอง / แม่แบบรวมกับตัวแปรและแสดง HTML ดิบจากมัน
yfeldblum

AJAX จะทำให้คำขอมากกว่าทำแบบเดียวกันโดยไม่มี AJAX ในกรณีเช่น: เลย์เอาต์หลักของคุณมี "หลุม" แต่ถูกส่งไปพร้อมกับรูเหล่านั้นไปยังเบราว์เซอร์และหลุมเหล่านั้น "เต็มไป" โดยใช้ AJAX ดูเช่น Facebook
yfeldblum

0

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

หากเซิร์ฟเวอร์ของคุณทำงานหนักเกินไปคุณต้องเข้าใจสาเหตุ

หากคุณได้รับความนิยมจำนวนมากแล้วอาแจ็กซ์จะไม่แก้ไขปัญหาที่คุณต้องการความจุมากขึ้น การเพิ่ม ajax จะเพิ่มจำนวนคำขอที่เซิร์ฟเวอร์ของคุณต้องจัดการ

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

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

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