PHP سریعتر از ASP.NET! افسانه یا واقعیت؟
نویسنده: مهرداد اشکانی
تاریخ: ۱۳۹۲/۰۶/۲۶ ۱۱:۵۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
چرا افسانهای که میگوید PHP از ASP.NET سریعتر است اینقدر شایع است؟ در این مقاله به بیان حقایقی میپردازیم که این افسانه را زیر سوال میبرد؟
خیلی وقتها در بسیاری از نوشتهها و اظهارنظرها میبینیم ادعا میشود که PHP بسیار سریعتر از ASP.net است و اینکه ASP.net از لحاظ سرعت کند است. آزار دهندهترین بخش این ادعاها، آن است که هر یک از آنها را که نگاه میکنی بصورت کاملا غیر واقع بینانه به موضوع نگاه میکنند و فقط بدون دلیل این موضوع را ادعا میکنند. زیرا به این موضوع بصورتی کاملا متعصبانه و بدور از واقعیتها نگاه میشود. به همین دلیل بصورت گسترده ای این افسانه در میان اهالی وب پذیرفته شده است.
حال بجای اینکه این موضوع را بارها و بارها در جاهای مختلف بیان کنیم، این مقاله را نوشته و در هر کجا که لازم باشد به آن ارجاع خواهیم داد. باید توجه کنید این حقیقت که زبان PHP یک زبان اصیل و قدرتمند است هیچ شکی در آن نیست اما اینکه بخواهیم بصورت مغرضانه و به این دلیل که ما از این زبان استفاده میکنیم، آنرا از هر لحاظ برتر از سایر زبانها بدانیم (کمی که نه) بسیار اغراق آمیز است.
این مقاله برای این نیست که ما هریک از این زبانها را زیر سوال ببریم. بلکه برای آن است که این موضوع را با دلایل منطقی و حقیقی بررسی کنیم که آیا اینکه میگویند PHP از ASP.net سریعتر است واقعیت دارد یا نه؟
قبل از هرچیز ذکر این نکته الزامی است که این دو زبان تفاوتهای اساسی در base دارند. ASP.net یک زبان بهینه سازی و کامپایل شده است، به این معنی که کدهای نوشته شده در این زبان قبل از اینکه قابل اجرا شوند، به مجموعه ای از دستورالعملهای خاص ماشین تبدیل میشوند. از سوی دیگر PHP یک زبان تفسیر شده است، به این معنی که کدهای نوشته شده به همان شکل ذخیره شده و در زمان اجرا این کدها تفسیر میشوند. این موضوع بطور گستردهای پذیرفته شده و ثابت شده است که برنامههای کامپایل شده به مراتب سریعتر از برنامههای تفسیر شده اجرا میشوند، به این دلیل که برنامههای تفسیر شده نیاز دارند تا در زمان اجرا به دستورالعملهای ماشین تبدیل شوند.
در اینجا به یک نقل قول از دانشنامه آزاد ویکی پدیا اشاره میکنم که میزان سریعتر بودن برنامههای کامپایل شده را نشان میدهد:
به این معنا که یک برنامه بصورت کامپایل شده بسیار سریعتر از همان برنامه بصورت تفسیر شده، اجرا میشود.
حال که تئوری خود را مبنی بر دلیل سریعتر بودن 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 دارد.
اگر با من در این امر موافق نیستید میتوانید با نظرهای مستدل خود ما را راهنمایی کنید.
چندین علت داره:
- پروسه کامپایل کدهای دات نت یک مرحلهای نیست. کلا در دات نت کدها به یک زبان میانی به نام IL ترجمه میشن. بعد این IL توسط JIT compiler تبدیل به کدهای ماشین میشه. در ASP.NET این مساله هم برای کدهای پشت صحنه برنامه و هم برای خود صفحات رخ میده. بنابراین برای بار اول مشاهده، روند این پروسه الزامی هست. ولی برای دفعات بعدی مشاهده خیر. البته روش برای پیش کامپایل کردن کامل صفحات هم وجود داره و یا در IISهای جدید یک سری مبحث warmup توکار پیش بینی شده.
- همچنین IIS برای مدیریت منابع سرور، یک سایت رو مدام در حافظه نگه نمیداره. فقط زمانیکه اولین درخواست به سرور میرسه سایت رو بارگذاری میکنه و application pool اون رو استارت. این هم یک زمان اولیه اندکی رو ممکنه به خودش اختصاص بده. بعلاوه پس از مدتی، یک سایت بیکار رو از حافظه خارج میکنه. بهش میگن ریسایکل کردن. در ASP.NET 4.0 به بعد امکان تنظیم auto-start برای سایتها هست.
به نظر من برای بحث در مورد PHP مقایسه سرعت در رده آخر اهمیت هست. مسایل بهتری برای بحث وجود دارند. مثلا:
- بدترین زبانی که تابحال با آن کار کردید، کدوم بوده؟
echo 'Hello, World';
با سلام خدمت دوستان گرامی
نکته ای که باید به آن دقت داشت، فرق بین مجانی و سورس باز است. لطفا این موارد را از یکدیگر جدا نمایید.
نکته دوم هم اینست که چند نفر در کشور خودمون داریم که میتوانند سورس PHP، لینوکس و ... را سفارشی کنند؟