แคช, PHP สร้างภาพขนาดย่อโหลดช้า


179

ส่วนคำถาม A ▉ (100 รางวัลรับรางวัล)
คำถามหลักคือทำอย่างไรให้เว็บไซต์นี้โหลดเร็วขึ้น ก่อนอื่นเราต้องอ่านน้ำตกเหล่านี้ ขอบคุณสำหรับคำแนะนำของคุณเกี่ยวกับการวิเคราะห์การอ่านค่าของน้ำตก เห็นได้จากกราฟน้ำตกต่างๆที่แสดงที่นี่เป็นคอขวดหลัก: รูปขนาดย่อที่สร้างโดย PHP การโหลด jquery ที่ไม่ใช้โปรโตคอลจาก CDN ที่ David แนะนำให้ฉันได้รับรางวัลของฉันแม้ว่าจะทำให้ไซต์ของฉันเร็วขึ้นโดยรวมเพียง 3% และในขณะที่ไม่ตอบคอขวดหลักของเว็บไซต์ เวลาสำหรับการชี้แจงคำถามของฉันและอีกรางวัล:

ส่วนคำถาม B ▉ (ได้รับรางวัล 100 รางวัล)
ตอนนี้โฟกัสใหม่นี้เพื่อแก้ไขปัญหาที่ภาพ jpg จำนวน 6 ภาพมีซึ่งทำให้การโหลดล่าช้ามากที่สุด เหล่านี้ 6 ภาพขนาดย่อ PHP สร้างเล็ก ๆ และมีเพียง 3 ~ 5 กิโล แต่โหลดค่อนข้างมากอย่างช้าๆ สังเกตว่า " time to first byte " บนกราฟต่างๆ ปัญหายังคงไม่ได้รับการแก้ไข แต่เงินจำนวนหนึ่งตกเป็นของเจมส์ผู้ซึ่งแก้ไขข้อผิดพลาดส่วนหัวที่ RedBot ขีดเส้นใต้ : "การร้องขอ If-Modified-ตั้งแต่คำขอตามเงื่อนไขส่งคืนเนื้อหาทั้งหมดไม่เปลี่ยนแปลง" .

ส่วนคำถาม C ▉ (ความโปรดปรานสุดท้ายของฉัน: 250 คะแนน)
น่าเสียดายที่หลังจากข้อผิดพลาดส่วนหัว REdbot.org ได้รับการแก้ไขความล่าช้าที่เกิดจากรูปภาพที่สร้างโดย PHP ยังคงไม่ถูกแตะต้อง เกิดอะไรขึ้นบนโลกนี้เป็นรูปย่อขนาดเล็ก 3 ~ 5Kb ที่กำลังคิดอะไรอยู่? ข้อมูลส่วนหัวทั้งหมดนั้นสามารถส่งจรวดไปยังดวงจันทร์และกลับได้ ข้อเสนอแนะใด ๆ เกี่ยวกับปัญหาคอขวดนี้ได้รับการชื่นชมและถือว่าเป็นคำตอบที่เป็นไปได้เนื่องจากฉันติดอยู่ที่ปัญหาคอขวดนี้เป็นเวลาเจ็ดเดือนแล้ว ขอบคุณล่วงหน้า

[ข้อมูลพื้นหลังบางอย่างในเว็บไซต์ของฉัน: CSS อยู่ด้านบน JS ที่ด้านล่าง (Jquery, JQuery UI, ซื้อเอ็นจิ้นเมนู awm / menu.js, แท็บเอ็นจิ้น js, วิดีโอ swfobject.js) เส้นสีดำบนรูปภาพที่สองแสดงว่าอะไรกำลังโหลด หุ่นยนต์โกรธคือสัตว์เลี้ยงของฉัน "ZAM" เขาไม่เป็นอันตรายและมักจะมีความสุขมากขึ้น]


โหลดน้ำตก: ลำดับ | http://webpagetest.org ป้อนคำอธิบายรูปภาพที่นี่


จัดกลุ่มโดเมนแบบขนาน | http://webpagetest.org ป้อนคำอธิบายรูปภาพที่นี่


น้ำตกเว็บไซต์ Perf | http://site-perf.com ป้อนคำอธิบายรูปภาพที่นี่


Pingdom เครื่องมือน้ำตก | http://tools.pingdom.com

ป้อนคำอธิบายรูปภาพที่นี่


น้ำตก GTmetrix | http://gtmetrix.com

ป้อนคำอธิบายรูปภาพที่นี่



11
ฉันคิดว่าเบราว์เซอร์ส่วนใหญ่ทำการเชื่อมต่อครั้งละ 20 ครั้งเท่านั้นดังนั้นหลังจาก 20 ครั้งแรกจะต้องเสร็จสิ้นก่อนที่จะเริ่มการถัดไปดังนั้นการชะลอตัวหลังจาก 20

