کد PHP من چقدر از حافظه را اشغال می کند؟

هر پروسسی که در سیستم عامل اجرا می‌شود مقداری از حافظه را اشغال می‌کند. حافظه شامل بایت‌ها، پشته (stack)، هیپ (heap) و … است. بگذارید کمی وارد حوزه برنامه نویسی PHP شویم. همانطور که می‌دانید زیر بنای PHP، زبان C است. در C هر تابعی که فراخوانی می‌شود یک پشته را اشغال می‌کند و در PHP چند پشته اشغال می‌شود. ( حتما می دانید چرا!!)

نتیجه:  اگر تابعی در هسته PHP موجود است دوباره آن را در PHP بازنویسی نکنید.

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

به مثال زیر دقت کنید:

php از الگوی (Copy on Write (COW استفاده می‌کند. یعنی تا موقعی که مقدار یک متغیر تغییر نکند فضای جدیدی اشغال نخواهد شد. متغیر b$ را چون به a$ نسبت دادیم پس فضای جدید قابل ملاحظه ای را استفاده نکردیم. اما در خط سوم چون مقداری را در متغیر نوشتیم بنابراین مقدار متغیر a$ کپی شده و مقدار جدید به آن اضافه خواهد شد.

خب حالا چطور متوجه بشویم یک تابع چندصد خطی بهینه نوشته شده است یا نه ؟ یا چقدر از حافظه را مورد استفاده قرار داده است؟

اکستنشن php-memory-profiler به شما کمک زیادی می کند. می توانید این اکستنشن را از pecl دریافت و نصب کنید.

 

نحوه نصب در لینوکس:

 

نمونه کد:

نمونه کد فوق آرایه ای از میزان فضای اختصاص داده شده به هر قسمت از کد شما را بر می‌گرداند. اما اگر می خواهید گرافی به شکل زیر ببینید کمی صبر کنید:

 

memprof

نمونه کد:

 

نمونه کد فوق میزان فضای اختصاص داده شده به کل کد شما و همچنین میزان فضای اختصاص یافته به توابع و دستورات شما را در فایلی به آدرس زیر ذخیره می کند:

این فایل به فرمت خاصی اطلاعات را ذخیره می کند که با نرم افزار KCachegrind می توانید آن را مشابه آنچه در تصویر فوق مشاهده کردید مشاهده کنید.

نصب در لینوکس:

 

اگر فایل را با نرم افزار KCachegrind مشاهده کنید به شما گراف مموری اختصاص یافته به کدتان را نشان می دهد.

علی ذوقی

از سال ۸۷ بطور تخصصی برنامه نویس PHP هستم. اوایل با PEAR کار می کردم ولی از سال ۹۱ تاکنون بطور حرفه ای با Yii کار می کنم. از دروپال هم برای پروژه های بزرگ استفاده می کنم. به مباحث فنی سرور و شبکه علاقه خاصی دارم ...

همچنین ممکن است دوست داشته باشید ...

۲ واکنش

  1. احسان گفت:

    سلام
    عالی بود!!
    شما برای شروع برنامه نویسی با php چه منبعی رو پیشنهاد می کنید؟

    • علی ذوقی گفت:

      سلام
      خداروشکر
      داکیومنتهای انگلیسی موجود در اینترنت بهترین گزینه است.

      بنده کتاب ترجمه شده خوندن رو اصلا برای یادگیری توصیه نمیکنم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *