عنوان:

‫PHP سریعتر از ASP.NET! افسانه یا واقعیت؟


نویسنده: مهرداد اشکانی
تاریخ: ۱۳۹۲/۰۶/۲۶ ۱۱:۵۵
آدرس: www.dntips.ir

چرا افسانه‌ای که می‌گوید PHP از ASP.NET سریعتر است اینقدر شایع است؟ در این مقاله به بیان حقایقی می‌پردازیم که این افسانه را زیر سوال می‌برد؟

خیلی وقتها در بسیاری از نوشته‌ها و اظهارنظر‌ها می‌بینیم ادعا می‌شود که PHP بسیار سریعتر از ASP.net است و اینکه ASP.net از لحاظ سرعت کند است. آزار دهنده‌ترین بخش این ادعاها، آن است که هر یک از آنها را که نگاه می‌کنی بصورت کاملا غیر واقع بینانه به موضوع نگاه می‌کنند و فقط بدون دلیل این موضوع را ادعا می‌کنند. زیرا به این موضوع بصورتی کاملا متعصبانه و بدور از واقعیتها نگاه می‌شود. به همین دلیل بصورت گسترده ای این افسانه در میان اهالی وب پذیرفته شده است.

حال بجای اینکه این موضوع را بارها و بارها در جاهای مختلف بیان کنیم، این مقاله را نوشته و در هر کجا که لازم باشد به آن ارجاع خواهیم داد. باید توجه کنید این حقیقت که زبان PHP یک زبان اصیل و قدرتمند است هیچ شکی در آن نیست اما اینکه بخواهیم بصورت مغرضانه و به این دلیل که ما از این زبان استفاده می‌کنیم، آنرا از هر لحاظ برتر از سایر زبانها بدانیم (کمی که نه) بسیار اغراق آمیز است.

این مقاله برای این نیست که ما هریک از این زبانها را زیر سوال ببریم. بلکه برای آن است که این موضوع را با دلایل منطقی و حقیقی بررسی کنیم که آیا اینکه می‌گویند PHP از ASP.net سریعتر است واقعیت دارد یا نه؟

Compiled در مقابل Interpreted Languages:

قبل از هرچیز ذکر این نکته الزامی است که این دو زبان تفاوتهای اساسی در base دارند. ASP.net یک زبان بهینه سازی و کامپایل شده است، به این معنی که کدهای نوشته شده در این زبان قبل از اینکه قابل اجرا شوند، به مجموعه ای از دستورالعمل‌های خاص ماشین تبدیل می‌شوند. از سوی دیگر PHP یک زبان تفسیر شده است، به این معنی که کدهای نوشته شده به همان شکل ذخیره شده و در زمان اجرا این کدها تفسیر می‌شوند. این موضوع بطور گسترده‌ای پذیرفته شده و ثابت شده است که برنامه‌های کامپایل شده به مراتب سریعتر از برنامه‌های تفسیر شده اجرا می‌شوند، به این دلیل که برنامه‌های تفسیر شده نیاز دارند تا در زمان اجرا به دستورالعملهای ماشین تبدیل شوند.

در اینجا به یک نقل قول از دانشنامه آزاد ویکی پدیا اشاره می‌کنم که میزان سریعتر بودن برنامه‌های کامپایل شده را نشان می‌دهد:

"A program translated by a compiler tends to be much faster than an interpreter executing the same program: even a 10:1 ratio is not uncommon. The mixed solution's efficiency is typically somewhere in between."

به این معنا که یک برنامه بصورت کامپایل شده بسیار سریعتر از همان برنامه بصورت تفسیر شده، اجرا می‌شود.

اعداد و ارقام:

حال که تئوری خود را مبنی بر دلیل سریعتر بودن ASP.net بیان کردیم بیایید با هم نگاهی به برخی آمارها بیاندازیم تا این تئوری را در عمل هم نشان داده باشیم.

آمارهای زیر توسط شرکت WrenSoft جهت مقایسه زمان اجرای یک کد مشابه در زبانهای مختلف تهیه شده است. اگر می‌خواهید توصیف عمیق‌تری از آمارها داشته باشید لطفا لینک را دنبال کنید.

نمودار اول: زمان صرف شده برای تولید ونمایش نتایج برای جستجوی وب سایت‌های کوچک


همانطور که میبینید زمان متوسط برای سایت PHP، 0.1500 ثانیه و برای سایت ASP.net، 0.0150 ثانیه است. یک تفاوت بزرگ: PHP ده برابر نسبت به ASP.net کندتر است!

نمودار دوم: زمان صرف شده برای تولید و نمایش نتایج برای جستجوی وب سایت‌های متوسط


PHP، 1.0097 ثانیه طول می‌کشد در حالی که ASP.net، 0.0810 ثانیه زمان نیاز دارد. می‌بینیم که PHP دوازده بار بیشتر از ASP.net زمان می‌برد.

درحال حاضر این آزمون با یک کد مشابه در زبانهای برنامه نویسی مختلف پیاده سازی و اجرا شد و نتیجه را مشاهده نمودید. حال این موضوع پیش میاید که این اجرای کدها بر روی سیستم عامل ویندوزی بوده است و این می‌تواند به نفع ASP.net باشد، پس همین آزمون را بر روی سیستم عامل لینوکسی مشاهده می‌کنیم.

آمارهای زیر از سایت معتبر shootout.alioth.debian.org گرفته شده است. این آمارها نحوه اجرای همان کد را بر روی سیستم عامل لینوکسی برای هردو زبان نشان می‌دهد: 

 

همانطور که مشاهده می‌کنید در سیستم لینوکسی نیز همچنان ASP.net سریعتر از PHP عمل می‌کند.

نتیجه گیری:

همین حالا جمله‌ی "asp.net vs php speed" را در google جستجو کنید. خواهید دید که در اکثر پست‌ها گفته شده که PHP از ASP.net سریعتر است اما دلیلی بر این ادعا نخواهید یافت و فقط در حد حرف است. مشکل این است که اکثر مردم وقتی چیزی را زیاد می‌بینند یا زیاد می‌شنوند بدون آنکه دلیل بخواهند آنرا می‌پذیریند و حتی بعضی اوقات از آن نیز دفاع می‌کنند که واقعا جای تاسف دارد.

توسعه وب بوسیله PHP کار خوبی است، بسیاری از اپلیکیشن‌ها و وبسایتهای شگفت انگیز توسط این زبان نوشته شده اند. اگر احساس می‌کنید PHP یک زبان برتر است از آن استفاده کنید اما این دلیل نمی‌شود که اطلاعات غلط را به دیگران القاء کنید و بدون دلیل و مدرک این زبان را از هر لحاظ برتر بدانید حال آنکه در این مقاله دیدیم که براساس چیزی که ارائه شد، ASP.net سرعت بیشتری نسبت به PHP دارد.

اگر با من در این امر موافق نیستید می‌توانید با نظرهای مستدل خود ما را راهنمایی کنید. 

