SHET25

حل مشکل سرعت در لوکال هاست با افزایش مموری PHP

حل مشکل سرعت در لوکال هاست با افزایش مموری PHP

کار کردن روی لوکال هاست یه لذت دیگه‌ای داره؛ دستتون بازه، هر افزونه‌ای دلتون خواست نصب می‌کنید، قالب‌ها رو بالا و پایین می‌کنید و اگه چیزی خراب شد هم کسی متوجه نمی‌شه. ولی خب یه جاهایی هم حسابی حالگیری می‌کنه.

احتمالاً براتون پیش اومده: یه قالب سنگین نصب می‌کنید، صفحه رو رفرش می‌کنید و بعد ده پونزده ثانیه انتظار، یه صفحه سفید یا یه خطای Allowed memory size exhausted تحویلتون می‌ده. یا اصلاً پیشخوان وردپرستون انقدر کند می‌شه که آدم ترجیح می‌ده بره روی هاست اصلی کار کنه.

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

چرا لوکال هاست کند می‌شود و خطای حافظه می‌دهد؟

قضیه ساده‌ست. وقتی زمپ رو نصب می‌کنید، PHP با یه سری تنظیمات پیش‌فرض میاد که برای اجرای یه اسکریپت ساده کافیه، ولی برای وردپرس با بیست تا افزونه و یه قالب المنتوری اصلاً کافی نیست.

نقش memory_limit در پردازش قالب‌ها و افزونه‌های سنگین

memory_limit یعنی هر پروسه PHP حداکثر چقدر از رم سیستمتون اجازه داره استفاده کنه. پیش‌فرضش معمولاً روی ۱۲۸ مگابایته. حالا تصور کنید یه قالب صفحه‌ساز دارید که فقط برای لود کردن ویرایشگرش چند صد مگ حافظه می‌خواد. PHP می‌رسه به سقف ۱۲۸ مگ، دستش رو می‌بره بالا و می‌گه من دیگه ادامه نمی‌دم؛ نتیجه‌ش می‌شه همون صفحه سفید یا خطای حافظه.

پس اولین کاری که باید بکنیم، بالا بردن همین عدده.

آموزش گام‌به‌گام حل مشکل سرعت در لوکال هاست

نگران نباشید، کار سختی نیست و پنج دقیقه بیشتر وقتتون رو نمی‌گیره.

ورود به درایو C و پوشه XAMPP

اول برید توی درایو C (یا هر درایوی که زمپ رو توش نصب کردید) و پوشه xampp رو پیدا کنید و واردش بشید.

ورود به پوشه‌‌ی زمپ
ورود به پوشه‌‌ی زمپ

پیدا کردن فایل php.ini و باز کردن آن با Notepad

داخل همین پوشه، عبارت php.ini رو سرچ کنید. وقتی پیداش کردید روش راست‌کلیک کنید و با نوت‌پد ویندوز بازش کنید.

جستجوی Php.ini
جستجوی Php.ini

اگه نمی‌خواید درگیر سرچ کردن بشید، یه راه مطمئن‌تر هم هست که پایین‌تر توی بخش عیب‌یابی کامل توضیحش دادیم؛ پیشنهاد می‌کنیم همون رو بخونید چون جلوی یه اشتباه رایج رو می‌گیره.

جستجوی memory_limit و تغییر مقدار آن

حالا که فایل باز شده، کلیدهای Ctrl + F رو بزنید و عبارت memory_limit رو سرچ کنید. مقدارش رو پیدا کنید و بذارید روی ۲۰۴۸:

ini

memory_limit = 2048M
تغییر عدد Memory_ limit
تغییر عدد Memory_ limit

این ۲۰۴۸ یعنی هر پروسه اجازه داره تا ۲ گیگابایت از رم سیستمتون استفاده کنه. البته این عدد سنگه که از آسمون نیفتاده؛ اگه سیستمتون ۸ گیگ رمه، همین ۲۰۴۸ عالیه. اگه ۴ گیگ رم دارید، ۱۰۲۴ بذارید بهتره. و اگه ۱۶ گیگ رم دارید، خب دستتون بازتره.

