2009-02-03 12 views
40

प्रदर्शन के मामले में, बेहतर क्या होगा। सभी एचटीएमएल आउटपुट को प्रतिबिंबित करने के लिए PHP का उपयोग करना, इसलिए मैं इसे कामकाजी कोड और चर के विभिन्न बिट्स के साथ मिर्च कर सकता हूं या पूरे दस्तावेज़ों में समय-समय पर PHP से PHP से बच सकता हूं।PHP से HTML से बचें या इको का उपयोग करें? कौनसा अच्छा है?

मुझे पता है कि कुछ पठनीयता समस्याएं हो सकती हैं लेकिन मुझे इसके बारे में चिंतित नहीं है।

धन्यवाद सब!

उदाहरण 1

echo '<html>', 
    '<body>', 
    'The content of the ',$container,' element is displayed in your ', $other_container, 
    '</body>', 
    '</html>'; 

या

<html> 
<body> 
The content of the <?php echo $container; ?> element is displayed in your <?php echo $other_container; ?> 
</body> 
</html> 
+1

आपके लिए अपना कोड फिक्स्ड। भविष्य में, कोड कोड के रूप में पहचानने के लिए स्टैक ओवरफ्लो प्राप्त करने के लिए इंडेंट कोड 4 रिक्त स्थान :) –

+0

दूसरा उदाहरण जाने का तरीका है। कुछ और कोड गंध है। कोई गंभीर व्यक्ति –

उत्तर

33

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

<table> 
    <tr> 
     <td colspan="<?php echo $numCols; ?>"> 
      <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?> 
     </td> 
    </tr> 
</table> 

बनाम:

उदाहरण के लिए

<?php 
echo "<table>" 
    . "<tr>" 
    . "<td colspan=\"" . $numCols . "\">" 
    .  $a . ", " . $b . " and " . $c 
    . "</td>" 
    . "</tr>" 
    . "</table>" 
; ?> 

या

<?php 
echo "<table> 
     <tr> 
      <td colspan='{$numCols}'> 
       {$a}, {$b}, and {$c} 
      </td> 
     </tr> 
     </table>"; 
?> 

भी भूल नहीं है के बारे में printf

<?php 
printf("<table>" 
    . "<tr>" 
    . "<td colspan=\"%d\">%s, %s and %s</td>" 
    . "</tr>" 
    . "</table>" 
    , $numCols 
    , $a 
    , $b 
    , $c 
); 
?> 
+1

मैं पहले कुछ पढ़ रहा था, और पूरी तरह से सहमत नहीं था। मैं आपके सुझाव के साथ और अधिक सहमत हूं! जो कुछ भी प्रमुख है उसके साथ चिपकाएं। – benlumley

+4

आपने हेड्रोक को याद किया;) – MarcinWolny

5

यह सूक्ष्म अनुकूलन के दायरे में आता है। आपके समय का सबसे बड़ा हिस्सा काम शुरू करने वाले PHP इंजन को शुरू करने में आता है।

तो जब तक कि आपके पास हजारों लाइनों (या इससे भी अधिक) का आदेश न हो, आपको इससे चिंतित नहीं होना चाहिए।

जोड़ने के लिए, मैंने एक लाख लाइनों का एक छोटा परीक्षण किया जहां मैंने उन्हें मुद्रित करने के लिए php का उपयोग किया और जहां मैंने एक सी प्रोग्राम को कॉल करने के लिए PHP का उपयोग किया जो एक ही चीज़ करता था और अंतर कम था।

थोड़ा और जानकारी।

दूसरे उदाहरण में क्या हो रहा है यह है कि आप "चालू/बंद" PHP हैं, यह बिल्कुल नहीं हो रहा है लेकिन यह उदाहरण के लिए यह फिट बैठता है।

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

1 और 2 के लिए यह किसी भी विधि के बीच टॉस हो सकता है। लेकिन 3 के लिए मैं इन कारणों से विधि 2 के साथ जाऊंगा।

एक एमवीसी वेब अनुप्रयोग में एक दृश्य ज्यादातर एचटीएमएल/सीएसएस है। तो मैं देखना चाहता हूं कि सही ढंग से स्वरूपित किया जाए और मैं अपने संपादक में एचटीएमएल रंग देखना चाहता हूं। तो यह एक प्लस है।

+0

से असहमत होगा मैं आपके बिंदु को समझता हूं, लेकिन मैं अभी भी अंतर जानना चाहता हूं। धन्यवाद। –

8

यह आपके ऐप की समग्र गति के लिए बहुत अप्रासंगिक है जिसे आप साथ जाते हैं।

