2010-11-02 13 views
86

मुझे पता है कि आप PHP को कम कर सकते हैं, लेकिन मुझे आश्चर्य है कि कोई बिंदु है या नहीं। PHP एक व्याख्या की गई भाषा है इसलिए संकलित भाषा की तुलना में थोड़ा धीमी गति से चलती है। मेरा सवाल है: क्या ग्राहक पृष्ठ लोड में दृश्यमान गति सुधार देखेंगे और यदि मैं अपने PHP को छोटा करना चाहता हूं?क्या PHP को छोटा करने का कोई मुद्दा है?

इसके अलावा, क्या PHP या कुछ समान संकलित करने का कोई तरीका है?

उत्तर

141

PHP बाइटकोड में संकलित किया गया है, जिसे बाद में वीएम जैसा कुछ मिलता है। कई अन्य पटकथा भाषाएं समान सामान्य प्रक्रिया का पालन करती हैं, जिनमें पर्ल और रूबी भी शामिल हैं। यह वास्तव में एक पारंपरिक व्याख्या की भाषा नहीं है, कहें, बेसिक।

यदि आपने स्रोत को "छोटा" करने का प्रयास किया तो कोई प्रभावी गति वृद्धि नहीं होगी। bytecode cache like APC का उपयोग करके आपको बड़ी वृद्धि मिलेगी।

फेसबुक ने HipHop नामक एक कंपाइलर पेश किया जो PHP स्रोत को C++ कोड में बदल देता है। बड़े PHP लोगों में से एक रasmस लेरडोर्फ़ ने presentation for Digg earlier this year किया जो हिपहॉप द्वारा दिए गए प्रदर्शन सुधारों को शामिल करता है। संक्षेप में, यह कोड को अनुकूलित करने और बाइटकोड कैश का उपयोग करने से बहुत तेज़ नहीं है। उपयोगकर्ताओं के बहुमत के लिए हिपहॉप अधिक है।

फेसबुक ने हाल ही में HHVM का अनावरण किया, जो उनके काम करने वाले हिपहॉप पर आधारित एक नई आभासी मशीन है। यह अभी भी नया है और यह स्पष्ट नहीं है कि यह आम जनता को एक बड़ा प्रदर्शन बढ़ावा देगा।

बस यह सुनिश्चित करने के लिए कि यह स्पष्ट रूप से कहा गया है, कृपया that presentation पूर्ण में पढ़ें। यह बेंचमार्क और प्रोफाइल कोड के कई तरीकों को इंगित करता है और फेसबुक से xdebug और xhprof जैसे टूल का उपयोग करके बाधाओं की पहचान करता है।

+1

ध्यान दें कि संपूर्ण बाइटकोड/वीएम चीज वास्तव में बाहरी (!) बाइटकोड कैश के बिना आपको कुछ भी नहीं खरीदती है। मुझे नहीं लगता कि क्यों PHP डिफ़ॉल्ट रूप से बाइटकोड को फेंकता रहता है ... – delnan

+0

मुझे लगता है कि यह एक साझा होस्टिंग समस्या है। एपीसी को डिफ़ॉल्ट रूप से पुराने 6.0-आधारित ट्रंक के रूप में PHP में शामिल किया गया है। मुझे यकीन नहीं है कि हम इसे 5.4 में डिफ़ॉल्ट रूप से देखेंगे या जो भी नया ट्रंक समाप्त होता है ... – Charles

+0

जानकारी के लिए बहुत बहुत धन्यवाद। दुर्भाग्य से मेरे पास मेरे सर्वर का गहरा नियंत्रण नहीं है (यह किराए पर लिया गया है)। क्या यह संभवतः वेब होस्ट एपीसी का उपयोग करता है? – Bojangles

13

PHP Accelerator, या APC जैसे ओपोड कैश का उपयोग करने के पक्ष में PHP को छोटा करने का विचार भूल जाएं।

या की तरह memcached

+2

memcached एक ओपोड कैश नहीं है! – Javier

+12