1
ฉันคิดว่าคุณลืมที่จะ redact อินสแตนซ์แรกของโดเมนของคุณ อย่างน้อยคุณก็มีพวกที่เหลืออยู่: D
สามสิบdot

2
คุณไม่สามารถรวมรูปภาพเหล่านั้นเข้ากับสไปรต์ได้หรือไม่?
Marcel Korpel

1
@Dagon โปรดทราบว่าHTTP 1.1 RFCจะถาม ( SHOULD) เพื่อให้ไคลเอนต์ HTTP 1.1 ใช้งานได้สูงสุด 2 การเชื่อมต่อกับเซิร์ฟเวอร์ HTTP 1.1 HTTP 1.0 แน่นอนว่าเปิดกว้างกว่ามาก
sarnold

1
@Dagon เบราว์เซอร์จะทำการเชื่อมต่อพร้อมกัน 2 โดเมนเท่านั้น
Endophage

คำตอบ:


61

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

ประการที่สองเมื่อฉันโหลดหน้าเว็บของคุณฉันเห็นการบล็อกส่วนใหญ่ (~ 1.25s) ใน all.js ฉันเห็นว่าเริ่มต้นด้วย (รุ่นเก่า) jQuery คุณควรอ้างอิงจาก Google CDN เพื่อไม่เพียง แต่ลดเวลาในการโหลดแต่อาจหลีกเลี่ยงคำขอ HTTPทั้งหมดได้

โดยเฉพาะอย่างยิ่งไลบรารี jQuery และ jQuery UI ล่าสุดสามารถอ้างอิงได้ที่ URL เหล่านี้ (ดูโพสต์นี้หากคุณสนใจว่าเพราะเหตุใดฉันจึงละเว้นhttp:):

//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

//ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js

หากคุณใช้ jQuery UI ธีมเริ่มต้นคุณสามารถดึง CSS และรูปภาพออกจาก Google CDNได้

กับ jQuery โฮสติ้งที่ดีที่สุดคุณควรรวมawmlib2.jsและtooltiplib.jsเป็นไฟล์เดียว

หากคุณพูดถึงสิ่งเหล่านั้นคุณควรเห็นการปรับปรุงที่สำคัญ


1
ความคิดเห็นยอดเยี่ยมเดฟ! 1.3 JQuery เก่านั้นเล็กกว่านี้มากฉันเลยคิดว่ามันใช้งานได้เร็ว แต่ฉันชอบคำแนะนำของคุณ: ลิงค์ google CDN ใดที่คุณแนะนำให้ฉันใช้เป็น Jqyuery ของฉัน ฉันสามารถใช้จาวาสคริปต์ JQ UI แบบเดียวกันได้หรือไม่? +1 ขอบคุณมาก
Sam

2
ฉันแนะนำให้ใช้ jQuery เวอร์ชั่นล่าสุด (1.4.4 ในปัจจุบัน) เมื่อลดขนาดและ gzipped จะมีความแตกต่างระหว่างสองสามไบต์เท่านั้น ฉันได้อัปเดตคำตอบด้วยลิงก์คู่ไปยัง jQuery และ jQuery UI เวอร์ชั่นล่าสุดบน Google CDN ซึ่งฉันอยากจะแนะนำให้ใช้
เดฟวอร์ด

1
เคล็ดลับที่ดีกับผีสางที่ควรลดจำนวนการเชื่อมต่อกับเซิร์ฟเวอร์ที่เปิด
JamesHalsall

