نکاتی از گوگل برای بهبود performance اسکریپت های php

تاریخ: ۱۱ اردیبهشت ۱۴۰۰

php زبان اسکریپت نویسی معروفی می باشد که توسط بسیاری از وب سایت های معروف در سطح وب استفاده شده است.

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

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

 

کدهای اسکریپت را profile کنید تا ریشه مشکل را بفهمید

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

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

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

با profile کردن اسکریپت (یافتن مشکلات و خطاهای اسکریپت) می توانید به نقاطی که باعث عملکرد منفی در اسکریپت می شوند، دسترسی یابید.

 

upgrade کردن نسخه php

توسعه دهنده های موتور php سالهاست بر روی بهبود performance آن تمرکز دارند. لذا نسخه های جدید عملکرد بهتری نسبت به قبل دارند.

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

 

از cashing استفاده کنید

از ماژول های کش نظیر memcache و هم چنین تمپلیت سیستم هایی که کش را ساپورت می کنند نظیر smarty استفاده کنید.

کش کردن و استفاده از داده های ذخیره شده، می تواند باعث بهبود performance وبسایت شما شود.

 

از output buffering استفاده کنید

php از یک معماری buffer برای ذخیره کردن داده هایی که قرار است چاپ شوند استفاده می کند.

این قضیه می تواند روی کم کردن سرعت تاثیر بگذارد. چون کاربران شما باید منتظر بمانند داده ها بافر شده و سپس فرستاده شوند.

خوشبختانه ، شما می توانید تغییراتی ایجاد کنید که PHP را مجبور کند زودتر بافرهای خروجی را flush کند و در نتیجه باعث می شود سایت شما با سرعت بیشتری برای کاربران اجرا شود.

 

از setter ها و getter های غیرضروری پرهیز کنید

هنگام نوشتن کلاس ها در PHP، به جای نوشتن setter ها و getter های غیرضروری، می توانیم به صورت مستقیم با ویژگی در ارتباط باشیم. در مثال زیر، کلاس dog از متد setName و getName برای دسترسی به ویژگی name استفاده می کند.

class dog {
    public $name = '';

    public function setName($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

 

توجه داشته باشید که متدهای setName و getName کاری جز ذخیره کردن و برگرداندن ویژگی name ندارند.

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();

 

تنظیم و فراخوانی مستقیم ویژگی name می تواند باعث افزایش 100٪ سرعت شود. و همچنین باعث کاهش زمان توسعه نیز خواهد شد.

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

 

بدون هیچ دلیلی متغیرهای اضافی ایجاد نکنید

گاهی اوقات مبتدیان PHP سعی می کنند قبل از اجرای یک کد، ابتدا آن را در یک متغیر ذخیره کنند و تصور کنند کدشان تمیزتر می شود.

آنچه که در واقع اتفاق می افتد، مصرف حافظه مضاعف و کاهش عملکرد مفید اسکریپت است.

در مثال زیر، اگر کاربری متنی با حجم 512 کیلوبایت را در فیلد متنی وارد کرده باشد، منجر به استفاده از حافظه تقریباً 1 مگابایتی خواهد شد.

$description = strip_tags($_POST['description']);
echo $description;

 

هیچ دلیلی برای تعریف متغیر بالا وجود ندارد. به سادگی می توانید این عملیات را بصورت درون خطی انجام دهید و از مصرف اضافی حافظه جلوگیری کنید:

echo strip_tags($_POST['description']);

 

از کوئری های sql درون حلقه ها استفاده نکنید

یک اشتباه رایج ، قرار دادن یک کوئری SQL در داخل حلقه است. این کار منجر به چندین درخواست به پایگاه داده می شود، و اسکریپت به طرز قابل توجهی کندتر می شود. در مثال زیر ، می توانید حلقه را تغییر دهید تا صرفا یک کوئری SQL ایجاد کند:

foreach ($userList as $user) {
    $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' $user['last_name'] . '")';
    mysql_query($query);
}

 

که معادل است با:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe")

 

به جای استفاده از حلقه ، می توانید داده ها را در یک کوئری واحد ترکیب کنید تا همان خروجی را تحویل دهد:

$userData = array();
foreach ($userList as $user) {
    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
}
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);

 

منبع

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

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