2009-09-10 3 views
25

यह ऐसा कुछ है जिसे मैंने हमेशा सोचा है: जावा या सी # से PHP धीमा क्यों है, यदि इन सभी 3 भाषाओं को बाइटकोड में संकलित किया गया है और फिर वहां से निष्पादित किया गया है? मुझे पता है कि आम तौर पर PHP प्रत्येक अनुरोध के साथ प्रत्येक फ़ाइल को पुन: संकलित करता है, लेकिन जब भी आप तस्वीर में एपीसी (एक बाइटकोड कैश) लाते हैं, तो प्रदर्शन जावा या सी # के करीब कहीं नहीं होता है (हालांकि एपीसी इसे बेहतर बनाता है)।जावा या सी # से PHP धीमी गति से क्या बनाता है?

संपादित करें: मैं वेब स्तर पर इन भाषाओं के बारे में भी बात नहीं कर रहा हूं। जब मैं संख्या क्रंचिंग कर रहा हूं तो मैं उनकी तुलना के बारे में बात कर रहा हूं। स्टार्टअप समय या उस तरह कुछ भी शामिल नहीं है।

इसके अलावा, मैं यहां दिए गए उत्तरों के आधार पर कुछ प्रकार का निर्णय नहीं ले रहा हूं। PHP मेरी पसंद की भाषा है; मैं बस इसके डिजाइन के बारे में उत्सुक था।

+1

यह लौ-युद्ध क्षेत्र के करीब हो रहा है। इसे व्यक्तिपरक – mcjabberz

+1

के रूप में चिह्नित करने के लिए सबसे अच्छा समुदाय विकी – SilentGhost

+6

होना चाहिए यह एक अच्छा सवाल है, और निश्चित रूप से व्यक्तिपरक या तर्कसंगत नहीं है। अधिक क्रेडिट आईएमओ का हकदार है। –

उत्तर

38

एक कारण PHP में एक जेआईटी कंपाइलर की कमी है, जैसा कि अन्य ने उल्लेख किया है।

एक और बड़ा कारण PHP का गतिशील टाइपिंग है। एक गतिशील रूप से टाइप की गई भाषा हमेशा एक स्थिर टाइप की गई भाषा की तुलना में धीमी होने वाली है, क्योंकि संकलन-समय के बजाय रन-टाइम पर चर प्रकारों की जांच की जाती है। नतीजतन, सी # और जावा जैसी स्थिर टाइप की गई भाषा रन-टाइम पर काफी तेजी से चल रही हैं, हालांकि उन्हें आम तौर पर समय से पहले संकलित किया जाना चाहिए। एक जेआईटी कंपाइलर गतिशील रूप से टाइप की गई भाषाओं के लिए यह एक मुद्दा कम करता है, लेकिन हां, PHP में एक अंतर्निहित नहीं है (हालांकि PHP के लिए किसी तृतीय-पक्ष JIT के उदाहरण के लिए फेसबुक के HHVM देखें)।

+0

+1 को डाउन-वोट क्यों किया जाना चाहिए था। अच्छी बात! – mcjabberz

+0

मुझे आश्चर्य है कि पहले इसका उल्लेख नहीं किया गया था! आईएमओ यह एक जेआईटी कंपाइलर नहीं होने की तुलना में एक बड़ा प्रदर्शन मुद्दा है, हालांकि मुझे लगता है कि यह कई कारकों पर निर्भर करता है। –

+0

अच्छी तरह से गतिशील टाइपिंग निश्चित रूप से जेआईटी संकलन और सामान्य रनटाइम अनुकूलन को और अधिक रोचक बनाता है! – mcjabberz

2

एक जंगली अनुमान यह हो सकता है कि जावा किसी प्रकार के "एप्लिकेशन" सर्वर पर निर्भर करता है, जबकि PHP नहीं करता - जिसका मतलब है कि प्रत्येक बार एक PHP पृष्ठ कहा जाता है।

(यह विशेष रूप से सच था जब पीएचपी था/एक CGI के रूप में नहीं एक अपाचे मॉड्यूल के रूप में या FastCGI के माध्यम से किया जाता है, और)