กำลังทำงานเพื่อลดการเชื่อมต่อที่เปิดอยู่ (จาก 40 orso เป็น 30 orso ... การดันครั้งสุดท้ายเป็นเรื่องยากที่สุดเนื่องจากบางส่วนของภาพเป็นพื้นหลังซ้ำแล้วซ้ำอีกและไม่สามารถไปสไปรต์ (หรือ ???)
Sam

อัปเดตเกรดความเร็วหน้า: (96%) เกรด YSlow: (90%) ... และรูปขนาดย่อจะช้าเหมือนเดิม!
Sam

17

ผมมีปัญหาที่คล้ายกันไม่กี่วันที่ผ่านมาและฉันพบhead.js มันเป็นปลั๊กอิน Javascript ที่ช่วยให้คุณสามารถโหลดไฟล์ JS ทั้งหมด paralell หวังว่าจะช่วย


! เหลือเชื่อ ฉันจะมองข้ามสิ่งนั้นได้อย่างไร +1 ฉันจะทำการทดสอบตอนนี้อันนี้ มีกลิ่นเหมือนคืนที่เต็มไปด้วยผลไม้ขอบคุณ Schattenbaum!
Sam

1
ฉันขอถามได้ไหมว่าคุณเป็น Schattenbaum จาก schattenbaum.net
Pekka

12

ฉันอยู่ไกลจากผู้เชี่ยวชาญ แต่ ...

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

รหัสที่ใช้ในการสร้างรูปขนาดย่อควรตรวจสอบสิ่งต่อไปนี้:

  1. มีรูปขนาดย่อของแคชหรือไม่
  2. เป็นรุ่นที่แคชใหม่กว่าภาพต้นฉบับ

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

  1. มีส่วนหัว HTTP_IF_MODIFIED_SINCE หรือไม่
  2. เป็นเวอร์ชันที่แก้ไขล่าสุดของแคชเวลาเหมือนกับ HTTP_IF_MODIFIED_SINCE

หากสิ่งใดสิ่งหนึ่งเหล่านี้เป็นเท็จรูปขนาดย่อที่แคชควรถูกส่งคืน

หากทั้งสองอย่างนี้เป็นจริงสถานะ 304 http ควรถูกส่งคืน ฉันไม่แน่ใจว่าจำเป็นหรือไม่ แต่ฉันจะส่งคืนส่วนหัวของ Cache-Control, Expires และ Last-Modified พร้อมกับ 304

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

แก้ไข: ฉันไม่ได้สังเกตเห็นการเพิ่มโพสต์ของคุณ

session_cache_limiter('public');
header("Content-type: " . $this->_mime);
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 2419200) . " GMT");
// I'm sure Last-Modified should be a static value. not dynamic as you have it here.
header("Last-Modified: " . gmdate("D, d M Y H:i:s",time() - 404800000) . " GMT");

ฉันแน่ใจว่ารหัสของคุณต้องตรวจสอบส่วนหัว HTTP_IF_MODIFIED_SINCE และตอบกลับ เพียงแค่ตั้งค่าส่วนหัวเหล่านี้และไฟล์. htaccess ของคุณจะไม่ให้ผลลัพธ์ที่ต้องการ

ฉันคิดว่าคุณต้องการอะไรแบบนี้:

$date = 'D, d M Y H:i:s T'; // DATE_RFC850
$modified = filemtime($filename);
$expires = strtotime('1 year'); // 1 Year

header(sprintf('Cache-Control: %s, max-age=%s', 'public', $expires - time()));
header(sprintf('Expires: %s', date($date, $expires)));
header(sprintf('Last-Modified: %s', date($date, $modified)));
header(sprintf('Content-Type: %s', $mime));

if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
    if(strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) === $modified) {
        header('HTTP/1.1 304 Not Modified', true, 304);
        // Should have been an exit not a return. After sending the not modified http
        // code, the script should end and return no content.
        exit();
    }
}
// Render image data

เจมส์คุณจับประเด็นสำคัญของปัญหาหลังจากแก้ไขในคำตอบของคุณ! If Modified Sinceปัญหาดูเหมือนว่าจะทำงานในขณะนี้! กระนั้น, ส่วนหัวที่ยาว / เวลารอคอยสำหรับนิ้วหัวแม่มือตัวเล็กยังไม่ได้รับการแก้ไข ...
Sam

@James PS REdbot.org บอกว่าส่วนหัว Expires ของคุณเป็นค่าที่ไม่ถูกต้อง ฉันคิดว่ามันต้องเป็น GMT และไม่ใช่ CET?
แซม

@Sam ขออภัยเซิร์ฟเวอร์ของฉันอยู่ในสหราชอาณาจักรดังนั้นมันจึงสร้างวันที่ใน GMT โดยอัตโนมัติ เพียงใช้ฟังก์ชั่น PHP gmdate แทนหากวันที่ สิ่งนี้จะสร้างวันที่ GMT เทียบกับเวลาเซิร์ฟเวอร์ของคุณ
James

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

@ James ฉันเห็น ... แต่นอกเหนือจากตัวสร้างภาพขนาดย่อของ php แล้วยังมีสคริปต์อื่น ๆ อีกมากมายที่ทำสิ่งต่าง ๆ มากมาย (แปลเมนูโหลด ฯลฯ ) ทั้งหมดในเวลาไม่นาน ... พวกเขา ดูเหมือนจะไม่ได้รับการคอขวดเลย ... ที่จะนำปัญหาไปยังตัวสร้างรูปขนาดย่อ php เท่านั้นหรือไม่
แซม

6

ว้าวมันยากที่จะอธิบายสิ่งต่าง ๆ โดยใช้ภาพนั้น .. แต่ที่นี่มีบางคนพยายาม:

  • ไฟล์ 33-36 โหลดที่ล่าช้าเนื่องจากมีการโหลดแบบไดนามิกภายใน swf และโหลด swf (25) ก่อนอย่างสมบูรณ์ก่อนที่จะโหลดเนื้อหาเพิ่มเติมใด ๆ
  • ไฟล์ 20 & 21 อาจจะ (ฉันไม่รู้เพราะฉันไม่รู้รหัสของคุณ) ไลบรารี่ที่โหลดโดย all.js (11) แต่สำหรับการดำเนินการ 11 ไฟล์มันจะรอทั้งหน้า (และเนื้อหา) เพื่อโหลด (คุณควรเปลี่ยนเป็น domready)
  • ไฟล์ 22-32 ถูกโหลดโดยทั้งสองไลบรารีอีกครั้งหลังจากที่โหลดเสร็จสมบูรณ์

