टैग और प्रदर्शन खोलना / बंद करना?


91

यह एक मूर्खतापूर्ण प्रश्न हो सकता है, लेकिन PHP में अपेक्षाकृत नया होने के नाते, मैं सोच रहा हूं कि क्या HTML टेम्पलेट कोड में PHP टैग को बार-बार खोलने और बंद करने के लिए कोई प्रदर्शन-संबंधित मुद्दे हैं, और यदि हां, तो शब्दों में सबसे अच्छा अभ्यास क्या हो सकता है PHP टैग्स के साथ काम करना

मेरा प्रश्न टैग बंद करने के महत्व / शुद्धता के बारे में नहीं है, या किस प्रकार का कोड दूसरे की तुलना में अधिक पठनीय है, बल्कि इस बारे में है कि दस्तावेज़ कैसे पार्स / निष्पादित हो जाता है और प्रदर्शन पर इसका क्या प्रभाव पड़ सकता है।

वर्णन करने के लिए, निम्नलिखित दो छोरों पर विचार करें:

PHP और HTML टैग्स को मिलाना:

<?php echo
   '<tr>
       <td>'.$variable1.'</td>
       <td>'.$variable2.'</td>
       <td>'.$variable3.'</td>
       <td>'.$variable4.'</td>
       <td>'.$variable5.'</td>
   </tr>'
?>
// PHP tag opened once

PHP और HTML टैग्स को अलग करना:

<tr>
   <td><?php echo $variable1 ?></td>
   <td><?php echo $variable2 ?></td>
   <td><?php echo $variable3 ?></td>
   <td><?php echo $variable4 ?></td>
   <td><?php echo $variable5 ?></td>
</tr>
// PHP tag opened five times

इस पर कुछ विचार सुनने में दिलचस्पी होगी, भले ही यह सिर्फ सुनने के लिए है कि इससे कोई फर्क नहीं पड़ता है।

धन्यवाद।


9
दिलचस्प सवाल, उसके लिए +1। हालाँकि मुझे नहीं लगता कि आपने जो 2 उदाहरण दिए हैं, वे तुलना के लिए आदर्श जोड़ी हैं, मुझे
जिस्ट

धन्यवाद ... मैं पल में एक बड़े HTML तालिका के साथ काम कर रहा हूँ और सवाल मुझे घूर रहा है ... भले ही यह कुछ सैद्धांतिक हो।
टॉम

विषय-ईश से: आपको टेबल को पॉप्युलेट करने के लिए एक लूप और डेटा के एरे / इटरेटर का उपयोग करना चाहिए।
डिसेंट डब्लर

@fireeyedboy ... यकीन है, मैं सहमत हूं, लेकिन यह हमेशा व्यावहारिक नहीं है। डीबी से डेटा प्राप्त करते समय या तो एक्रोबेटिक्स की आवश्यकता होती है, या एचटीएमएल संरचना बड़े करीने से लूप में फिट नहीं होती है।
टॉम

4
मुझे लगता है कि पठनीयता यहां सबसे महत्वपूर्ण है। आप इस के रूप में तुच्छ के रूप में कुछ के साथ कोई बड़ी वृद्धि / कमी देखने के लिए नहीं जा रहे हैं।
चक ले बट

जवाबों:


88

आपके लिए इसे ठीक करने के लिए 3 सरल नियम:

  • कोई भी सिंटैक्स समस्या प्रदर्शन को प्रभावित नहीं कर सकती है। डेटा हेरफेर करता है।
  • केवल प्रोफाइलिंग के परिणामों के साथ प्रदर्शन की बात करें ।
  • सभी बुराईयो की जड़ समयपूर्व इष्टतमीकरण है

प्रदर्शन के मुद्दों को समझना काफी कठिन है। यह newbies के लिए इसे ध्यान में नहीं लेने के लिए सलाह दी जाती है। क्योंकि वे हमेशा तिपहिया चीजों से प्रभावित होते हैं और वास्तविक महत्वपूर्ण चीजों को देखने में असफल होते हैं। सिर्फ अनुभव की कमी के कारण।

आपके प्रश्न के लिए भी। कल्पना कीजिए कि आपको कभी कुछ अंतर मिलेगा। यहां तक ​​कि बड़ा, कहते हैं, एक विधि 2 गुना तेज है। ओह, 2 बार! मैं इसे चुनता हूं और अपने ऐप को अच्छी तरह से अनुकूलित करता हूं, यह अब 50% तेजी से चलेगा!

गलत है । 50% नहीं। आप कभी भी इस गति वृद्धि को नहीं देखेंगे या मापेंगे। क्योंकि आपने पूरे स्क्रिप्ट रनटाइम का केवल 0,0001% हिस्सा लिया है।

बड़े HTML तालिकाओं के लिए, ब्राउज़र को इसे रेंडर करने में लंबा समय लगता है। जितना आपने पैदा किया उससे कहीं अधिक।