कहा जा रहा है कि, मुझे पता है कि आपने कहा था कि आपको परवाह नहीं है, लेकिन कृपया दूसरे का उपयोग करें क्योंकि यह पढ़ने के लिए दस लाख गुना आसान है। और पठनीयता विशाल है।

30

जो भी पढ़ने के लिए सबसे आसान है।

प्रदर्शन अंतर आपके सामने आने वाली किसी भी अन्य समस्या की तुलना में काफी नगण्य है। निश्चित रूप से पठनीयता यहां पहली समस्या को हाथ से नीचे रखती है।

2

छोटे बिट्स के लिए मैं इसे सभी PHP स्ट्रिंग्स में रखता हूं, जैसे किसी सूची को उत्पन्न करने के लिए किसी सरणी के माध्यम से लूपिंग करना। लेकिन मार्कअप के बड़े ढेर के लिए मैं इसे PHP से बाहर रखता हूं और आवश्यक होने पर बस PHP में ड्रॉप करता हूं।

यह काफी हद तक है क्योंकि मैं रखरखाव के लिए अनुकूलित करना पसंद करता हूं। न सिर्फ इसलिए कि यह देखने के लिए तेज़ी से चल रहा है कि एचटीएमएल के उचित वाक्यविन्यास पर प्रकाश डालने पर क्या चल रहा है, लेकिन क्योंकि यह कोड की त्रुटिपूर्ण पढ़ने से होने वाली गलतियों को भी कम करता है।

वास्तव में कोई अच्छा तरीका नहीं है। मैं बस ऊपर वर्णित के साथ सुसंगत रहने की कोशिश करता हूं, और अपनी आँखें ऐसी परिस्थितियों के लिए खुला रखता हूं जहां शायद दूसरा तरीका इसे संभालने का एक बेहतर तरीका होगा।

22

के the manual का हवाला देते हैं:

उदाहरण यहां दिए गए काल्पनिक है, निश्चित रूप से , लेकिन, बड़े ब्लॉक पाठ की outputting पीएचपी से बाहर छोड़ने के लिए पार्स मोड सभी भेजने की तुलना में आम तौर पर अधिक कुशल है echo() या प्रिंट() के माध्यम से टेक्स्ट का।


लेकिन कृपया दूसरों को सुनने और सूक्ष्म अनुकूलन की इस तरह से बचने और एक है कि अधिक सुपाठ्य है चुनें।

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

+0

मुझे आश्चर्य है कि किसी को भी इको को पढ़ने के लिए आसानी से गूंज मिल जाएगा क्योंकि मैंने जिन आईडीई का सामना किया है, वे प्रतिबिंबित HTML में HTML स्वरूपण को अनदेखा करते हैं। प्रदर्शन के बारे में मैनुअल उद्धृत करने के लिए – Ishmael

+0

प्लस 1। – lowtechsun

1

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

मैं चाहता हूं कि PHP स्वचालित रूप से HTML वर्णों को परिवर्तित करने के लिए print() और echo() सक्षम करे ताकि लोग HTML उत्पन्न करने के लिए उनका उपयोग बंद कर सकें।

3

प्रदर्शन के संदर्भ में ... यह महत्वपूर्ण नहीं है। कोड की पठनीयता राजा है, प्रदर्शन अंतर के प्रतिशत का एक छोटा सा अंश कुछ भी बदलने वाला नहीं है।

कच्चे HTML संस्करण को आमतौर पर पढ़ने के लिए सबसे आसान है (और संभवतः इसके लायक होने के लिए भी सबसे अच्छा प्रदर्शन है - लेकिन यह क्या लायक है: कुछ भी नहीं)। यह कोई आश्चर्य की बात नहीं है: PHP एक HTML टेम्पलेटिंग भाषा है, संपूर्ण बिंदु एक भाषा वाक्यविन्यास स्तर पर HTML को इंटरलेव कर रहा है।

इसे पढ़ने योग्य रखने के तरीके को देखने के लिए निकफ़ के कोड को देखें। इंडेंटिंग महत्वपूर्ण है! प्रत्येक PHP नियंत्रण संरचना के अंदर इंडेंटिंग का एक स्तर भी रखें, ताकि आप उनका ट्रैक रख सकें। जैसे।:

<?php if ($error) { ?> 
    <p> Oh no, error! </p> 
<?php } ?> 

अंत में, जब इस तरह के अपने उदाहरण में $ कंटेनर के रूप में सामग्री, outputting, आप हमेशा htmlspecialchars चाहिए() यह, या आप HTML इंजेक्शन सुरक्षा संबंधी दोषों से भरा एक आवेदन, हर दूसरे पीएचपी नौसिखिया की तरह होगा (और यहां तक ​​कि कई पेशेवर डेवलपर्स, दुख की बात है)। सामग्री का आउटपुट करने के लिए आप जिस भी विधि का उपयोग करते हैं, यह महत्वपूर्ण है।