จุดที่น่าสนใจ ฉันเดาว่าไม่มีอะไรรอบ swf ... ฉันจะเปลี่ยนสิ่งที่เป็น domready ได้อย่างไร ฉันรู้ว่าคุณหมายถึงอะไร มันเกี่ยวกับเมื่อจาวาสคริปต์พร้อมและบอกเกี่ยวกับเอกสารพร้อมนี้หรือว่า? เอกสารนั้นควรถูกแทนที่โดย dom.ready
Sam

@Sam หากคุณใช้การแคชฝั่งไคลเอ็นต์ (และคุณควรจะเป็น) คุณสามารถโหลดทรัพยากรที่ใช้โดย swf ใน js หรือ divs ที่ซ่อนอยู่ในหน้าของคุณ
Endophage

4

เพียงเดาง่ายเพราะการวิเคราะห์ประเภทนี้ต้องการการทดสอบ A / B จำนวนมาก: โดเมน. ch ของคุณดูเหมือนจะเข้าถึงได้ยาก (แถบยาวสีเขียวก่อนที่ไบต์แรกจะมาถึง)

ซึ่งหมายความว่าเว็บไซต์. ch นั้นโฮสต์ไม่ดีหรือ ISP ของคุณไม่มีเส้นทางที่ดีสำหรับพวกเขา

เมื่อพิจารณาจากไดอะแกรมแล้วสิ่งนี้สามารถอธิบายถึงผลการปฏิบัติงานครั้งใหญ่ได้

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


4

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

การทดสอบเหล่านี้จะบอกคุณว่ามีอะไรผิดปกติและจะเปลี่ยนแปลงอย่างไร


ขอบคุณ! คะแนนคือ: 92 กับ Page Speed ​​และ 93 ใน Ylow สิ่งที่ขาดหายไปคือ: KEEP ALIVE = off และไม่ได้ใช้ CDN
Sam

UPDATE: 96 และ 90 ตามลำดับในขณะนี้
แซม

4

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


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

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

ยังดีกว่าถ้าไฟล์ถูกแคชให้สร้าง HTML ในวิธีที่ดึงภาพแคชจากดิสก์โดยตรงโดยไม่ต้องผ่าน PHP นั่นคือสิ่งที่ฉันทำในสคริปต์ของฉันสำหรับvideodb.net
andig

"มีโฟลเดอร์แคชอยู่ที่ ... " และพวกเขาจะทำการอ้างอิงอีกครั้งเร็วแค่ไหน? URL ของคุณชี้ไปที่ไฟล์แคชหรือสคริปต์ PHP โดยตรงหรือไม่ คุณเปลี่ยนเส้นทางหรือใช้ readfile () หรือไม่ สคริปต์ PHP เดียวกันมีรหัสการสร้างภาพขนาดย่อหรือคุณเลื่อนการโหลดจำนวนมากของรหัสโดยใช้การรวม / การร้องขอ
symcbean

4

ฉันพบ URL ของเว็บไซต์ของคุณและตรวจสอบไฟล์ jpg แต่ละไฟล์จากหน้าแรก ในขณะที่เวลาโหลดมีความสมเหตุสมผลในขณะนี้ (161ms) แต่ก็รอ 126 มิลลิวินาทีซึ่งไกลเกินไป

ส่วนหัวที่แก้ไขล่าสุดของคุณถูกตั้งค่าเป็น Sat, 01 Jan 2011 12:00:00 GMT ซึ่งดูเหมือน "กลม" เกินไปที่จะเป็นวันที่สร้างจริง ;-)

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

อย่างไรก็ตามนี่ไม่ใช่เหตุผลที่แท้จริงสำหรับความล่าช้า

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

คุณสามารถติดตั้งxdebugเพื่อทำโปรไฟล์สคริปต์และดูว่าคอขวดอยู่ตรงไหน

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

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


ขอบคุณสำหรับนักสืบและพบกับเบาะแสแคปซูล! สิ่งแรกก่อน: ไม่มีฐานข้อมูล การค้นพบของคุณเหมือนกับของฉัน: มันรอ 90% ของเวลาใช่หรือไม่ นิ้วโป้งเล็กน้อยบ้า ความคิดที่น่าสนใจเกี่ยวกับส่วนหัวที่แก้ไขล่าสุดเนื่องจากตามที่ James โพสต์ที่นี่ฉันต้องตั้งค่าส่วนหัวที่แก้ไขล่าสุดเป็นเวลา STATIC (คงที่) ไม่ใช่เวลาแบบไดนามิก / เปลี่ยนแปลงตลอดเวลาที่กำหนดโดยเครื่องกำเนิด php gmdate หรือบางทีคุณหมายถึงอย่างอื่นที่นี่ (เสนอชื่อเข้าชิงรางวัล)
Sam

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