मैंने कहा "कुछ और।" – Stephen

+3

यह स्पष्ट नहीं है कि आप ऑपोड कैश के अलावा कुछ और मतलब है। – Treffynnon

3
कुछ नए सिरे से लिखना (कम चर नाम) के साथ

कुछ और आप स्मृति के कुछ बाइट्स बचा सकता है, लेकिन यह भी seldomly महत्वपूर्ण है।

हालांकि मैं अपने कुछ अनुप्रयोगों को ऐसे तरीके से डिज़ाइन करता हूं जो स्क्रिप्ट को एकसाथ शामिल करने की अनुमति देता है। php -w के साथ इसे स्क्रिप्ट स्टार्टअप के लिए थोड़ा सा गति लाभ जोड़ने, महत्वपूर्ण रूप से संकलित किया जा सकता है। एक ऑपोड-सक्षम सर्वर पर हालांकि यह केवल कुछ फ़ाइल माटा चेक सहेजता है।

1

PHP कंपाइलर्स हैं ... सूची के लिए this previous question देखें; लेकिन (जब तक आप फेसबुक का आकार नहीं लेते हैं या क्लाइंट-साइड चलाने के लिए अपने आवेदन को लक्षित नहीं कर रहे हैं) वे आम तौर पर

सरल ओपोड कैशिंग आपको शामिल प्रयासों के लिए अधिक लाभ प्रदान करेंगे । या बाधाओं की पहचान करने के लिए अपने कोड को प्रोफाइल करें, और फिर इसे अनुकूलित करें।

3

यह एक विज्ञापन से कम जवाब है। मैं एक PHP एक्सटेंशन पर काम कर रहा हूं जो स्थिर टाइपिंग के साथ वीएम पर चलाने के लिए ज़ेंड ऑपोड का अनुवाद करता है। यह मनमाने ढंग से PHP कोड को तेज नहीं करता है। यह आपको कोड लिखने की अनुमति देता है जो नियमित रूप से PHP की अनुमति देता है। यहां कुंजी स्थिर टाइपिंग है। एक आधुनिक सीपीयू पर, एक गतिशील भाषा शाखा गलतफहमी दंड बाएं और दाएं खाती है। तथ्य यह है कि PHP arrays हैश टेबल भी उच्च लागत लगाता है: बहुत से शाखा गलतफहमी, कैश का अक्षम उपयोग, खराब स्मृति prefetching, और कोई भी सिम अनुकूलन। विशेष रूप से शाखा गलतफहमी और कैश मिस आज के प्रोसेसर के लिए एचिल्स 'एड़ी हैं।मेरा छोटा वीएम हैश टेबल के बजाय स्थिर प्रकार और सी सरणी का उपयोग करके उन समस्याओं को दूर करता है। नतीजा लगभग दस गुना तेजी से चल रहा है। यह बाइटकोड व्याख्या का उपयोग कर रहा है। विस्तार वैकल्पिक रूप से जीसीसी के माध्यम से एक समारोह संकलित कर सकते हैं। उस स्थिति में, आपको दो से पांच गुना अधिक गति मिलती है।

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

फिर, विस्तार एक सामान्य PHP गतिवर्धक नहीं है:

यहाँ रुचि किसी के लिए लिंक भी है। आपको इसके लिए कोड विशिष्ट लिखना होगा।

1

आपको PHP को कम करने की आवश्यकता नहीं है। बेहतर प्रदर्शन प्राप्त करने के लिए, एक ओपोड कैश स्थापित करें; लेकिन आदर्श समाधान आपके PHP को 5.5 संस्करण या ऊपर अपग्रेड करना होगा क्योंकि नए संस्करणों में डिफ़ॉल्ट रूप से एक ऑपोड कैश होता है जिसे ज़ेंड ऑप्टिमाइज़र कहा जाता है जो अन्य http://massivescale.blogspot.com/2013/06/php-55-zend-optimiser-opcache-vs-xcache.html से बेहतर प्रदर्शन कर रहा है।