2009-12-24 14 views
5

PHP में सबसे महंगे संचालन क्या हैं? मुझे पता है कि @ ऑपरेटर का उपयोग करने जैसी चीजें महंगा हो सकती हैं। आप और क्या विचार करेंगे?PHP में सबसे महंगा संचालन?

+5

आप इन छोटी प्रतिभा समस्याओं को पकड़ने की कोशिश क्यों कर रहे हैं? यदि आपका प्रोग्राम धीमा है, तो यह @ –

+4

की वजह से नहीं है "पॉल टॉम्बलिन को $ 10 पेपैल" एक बहुत महंगा है। लेकिन पूरी तरह से इसके लायक है। –

+0

@valya मैं विभिन्न चीजों की भावना प्राप्त करने की कोशिश कर रहा हूं जिन्हें प्रदर्शन से संबंधित किया जाना चाहिए। मैं केवल एक उदाहरण के रूप में @ ऑपरेटर का उपयोग करता हूं। –

उत्तर

18
  • serialize(), धीमी है के रूप में eval है() को create_function(), और प्रणाली() और संबंधित कार्यों के माध्यम से अतिरिक्त प्रक्रियाओं को उत्पन्न करने।
  • कुछ भी एपीसी कैश नहीं कर सकता - conditional includes, eval() एड कोड, आदि
  • डेटाबेस कनेक्शन खोलना। हमेशा अपने कनेक्शन कैश करें और उनका पुन: उपयोग करें।
  • ऑब्जेक्ट क्लोनिंग
  • नियमित अभिव्यक्तियां। नियमित अभिव्यक्ति संचालन पर हमेशा सामान्य स्ट्रिंग ऑपरेशंस का उपयोग करें यदि आपको regexp की कार्यक्षमता की आवश्यकता नहीं है, उदा। जहां संभव हो preg_replace()str_replace() का उपयोग करें।
  • प्रवेश और डिस्क लेखन धीमी गति से हो सकता है - अनावश्यक प्रवेश और फाइल संचालन

कुछ सूक्ष्म अनुकूलन नहीं है जो अच्छा अभ्यास कर रहे हैं को खत्म करने, लेकिन अपने लब्बोलुआब यह प्रदर्शन करने के लिए बहुत फर्क नहीं होगा:

  • इको का उपयोग प्रिंट
  • से अधिक तेज़ है, दोहरे उद्धृत स्ट्रिंग में इनलाइनों का उपयोग करने से वेरिएबेटिंग चर तेज है।
  • तर्कों की सूची के साथ गूंज का उपयोग तर्कों को संयोजित करने से तेज़ है। उदाहरण: echo 'How are you ',$name,' I am fine ',$var1echo 'How are you '.$name.' I am fine '.$var1
  • नोटिस और चेतावनियों के साथ विकसित होने से तेज़ है। यह सुनिश्चित करना कि वे ट्रिगर नहीं होते हैं, उन्हें PHP पर त्रुटि नियंत्रण चलाने से बचाता है।
+2

वास्तव में जिस तरह का उत्तर मैं ढूंढ रहा हूं। धन्यवाद @ ज़ोंबैट !! –

+0

मेरे अनुभव में, किसी ऑब्जेक्ट को क्लोन करना एक नया इंस्टेंट करने से सस्ता है। –

2

कुछ भी जो नेटवर्क कनेक्शन के बावजूद जा रहा है - उदाहरण के लिए, एक webservice को कॉल करना, आमतौर पर इसे स्थानीय रूप से ऑपरेशन करने से अधिक समय लगेगा।

(यहां तक ​​कि अगर यह बहुत सीपीयू भी खर्च नहीं करता है, यह समय खर्च करेंगे)

0

foreach() बयान, विशेष रूप से घोंसले के साथ, अक्सर महंगे हैं; हालांकि यह उतना ही बेवकूफ है - और कभी-कभी खराब-योजनाबद्ध- प्रोग्रामिंग के लिए PHP की गलती के रूप में दृष्टिकोण।