نظرات

  • سیروس در ۱۳۹۲/۰۶/۲۶ ۱۳:۱
    به دلیل وسعت استفاده بیشتر از php و نیز استفاده سایت‌ها و شرکت‌های بزرگ از php خیلی‌ها فکر می‌کنن php بهتر و سریعتر از asp.net هست در حالیکه این وسعت استفاده بخاطر اوپن سورس و رایگان بودنه php هست و چون وب سرور apache هم معمولا رو لینوکس نصب میشه و خود لینوکس هم اپن سورسه، تمام این دلایل دست به دست هم داده تا php بهتر به نظر بیاد.
     جدا از بحث سرعت اگر از لحاظ ساختاری بررسی کنیم php بیشتر یک زبان اسکریپتی است تا برنامه نویسی و ویژیگی‌های زیان‌های خوب و شی گرا رو نداره.
    • علی یگانه مقدم در ۱۳۹۳/۰۹/۱۴ ۵:۱۰
      البته این مورد هم هست که بسیاری از شرکت‌ها یا افراد که از php استفاده می‌کنن به خاطر عدم وابستگیشون به یک شرکت خاص چون مایکروسافت هم هست مثل گوگل که کلا استفاده از برنامه‌های شرکت مایکروسافت رو در شرکتش ممنوع اعلام کرده، کلا عدم وابستگی پی اچ پی و همچنین متن باز بودنش برای به روزآوری و تغییراتش توسط برنامه نویسان سراسر جهان بیشتر مورد توجه قرار گرفته.
      البته این نکته هم هست که اکثر مردم با دیدن آدرس‌های بدون پسوند فکر می‌کنن که php هست مثلا همین stack overflow رو خیلی‌ها فکر می‌کنن با php نوشتن.
      البته بودن بیشتر سیستم‌های آماده از نوع php و همچنین ارزونتر بودن هاست‌های لینوکس به خصوص در ایران هم سبب این اتفاق بوده.
  • مهمان در ۱۳۹۲/۰۶/۲۶ ۱۳:۴
    نمی دونم چرا ولی توی عمل واسه استارت زدن دات نت خیلی دیر میجنبه . حتی بعد از کامپایل و پابلیش یه خورده تاخیر داره ولی یکم که باهاش کار کنی میفته رو دور و خوب میشه !
    ولی پی اچ پی همون اول سریعه . شاید بخاط پیچیدگی فریم ورک هست . چرا که entity , linq هم در پرژه استفاده شده است . 
    • محسن خان در ۱۳۹۲/۰۶/۲۶ ۱۳:۲۰

      چندین علت داره:

      - پروسه کامپایل کدهای دات نت یک مرحله‌ای نیست. کلا در دات نت کدها به یک زبان میانی به نام IL ترجمه میشن. بعد این IL توسط  JIT compiler تبدیل به کدهای ماشین میشه. در ASP.NET این مساله هم برای کدهای پشت صحنه برنامه و هم برای خود صفحات رخ می‌ده. بنابراین برای بار اول مشاهده، روند این پروسه الزامی هست. ولی برای دفعات بعدی مشاهده خیر. البته روش برای پیش کامپایل کردن کامل صفحات هم وجود داره و یا در IISهای جدید یک سری مبحث warmup توکار پیش بینی شده.

      - همچنین IIS برای مدیریت منابع سرور، یک سایت رو مدام در حافظه نگه نمی‌داره. فقط زمانیکه اولین درخواست به سرور میرسه سایت رو بارگذاری می‌کنه و application pool اون رو استارت. این هم یک زمان اولیه اندکی رو ممکنه به خودش اختصاص بده. بعلاوه پس از مدتی، یک سایت بیکار رو از حافظه خارج می‌کنه. بهش می‌گن ریسایکل کردن. در ASP.NET 4.0 به بعد امکان تنظیم auto-start برای سایت‌ها هست.

  • محسن خان در ۱۳۹۲/۰۶/۲۶ ۱۲:۳۰

    به نظر من برای بحث در مورد PHP مقایسه سرعت در رده آخر اهمیت هست. مسایل بهتری برای بحث وجود دارند. مثلا:

    - بدترین زبانی که تابحال با آن کار کردید، کدوم بوده؟

    - The PHP Singularity

    - PHP: a fractal of bad design

    - PHP Sadness

    - PHP is meant to die

  • مهدی سعیدی فر در ۱۳۹۲/۰۶/۲۶ ۱۳:۵۰
    هر کسی به من گفت php سریع‌تر هست و یا ASP.NET سریع‌تر هست؛ من هم در جواب گفتم شما درست می‌فرمایید و هیچ گاه با آن‌ها بحث نکردم.
       
    هنوز که هنوزه من نمی‌فهمم که واقعا دارید چی را با چی مقایسه کنید. ASP.NET و php کاملا دو مقوله‌ی متفاوت هستند. اگر قرار است مقایسه ای در سرعت عمومی انجام شود، معقول‌تر است که در سطح فریم ورک هایی با قدرت برابر انجام شود؛ برای مثال سرعت عمومی Zend بالاتر است یا ASP.NET MVC. 
      
    اصلا بهتر است یه مقایسه با مستندات کافی برای شما مطرح کنم تا به کندی ASP.NET MVC پی ببرید:
      
    هدف از این برنامه نمایش عبارت Hello,World در مرورگر است.
    در php خام نوشتن کد زیر کفایت می‌کند:
    echo 'Hello, World';

    اما در ASP.NET MVC شما باید ابتدا یک کنترلر تعریف کرده سپس در یک Actionعبارت Hello,World را بازگشت دهید. اگر این دو برنامه را اجرا کنید از سرعت فوق العاده‌ی php متحیر خواهید شد.
    البته بگذریم از اینکه در ASP.NET سربار‌های به نام Routing و ... در ابتدای کار وجود داره. نتیجه این هست که ASP.NET خیلی کنده و حرفی برای گفتن نداره در مقابل php.
    از این دست مقایسه‌ها من هم زیاد دیدم. واقعا خودشان هم نمی‌فهمند چی را با چی مقایسه می‌کنند.
    این نوع مقایسه‌ها بیشتر منو یاد کسی می‌اندازه که گوشی موبایل خریده بود چهار هسته ای و می‌گفت چقدر تکنولوژی پیشرفت کرده که از لپتاپم دو هسته بیشتر داره و سریعتره!
    من هم با خواندن این مقاله به جمله‌ی شما درست می‌فرمایید بسنده می‌کنم.
     
    • محسن خان در ۱۳۹۲/۰۶/۲۶ ۱۲:۵۷
      مثالت بی‌ربطه دوست عزیز. echo خام در PHP معادل هست با Response.Write خام در ASP.NET در حالتیکه در یک فایل ashx اجرا می‌شود. احتمالا می‌دونی که این نوع فایل‌ها در حالت پیش فرض حتی ماژول سشن هم براشون فعال نیست چه برسد به مسیریابی و در حداقل سربار کار می‌کنند.
      • مهدی سعیدی فر در ۱۳۹۲/۰۶/۲۶ ۱۳:۳
        خب منظور من دقیقا همین بود. یک مقایسه کاملا بی ربط. یک فریم ورک با کلی امکانات را با یک زبان خام مقایسه کردم!
          
        پی نوشت:  من در آینده نظر قبلی را دادم. ساعت 13:50!
        • محسن خان در ۱۳۹۲/۰۶/۲۶ ۱۳:۹
          خوب، مثال‌های بحث جاری در ساده‌ترین حالت ممکن تهیه شدند. یعنی یک فریم ورک ASP.NET با کلی دم و دستگاه (ماژول سشن، ماژول مسیریابی، ماژول امنیت، ماژول اعتبارسنجی درخواست‌ها، ماژول فشرده سازی و ...) از یک سیستم ساده PHP سریعتر عمل می‌کنه. این چطور بی‌ربط به عنوان مقاله هست؟
          • مهدی سعیدی فر در ۱۳۹۲/۰۶/۲۶ ۱۳:۲۲
            آخه من از منبع این مقاله چیزی نفهمیدم.
            کلا منبع داره در مورد یه چیز دیگه صحبت می‌کنه.
              
  • مهمان در ۱۳۹۲/۰۶/۲۶ ۱۴:۱۵
    فکر کنم خیلی مشخصه که یک زبان کامپیل شده چقدر میتونه از یک واسط سریعتر باشه کاش با جاوا مقایسه میکردی
  • رضا منصوری در ۱۳۹۲/۰۶/۲۶ ۱۸:۲۱
    توسعه وب بوسیله PHP کار خوبی است، بسیاری از اپلیکیشن‌ها و وبسایتهای شگفت انگیز توسط این زبان نوشته شده اند. اگر احساس می‌کنید PHP یک زبان برتر است از آن استفاده کنید اما این دلیل نمی‌شود که اطلاعات غلط را به دیگران القاء کنید و بدون دلیل و مدرک این زبان را از هر لحاظ برتر بدانید حال آنکه در این مقاله دیدیم که براساس چیزی که ارائه شد،  ASP.net سرعت بیشتری نسبت به PHP دارد . 
  • ناصر فرجی در ۱۳۹۲/۰۶/۲۶ ۲۲:۵۰
    مطلبی مشابه که چند روز پیش خوندم . لحظاتی یاد بحث‌های فروم برنامه نویس افتادم :)
  • حامد دات نت در ۱۳۹۲/۰۶/۲۷ ۲۱:۳۷
    به نظرم این بحث سود چندانی برای خوانندگان ندارد، benchmark‌ها بر مبنای کد مشابه هستند اما عملاً کد مشابه روی دو پلتفرم مختلف رو نمی‌شه مقایسه کرد.
    مطلبی در این خصوص نوشتم: اینجا
  • آرمان فرقانی در ۱۳۹۲/۰۶/۲۸ ۸:۹
    فناوری-زبان PHP بسیار محترم است و بسیار قابل توصیه اما برای آن زمانی که در رقابت با ASP کلاسیک بود و پدیده ای به نام دات نت ظهور نکرده بود حال آنکه پدیده یاد شده در زمان حال به پختگی و پیشرفت چشمگیری دست یافته است.
    دنیای دات نت و مباحث مربوط به آن گسترده‌تر و پیچیده‌تر از آن است که برای توجیه استفاده از دات نت سرعت مقایسه شود. ده‌ها ویژگی منحصر به دات نت وجود دارد که برای انتخاب فناوری سمت سرور مجالی برای تفکر درباره سرعت باقی نمی‌گذارد و آنان که اهل تفکر باشند را جذب خود می‌کند و نه گمراهان (کسانی که یا تعصب دارند یا خسته‌تر از آن هستند که دنیای جدیدی را تجربه نمایند.)
    در مورد سرعت کافی است نکات ساده ای که چند دقیقه بیشتر زمان نمی‌برند رعایت شود تا وب سایت‌های دات نتی چندین برابر سریعتر عمل کنند.
    فراموش نکنید دنیای دات نت تا حد بیشتری با اصول مهندسی نرم افزار گره خورده است و باب میل همگان نیست.
    عموماً سرویس دهنده بر حسب فناوری انتخاب می‌شود و نه برعکس! در مقالاتی که مقایسه انجام می‌دهند صحبت از رایگان بودن لینوکس و آپاچی و ... چندان ضرورتی ندارد.
    بسیاری از آن‌ها که Open Source بودن PHP را با آب و تاب و به عنوان برتری مطرح می‌کردند هرگز در عمر خود به کدهای سورس آن نگاهی نکرده اند. البته اگر بداند از کجا باید دانلود کنند. توصیه می‌کنم در مورد رویکرد و سیاست‌های چند سال اخیر مایکروسافت در رابطه با Open Source تحقیق بیشتری صورت گیرد.
    مثال هایی از سایت‌های موفق و یا تعداد سایت‌ها در یک فناوری هرگز دلیلی برای انتخاب فناوری نیست. ضمناً زمان ظهور این دو فناوری یکسان نبوده است که تعداد وب سایت‌ها معیار مقایسه باشد.
    فناوری-زبان PHP هنوز وجود دارد. هنوز قدرت خود را دارد. و هنوز هر کجا به هر دلیلی امکان استفاده از دات نت نبود، با کمال افتخار و خوشحالی از این که چند سال عمری که برای آن گذاشته ام هدر نرفته است به آن باز می‌گردم و آن را مورد استفاده قرار می‌دهم.
  • مهمان در ۱۳۹۲/۰۶/۳۰ ۷:۱۸

    با سلام خدمت دوستان گرامی

    نکته ای که باید به آن دقت داشت، فرق بین مجانی و سورس باز است. لطفا این موارد را از یکدیگر جدا نمایید.

    نکته دوم هم اینست که چند نفر در کشور خودمون داریم که میتوانند سورس PHP، لینوکس و ... را سفارشی کنند؟

  • حامد وهابی املشی در ۱۳۹۲/۰۷/۰۱ ۱۴:۸
    چرا در نمودار جاوا اسکریپت توی نمودار قرار گرفته ؟ اونها زبانهایی سمت سرورند ، جاوا اسکریپت سمت کلاینت . البته ممکنه منظورش جاوا اسکریپت سمت سرور باشه  ! در این صورت هم باز اشتباهه ، چون جاوا اسکریپ سمت سرور مربوط به تکنولوژی ASP کلاسیک بوده که توی نمودار اون رو هم آوردن . ASP کلاسیک هم  وبی اسکریپت داشت و هم جاوا اسکریپت.
    • محسن خان در ۱۳۹۲/۰۷/۰۱ ۱۴:۱۷
      • حامد وهابی املشی در ۱۳۹۲/۰۷/۰۱ ۱۵:۱۹
        بلاخره پیاده سازی خودش ، سمت سرور بوده ؟ 
        • محسن خان در ۱۳۹۲/۰۷/۰۱ ۱۸:۸
          بله. ضمنا node.js یک فناوری دیگر سمت سرور مبتنی بر جاوا اسکریپت است (و از این دست دارن زیاد میشن)