อะไรเป็นสาเหตุของเวลา 'รอ' ก่อนที่ HTML จะโหลด


12

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

คุณสามารถดูในรูปด้านล่างแถบ 'รอเวลา' สีเหลือง:

การโหลดไฟล์ HTML ใช้เวลามากกว่า 5 วินาทีในขณะที่สินทรัพย์อื่นส่วนใหญ่โหลดภายในไม่ถึง 1 วินาที

สิ่งนี้ดูเหมือนจะสอดคล้องกันไม่ว่าเนื้อหา HTML ในหน้านั้นจะเป็นอะไร

ไซต์นี้ใช้ CMS (ModX Revo) ดังนั้น HTML ถูกเก็บไว้ในฐานข้อมูล SQL และนำออกมาโดย PHP แต่ฉันไม่เคยพบปัญหานี้มาก่อน

ใครบ้างจะรู้ว่าอะไรเป็นสาเหตุของปัญหานี้และฉันจะเร่งความเร็วได้อย่างไร


นี่เป็นสิ่งใหม่หรือไม่? นั่นคือหน้าเหล่านี้ทำงานได้ตามปกติมาก่อนและตอนนี้ทำงานได้ไม่ดีหรือไม่? หรือนี่คือการติดตั้งใหม่ / ไซต์? คุณบอกเราเพิ่มเติมได้ไหม
Closnoc

1
เว้นแต่จะมีเครือข่ายตัวกลางบางส่วนที่ถือครองสิ่งนี้ดูเหมือนว่าจะเป็นเวลาที่เซิร์ฟเวอร์ของคุณใช้เพื่อสร้างการตอบสนองหรือไม่ คุณพูดว่า "ไม่ว่าเนื้อหา HTML จะเป็นอย่างไร" - เนื้อหา HTML ผ่าน CMS ของคุณหรือหน้า HTML แบบคงที่ใช่หรือไม่ แน่นอนฉันจะลองใช้หน้า HTML แบบคงที่ "Hello World" อย่างง่ายถ้าคุณยังไม่ได้ทำ นอกจากนี้โปรดทราบว่าเซิร์ฟเวอร์ของ pingdom ตั้งอยู่อีกฝั่งหนึ่งของโลกสู่ออสเตรเลีย (ซึ่งฉันคิดว่าคุณอยู่ที่ไหน)
MrWhite

1
IMO ปัญหาส่วนใหญ่เกิดขึ้นกับหน้านั้น - เซิร์ฟเวอร์ / CMS ของคุณดูเหมือนจะใช้เวลานานในการสร้างการตอบสนอง แบบสอบถาม SQL ที่ไม่มีประสิทธิภาพ? หน้าอื่น ๆ ในเว็บไซต์ของคุณดูเหมือนจะค่อนข้างเร็ว (?)
MrWhite

คำตอบ:


13

ข้อกำหนดทางเทคนิคสำหรับการรอคอยจะถูกอ้างอิงเป็นเวลาถึงไบต์แรกและกำหนดการตอบสนองของเว็บเซิร์ฟเวอร์หรือทรัพยากรเครือข่ายอื่น ๆ

สาเหตุทั่วไปบางประการที่คุณอาจเห็นเวลาที่สูงถึงไบต์แรก:

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

โดยทั่วไปปัญหานี้มักพบในโฮสติ้งที่ใช้ร่วมกันเนื่องจากเว็บไซต์จำนวนมากและผู้เยี่ยมชมซึ่งแน่นอนเพิ่มเวลาเครือข่าย สาเหตุที่เป็นไปได้อีกประการหนึ่งคือข้อผิดพลาดบนเครือข่ายที่ใดที่หนึ่งเช่น hop หรือเนื่องจากเซิร์ฟเวอร์ของคุณไม่ได้อยู่ในตำแหน่งของผู้ชมเป้าหมายของคุณตัวอย่างเช่นเซิร์ฟเวอร์ 'GOOD' ในสหราชอาณาจักรจะมีเวลาไบต์ที่ต่ำกว่า สหราชอาณาจักรเนื่องจากระยะทางที่ข้อมูลจะต้องมีการส่งและรับ (โดยปกติจะเพิ่มขึ้นประมาณ 100-200ms)

อาจถึงเวลาที่จะได้รับโฮสต์ใหม่

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

การทดสอบที่เชื่อถือได้

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

ส่ง Ping และติดตามเส้นทางเซิร์ฟเวอร์