हालांकि मुझे लगता है कि यह जेएस और अन्य भाषाओं के भी सच है, इसलिए लगभग निश्चित रूप से मेरी गलती है। =/

+0

यह जरूरी नहीं है कि वह खुद ही foreach है जो धीमा है, बल्कि foreach के भीतर तर्क।सबसे अच्छा अभ्यास डेटा पर एक बार और केवल एक बार, जब भी संभव हो, लूप करना होगा, और जितना संभव हो सके फ़ोरैच लूप के अंदर छोटी प्रोसेसिंग करना होगा, क्योंकि उस लूप को सेट के आकार के आधार पर 1-अनंत काल चलाया जाएगा, खत्म हो रहे हैं। –

4
"Hello $name" 

वाक्य रचना धीमी गति से

'Hello ' . $name 

भी __get() __set() __call(), आदि कर रहे हैं धीमी गति से

है और, अगर आप इतना परवाह है, तो आप SPL

+1

+1, मुझे कभी नहीं पता था कि "हैलो $ नाम" ''हैलो' से धीमा था। $ name' =) –

+0

PHP स्ट्रिंग इंटरपोलेशन वह नहीं है जिसे मैं "PHP में सबसे महंगी परिचालनों में से एक" कहूंगा। यह बहुत तेज़ है। हां, आप सही हैं: उपरोक्त इंटरपोलेशन उदाहरण कॉन्सटेनेशन उदाहरण के सापेक्ष 20% या 25% धीमी है लेकिन इसका मतलब यह नहीं है कि इंटरपोलेशन एक प्रमुख ड्रैग है। –

+0

न तो "@" या कुछ और करें। डरने वाली सुविधाओं को रोकें, अपने खराब कोड से डरें –

1

मैं से अनुकूलित का उपयोग कर सकते structures लूप के अंदर एसक्यूएल प्रश्न कहें। इस जैसे:

foreach ($db->query('SELECT * FROM categories') as $cat) 
{ 
    foreach ($db->query('SELECT * FROM items WHERE cat_id = ' . $cat['cat_id']) as $item) 
    { 
    } 
} 

कौन सा, रिकार्ड के लिए, कुछ इस तरह में छोटा किया जा सकता है:

$sql = 'SELECT c.*, i.* 
      FROM categoriess c 
    LEFT JOIN items i USING (cat_id) 
     ORDER BY c.cat_order'; 

foreach ($db->query($sql) as $row) 
{ 
} 
+4

यह PHP की बाधा नहीं है –

+0

मुझे लगता है कि दूसरा उदाहरण थोड़ा/अधिक/महंगा होगा क्योंकि एक असाइनमेंट निर्देश है। –

+1

ओह हाँ? तो यह क्या है? सवाल यह है कि "PHP में सबसे महंगी चीजें क्या हैं" और जवाब "कुछ भी है जो आपने एक लूप के अंदर रखा है जो वहां नहीं है।" लेकिन आप सही हैं, उन अजीब सिंगल कोट्स की देखभाल करने के लिए यह बहुत महत्वपूर्ण है! –

5

बल्कि संभावित क्षेत्रों है कि धीमी गति कर रहे हैं यह पता लगाने की कोशिश कर रहा से, एक रूपरेखा उपकरण का उपयोग। xDebug इंस्टॉल करना संभवतः मेरे द्वारा लिखे गए कोड को बेहतर बनाने के लिए मैंने किया है सबसे आसान और सर्वोत्तम चीजों में से एक था। सर्वोत्तम परिणामों के लिए WinCacheGrind (या अपने ओएस के लिए सही संस्करण) के साथ स्थापित करें।

+0

सहमत हुए। मैं बस चीजों के बारे में सोच रहा हूं कि कोई भी स्वचालित रूप से बचने के लिए मांसपेशी-स्मृति को प्रतिबद्ध करना चाहता है। मेरे दिमाग में, प्रोफाइलिंग आपको बाधाओं को दिखाने में सबसे अच्छी है जिसे आप अन्यथा नहीं जानते थे। –