प्रदर्शन की दुनिया में प्रोफाइलिंग एक महत्वपूर्ण शब्द है। यदि कोई शब्द "प्रोफाइलिंग" नहीं है, तो कोई भी प्रदर्शन संबंधी प्रश्न को बिना किसी संदेह के कचरा कर सकता है। वहीं प्रोफाइलिंग कोई रॉकेट साइंस नहीं है। मैं आपकी स्क्रिप्ट के विभिन्न भागों के रनटाइम को माप रहा हूँ। कुछ प्रोफाइलर के साथ किया जा सकता है, जैसे xdebug, या यहां तक ​​कि मैन्युअल रूप से, का उपयोग करके microtime(1)। और सबसे धीमे हिस्से का पता लगाने के बाद, आप परीक्षणों से शुरू कर सकते हैं।

प्रदर्शन प्रश्न पूछने से पहले प्रोफाइल करना सीखें। और अगर इसके वास्तविक कारण नहीं हैं, तो प्रदर्शन के प्रश्न पूछना न सीखें।

समयपूर्व अनुकूलन सभी बुराई की जड़ है - D.Knuth


4
यदि मैं "प्रोफ़ाइल" के बजाय "बेंचमार्क" शब्द का उपयोग करता हूं तो यह इतना बुरा क्यों है? क्या अर्थ में कोई अंतर है? मतभेद जानने की सराहना करेंगे :)
NikiC

डोनाल्ड नथ के उद्धरण के लिए +1 और बहुत ही व्यावहारिक जवाब के लिए +200।
क्लेमेंट हेरमैन

@ मैकेनिक, कर्नल ने कब कहा कि "बेंचमार्क" शब्द का उपयोग करना बुरा था ?? ऐसा लगता है जैसे आप शब्दों को उसके मुंह में डाल रहे हैं, या गलत जगह पर कुछ संदर्भित कर रहे हैं।
चक ले बट

10
यह इतना उच्च मूल्यांकन क्यों है? यह किसी भी आकार या रूप में प्रश्न का उत्तर नहीं देता है। -1 मुझसे।
भावल

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

40

मैंने 50,000 पंक्तियों के साथ परीक्षणों को फिर से तैयार किया है और 1 टैग विधि में बहु गूंज भी जोड़ा है

for ($j=0;$j<30;$j++) {
    foreach ($results as $key=>$val){
    ?>
       <tr>
           <td><?php echo $results[$key][0]?></td>
           <td><?php echo $results[$key][1]?></td>
           <td><?php echo $results[$key][2]?></td>
           <td><?php echo $results[$key][3]?></td>
           <td><?php echo $results[$key][4]?></td>
           <td><?php echo $results[$key][5]?></td>
           <td><?php echo $results[$key][6]?></td>
           <td><?php echo $results[$key][7]?></td>
           <td><?php echo $results[$key][8]?></td>
           <td><?php echo $results[$key][9]?></td>
           <td><?php echo $results[$key][10]?></td>
           <td><?php echo $results[$key][11]?></td>
           <td><?php echo $results[$key][12]?></td>
           <td><?php echo $results[$key][13]?></td>
           <td><?php echo $results[$key][14]?></td>              
       </tr>
    <?php 
    }
}

अवधि 1: 31.15542483 सेकंड

for ($k=0;$k<30;$k++) {
    foreach ($results as $key1=>$val1){
        echo
           '<tr>
               <td>'.$results[$key1][0].'</td>
               <td>'.$results[$key1][1].'</td>
               <td>'.$results[$key1][2].'</td>
               <td>'.$results[$key1][3].'</td>
               <td>'.$results[$key1][4].'</td>
               <td>'.$results[$key1][5].'</td>
               <td>'.$results[$key1][6].'</td>
               <td>'.$results[$key1][7].'</td>
               <td>'.$results[$key1][8].'</td>
               <td>'.$results[$key1][9].'</td>
               <td>'.$results[$key1][10].'</td>
               <td>'.$results[$key1][11].'</td>
               <td>'.$results[$key1][12].'</td>
               <td>'.$results[$key1][13].'</td>
               <td>'.$results[$key1][14].'</td>              
           </tr>';
    }
}

अवधि 2: 30.23169804 सेकंड

for ($l=0;$l<30;$l++) {
    foreach ($results as $key2=>$val2){     
           echo'<tr>';
               echo'<td>'.$results[$key2][0].'</td>';
               echo'<td>'.$results[$key2][1].'</td>';
               echo'<td>'.$results[$key2][2].'</td>';
               echo'<td>'.$results[$key2][3].'</td>';
               echo'<td>'.$results[$key2][4].'</td>';
               echo'<td>'.$results[$key2][5].'</td>';
               echo'<td>'.$results[$key2][6].'</td>';
               echo'<td>'.$results[$key2][7].'</td>';
               echo'<td>'.$results[$key2][8].'</td>';
               echo'<td>'.$results[$key2][9].'</td>';
               echo'<td>'.$results[$key2][10].'</td>';
               echo'<td>'.$results[$key2][11].'</td>';
               echo'<td>'.$results[$key2][12].'</td>';
               echo'<td>'.$results[$key2][13].'</td>';
               echo'<td>'.$results[$key2][14].'</td>';              
           echo'</tr>';
    }
}

