มีจุดที่จะลดขนาด PHP หรือไม่?


101

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

นอกจากนี้ยังมีวิธีรวบรวม PHP หรือสิ่งที่คล้ายกันหรือไม่?


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

อีกประเด็นหนึ่งคือการประหยัดพื้นที่เซิร์ฟเวอร์ (หากเป็นสิ่งสำคัญ)
George Ogden

คำตอบ:


161

PHP ถูกรวบรวมเป็น bytecode ซึ่งจะถูกตีความจากสิ่งที่คล้ายกับ VM ภาษาสคริปต์อื่น ๆ อีกมากมายทำตามกระบวนการทั่วไปเช่นเดียวกันรวมถึง Perl และ Ruby ไม่ใช่ภาษาที่ตีความแบบดั้งเดิมเช่นพูดภาษาเบสิก

จะไม่มีการเพิ่มความเร็วที่ได้ผลหากคุณพยายาม "ย่อขนาด" แหล่งที่มา คุณจะได้รับเพิ่มขึ้นที่สำคัญโดยใช้แคช bytecode เช่น APC

Facebook เปิดตัวคอมไพเลอร์ชื่อHipHopที่แปลงซอร์ส PHP เป็นโค้ด C ++ Rasmus Lerdorf หนึ่งในนักพัฒนา PHP รายใหญ่ได้นำเสนอ Digg เมื่อต้นปีที่ผ่านมาซึ่งครอบคลุมการปรับปรุงประสิทธิภาพที่ได้รับจาก HipHop ในระยะสั้นมันไม่เร็วไปกว่าการเพิ่มประสิทธิภาพโค้ดและการใช้แคช bytecode HipHop นั้นมากเกินไปสำหรับผู้ใช้ส่วนใหญ่

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

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


2
โปรดทราบว่าสิ่งที่ bytecode / vm ทั้งหมดไม่ได้ซื้ออะไรให้คุณเลยหากไม่มีแคช bytecode ภายนอก (!) ฉันไม่เข้าใจว่าทำไม PHP ถึงทิ้ง bytecode ไปโดยปริยาย ...

ฉันคิดว่ามันเป็นปัญหาการโฮสต์ที่ใช้ร่วมกัน APC จะรวมอยู่ใน PHP ตามค่าเริ่มต้นของลำต้นที่ใช้ 6.0 แบบเก่า ฉันไม่แน่ใจว่าเราจะเห็นมันโดยค่าเริ่มต้นใน 5.4 หรืออะไรก็ตามที่ลำต้นใหม่ถูกเรียกว่า ...
Charles

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

3
ผู้ให้บริการโฮสติ้งที่ใช้ร่วมกันส่วนใหญ่ไม่ใช้ APC คุณควรตรวจสอบ Virtual Private Server เพื่อให้คุณสามารถควบคุมการกำหนดค่าได้ VPSes มักมีราคาแพงกว่าโฮสติ้งที่ใช้ร่วมกันทั่วไป แต่ราคาแพงกว่าเซิร์ฟเวอร์เฉพาะจริงมาก ผู้ให้บริการ VPS ยอดนิยม ได้แก่ Slicehost และ Linode อย่าลืมว่าคุณควรทำการเปรียบเทียบและสร้างโปรไฟล์โค้ดของคุณก่อน !
Charles

15

ละทิ้งแนวคิดในการลดขนาด PHP เพื่อใช้แคช opcode เช่นPHP AcceleratorหรือAPC.

หรืออย่างอื่นเช่น memcached


18
ฉันพูดว่า "อย่างอื่น"
Stephen

3
ไม่ชัดเจนว่าคุณหมายถึงอย่างอื่นที่ไม่ใช่แคช opcode
Treffynnon

5
memcached เป็นวิธีที่สมบูรณ์แบบในการปรับปรุงประสิทธิภาพ ...
Charles

1
หากคุณใช้ PHP 5.5 คุณไม่จำเป็นต้องติดตั้งแคช opcode ใด ๆ เพราะมันมาพร้อมกับมันตามค่าเริ่มต้น
ไฟร์วอลล์