Stop و Start کردن زمپ برای اعمال تغییرات

این مرحله رو خیلی‌ها یادشون می‌ره و بعد میان می‌گن جواب نداد! فایل رو ذخیره کنید، برید توی کنترل پنل زمپ و آپاچی رو یه بار Stop و دوباره Start کنید.

استاپ و استارت دوباره زمپ
استاپ و استارت دوباره زمپ

تموم شد. از این به بعد نه خطای حافظه می‌گیرید، نه اون کندی آزاردهنده رو دارید.

افزایش مقادیر حیاتی دیگر در فایل php.ini

راستش رو بخواید، فقط بالا بردن رم به تنهایی مشکل رو کامل حل نمی‌کنه. چند تا مقدار دیگه هم توی همین فایل هست که اگه همزمان بالا نبرید، باز هم گیر می‌کنید. دوباره Ctrl + F بزنید و این‌ها رو پیدا کنید:

ini

max_execution_time = 300
max_input_time = 300
post_max_size = 128M
upload_max_filesize = 128M

بذارید بگیم هرکدوم چی‌کار می‌کنن:

  • max_execution_time: حداکثر زمانی که یه اسکریپت اجازه داره اجرا بشه (به ثانیه). اگه پایین باشه، قالب‌های سنگین وسط لود شدن تایم‌اوت می‌دن.
  • max_input_time: مدت زمانی که سرور برای دریافت اطلاعات وقت داره.
  • post_max_size: حجم مجاز داده‌هایی که از طریق فرم‌ها و پیشخوان ارسال می‌شه.
  • upload_max_filesize: همون چیزی که وقتی می‌خواید یه قالب ۶۰ مگابایتی آپلود کنید و وردپرس ارور می‌ده، مقصرشه.

یه نکته: مقدار post_max_size رو همیشه مساوی یا بزرگ‌تر از upload_max_filesize بذارید، وگرنه آپلودتون باز هم فیل می‌شه.

چرا بعد از ذخیره فایل php.ini تغییرات اعمال نمی‌شوند؟

این یکی از اون مشکلاتیه که واقعاً آدم رو کلافه می‌کنه. عدد رو زدید ۲۰۴۸M، فایل رو ذخیره کردید، آپاچی رو هم ری‌استارت کردید، ولی هیچ اتفاقی نیفتاده و همون خطای قبلی سر جاشه.

تفاوت php.ini با php.ini-development و php.ini-production

دلیلش معمولاً اینه که فایل اشتباهی رو ویرایش کردید. زمپ کنار فایل اصلی، دو تا فایل دیگه هم داره به اسم‌های php.ini-development و php.ini-production. این‌ها فقط نمونه و الگو هستن و PHP اصلاً بهشون نگاه نمی‌کنه. پس اگه سرچ ویندوز اون‌ها رو نشونتون داد، دست بهشون نزنید.

روش مطمئن باز کردن فایل اصلی از کنترل‌پنل زمپ

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

کنترل پنل زمپ رو باز کنید، توی ردیف روبه‌روی Apache روی دکمه Config کلیک کنید و از منویی که باز می‌شه گزینه PHP (php.ini) رو انتخاب کنید. با این کار دقیقاً همون فایلی که PHP داره ازش می‌خونه توی نوت‌پد باز می‌شه و دیگه شک و شبهه‌ای باقی نمی‌مونه.

دسترسی به php.ini در زمپ
دسترسی به php.ini در زمپ

رفع کندی شدید وردپرس با تغییر localhost به 127.0.0.1

این ترفند رو حتماً امتحان کنید، چون واقعاً معجزه می‌کنه و خیلی‌ها ازش خبر ندارن.