क्योंकि htmlspecialchars काफी एक annoyingly लंबे समारोह का नाम है, आप अपने खुद के शॉर्टकट समारोह को परिभाषित करने की कोशिश कर सकते:

<?php 
    function h($s) { 
     echo(htmlspecialchars($s, ENT_QUOTES)); 
    } 
?> 

<ul> 
    <?php foreach ($things as $thing) { ?> 
     <li> <?php h($thing['name']) ?> </li> 
    <?php } ?> 
</ul> 
8

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

Nickf की मिसाल:

<table> 
    <tr> 
     <td colspan="<?php echo $numCols; ?>"> 
      <?php echo $a; ?>, <?php echo $b; ?>, and <?php echo $c?> 
     </td> 
    </tr> 
</table> 

हो जाता है:

<?php 
echo <<<EOT 
<table> 
    <tr> 
     <td colspan="$numCols"> 
      $a , $b, and $c 
     </td> 
    </tr> 
</table> 

EOT; 

?> 

मैं विश्वास है कि अंततः पठनीयता, एक व्यक्तिपरक बात है तो अपने लाभ भिन्न हो सकते हैं!

रुथ

+1

मैंने सोचा था कि हेरेडोक सही था, लेकिन उपयोग के मामले के आधार पर देखने के लिए एक चेतावनी हो सकती है। यदि पिछले 'ईओटी से पहले कोई सफेद जगह है; 'सबकुछ टूट जाता है। कई कारण हैं कि यह अनजाने में हो सकता है। बस इसके बारे में पता होना चाहिए। – user1167442

1

आप गंभीरता से कभी नहीं HTML के अंदर पीएचपी रखने पर विचार करना चाहिए। आप तर्क के साथ तर्क मिश्रण कर रहे हैं जो एक परियोजना गन्दा बनाता है।

के रूप में अन्य लोगों ने कहा, आप html में उत्पादन करता है, तो, <?php echo $whatever; ?>

का उपयोग आप उत्पादन में जानकारी का एक टन उत्पादन बफरिंग में देखना है।

3

कोड जैसे कि अगले प्रोग्रामर परियोजना को ले रहा है वह एक धारावाहिक हत्यारा है। दूसरे शब्दों में, आपके द्वारा वर्णित दूसरे विकल्प का उपयोग करें।

+1

अनुसरण करने के लिए एक अच्छा नियम है। – edude05

3

इसे प्रदर्शन समस्या से अधिक पठनीयता और रखरखाव समस्या माना जाना चाहिए।

  1. कोड रंग:

    इस प्रकार, विकल्प 2 एक जोड़े को ठोस फायदे हैं। विकल्प 1 के साथ सबकुछ एक गूंज कथन के रूप में रंग दिया जाता है जो HTML को और अधिक कठिन बनाता है।

  2. इंटेलिजेंस - कई आईडीई के साथ, एक PHP गूंज कथन के भीतर एचटीएमएल इंटेलिजेंस संलग्न नहीं करेगा, इसलिए आप सभी HTML को हाथ से टाइप करेंगे।
2

मैं php heredoc समारोह का उपयोग करने के, इस तरह से मैं किसी भी वर्ण से बचने के लिए की जरूरत नहीं है पसंद करते हैं, उदाहरण के लिए:

<?php 

$title = "heredoc is cool!!!"; 
$mySite = "http://www.php.net"; 

echo <<<LOL 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
<head> 

    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 

    <title> $title </title> 

<link rel="shortcut icon" href="$mySite/favicon.ico"> 
<link rel="search" type="application/opensearchdescription+xml" href="$mySite/phpnetimprovedsearch.src" title="Add PHP.net search"> 
<link rel="alternate" type="application/atom+xml" href="$mySite/releases/feed.php" title="PHP Release feed"> 
<link rel="alternate" type="application/atom+xml" href="$mySite/feed.atom" title="PHP: Hypertext Preprocessor"> 

<link rel="canonical" href="$mySite/manual/en/language.types.string.php"> 
<link rel="shorturl" href="$mySite/types.string"> 

<link rel="contents" href="$mySite/manual/en/index.php"> 
<link rel="index" href="$mySite/manual/en/language.types.php"> 
<link rel="prev" href="$mySite/manual/en/language.types.float.php"> 
<link rel="next" href="$mySite/manual/en/language.types.array.php"> 
LOL; 
?> 

नोट:

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

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