अवधि 3: 27.54640007 सेकंड

मूल 2 विधियों के बीच ज्यादा अंतर नहीं है, लेकिन ऐसा लगता है कि यह कम संघनन @ प्रहार के साथ काफी तेज है

चूंकि मुझे संदेह है कि मुझे 1 बार में इस डेटा की आवश्यकता होगी, मुझे लगता है कि मैं कई टैग का उपयोग करना जारी रखूंगा, कोड इंडेंटेशन neater दिखता है और 'स्रोत देखें' लेआउट अधिक सटीक है


1
एक तीसरा परीक्षण मामला एक php टैग के साथ कई इको स्टेटमेंट्स का उपयोग करने के लिए होगा, क्योंकि तब आपको स्ट्रिंग के संयोजन का उपयोग करने की आवश्यकता नहीं होगी।
प्रोक

मैंने 50,000 पंक्तियों के साथ परीक्षणों को फिर से बनाया है और 1 टैग विधि में भी बहु गूंज को जोड़ा है
Amien

5
+1 करना महत्वपूर्ण है जब हम अनुकूलन करना चाहते हैं। हम अक्सर महसूस करते हैं कि इस तरह का अनुकूलन बेकार है।
ल्यूक एम

18
इसके लुक से, पहले दो उदाहरण पिछले उदाहरण की तुलना में कहीं अधिक व्हाट्सएप का उत्पादन करते हैं। यह उच्चतर रनटाइम का कारण हो सकता है।
माइक सी

साथ echoही आउटपुट होने के लिए कई भावों को स्वीकार करता है। उस विशेषता के साथ कोई भी संस्करण मैट्रिक्स में नहीं माना गया है।
हक्रे

13

आप उन दोनों के बीच के अंतर को आसानी से अनदेखा कर सकते हैं। आज के आधुनिक कंप्यूटिंग संसाधनों के साथ, अंतर वास्तव में मायने नहीं रखता है। इस तरह के प्रिंट-टू-स्क्रीन सामान वास्तव में चिंता करने के लिए नहीं हैं। वहाँ अन्य सामान आप पहले विचार किया जाना चाहिए के टन कर रहे हैं। इसके अलावा, हमेशा सर्वश्रेष्ठ प्रदर्शन और आपके कोड की स्थिरता के बीच बहस होती है। आप हमेशा सर्वश्रेष्ठ प्रदर्शन प्राप्त करने का प्रयास नहीं कर सकते। इसके बजाय, आपको हमेशा उन सुधारों के साथ प्रदर्शन चिंताओं पर विचार करना चाहिए, जिन्हें सुधारने में आपको खर्च करने की आवश्यकता होती है।


6

कोड जो छद्म कोड में अनुवाद करना आसान है, बेहतर है। यह ऊपर के उदाहरणों से स्पष्ट होता है। जो कहने में अधिक समय लेता है?

"Start php, do this 30 times:, then stop php.  Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php..."

"Start php, do this 30 times: print this, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that..."

"Start php, do this 30 times: print this, print this, print this, print this, print this, print this, print this..."

व्यक्तिगत रूप से मैं करूँगा:

"Start php, define this, do this 30 times: add this to that.  Print." 

दुभाषिया कैसे काम करता है और एक रास्ता दूसरे की तुलना में तेज़ क्यों है, इसके बारे में तकनीकी व्याख्या एक नौसिखिया के लिए अप्रासंगिक है। केवल अंगूठे के नियमों को जानना सबसे अच्छा है:

  1. सरल बेहतर है।
  2. अगर यह एक पेज पर फिट नहीं होता है, तो यह बहुत अधिक कर रहा है (इसे नीचे तोड़ो)।
  3. यदि आप इंडेक्स कार्ड पर छद्म कोड नहीं लिख सकते हैं, तो यह बहुत जटिल है।

यदि कुल परिणाम सरल है तो अधिक टैग का उपयोग करें। अवधि।


5

इसके साथ असली समस्या मेमोरी उपयोग की है। स्ट्रिंग के संयोजन और द्रव्यमान प्रतिध्वनि-स्वर मेमोरी के उपयोग को तेजी से बढ़ा सकते हैं।

यदि आप php टैग स्पैम करते हैं तो आपका कोड अपठनीय हो जाता है।

सबसे अच्छा समाधान एक टेम्पलेट इंजन का उपयोग करना है और कोड और प्रस्तुति को पूरी तरह से मिश्रण करने से बचें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.