1
ฉันยังเห็นการหน่วงเวลาค่อนข้างนานในไฟล์สแตติกบริสุทธิ์ (เช่นรูปภาพที่เชื่อมโยงกับนิ้วโป้ง) เช่น 36ms ในหนึ่งในเซิร์ฟเวอร์ที่ฉันกำลังจัดการ (ซึ่งไม่ใช่สัตว์ร้าย ... ดูอัลคอร์ที่มี 2Gb ของ RAL) ฉันได้รับเกือบครึ่งหนึ่งเช่น 20ms ในไฟล์สแตติก
แคปซูล

สิ่งที่น่าสนใจ ... 1. คุณใช้ซอฟต์แวร์ / เครื่องมือออนไลน์ในการวัดอะไร? 2. การวัดที่เร็วขึ้น 20 ms ของคุณสอดคล้องกันหรือไม่ (คิดเป็นร้อยละ± xx) คุณพบว่าผลลัพธ์ของคุณเปลี่ยนแปลงหรือไม่ ในกรณีของฉันมันแตกต่างกันมากขึ้นอยู่กับเครื่องมือทดสอบที่ฉันใช้ บางอันมีความสอดคล้องกันมาก ( gtmetrix.com ) บางอันมีความแตกต่างกันอย่างมาก ( pingdom.com ) และมันยากที่จะให้เวลาเป็น XX ms เนื่องจากมันเปลี่ยนแปลงทุกครั้ง ...
Sam

ฉันใช้แท็บ NET ของ Firebug 20ms เป็นเวลาที่เร็วที่สุดที่ฉันจะได้รับ มันแตกต่างกันระหว่าง 20 และ 28 แน่นอน 36ms ที่ฉันวัดบนเซิร์ฟเวอร์ของคุณก็เร็วที่สุดเช่นกัน
แคปซูล

4

หากไม่มีเหตุผลที่ดี (ปกติแล้วไม่มี) ภาพของคุณไม่ควรเรียกล่าม PHP

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

ถ้ามันไม่ทำงานอย่างน้อยตอนนี้คุณจะไม่มีอะไรเกี่ยวข้องกับวิธีการสร้างและตรวจสอบภาพ


ขอบคุณ Goran แต่นี่ไม่ใช่ทางออกที่สง่างามที่ฉันต้องการ: ฉันคิดว่ามีบางสิ่งบางอย่างในกรณีของฉันและโดยปกติมันใช้เวลานานกว่าที่สคริปต์ PHP จะรู้ว่าต้องผ่านส่วนหัว 304 หรืออบ รูปภาพ ฯลฯ ขอบคุณสำหรับคำแนะนำของคุณเพราะมันนำปัญหาจากมุมมองใหม่ทั้งหมด! ซึ่งมีค่าด้วยตัวเอง +1
Sam

3

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

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


ขอบคุณสำหรับคำแนะนำ Ricardo! ดูเหมือนว่า Alix จะแนะนำเช่นเดียวกับคุณ (ใช่ไหม) ในทางปฏิบัติคุณแนะนำให้ฉันใส่ / ลบรหัสจากนั้นทดสอบกราฟอีกครั้งแล้วรายงานกลับ ชื่นชมมาก
Sam

1
ใช่ฉันก็คิดว่าอย่างนั้น. ฉันขอแนะนำให้คุณเปลี่ยนสคริปต์ที่สร้างภาพเพื่อไม่ให้พึ่งพาข้อมูล $ _SESSION หรือสิ่งที่คล้ายกัน จากนั้นใช้ session_write_close () โดยเร็วที่สุดหรือหลีกเลี่ยงการใช้เซสชันทั้งหมดในสคริปต์เหล่านั้น ลองดูphp.net/manual/en/function.session-write-close.php
Ricardo Pardini

3

นี่เป็นเพียงการคาดเดาอย่างหนักเนื่องจากฉันไม่ได้ดูรหัสของคุณ แต่ฉันสงสัยว่าเซสชันอาจมีบทบาทที่นี่ต่อไปนี้มาจากรายการ PHP Manual ในsession_write_close():

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

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


ขอบคุณ Alix สำหรับคำแนะนำของคุณ คำถาม: exit();ฟังก์ชั่นในบรรทัดที่คล้ายกันsession_write_close();คือ? ขณะนี้ผู้เขียนต้นฉบับของรหัสกำลังตรวจสอบปัญหา แต่ helas ดูเหมือนว่าเขายังอยู่ในความมืดเพราะเขามีการอัปเดตโค้ดที่ดีกว่าหากการแก้ไขที่ดีกว่าเนื่องจากการจัดการดูเหมือนจะมีความล่าช้าเหมือนกัน กราฟสร้างกราฟเดียวกันแม้ว่าผลการค้นหาที่แท้จริงจะดู / รู้สึกว่าโหลดเร็วขึ้นมันเป็นปัญหาที่แปลกมาก ...
Sam