اگه بعد از بالا بردن مموری لیمیت هنوز صفحات وردپرستون دیر لود می‌شن، مقصر یه رفتار عجیب خود ویندوزه. ویندوز برای اینکه کلمه localhost رو به آی‌پی داخلی ترجمه کنه، اول سراغ IPv6 می‌ره و بعد از یه مکث برمی‌گرده سراغ IPv4. همین مکث، روی هر بار اتصال به دیتابیس تکرار می‌شه و در مجموع کلی از زمان لودتون رو می‌خوره.

حلش خیلی ساده‌ست. فایل wp-config.php رو توی پوشه پروژه‌تون باز کنید و دنبال این خط بگردید:

php

define( 'DB_HOST', 'localhost' );

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

php

define( 'DB_HOST', '127.0.0.1' );

ذخیره کنید و صفحه رو رفرش کنید. جدی می‌گیم، تفاوتش رو با چشم می‌بینید.

فعال‌سازی OPcache برای کاهش لود CPU و افزایش سرعت

این یکی مخصوص کسایی که سیستمشون خیلی قوی نیست.

ماجرا اینه که PHP هر بار که صفحه رو رفرش می‌کنید، تمام کدهای وردپرس رو از اول می‌خونه و کامپایل می‌کنه. حالا فکر کنید وردپرس چند هزار فایل داره؛ این یعنی فشار وحشتناک روی سی‌پیو. OPcache میاد نسخه کامپایل‌شده کدها رو توی رم نگه می‌داره تا دفعه بعد این پروسه تکرار نشه.

برای فعال کردنش، توی فایل php.ini عبارت [opcache] رو سرچ کنید و علامت سمی‌کالن (;) رو از اول این خط‌ها بردارید (یا اگه پیداشون نکردید، همین کدها رو به انتهای فایل اضافه کنید):

ini

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000

فایل رو ذخیره کنید، آپاچی رو ری‌استارت کنید و از روانی محیط لذت ببرید.

فقط یه هشدار کوچیک: چون کدها کش می‌شن، ممکنه موقع توسعه، تغییراتی که توی فایل‌های PHP می‌دید بلافاصله اعمال نشه. اگه دارید روی یه افزونه یا قالب کد می‌زنید و دیدید تغییراتتون رو نمی‌بینید، همین OPcache رو موقتاً غیرفعال کنید.

تغییر نسخه PHP در زمپ متناسب با قالب و افزونه‌ها

یه علت دیگه کندی شدید، ناهماهنگی نسخه PHP زمپ با پروژه‌تونه. یعنی یا نسخه PHP خیلی جلوتر از قالب و افزونه‌های قدیمیتونه، یا برعکس؛ دارید با یه PHP قدیمی یه قالب مدرن رو اجرا می‌کنید که برای نسخه‌های جدید بهینه شده.

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

در حالت کلی، نسخه‌های جدیدتر PHP (مثلاً ۸.۱ به بالا) تا حدود ۴۰ درصد سریع‌تر از نسخه‌های قدیمی کدهای وردپرس رو پردازش می‌کنن. پس اگه پروژه‌تون محدودیت خاصی نداره، حتماً برید سراغ نسخه‌های جدید.

افزایش اولویت پردازش زمپ در ویندوز برای سیستم‌های ضعیف

این آخری یه ترفند سیستم‌عاملیه و ربطی به PHP نداره، ولی اگه رم و سی‌پیوتون پایینه و هروقت همزمان لوکال‌هاست و کروم رو باز می‌کنید سیستم قفل می‌کنه، حسابی به کارتون میاد.

کلیدهای Ctrl + Shift + Esc رو بزنید تا Task Manager باز بشه. برید به تب Details، پروسه‌های httpd.exe (آپاچی) و mysqld.exe (مای‌اس‌کیو‌ال) رو پیدا کنید، روی هرکدوم راست‌کلیک کنید و از قسمت Set Priority اولویتشون رو از Normal بذارید روی Above Normal یا High.