+0

हां - महान बिंदु। यदि आप एक ढांचे का उपयोग करते हैं, तो आप पाएंगे कि अधिकांश समय उस ढांचे में बिताया जाता है - और अक्सर - एक जगह नहीं है जिसे आप वास्तव में अनुकूलित करने में सक्षम होंगे। एपीसी की तरह कुछ चमत्कार (या उस मामले के लिए कोई ऑपोड कैश) काम कर सकते हैं। इसके अलावा, WinCacheGrind बहुत पुराना है, Ubuntu के लिए चेकआउट kCacheGrind (मैंने केवल एक उपकरण के लिए एक वीएम चलाया)। –

0

अपने अनुभव से वास्तविक शर्तों में सबसे महंगा संचालन echo कथन है। ब्राउजर पर आउटपुट करने से पहले सभी स्ट्रिंग को एकसाथ कोशिश करें और जुड़ें, इसके बाद डेटाबेस कॉल विशेष रूप से जुड़ती है!

कोड कभी-कभी आपके एल्गोरिदम और डेटा संरचनाओं को पुन: सक्रिय करके एक्स 10 प्रदर्शन वृद्धि भी प्राप्त कर सकता है। कोई प्रोग्राम प्राप्त करें और इसकी आधा लंबाई आज़माएं, क्या आप इसे फिर से आधा कर सकते हैं?

+0

तो क्या आप एक वैरिएबल पर गूंजने के लिए जा रहे सब कुछ असाइन करते हैं और फिर तैयार होने पर उस चर को गूंजते हैं? इस डेरेल की तरह इसके बारे में –

+0

सोचें: गूंज "टेक्स्ट 1" गूंज "टेक्स्ट 2" गूंज "टेक्स्ट 3" से गूंज धीमी है "टेक्स्ट 1 + टेक्स्ट 2 + टेक्स्ट 3" ऐसा लगता है कि जावा और सी # भाषाओं में भी सच है जिसमें आप कंसोल को कथन का एक गुच्छा आउटपुट करते हैं। – Woot4Moo

1

curl_exec() सामान्य संचालन की तुलना में बहुत धीमी है। इसके अलावा, अधिकांश str_ * ऑपरेशन regex संचालन से तेज़ हैं।

1
  • json_encode तेजी से क्रमानुसार
  • जुटना पाश में तेजी से फटना

लोगों को लगता है @ महंगा है कि हो सकता है सिर्फ इसलिए कि यह कहावत काफी वेब पर व्यापक प्रसार है है।

से उद्धृत: http://www.php.net/manual/en/language.operators.errorcontrol.php#102543

आप सोच रहे हैं कि क्या @ ऑपरेटर है का उपयोग करने का प्रदर्शन प्रभाव, इस उदाहरण पर विचार करें। यहां, दूसरी स्क्रिप्ट ( @ ऑपरेटर का उपयोग करके) निष्पादित करने के लिए 1.75x लगती है ... पहली स्क्रिप्ट के लगभग दोगुना हो जाती है।

तो हाँ, कुछ प्रतिध्वनि है, प्रति पुनरावृत्ति, हम देखते हैं कि @ ऑपरेटर केवल प्रति कॉल .005 एमएस जोड़ा गया। पर्याप्त कारण नहीं है, imho, @ ऑपरेटर का उपयोग करने से बचें।

असली 0m7.617s उपयोगकर्ता 0m6.788s sys 0m0.792s

बनाम

असली 0m13.333s उपयोगकर्ता 0m12.437s sys 0m0.836s

आप लगभग कर सकते हैं एक ऑपरेटर को "अत्यधिक उपयोग" करने में असमर्थ और यह अक्सर लायक है कि यह एक ऑपरेशन कर रहा है जो आप चाहते हैं।

0

uniqid() बेवकूफ महंगा है। बहुत सारे अद्वितीय पहचानकर्ता उत्पन्न करने के लिए उपयोग न करें।

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