ฉันได้ดูที่การใช้หน่วยความจำ Wordpress บนเว็บไซต์ของฉันดูเหมือนว่าแต่ละหน้าจะได้รับการจัดสรร RAM ขนาด 20MB เพียงเพื่อเตรียมสภาพแวดล้อมที่แสนสบายสำหรับปลั๊กอินทั้งหมดที่จะใช้งานฉันวางแผนลงมือดังนี้
ไม่มีจุดเดียวที่จะเพิ่มประสิทธิภาพไม่มีชายเลวคนเดียวที่กินหน่วยความจำส่วนใหญ่ ปริมาณการใช้ทั้งหมดแผ่กระจายไปทั่วหลายโมดูล PHP มากมาย
เราจะทำให้ Wordpress เริ่มต้นสภาพแวดล้อมในหน่วยความจำเพียงครั้งเดียวแล้วนำมาใช้ซ้ำหลายครั้งสำหรับการเข้าชมแต่ละครั้งได้อย่างไร ฉันไม่ต้องการให้ PHP ช้ากิน 20 MB เมื่อผู้ใช้คลิกแต่ละครั้ง - แม้แต่บนเซิร์ฟเวอร์ที่มีหน่วยความจำจำนวนมากใช้เวลาเพียงไม่กี่วินาทีในการทำงานให้เสร็จ โดยทั่วไปคุณต้องการหน่วยความจำแบบอ่านอย่างเดียวที่สามารถนำกลับมาใช้ใหม่ได้
นอกจากนี้ ... ทำไม 20MB ใครสามารถให้ข้อมูลเชิงลึกเกี่ยวกับเรื่องนี้?
แก้ไข: นี่คือผลลัพธ์ WinCacheGrind ใน Wordpress ที่ทำงานบนเครื่องพัฒนาของฉัน (เร็วกว่าโฮสติ้งที่แชร์) อย่างที่คุณเห็นมันใช้เวลามากกว่าหนึ่งวินาทีในการบีบอัดเพื่อสร้าง HTML ของหน้าหลัก ชะลอตัวลงด้วยการแชร์โฮสติ้งและคุณมีสูตรสำหรับปัญหา ฉันเลือกวิธีที่ใช้เวลาส่วนใหญ่ คุณจะเพิ่มประสิทธิภาพสิ่งนี้อย่างไร
แก้ไข: นี่คือสถิติแบบสอบถามจากเป็นเครื่องมือโปรไฟล์ functions.php ที่ยอดเยี่ยมนี้
โหลด: 12 คิวรี - 532ms - 19.1MB - 43 แคชฮิต / 53 การค้นหา: 15 คำค้นหา - 563ms - 19.0MB - 72 แคชยอดฮิต / 86 จอแสดงผล: 21 คำสั่ง - 705ms - 19.2MB - 234 แคชที่ฮิต / 257
แก้ไข: คุณต้องการที่จะเห็นสิ่งที่รับประกันว่าจะทำให้คุณประหลาด? แทรกบรรทัดเหล่านี้ที่ท้าย index.php:
echo "<pre>\n";
print_r(get_defined_vars());
echo "</pre>\n";
ฉันพยายามนับว่าร่างกายของโพสต์ปัจจุบันเก็บอยู่ในหน่วยความจำกี่ครั้ง ฉันนับ 20 ครั้ง จากนั้นฉันก็รู้ว่า PHP มีการนับการอ้างอิงดังนั้นจำนวนสำเนาที่ลดลงเหลือเพียงสาม: สองดูเหมือนจะอยู่ใน WP_Query หนึ่งในแคชวัตถุ ฉันกำลังตรวจสอบเพิ่มเติม
นี่คือเหตุผลที่ฉันคิดว่า WordPress ต้องการการปรับโครงสร้างเป้าหมายหน่วยความจำใหม่ คุณไม่สามารถตำหนิการใช้หน่วยความจำในความซับซ้อนที่แท้จริงของสิ่งที่มันทำอีกต่อไป มันก็ไม่พวงของสิ่งที่ไม่ถูกต้อง
แก้ไข: หลังจากวันที่พยายามคิดออกนี่คือการค้นพบของฉัน:
1) 88% ของหน่วยความจำทั้งหมดมาจากความต้องการหรือรวมหรือรวมประเภทของการโทร:
2) ไฟล์ php ส่วนใหญ่เกิดขึ้นในช่วงแรกของการให้บริการตามคำขอ (ไม่น่าแปลกใจ) ซึ่งเป็นที่ที่หน่วยความจำทั้งหมดถูกกินหมด:
3) มันค่อนข้างน่าสนใจที่จะพล็อตฟังก์ชั่นทั้งหมดที่จะถูกดำเนินการในระหว่างการร้องขอ มีการโทรทั้งหมดมากกว่า 12,000 สาย ฉันกระวนกระวายใจพวกเขาเพื่อให้มองเห็นได้มากขึ้น (แกนระดับคือความลึกของกองซ้อน):
4) หนทางเดียวที่ฉันจะนึกถึงคือการลดจำนวนไฟล์. php ที่รวมอยู่ให้น้อยที่สุด หากฉันแยกฟังก์ชั่นต่อไฟล์ที่มาจากคุณจะเห็นว่ามีหลาย ๆ ไฟล์ที่ถูกตีหนึ่งครั้งหรือสองครั้ง เราต้องการวิธีที่จะข้ามสิ่งเหล่านั้นเมื่อไม่ต้องการ ตัวอย่างเช่นปลั๊กอินสำรองฐานข้อมูลระยะไกลของฉันได้รับการโหลดและลงทะเบียนเพียงเพื่อไม่ให้ใช้เลย นี่คือการลงจุดแยกตามชื่อไฟล์:
ฉันกำลังเสนอรางวัลที่คุ้มค่ากับชื่อเสียงทั้งหมดของฉัน :) สำหรับการปรับโครงสร้างซึ่งจะนำไปสู่การลดการใช้หน่วยความจำบล็อกของฉันลง 30% หรือมากกว่า
แก้ไข: ฉันติดตั้ง WP 3.1 นี่คือการเปรียบเทียบกับรุ่นเก่า
สีน้ำเงินคือ WP 3.1, สีแดงคือ 3.0.4 WP ใหม่นั้นเร็วกว่า แต่ก็กินหน่วยความจำได้มากกว่า
นี่คือรายการโดยรวมไฟล์
สิ่งนี้ให้ฉันรู้ว่าหน่วยความจำนั้นถูกกินโดย "All In One SEO pack" เท่าไหร่ - หนึ่งอเวนิวจะใช้เพียงเศษเสี้ยวของการทำงานของปลั๊กอินเพื่อให้ได้สิ่งที่ฉันต้องการ นอกจากนี้ปลั๊กอินของฉันเองก็ดูไม่ดีเหมือนกัน
ฉันต้องการลองโหลดแบบมีเงื่อนไขเช่น comment.php (ฉันไม่อนุญาตให้แสดงความคิดเห็นในบล็อกของฉัน) และอีกหลาย ๆ ฉันลบรหัสที่ไม่สอดคล้องทั้งหมด ฉันลด kses.php ลงเพื่อโหลดเฉพาะตารางทั่วโลกตามต้องการ ฉันทำให้ l10n ง่ายขึ้น (ฉันไม่ได้แปลหลายภาษา) ทำให้ฟังก์ชันของมันคืนค่าสตริงทันทีโดยไม่มีการค้นหา ฉันยังห่างไกลจากเครื่องหมาย 30% ที่ฉันตั้งขึ้นโดยพลการ
แก้ไข: ฉันดาวน์โหลดและเปิดใช้งาน APC ด้วยการตั้งค่าเริ่มต้น (แคช opcode 32MB) นี่คือการเปรียบเทียบ:
คุณสามารถเห็นได้ว่าการโหลดรหัสเร่งอย่างหนาแน่นและรหัสยังใช้พื้นที่ในหน่วยความจำน้อยลง (อาจเป็นเพราะเราจัดการกับ opcodes ไม่ใช่ที่มาดั้งเดิม) ปริมาณการใช้หน่วยความจำยังคงค่อนข้างสูง