💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ Daniyal Amiri
تفاوت سرعت for و while
محسن موحد حل شده توسط محسن موحد

سلام

ایا حلقه های  for و  while در سرعت اجرای کد باهم تفاوت دارند؟

سلام.

زمان کامپایل(تفسیر) برنامه، کدهای PHP به opcode تبدیل میشن و درنهایت این زبان میانی(opcode) تبدیل به کدماشین میشن.

پس کافیه ببینیم، که الگوریتم‌های for و while از دید مفسر PHP چگونه تفسیر میشن.

الگوریتم for:

<?php
for ($i = 0; $i < 10; $i++) {
    echo $i . PHP_EOL;
}

کد بالا تبدیل به opcode شده و به شکل زیر تبدیل میشه:

number of ops:  9
compiled vars:  !0 = $i
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   2     0  E >   ASSIGN                                                   !0, 0
         1      > JMP                                                      ->6
   3     2    >   CONCAT                                           ~2      !0, '%0A'
         3        ECHO                                                     ~2
   2     4        POST_INC                                         ~3      !0
         5        FREE                                                     ~3
         6    >   IS_SMALLER_OR_EQUAL                              ~4      !0, 10
         7      > JMPNZ                                                    ~4, ->2
   4     8    > > RETURN                                                   1

 

حالا الگوریتم while:

<?php
$i = 0;
while ($i < 10) {
    echo $i . PHP_EOL;
    $i++;
}

opcode‌های کد بالا:

number of ops:  9
compiled vars:  !0 = $i
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   2     0  E >   ASSIGN                                                   !0, 0
   3     1      > JMP                                                      ->6
   4     2    >   CONCAT                                           ~2      !0, '%0A'
         3        ECHO                                                     ~2
   5     4        POST_INC                                         ~3      !0
         5        FREE                                                     ~3
   3     6    >   IS_SMALLER_OR_EQUAL                              ~4      !0, 10
         7      > JMPNZ                                                    ~4, ->2
   6     8    > > RETURN                                                   1

 

اگر به opcode‌های ساخته شده ی دو الگوریتم نگاه کنید، میبینید که از نظر مفسر هر دو الگوریتم به یک شکل دیده شده. بنابراین تفاوت خاصی بین دو الگوریتم وجود نداره و اگر هم گاها تفاوتی ایجاد بشه(بخاطر شرایط سرور) بسیار ناچیز و در حد هزارم ثانیه هست و قابل چشم پوشی است.(تایم اجرای دو کد رو گرفتم)

در گوگل هم میتونید سرچ بزنید در موردش بحث شده.

 

پ.ن: بدنیست شماره ی لاین هم به syntax highlighter اضافه بشه.

بهترین پاسخ
محسن موحد ۱۹ اسفند ۱۳۹۸، ۱۹:۲۹

البته استاد در هنگام تدریس فرمودند که سرعت پردازش در for each بیشتر هست

 

ابراهیم محمدی ۱۳ فروردین ۱۳۹۹، ۰۷:۰۴