افزایش اولویت پردازش (Priority) نرم‌افزار زمپ در ویندوز
افزایش اولویت پردازش (Priority) نرم‌افزار زمپ در ویندوز

با این کار ویندوز سهم بیشتری از قدرت سخت‌افزار رو به لوکال‌هاست اختصاص می‌ده و کندیش به شکل محسوسی برطرف می‌شه. فقط حواستون باشه این تنظیم با هر بار ری‌استارت شدن پروسه به حالت اولش برمی‌گرده.

سوالات متداول

مقدار مناسب memory_limit برای رم ۸ گیگابایت چقدر است؟

همون ۲۰۴۸M کاملاً مناسبه. لازم نیست بی‌دلیل برید بالاتر، چون این عدد سقف مصرفه نه مقدار رزروشده؛ ولی بیش از حد بالا بردنش هم کمکی به سرعتتون نمی‌کنه.

آیا این تنظیمات روی Laragon و WAMP هم جواب می‌دهد؟

بله. مسیر فایل php.ini فرق می‌کنه ولی خود دستورات دقیقاً یکیه، چون مربوط به خود PHP هستن نه نرم‌افزار لوکال‌هاست.

بعد از تغییر php.ini سایت بالا نمی‌آید، چه کنیم؟

احتمالاً یه اشتباه تایپی توی فایل دارید یا سمی‌کالن یه خط رو اشتباهی برداشتید. توی کنترل پنل زمپ لاگ خطای آپاچی رو ببینید؛ معمولاً دقیقاً می‌گه مشکل از کدوم خطه.

جمع‌بندی

خلاصه‌ش این شد که اگه لوکال‌هاستتون کند شده، به جای اینکه سیستمتون رو مقصر بدونید، اول برید سراغ php.ini. مقدار memory_limit رو بذارید روی ۲۰۴۸، بقیه مقادیر مثل زمان اجرا و حجم آپلود رو هم باهاش هماهنگ کنید، localhost رو توی wp-config.php به 127.0.0.1 تغییر بدید و در نهایت OPcache رو فعال کنید.

همین چند تا تغییر ساده، تجربه کار کردنتون روی لوکال‌هاست رو کاملاً عوض می‌کنه. اگه جایی از کار گیر کردید یا ترفند دیگه‌ای می‌شناسید که اینجا نگفتیم، توی کامنت‌ها بنویسید.