1
@ แซม: ฉันไม่สามารถให้แหล่งข้อมูลใด ๆ แก่คุณได้ในตอนนี้ แต่ฉันเชื่อว่าทางออก () จะเรียก destructors ใด ๆ และ / หรือฟังก์ชั่นที่ลงทะเบียนไว้เพื่อปิดเครื่องก่อนแล้วจึงปิดเซสชันเท่านั้น อย่างไรก็ตามฉันพนันได้ว่าปัญหาของคุณน่าจะอยู่ก่อนโทรออก () ของคุณ ดูเพิ่มเติมที่: stackoverflow.com/questions/1674314/…
Alix Axel

2

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


บางสิ่งบางอย่างที่ฉันคิดจะลอง +1 เพื่ออ่านความคิดของฉันและเปิดเผยวิธีแก้ปัญหาแรกที่ฉันทำไปแล้ว สิ่งที่ฉันกำลังหวังว่าจะพบว่าภาพปกติก็จะโหลดช้า sothat มันอาจจะเป็นความเร็วในการดาวน์โหลดด้วยความเร็วหรือสิ่งที่ จำกัด ทางร่างกาย แต่ฉันพบว่าภาพการถ่ายโอนข้อมูลคงที่ปกติแทน (ฉันบันทึกนิ้วหัวแม่มือสร้างและอัปโหลดเป็นแบบคงที่) เร็วมาก ดังนั้นมันจะทำอย่างไรกับ php generator รูปขนาดย่อ!
Sam

2

ฉันคิดว่าแทนที่จะใช้สคริปต์ตัวสร้างภาพขนาดย่อคุณต้องให้TinySRCลองสร้างภาพขนาดย่อที่รวดเร็วและโฮสต์บนคลาวด์ มันมี API ที่ง่ายและใช้งานง่ายคุณสามารถใช้เช่น: -

http://i.tinysrc.mobi/ [height] / [width] /http://domain.tld/path_to_img.jpg

[width] (เป็นทางเลือก): - นี่คือความกว้างเป็นพิกเซล (ซึ่งแทนที่การปรับขนาดหรือการปรับขนาดครอบครัว) หากนำหน้าด้วย '-' หรือ 'x' จะเป็นการลบจากหรือย่อขนาดเป็นเปอร์เซ็นต์ของขนาดที่กำหนด

[ความสูง] (เป็นทางเลือก): - นี่คือความสูงเป็นพิกเซลหากมีความกว้างเช่นกัน นอกจากนี้ยังแทนที่การปรับขนาดหรือปรับขนาดครอบครัวและสามารถนำหน้าด้วย '-' หรือ 'x'

คุณสามารถตรวจสอบสรุป API ได้ที่นี่


คำถามที่พบบ่อย

TinySrc ราคาเท่าไหร่

ไม่มีอะไร

เมื่อใดที่ฉันจะเริ่มใช้ tinySrc

ตอนนี้

บริการน่าเชื่อถือแค่ไหน?

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

เร็วแค่ไหน?

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


โชคดี. เพียงข้อเสนอแนะเนื่องจากคุณไม่ได้แสดงรหัสให้เรา: p


2

เนื่องจากเบราว์เซอร์บางตัวดาวน์โหลดการดาวน์โหลด 2 พารัลเท่านั้นต่อโดเมนคุณไม่สามารถเพิ่มโดเมนเพิ่มเติมเพื่อส่งคำขอผ่านชื่อโฮสต์ที่แตกต่างกันสองถึงสามชื่อ เช่น 1.imagecdn.com 2.imagecdn.com


+1 สำหรับคำแนะนำของคุณ: ขอบคุณ แต่ถ้าคุณมองใกล้ ๆ (ยอมรับ: ภาพวาดที่วุ่นวายมาก) คุณจะเห็นว่าบางรายการมาจาก ....... มีบางอย่างมาจาก ........ com .......... de BUT, บางทีนั่นอาจไม่ได้ทำเคล็ดลับเช่นเดียวกับข้อเสนอแนะของคุณ? (ผมเห็นคุณแนะนำโดเมนย่อยแทนของโดเมนแตกต่างกันเพียง.)
แซม

1

ก่อนอื่นคุณต้องจัดการกับIf-Modified-Sinceคำขอและสิ่งเหล่านี้อย่างเหมาะสมตามที่ James พูด ข้อผิดพลาดดังกล่าวระบุว่า: "เมื่อฉันถามเซิร์ฟเวอร์ของคุณว่าภาพนั้นได้รับการแก้ไขตั้งแต่ครั้งสุดท้ายมันจะส่งภาพทั้งหมดแทนใช่ / ไม่ใช่แบบง่าย"

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

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

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

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


