هل من الأفضل استخدام ob_get_contents () أو نص $ = 'اختبار'؛

StackOverflow https://stackoverflow.com/questions/292068

  •  08-07-2019
  •  | 
  •  

سؤال

ولقد رأيت الكثير من ob_get_clean() في حين أن الأخير. وعادة ما فعلت $test .= 'test'

وأنا أتساءل عما إذا كان أحد أسرع و / أو أفضل من الآخر.

وهنا هو رمز باستخدام ob_get_clean():

ob_start();

foreach($items as $item) {
    echo '<div>' . $item . '</div>';
}

$test = ob_get_clean();

وهنا هو رمز باستخدام $test .= 'test':

$test = '';

foreach($items as $item) {
    $test .= '<div>' . $item . '</div>';
}

وأيهما أفضل؟

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

المحلول

ومخازن الناتج يكون كل المطبات المتغيرات العالمية. عليك أن تكون على علم بجميع مسارات التنفيذ من ob_start() إلى ob_get_clean(). هل أنت متأكد من أنها سوف تحصل هناك، وأن أي مخازن افتتح في بين وتم إغلاقها؟ نضع في اعتبارنا أن رمز يمكن رمي الاستثناءات. يمكن أن يكون خطأ حقا متعة للرجل القادم لتعقب.

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

نصائح أخرى

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

وأيضا، بدلا من تشغيل كل ob_get_contents () وob_clean () ببساطة تشغيل ob_get_clean () الذي ينفذ على حد سواء في وقت واحد.

إذا كنت قلقا بشأن النفقات العامة من سلسلة سلسلة يجب أن تكون ملاحظة أن هذا:

وصدى '

' اختبار $ '
'؛.

وأبطأ بشكل ملموس من هذا:

وصدى "

'، $ الاختبار،'

وأول تجمع وصولا الى اثنين concats سلسلة تليها صدى، في حين أن الثاني يجمع إلى ثلاثة أصداء فقط، الذي هو في الواقع أسرع.

وأعتقد أن استخدام إخراج التخزين المؤقت قد يكون لها فائدة أداء صغيرة عند استخدام سلاسل ضخمة، ولكن للاستخدام المشترك كنت أفضل مع سلسلة في رأيي كما هذا الرمز من المحتمل أن يكون أسهل للفهم وتصحيح من قبل الآخرين.

وهناك نقطة صغيرة، ولكن إذا كنت تسير على استخدام نهج الناتج التخزين المؤقت، يمكنك استخدام أنها كذلك تماما:

ob_start();

foreach($items as $item) {
    echo '<div>';
    echo $item;
    echo '</div>';
}

$test = ob_get_clean();

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

وربما تعتقد أيضا حول استخدام مضمنة HTML (أسرع). فائدة إضافية لHTML المضمنة هي أن IDE الخاص بك يمكن أن يرجح بتهيئة النص على HTML، وهو ما لن يحدث عندما HTML هي داخل سلسلة PHP. رمز معدل (short_open_tags = في حاجة لها):

ob_start();
?>

<? foreach($items as $item) { ?>
    <div><?= $item ?></div>
<? } ?>

<?
$test = ob_get_clean();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top