نظر شما در این مورد چیه؟

  1. U418260۱۵ تیر ۱۴۰۵

    سلام وقت بخیر استاد منظورتون از این جمله که در اموزش بالا عنوان کردید چیه دقیقا باید چی کار کنیم
    (رمپ خود را یک بار Stop و Start کنید)

    • رضا راد۱۶ تیر ۱۴۰۵

      سلام نرم افزار لوکال هاست رو یکبار استاپ و استارت کنید

      • U418260۲۵ تیر ۱۴۰۵

        استاد این با عکس توضیح میدید من متوجه نمیشم مراحل به چه صورت

        • رضا راد۲۸ تیر ۱۴۰۵

          چشم، حتماً یه راهنمای ویدیویی مرحله‌به‌مرحله آماده می‌کنیم که راحت‌تر متوجه بشی.

  2. U400150۱۴ تیر ۱۴۰۵

    سلام
    وقت بخیر
    ببخشید در موردحل مشکل سرعت در لوکال هاست اگر پوشه xampp توی هیچ کدام از درایوها نبود چه باید کرد؟

    • رضا راد۱۶ تیر ۱۴۰۵

      سلام وقت بخیر این یعنی زمپ نصب نیست و باید نصب بشه

  3. U384776۱۶ تیر ۱۴۰۴

    سلام خیلی ممنون از آموزش تان
    برای من روی همین عدد است ولی باز با کندی مواجه هستم
    میتونم مثلا روی 4096 که میشه ۴گیگ رم قرارش بدم ؟

    • رضا راد۱۷ تیر ۱۴۰۴

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

  4. U375569۶ فروردین ۱۴۰۴

    سلام برای من هم فایل php.ini نیستش میشه یک راهنمایی دیگه کنین , ممنون

  5. U358652۸ آبان ۱۴۰۳

    برای من فایل php.ini وجود ندارد . کجا باید تغییر رااعمال کنم ؟

  6. U329910۲۵ شهریور ۱۴۰۲

    سلام وقت بخیر من این مشکل رو دارم و متوجه شدم مشکل از پلاگین ووکامرس هست و متاسفانه بهش نیاز هم دارم ولی نمیتونم غیر فعالش کنم. به نظرتون راهی هست ؟

    • رضا راد۲۶ شهریور ۱۴۰۲

      سلام تنها راهش همین چیزی هست که توی ویدیو گفته شده

      • U325751۱۸ آبان ۱۴۰۲

        سلام دوست عزیز با انجام این مراحل میتونید مثل موشک سرعت لوکال هاست خودتون رو ناشی از افزونه ووکامرس افزایش بدید.

        حتما حتما ووکامرس به آخرین نسخه آپدیت باشه در این تب چندتا گزینه جدید و امکانات خوب HPOS (High-Performance Order Storage) برای دیتابیس اضافه شده که باید فعال کنید که به صورت زیر است:

        در پیشخوان وردپرس وارد مسیر ووکامرس> پیکربندی> پیشرفته> امکانات شوید.

        مرحله اول)
        Order data storage> را از روی حالت WordPress posts storage (legacy) {ذخیره‌سازی نوشته‌های وردپرس (قدیمی)} روی حالت > High-performance order storage (recommended) { ذخیره‌سازی سفارش با کارایی بالا (توصیه شده)} قرار دهید.

        مرحله دوم)
        در ادامه تیک گزینه Enable compatibility mode (synchronizes orders to the posts table) {فعال‌سازی حالت سازگاری (سفارش‌ها را با جدول نوشته‌ها همگام می‌کند). } را فعال کنید.

        مرحله سوم)
        در قسمت Marketplace {بازار} > تیک New, faster way to find extensions and themes for your WooCommerce store {راه جدید و سریع‌تر برای یافتن افزودنی‌ها و پوسته‌ها برای فروشگاه ووکامرسی شما } را حتما بردارید.

        و همینطور در قسمت New product editor {ویرایشگر جدید محصول} > تیک Try the new product editor (Beta) { امتحان ویرایشگر محصول جدید (بتا) } حتما برداشته باشید.

        این مرحله سوم باعث میشود که ووکامرس به سرور خودش درخواست برای پلاگین های مرتبط و رهگیری امکانات بتای که در دست برنامه نویسی دارند دیگر ندهد و سرعت سایت چه در لوکال هاست و چه در هاست اصلی پایین نیاید.

        مرحله چهارم)
        روی دکمه ذخیره تغییرات کلیک کنید تا تنظیمات اعمال شود و در ادامه وارد بخش > WooCommerce.com شده و در آنجا هم تیک گزینه Enable tracking {رهگیری را فعال کنید} را حتما بردارید > اجازه استفاده از WooCommerce را ردیابی کنید را دیگر ندهید که منابع چه هاست و چه لوکال تون الکی درگیر بشه و با ذخیر تنظیمات دیگر مشکلی از بابت کندی سرعت از سمت ووکامرس نخواهید داشت.

        مرحله پنجم و آخر)

        بعد از ذخیره تمامی مراحل پیامی میاد مبنی بر بروزرسانی پایگاه داده آنرا بزنید و صبر کنید تا پایگاه داده ووکامرس بروز شود بعد با خیال راحت میتوانید از لوکال هاست و سایت تون در هاست اصلی با کمترین میزان افت سرعت استفاده کنید.

        همچنین می توانید با اضافه کردن کد زیر به فایل > wp-confige.php در پوشه Root {روت} به هنگام اینترنت ملی از مشکلات کندی و ارسال درخواست های که نمی توانند به سرور های اصلی خود ارتباط برقرار کنند جلوگیری کرده تا سرعت سایت و پیشخوان وردپرس پایین نیاد.

        define( ‘WP_HTTP_BLOCK_EXTERNAL’, TRUE );

        define( ‘WP_ACCESSIBLE_HOSTS’, ‘*.mihanwp.com , *.wordpress.org’ );

        • U351004۱۹ مرداد ۱۴۰۳

          با سلام
          خیلی خوب بود و به نظر من کار خوشو کرد

        • U354810۲۸ شهریور ۱۴۰۳

          مچکر رفیق عالی بود

  7. U41220۱۵ تیر ۱۴۰۰

    سلام من وقتی این کار رو کدرم دیگه تالان اصلا وردپرس برام بالا هم نمیادش میزان رم کامپیوترم هم 8 گیگ هستش
    لطفا راهنمایی کنین

  8. U41220۱۵ تیر ۱۴۰۰

    سلام من همین الان این کار رو کردم ولی متاسفانه دیگه برام وردپرسم بالا نمیادش و میزان رم کامپی.ترم هم 8 گیک هستش لطفا راهنمایی کنین

  9. U35882۱۹ اردیبهشت ۱۴۰۰

    برای من اون قسمت توی پرانتز که عدد رو باید جایگزین می کردیم نبود
    خودم یکی نوشتم اما هیچ تغییری نکرد سرعت

    • رضا راد۱۹ اردیبهشت ۱۴۰۰

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

      • U421310۹ مرداد ۱۴۰۵

        سلام وقتتون بخیر.
        من با لوکال هاست دقیقا با همچین مشکلی مواجه شدم. اون قسمت پرانتزی را نداره. چکار باید بکنم؟

        • رضا راد۱۰ مرداد ۱۴۰۵

          درود، اگه اون قسمت پرانتزی رو توی فایل php.ini پیدا نمی‌کنی، خودت می‌تونی همون خط رو دستی اضافه کنی و مقدار memory_limit رو تنظیم کنی. بعدشم حتماً لوکال هاست رو یه بار ری‌استارت کن تا تغییرات اعمال بشه.

  10. U17441۳ آذر ۱۳۹۹

    من متوجه نشدم، مگه اون خط کامنت نشده؟! تغییر دادنش چه تاثیری داره؟

    • تیم پشتیبانیتیم پشتیبانی۳ آذر ۱۳۹۹

      سلام
      تغییر دادن اون دقیقا باعث افزایش سرعت میشه

      • U38364۷ فروردین ۱۴۰۰

        سلام
        سلام وقت بخیر
        دوستمون درست میگن.. اون خط کامنت شده و تغییر اون تاثیری نخواهد داشت.
        ولی با تغییر در ۲ خط پایینتر که نوشته memory_limit=128M
        (توجه کنید که آندرلاین استفاده شده)
        میشه محدودیت مقدار حافظه رو بالابرد.

        یا علی(ع)

  11. U22431۱۶ فروردین ۱۳۹۹

    سلام . . واقعا ممنونم . . من مشکل ارور نداشتم اما به شدت سرعت لود تو لوکال هاستم پایین بود . . دیگه کم کم داشتم دیوونه میشدم . . ولی الان سرعتم خوب شده . . واقعا نمیدونم اگه مقاله شما رو پیدا نمیکردم باید چکار میکردم . . توی چند تا سایت و انجمن دیگه هم رفتم همشون یه سری راهنمایی های مختصر کرده بودن که بدردم نخورد . . در کل سپاسگزارم (:

    • تیم پشتیبانیتیم پشتیبانی۱۶ فروردین ۱۳۹۹

      سلام
      خوشحالیم که تونستیم به شما کمک کنیم. پیروز باشید:)

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسآنلاین و پاسخگوی شما هستیم.آنلاین

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.