-1: การตอบสนองต่อคำขอแบบมีเงื่อนไขด้วย 'ไม่ได้แก้ไข' และไม่มีเวลาหมดอายุที่แก้ไขจะทำให้ไซต์ของคุณช้าลงใน 99.9% ของกรณี (BTW, AFAIK ไม่มีทางที่จะให้ Apache ออกข้อมูลแคชที่ปรับปรุงใหม่ด้วยการตอบสนอง 304)
symcbean

และสิ่งที่เกี่ยวข้องกับคำตอบของฉันคืออะไร
Halil Özgür

1

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


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

1
NGinx รองรับ sendfile syscall ซึ่งสามารถส่งไฟล์ได้โดยตรงจาก hdd โปรดดูเอกสารwiki.nginx.org/HttpCoreModuleต่อไปนี้ในคำสั่ง 'sendfile', 'aio' เว็บเซิร์ฟเวอร์นี้ให้บริการไฟล์คงที่เช่นภาพเร็วกว่าอาปาเช่
nefo_x

ที่น่าสนใจ ... ฉันไม่รู้ว่าจะมีอะไรดีไปกว่า Apache straight from hddโดยวิธีการทำในสิ่งที่คุณหมายถึงโดย คุณหมายถึงstraight from DDR3 RAM/ straight from Solid State Diskฉันรู้ว่า harddiscs ซึ่งแตกต่างจาก DDR3 ram หรือ Solid State Discs มีเวลาในการเข้าถึงที่ช้ามาก แต่ผมรู้สึกว่านี่ไม่ได้เป็นคอขวดที่นี่ ...
แซม

1
ประเด็นก็คือ nginx จะไม่บัฟเฟอร์เอาต์พุตข้อมูลแบบสแตติกเช่นเดียวกับ apache
nefo_x

1

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

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


+1 เดาน่าตื่นเต้นแล้วลองดูสิ! จะรายงานกลับมาเมื่อฉันได้รับ Waterfall ใหม่ที่กำลังไหล ...
Sam

โดยไม่ได้ผลหลังจากเพิ่มflush();ส่วนหัวแล้วดูเหมือนจะไม่มีการเปลี่ยนแปลงเลย! นั่นแปลว่าอะไร?
Sam

ไม่แน่ใจ. มีวิธีใดบ้างที่คุณสามารถเชื่อมโยงเรากับสคริปต์ PHP ที่เป็นปัญหาได้ ฉันรู้ว่าคุณจ่ายให้ แต่ก็ยากที่จะบอกว่าสิ่งใดที่อาจทำให้เกิดพฤติกรรมโดยไม่สามารถดูได้ว่าทำอะไรอยู่
AR Younce

มีการอ้างอิงภาพขนาดย่อใน CSS หรือในแท็ก <img> หรือไม่
AR Younce

คุณหมายถึงอะไรโดยอ้างอิงใน css? พวกเขาอยู่ในด้าน html ของร่างกายและเป็นดังนี้: <img src="thumbprocessor.php?src=/folder/image.jpg&w=100&h=200" id="thumbnail"/>
แซม

1

ปัญหาส่วนใหญ่ที่เกิดขึ้นช้าคือ TTFB ของคุณ (เวลาเป็นไบต์แรก) ที่สูงเกินไป นี่เป็นเรื่องยากที่จะแก้ไขปัญหาโดยไม่คุ้นเคยกับไฟล์ปรับแต่งเซิร์ฟเวอร์รหัสและฮาร์ดแวร์พื้นฐาน แต่ฉันเห็นได้ว่ามันอาละวาดในทุกคำขอ คุณมีแถบสีเขียวมากเกินไป (ไม่ดี) และแถบสีน้ำเงินน้อยมาก (ดี) คุณอาจต้องการหยุดการเพิ่มประสิทธิภาพ frontend สักหน่อยเพราะฉันเชื่อว่าคุณได้ทำไปมากในพื้นที่นั้น แม้จะมีสุภาษิตว่า " 80% -90% ของเวลาตอบสนองผู้ใช้จะใช้เวลาในส่วนหน้า " ฉันเชื่อว่าคุณกำลังเกิดขึ้นในแบ็กเอนด์

TTFBเป็นแบ็กเอนด์, เซิร์ฟเวอร์, การประมวลผลล่วงหน้าก่อนการส่งออกและการจับมือกัน