एक और विचार है कि सी # हो सकता है और Java संकलन कुछ भारी कर सकते हैं संकलन समय पर अनुकूलन - दूसरी तरफ, जैसे PHP स्क्रिप्ट को संकलित किया जाता है (कम से कम, यदि आप एक ऑपोड कैश के साथ "धोखा" नहीं करते हैं) प्रत्येक बार एक पृष्ठ कहलाता है, संकलन चरण वास्तविक त्वरित होना चाहिए ; जिसका मतलब है कि अनुकूलित करने में अधिक समय व्यतीत करना संभव नहीं है।


फिर भी: PHP का प्रत्येक संस्करण आम तौर पर प्रदर्शन के कुछ सुधार के साथ आता है; उदाहरण के लिए, आप PHP 5.2 से 5.3 तक स्विच करते समय, CPU का 15% और 25% के बीच प्राप्त कर सकते हैं।

उदाहरण के लिए, उन मानक पर एक नज़र डालें:


एक महत्वपूर्ण बात, यह भी, कि PHP काफी पैमाने पर करने के लिए आसान है!

1 से कई सर्वरों पर जाने पर आप अक्सर मिलने वाली समस्या सत्र के साथ होती हैं - डीबी या memcached (बहुत आसान) में स्टोर करें, और समस्या हल हो गई है!


एक sidenote के रूप: मैं एक प्रौद्योगिकी का चयन कुछ बेंचमार्क पर गति के प्रतिशत अंतर की एक जोड़ी है क्योंकि वहाँ की सिफारिश नहीं होगा: वहाँ कहीं अधिक महत्वपूर्ण कारकों, जैसे कितनी अच्छी तरह अपनी टीम प्रत्येक प्रौद्योगिकी पता कर रहे हैं - या, यहां तक ​​कि, आप जिस एल्गोरिदम का उपयोग करने जा रहे हैं!

9

मुझे लगता है कि आप यहां सेब और संतरे की तुलना में थोड़ा सा अनुमान लगा रहे हैं - यह मानते हुए कि आप वेब अनुप्रयोग बनाने के लिए इन सभी भाषाओं का उपयोग कर रहे हैं, बस भाषा की तुलना में इसके लिए कुछ और है।(और बहुत समय यह डेटाबेस है जो आपको धीमा कर रहा है ;-)

मैं कभी भी गति तर्क के आधार पर इन भाषाओं में से किसी एक को चुनने का सुझाव नहीं दूंगा।

+9

+1 स्पीड बैलमार्क में मापा गति में बहुत सापेक्ष मतभेदों के बारे में नहीं, कोड कितनी अच्छी तरह लिखा गया है, इस बारे में गति सबसे अधिक समय है। अच्छे डेवलपर इन प्लेटफॉर्मों में से कोई भी उड़ सकते हैं। – ChristopheD

+3

मैं एक भाषा नहीं चुन रहा हूँ। PHP मेरी पसंद की भाषा है (वेब ​​के लिए, कम से कम)। मैं बस उत्सुक था। – ryeguy

+0

यह वास्तव में ऐसी भाषा नहीं है जो गति अंतर बनाती हैं, लेकिन जिस तरह से उनके (संकलित) कोड को निष्पादित किया जाता है। जैसा कि अन्य ने उल्लेख किया है, जावा और .NET वर्चुअल मशीनों को काफी अच्छी तरह से ट्यून किया गया है, यह/ph/जिस तरह से php निष्पादित किया जा सकता है कम अनुकूलित किया जा सकता है। यदि यह एक सैद्धांतिक/भाषा सीमा है या केवल php लोगों के लिए काम करने का मामला शायद बहस के लिए है। (जावास्क्रिप्ट प्रदर्शन में हालिया वृद्धि को देखते हुए मुझे लगता है कि PHP निष्पादन को गति देना काफी संभव है) –

4

सबसे बड़ा एकल कारण यह है कि जावा के हॉटस्पॉट जेवीएम और सी # सीएलआर दोनों जस्ट-इन-टाइम (जेआईटी) संकलन का उपयोग करते हैं। जेआईटी संकलन बाइटकोड को मूल कोड पर संकलित करता है जो सीधे प्रोसेसर पर चलता है।

मुझे लगता है कि जावा बाइटकोड और सीआईएल PHP के आंतरिक बाइटकोड की तुलना में निम्न-स्तर हैं जो जेआईटी अनुकूलन को बहुत आसान और अधिक प्रभावी बना सकता है।

