سؤال

سؤال حول أساليب مختلفة من إخراج html PHP;ما هي الاختلافات الأداء بين هذه:

الطريقة 1 - متغير سلسلة

$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;

الأسلوب 2 - التخزين المؤقت الإخراج

ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
    echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';

أظن أن تحصل بعض الأداء ضرب من باستمرار تعديل وتوسيع متغير ؛ هل هذا صحيح ؟

هتاف!

شكرا GaryF, ولكن أنا لا أريد جوابا حول العمارة - هذا السؤال هو حول الأداء.يبدو أن هناك بعض الآراء المختلفة / اختبار واحد الذي هو أسرع مما هو لماذا لم يكن هناك قبول إجابة حتى الآن.

هل كانت مفيدة؟

المحلول

وانها قديمة بعض الشيء، ولكن <لأ href = "http://blog.libssh2.org/index.php؟/archives/28-How-long-is-a-piece-of-string.html" يختلط = "نوفولو noreferrer"> وهذا المنصب التي كتبها Sara Golemon يساعد على الأرجح. AFAIK إخراج وظائف التخزين المؤقت سريعة جدا وفعالة وذلك هو echo، وهذا ما أود أن استخدام.

نصائح أخرى

وفكرة سلسلة السلسلة نفسها جانبا، كنت طالبا حقا (على ما أظن) كيف يجب أن تكون بناء صفحات الويب، ويبدو لي أن أي شكل من أشكال concatentation وضوحا وربما كان الشيء الخطأ القيام به.

وحاول استخدام نمط نموذج للرؤية والتحكم في لبناء الاحتياطي للبيانات وتمريرها إلى مكتبة النموذجيه بسيطة (مثل هندى )، والسماح لها تقلق بشأن كيفية بناء وجهة نظركم .

وأفضل فصل، أقل المخاوف.

وأنا عادة استخدام أسلوب رقم 1 حتى أتمكن من وضع هذا HTML في أي مكان في ملف القالب الذي يحتوي على HTML ثابتة. I محاولة للحفاظ على أكبر قدر من HMTL من بلدي PHP. لأنه يجعل الكثير من أنظف وPHP أقصر، كقالب وعادة ما يكون ملف منفصل.

سوف

وفيما يتعلق سرعة / الأداء، وأنا أفكر الفرق تكون طفيفة جدا. مع التخزين المؤقت الإخراج، انها توسيع أيضا متغير في كل وقت، على الرغم من أن المتغير لا يمكن الوصول إليه، ولكن لا بد من تخزينها في مكان ما.

وكثيرا ما تساءلت إذا فتح وإغلاق <?php أبطأ من مجرد وضع كل ذلك داخل <?php ثم echo'ing في كل مرة.

وأعتقد في النهاية نحن نتحدث ميلي ثانية في البرامج النصية معقدة للغاية.

وأوه نعم، طريقة # 1 هو الكثير أكثر مرونة كما يمكنك echo $html; في أي مكان.

وصحيح أن هناك النفقات العامة طفيف في تعديل باستمرار متغير وإعادة طبع عليه. ومع ذلك، <م> لا القيام بذلك يعني أنه عند نقطة معينة في البرنامج النصي قد ينتهي تشغيل (بسبب انقطاع أو ما شابه ذلك)، وسوف يكون التصريحات صدى متتابعة جزئيا طباعة الصفحة بدلا من لا شيء.

وكنت ذاهبا لكتابة من الرد طويلة حول كيفية هي سلاسل PHP قابلة للتغيير (بدلا من سلاسل ثابتة كما هو الحال في C أو C #)، ولكن أعتقد أنني سوف تصل فقط إلى <لأ href = "HTTPS: // ستاكوفيرفلوو. كوم / الأسئلة / 124067 / PHP-سلسلة سلسلة الأداء # 124109 "> وظيفة القديمة جئت عبر . I يتعامل أساسا مع ما كنت طالبا، فيما يتعلق جافا وC # حل من استخدام ب StringBuilder.

وsidenote: ان الحل ب StringBuilder تكون مشابهة ل(غير مجربة):

$html = array();
$html[] = '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html[] = '<li> This is list item #';
    $html[] = $k;
    $html[] = '</li>';
}
$html[] = '</ul>';
echo implode('',$html);

فقط بعض الأفكار:

  • التخزين المؤقت الإخراج يمكن أن تجعلك الصفحات تبدو بطيئة ، حيث يرى المستخدم شيئا حتى السيناريو بالكامل وتشغيل (على الرغم من أن الطريقة التي لديك #1 إعداد نفسه قد عقد صحيح).

  • سلاسل في php muteable لذا سلسلة ليست سيئة كما هو الحال في بعض اللغات الأخرى.أن يقال, التخزين المؤقت الإخراج قد يكون مجرد قليلا أسرع ، حيث المساحة المخصصة لمدخلات هو إلى حد كبير بشكل افتراضي (40K وفقا هذا)

في النهاية أود أن أقول انها حقا أكثر من سؤال من نمط.إذا كنت مثل ما التخزين المؤقت الإخراج يشتري لك ، ثم فمن المحتمل أن يكون وسيلة للذهاب.

والإجابة على سؤالك يمكن أيضا أن تكون موجودة هنا: فب: خرج [] ث / انضمام مباراة الانتاج $. =

وسلسلة سلسلة هي أسرع وسيلة لبناء السلاسل.

وأنا لم تختبر "صدى" مقابل بناء سلسلة، ولكن طالما كنت لا تستخدم الصدى الناتج مخزنة ينبغي أن يكون أسرع بسبب يكتب متتابعة لعازلة التنظيف الذاتي. (التباطؤ فقط يجري في دافق، التي لن تجنب حقا حتى لو كنت تفعل سلسلة سلسلة مقدما)

وشيء لم أر المذكورة I هو أنه، عادة، الرجل PHP أن يعمل مع الناس تصميم التي تحتاج إلى فئة HTML أو إضافة أنماط بطريقة أخرى، وبالتالي فإن الحل يجب أن تتحمل ذلك في الاعتبار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top