1
ฉันมองหา cromulent จริงๆ :( ฉันเห็นด้วยกับคนอื่น ๆ การใช้ memcached ในบริบทนี้ทำให้เข้าใจผิดการแคชข้อมูลเป็นส่วนหนึ่งของกระบวนการรวบรวมไม่เหมือนกับรหัส op ที่เป็นผลลัพธ์
Mike Purcell

3

ด้วยการเขียนใหม่ (ชื่อตัวแปรที่สั้นกว่า) คุณสามารถบันทึกหน่วยความจำได้ไม่กี่ไบต์ แต่ก็ไม่ค่อยมีนัยสำคัญเช่นกัน

อย่างไรก็ตามฉันออกแบบแอปพลิเคชันบางอย่างในลักษณะที่อนุญาตให้รวมสคริปต์เข้าด้วยกัน ด้วยการphp -wที่จะสามารถบดอัดอย่างมีนัยสำคัญเพิ่มกำไรความเร็วเล็ก ๆ น้อย ๆ สำหรับการเริ่มต้นสคริปต์ บนเซิร์ฟเวอร์ที่เปิดใช้งาน opcode สิ่งนี้จะบันทึกการตรวจสอบ mtime ไฟล์เพียงไม่กี่ไฟล์เท่านั้น


3

นี่เป็นคำตอบน้อยกว่าโฆษณา ฉันกำลังทำงานกับส่วนขยาย PHP ที่แปล Zend opcodes เพื่อทำงานบน VM ด้วยการพิมพ์แบบคงที่ ไม่เร่งรหัส PHP ตามอำเภอใจ ช่วยให้คุณสามารถเขียนโค้ดที่ทำงานได้เร็วกว่าที่ PHP ทั่วไปอนุญาต คีย์ในที่นี้คือการพิมพ์แบบคงที่ ในซีพียูสมัยใหม่ภาษาแบบไดนามิกจะกินการคาดคะเนผิดสาขาไปทางซ้ายและขวา ข้อเท็จจริงที่ว่าอาร์เรย์ PHP เป็นตารางแฮชยังมีค่าใช้จ่ายสูง: การคาดการณ์ผิดสาขาจำนวนมากการใช้แคชอย่างไม่มีประสิทธิภาพการดึงข้อมูลหน่วยความจำที่ไม่ดีและไม่มีการเพิ่มประสิทธิภาพ SIMD ใด ๆ การคาดเดาผิดสาขาและการพลาดแคชโดยเฉพาะอย่างยิ่งคือส้นเท้าของ Achilles สำหรับโปรเซสเซอร์ในปัจจุบัน VM ตัวน้อยของฉันหลีกเลี่ยงปัญหาเหล่านั้นโดยใช้ประเภทคงที่และอาร์เรย์ C แทนตารางแฮช ผลลัพธ์จบลงด้วยการทำงานเร็วขึ้นประมาณสิบเท่า นี่คือการใช้การตีความ bytecode ส่วนขยายสามารถเลือกที่จะรวบรวมฟังก์ชันผ่าน gcc ในกรณีนี้คุณจะได้รับความเร็วเพิ่มขึ้นสองถึงห้าเท่า

นี่คือลิงค์สำหรับทุกคนที่สนใจ:

https://github.com/chung-leong/qb/wiki

อีกครั้งส่วนขยายไม่ใช่ตัวเร่ง PHP ทั่วไป คุณต้องเขียนโค้ดเฉพาะสำหรับมัน


3

ใช่มีจุดหนึ่ง (ไม่ใช่ทางเทคนิค)

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

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


1

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

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


1

คุณไม่จำเป็นต้องลดขนาด PHP เพื่อให้ได้ประสิทธิภาพที่ดีขึ้นให้ติดตั้งแคช Opcode แต่ทางออกที่ดีที่สุดคือการอัปเกรด PHP ของคุณเป็นเวอร์ชัน 5.5 ขึ้นไปเนื่องจากเวอร์ชันที่ใหม่กว่ามีแคช opcode โดยค่าเริ่มต้นเรียกว่า Zend Optimiser ซึ่งทำงานได้ดีกว่ารุ่นอื่น ๆhttp://massivescale.blogspot.com/2013/06 /php-55-zend-optimiser-opcache-vs-xcache.html

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