-1

आप जो करना चाहते हैं उस पर निर्भर करता है। कुछ मामलों में, PHP निश्चित रूप से तेज़ है। पीएचपी (सुंदर) फ़ाइल मैनिपुलेशन और अन्य मूलभूत सामान (एक्सएमएल सामान) पर भी अच्छा है। उन मामलों में जावा या सी # धीमा हो सकता है (हालांकि मैंने बेंचमार्क नहीं किया था)।

इसके अलावा, PHP आउटपुट (HTML या जो भी) ब्राउज़र पर डाउनलोड करने की आवश्यकता है, जो समय भी खपत करता है।

इसके अलावा, जावा/सी # की गति उस मशीन के आधार पर बहुत अधिक है (जो एकाधिक हो सकती है)। जावा/सी # आपके कंप्यूटर पर धीमा हो सकता है, जबकि PHP सिर्फ एक सर्वर पर चलता है जहां से यह उपलब्ध है और सर्वर जितना तेज़ होता है (डाउनलोड समय को छोड़कर इत्यादि)।

मुझे नहीं लगता कि वे सामान्य तरीके से तुलनीय हैं। मुझे लगता है कि आपको एक कार्य करने की आवश्यकता है, जिसे आप उन तीन प्रोग्रामिंग भाषाओं के साथ पूरा कर सकते हैं, और उसके बाद इसकी तुलना करें। प्रोग्रामिंग भाषा चुनते समय आपको मूल रूप से हमेशा क्या करना चाहिए; कार्य को फिट करने वाला एक ढूंढें। जब तक यह प्रोग्रामिंग भाषा फिट बैठता है तब तक कार्य को आकार न दें।

+1

आपकी तुलना में अधिक समझ नहीं आती है। ओपी सरल, कच्चे नंबर-क्रंचिंग प्रदर्शन के बारे में पूछ रहा था, और क्यों जावा में एक विधि जावा/सी # में एक ही विधि से धीमी होगी। –

+0

अच्छा, यह बहुत समझ में नहीं आया क्योंकि तुलना करना मुश्किल है। एक और, शायद असंतुष्ट, तुलना पूछना है 'नाशपाती स्वेटर क्यों सेब हैं?'। वे दोनों फल हैं (जैसे PHP/जावा दोनों प्रोग्रामिंग भाषाएं हैं) लेकिन सवाल का कोई वास्तविक जवाब नहीं है क्योंकि वे काफी भिन्न हैं। – Jake

+0

मैं असहमत हूं। आप स्पष्ट रूप से समझा सकते हैं कि सेब की तुलना में नाशपाती मीठे क्यों हैं (यदि आप अपने फल अच्छी तरह से जानते हैं)। भाषाओं में अलग-अलग उपयोग हो सकते हैं, लेकिन इससे आपको उनकी तुलना करने में सक्षम होने से रोकना नहीं चाहिए। –

5

जावा और सी दोनों में JIT compilers है, जो बाइटकोड लेते हैं और सही मशीन कोड में संकलित करते हैं। इसे संकलित करने का कार्य समय ले सकता है, इसलिए सी # और जावा धीमी स्टार्टअप समय से पीड़ित हो सकते हैं, लेकिन एक बार जब कोड जेआईटी संकलित हो जाता है, तो इसका प्रदर्शन उसी गेंदबाज में होता है क्योंकि सी ++ जैसी किसी भी "वास्तव में संकलित" भाषा होती है।

+0

+1 आपका उत्तर मूल रूप से मेरा जैसा ही है। मुझे नहीं लगता कि इसे डायनामिक टाइपिंग का उल्लेख करने के लिए – mcjabberz

0

कोई संकलित भाषा किसी संकलित भाषा से भी तेज नहीं हो सकती है या यहां तक ​​कि छोटी स्थितियों के तहत एक जेआईटी भाषा भी हो सकती है।

यदि आपके परीक्षण कार्यक्रम में "हैलो वर्ल्ड" प्रिंटिंग शामिल नहीं है, तो यदि आप गति के बारे में चिंतित हैं, तो सी # या जावा के साथ चिपके रहें।

+0

आजकल ऐसी भाषाएं जैसे संकलित या संकलित भाषाएं नहीं हैं! – dVaffection

संबंधित मुद्दे