กำหนดเวลาการเรียกใช้รหัสเพื่อค้นหาสิ่งที่ช้าเช่นการสืบค้นฐานข้อมูลที่ช้าการป้อนเวลาและออกจากฟังก์ชัน / วิธีการเพื่อค้นหาฟังก์ชันที่ช้า ถ้าคุณใช้ PHP, ลองFirePHP บางครั้งอาจมีการเรียกใช้แบบสอบถามที่ช้าหนึ่งหรือสองรายการระหว่างการเริ่มต้นหรือเริ่มต้นเช่นดึงข้อมูลเซสชันหรือตรวจสอบการรับรองความถูกต้องและสิ่งที่ไม่ การเพิ่มประสิทธิภาพข้อความค้นหาอาจนำไปสู่การได้รับผลตอบแทนที่ดี บางครั้งรหัสถูกเรียกใช้โดยใช้ php prepend หรือ spl autoload เพื่อให้ทำงานได้ทุกอย่าง บางครั้งมันสามารถกำหนดค่า apache conf และ tweaking ที่ช่วยประหยัดทั้งวันได้

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

คุณสามารถลองการดึงข้อมูล DNS ล่วงหน้าเพื่อต่อสู้กับโดเมนและแหล่งข้อมูลมากมายhttp://html5boilerplate.com/docs/DNS-Prefetching/

เซิร์ฟเวอร์ของคุณเป็นเซิร์ฟเวอร์ที่ดี / เหมาะสมหรือไม่? บางครั้งเซิร์ฟเวอร์ที่ดีกว่าสามารถแก้ปัญหาได้มากมาย ฉันเป็นแฟนของ ' ฮาร์ดแวร์ราคาถูก, โปรแกรมเมอร์มีราคาแพง ' ความคิดถ้าคุณมีโอกาสและเงินอัพเกรดเซิร์ฟเวอร์ และ / หรือใช้ CDN เช่นmaxcdnหรือcloudflareหรือคล้ายกัน

โชคดี!

(ps ฉันไม่ได้ทำงานให้กับ บริษัท เหล่านี้ใด ๆ นอกจากนี้ลิงก์ Cloudflare ด้านบนจะยืนยันว่า TTFB นั้นไม่สำคัญเลยฉันโยนมันลงไปในนั้น


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

-1

ขออภัยที่จะบอกว่าคุณให้ข้อมูลน้อย และคุณมีคำแนะนำที่ดีอยู่แล้ว

คุณแสดงภาพเหล่านั้นอย่างไร หากคุณกำลังสตรีมมิ่งผ่านทาง PHP คุณกำลังทำสิ่งที่เลวร้ายมากแม้ว่าจะถูกสร้างขึ้นแล้วก็ตาม

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

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

การทำเช่นนั้นจะแก้ไขเซสชัน php, เบราว์เซอร์ - พร็อกซี่, แคช, ETAGS ไม่ว่าจะเกิดอะไรขึ้นในคราวเดียว

WP-Supercache ใช้กลยุทธ์นี้หากกำหนดค่าไว้อย่างเหมาะสม

ฉันเขียนเรื่องนี้เมื่อไม่นานมานี้ ( http://code.google.com/p/cache-on-request/source/detail?r=8 ) การแก้ไขครั้งล่าสุดจะใช้งานไม่ได้ แต่ฉันคิดว่า 8 หรือน้อยกว่านั้นจะสามารถใช้งานได้และคุณสามารถ คว้า. htaccess เป็นตัวอย่างเพื่อทดสอบสิ่งต่าง ๆ (แม้ว่าจะมีวิธีที่ดีกว่าในการกำหนดค่า. htaccess มากกว่าวิธีที่ฉันใช้)

ฉันอธิบายกลยุทธ์นั้นในบล็อกโพสต์นี้ ( http://www.stefanoforenza.com/need-for-cache/ ) มันอาจจะเขียนไม่ดี แต่มันอาจช่วยให้ชัดเจนขึ้น

อ่านเพิ่มเติม: http://meta.wikimedia.org/wiki/404_handler_caching


ใจ ErrorDocument ไม่ใช่สิ่งที่ดีที่สุดที่คุณสามารถทำได้เพราะมันสร้างรายการในบันทึกข้อผิดพลาดของ apache การเปลี่ยนเส้นทาง -f จะดีกว่า
tacone

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

มันจะทำให้เซิร์ฟเวอร์ช้าลงไม่ว่าสคริปต์นั้นจะดีเพียงใด สำหรับทุกอิมเมจเซิร์ฟเวอร์จะต้องโหลด php และให้สตรีมอิมเมจเป็นไบต์ต่อไบต์ ปล่อยให้ apache ทำงานโดยไม่ต้องผ่านตัวแปล php จากผลข้างเคียงข้อผิดพลาดที่เป็นไปได้อื่น ๆ จะถูกหลีกเลี่ยงโดยอัตโนมัติเช่นเซสชันเนื้อหาที่มีความยาวแคชแคช mime / type เป็นต้นเมื่อประสิทธิภาพเป็นสิ่งสำคัญคุณไม่ควรแม้แต่จะโหลด php (แต่ในรุ่นเวลา)
tacone

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