หากคุณพยายามเรียกใช้ ping บนเซิร์ฟเวอร์ผลลัพธ์อาจแสดงหรือไม่ ping ใช้ ICMP แทน UDP หรือ TCP หมายถึงไม่ต้องการสอบถามเซิร์ฟเวอร์ในพอร์ต 80 ซึ่ง httpd ของคุณจะทำงาน คุณสามารถใช้เส้นทางการติดตามเพื่อระบุเซิร์ฟเวอร์ใด ๆ บนเส้นทางที่อาจทำให้ไบต์แรกเพิ่มขึ้นอีกครั้ง ... มันไม่ได้ค้นหาเซิร์ฟเวอร์ httpd ที่พอร์ต 80 และหาก traceroute ที่ใช้ Windows จะใช้ ICMP และ Mac / Linux เครื่องจะใช้ UDP มันคุ้มค่าการทดสอบเพราะมันเป็นสิ่งที่ทำได้ง่ายและรวดเร็ว แต่ถ้าผลลัพธ์กลับมาดีไม่จำเป็นหมายความว่าไม่มีปัญหาที่ไหนสักแห่ง


สวัสดี @SunWKim ฉันได้อัปเดตคำตอบของฉันด้วยสิ่งที่คุณถาม ดูที่ด้านล่างของคำตอบของฉัน
Simon Hayter

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

ไบต์แรกอาจเกิดจากสิ่งต่าง ๆ มากมาย แต่ JavaScript ไม่ใช่หนึ่งในนั้นเนื่องจากการตอบกลับส่วนหัวอยู่ก่อนองค์ประกอบอินไลน์เช่น JavaScript, CSS, รูปภาพและอื่น ๆ อย่าสับสนไบต์แรกกับองค์ประกอบและไฟล์จริง ..
Simon Hayter

ฉันไม่ได้สับสนทั้งสอง บางทีถ้าคุณเยี่ยมชม mbff.com.au และเห็นด้วยตัวคุณเองคุณอาจมั่นใจว่าไม่ใช่เรื่องของเวลาสำหรับไบต์แรก ความล่าช้าเกิดขึ้นหลังจากการตอบสนองส่วนหัวแรก
อาทิตย์

1
The delay is occurring after the first header responseนั่นไม่ใช่ไบต์แรก ไบต์แรกคือคำตอบแรก
Simon Hayter

4

1) คุณมี Adobe TypeKit ซึ่งไม่ได้โหลดแบบอะซิงโครนัสกับรหัสปัจจุบัน ลองแทนที่ด้วยรหัสอะซิงโครนัสขั้นสูง: http://help.typekit.com/customer/portal/articles/649336-embed-code

รหัสการฝังแบบมาตรฐานนี้ใช้ประโยชน์จากความจริงที่ว่าแท็กบล็อกการแสดงผลเพิ่มเติมของหน้าเพื่อช่วยป้องกัน FOUT [Flash of Unstyled Text] ในขณะที่สคริปต์ Typekit กำลังโหลดการแสดงผลของหน้าจะถูกบล็อกดังนั้นข้อความจะไม่เริ่มแสดงผลด้วยแบบอักษรสำรอง

2) ทดสอบกับ TypeKit ใหม่ เวลาโหลดเป็นอย่างไร ดีขึ้นหรือไม่ ไปที่ขั้นตอนที่ 3

3) แทนที่ Google Analytics ของคุณด้วย JavaScript ที่อัปเดตซึ่งให้รูปแบบอะซิงโครนัสล่าสุด: https://developers.google.com/analytics/devguides/collection/gajs/

4) การทดสอบ หน้าโหลดยังดีกว่าหรือไม่

5) สุดท้ายให้พิจารณาปรับแต่งรูปภาพเช่น pattern.jpg ฉันแปลงเป็น PNG และสามารถลดขนาดไฟล์จาก 199kB เป็น 56kB วิธีนี้ช่วยลดเวลาในการรับไฟล์: https://www.dropbox.com/s/i06jx509bmprhhh/pattern.png?dl=0

ฉันหวังว่านี่จะช่วยได้.


3

PHP กับองค์ประกอบที่ไม่ใช่ PHP

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

ซึ่งโดยทั่วไปจะระบุปัญหาภายในสคริปต์ PHP ของคุณ

ปัญหาอาจอยู่ในเลเยอร์ PHP หรือฐานข้อมูล การใช้เครื่องมือการดีบักขั้นสูงเช่น XDebug หรือ NewRelic สามารถช่วยให้คุณมองเห็นคอขวดได้อย่างรวดเร็ว

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

ไม่ว่าในกรณีใดการแก้ปัญหามักหมายถึงหนึ่งหรือทั้งหมดของ:

  • ฮาร์ดแวร์เพิ่มเติม
  • การเขียนโปรแกรมที่ดีขึ้น
  • เพิ่มแคช

ฮาร์ดแวร์ที่เร็วกว่านั้นเป็นโซลูชันที่เห็นได้ชัด แต่มักจะมีค่าใช้จ่ายสูงหากคุณใช้ทรัพยากรเฉพาะอยู่แล้ว

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

การแคชช่วยด้วยการลดจำนวนการร้องขอที่ต้องเข้าถึงทรัพยากรที่มีประสิทธิภาพต่ำ

การทดสอบ

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

โฮสติ้ง

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


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