📌 دستور match در PHP
🔹 ویژگیهای مهم match:
✅ برگشتی است → مقدار را مستقیماً برمیگرداند، نیازی به break ندارد.
✅ مقایسه سختگیرانه (===) → برخلاف switch که از == استفاده میکند.
✅ چندین مقدار برای یک خروجی → میتوان چند مقدار را به یک نتیجه مرتبط کرد.
✅ مقدار پیشفرض الزامی است → اگر مقدار مطابقتی پیدا نکند، خطا میدهد.
📌 مثال:
با match کدهاتون سریعتر، خواناتر و بهینهتر خواهد شد! 🔥
پ.ن: خودم زیاد از match استفاده میکنم، ولی توی بیشتر پروژهها ندیدم کسی سراغش بره. به نظر میاد هنوز جای خودش رو تو دنیای PHP باز نکرده! 😅
از PHP 8 به بعد، ساختار match معرفی شد که جایگزینی بهینهتر و خواناتر برای switch است. 🚀
🔹 ویژگیهای مهم match:
✅ برگشتی است → مقدار را مستقیماً برمیگرداند، نیازی به break ندارد.
✅ مقایسه سختگیرانه (===) → برخلاف switch که از == استفاده میکند.
✅ چندین مقدار برای یک خروجی → میتوان چند مقدار را به یک نتیجه مرتبط کرد.
✅ مقدار پیشفرض الزامی است → اگر مقدار مطابقتی پیدا نکند، خطا میدهد.
📌 مثال:
$number = 2;
$result = match ($number) {
1 => "One",
"2" => "(string) Two",
2 => "Two",
3 => "Three",
default => "Unknown",
};
echo $result; // خروجی: Two
با match کدهاتون سریعتر، خواناتر و بهینهتر خواهد شد! 🔥
پ.ن: خودم زیاد از match استفاده میکنم، ولی توی بیشتر پروژهها ندیدم کسی سراغش بره. به نظر میاد هنوز جای خودش رو تو دنیای PHP باز نکرده! 😅
👍2
Web Programmer
✅ چندین مقدار برای یک خروجی → میتوان چند مقدار را به یک نتیجه مرتبط کرد.
🔹 شاید این ویژگی کمی مبهم به نظر بیاد.
در واقع، با استفاده از match شما میتونید چند مقدار مختلف رو که به یک نتیجه یکسان میرسند، در یک بخش بنویسید تا از تکرار جلوگیری بشه.
به جای اینکه برای هر مقدار مشابه یک خروجی تکراری بنویسید، میتونید همه اونها رو در یک شرط قرار بدید.
📌 مثال:
در واقع، با استفاده از match شما میتونید چند مقدار مختلف رو که به یک نتیجه یکسان میرسند، در یک بخش بنویسید تا از تکرار جلوگیری بشه.
به جای اینکه برای هر مقدار مشابه یک خروجی تکراری بنویسید، میتونید همه اونها رو در یک شرط قرار بدید.
📌 مثال:
$char = 'B';
$result = match ($char) {
'A', 'a', 'B', 'b' => "Letter A, a, B or b", // چندین مقدار برای یک خروجی
'C' => "Letter C", // فقط یک مقدار
default => "Unknown Letter",
};
echo $result; // خروجی: Letter A, a, B or b
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
👆 ویدئو بالا رو ببینید، سرعت زبان های برنامه نویسی رو نشون میده.
#part_1 #opcache #jit
😐 نکته ای که حائز اهمیته اینه که PHP و PHP JIT تقریبا 8 ثانیه اختلاف زمانی هست!!
#part_1 #opcache #jit
🤔1
قبل از توضیح JIT به OPcache که پیشنیازش هست میپردازیم
🚀 اکستنشن OPcache در PHP: افزایش سرعت اجرا
خب OPcache یک قابلیت کش (Cache) در PHP است که باعث میشود اسکریپتهای PHP دیگر نیازی به تفسیر مجدد نداشته باشند و مستقیماً از حافظه اجرا شوند. این کار سرعت اجرای PHP را بهشدت افزایش میده.
🔥اما OPcache چگونه کار میکند؟
درواقع PHP هنگام اجرا، ابتدا کد را به Bytecode تبدیل میکند.در حالت عادی، این مرحله هر بار که صفحه اجرا میشود تکرار میشود. اما OPcache باعث میشود که Bytecode در حافظه کش شده و بار بعدی مستقیماً از حافظه اجرا شود، بدون نیاز به پردازش مجدد.
🛠️ تنظیمات OPcache در PHP
برای فعالسازی OPcache، کافی است تنظیمات زیر را در فایل php.ini قرار دهید:
[opcache]
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
✅ opcache.enable=1
اکستنشن OPcache را فعال میکند.
✅ opcache.enable_cli=1
اکستنشن OPcache را در خط فرمان (CLI) هم فعال میکند.
✅ opcache.memory_consumption=128
مقدار حافظهای که OPcache میتواند استفاده کند (قابل افزایش به 256M یا بیشتر برای سرورهای قویتر).
✅ opcache.max_accelerated_files=10000
حداکثر تعداد فایلهای PHP که میتوانند در کش ذخیره شوند.
✅ opcache.validate_timestamps=1
مشخص میکند که آیا تغییرات فایلها بررسی شوند یا نه.
✅ opcache.revalidate_freq=2
اگر validate_timestamps=1 باشد، PHP هر ۲ ثانیه فایلهای تغییریافته را بررسی میکند و کش را بهروز میکند.
📌 مزایای OPcache
✅ افزایش سرعت اجرا: اسکریپتهای PHP بدون نیاز به تفسیر مجدد اجرا میشوند.
✅ کاهش مصرف CPU: چون کدها کش شدهاند، پردازشهای اضافی حذف میشود.
✅ بهینهسازی عملکرد PHP-FPM: در سرورهای پرمصرف، OPcache تأثیر زیادی روی سرعت دارد.
✅ بارگذاری سریعتر صفحات وب: بهخصوص برای سایتهای وردپرسی و CMSها.
#part_2 #opcache #jit
🚀 اما PHP JIT چیست و چرا مهم است؟
🛠️ فعالسازی JIT در PHP:
✅ opcache.enable=1
✅ opcache.enable_cli=1
✅ opcache.jit_buffer_size=100M
✅ opcache.jit=1255
🔥 مقایسه عملکرد با و بدون JIT:
#part_3 #opcache #jit
خب JIT یا (Just-In-Time Compilation) یکی از مهمترین بهینهسازیهای اضافهشده در PHP 8 است که باعث افزایش سرعت اجرای کدها میشود. اما چطور؟ 🤔
✅ درواقع JIT یا "کامپایل در لحظه" یک تکنیکه که باعث میشه برخی از بخشهای کد PHP در زمان اجرا مستقیماً به کد ماشین تبدیل شن و دیگه نیازی به تفسیر خطبهخط توسط مفسر Zend Engine نباشند. این یعنی کد سریعتر اجرا میشه!
🔹 بدون JIT: بهصورت مفسری (Interpreted) اجرا شده و هر خط کد قبل از اجرا تفسیر میشه.
🔹 با JIT: قسمتهایی از کد که زیاد استفاده میشن، مستقیماً به کد ماشین تبدیل و ذخیره میشن و اجرای آنها خیلی سریعتر خواهد شد.
🛠️ فعالسازی JIT در PHP:
برای فعال کردن JIT، باید تنظیمات مربوط به OPcache را در فایل php.ini تغییر دهید:
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=100M
opcache.jit=1255
✅ opcache.enable=1
اکستنشن رو فعال میکنه.
✅ opcache.enable_cli=1
اکستشن را در حالت CLI هم فعال میکنه.
✅ opcache.jit_buffer_size=100M
مقدار RAM اختصاصیافته به JIT را مشخص میکند.
✅ opcache.jit=1255
سطح بهینهسازی JIT (اعداد مختلف تأثیرات متفاوتی دارند).
🔥 مقایسه عملکرد با و بدون JIT:
برای تست عملکرد JIT، یک کد ساده بنچمارک را اجرا میکنیم
function test() {
$x = 0;
for ($i = 0; $i < 100000000; $i++) {
$x += sqrt($i);
}
return $x;
}
$start = microtime(true);
test();
$end = microtime(true);
echo "⏱️ زمان اجرا: " . ($end - $start) . " ثانیه\n";🔹 بدون JIT: اجرای این کد ممکن است ۱۰ ثانیه طول بکشد.
🔹 با JIT: سرعت اجرا ۲ تا ۵ برابر سریعتر میشود! 🚀
#part_3 #opcache #jit
⚡ تفاوت OPcache و JIT در PHP:
🔹 هدف:
🔹 نحوه ذخیرهسازی:
🔹 تأثیر روی عملکرد:
🔹 محیطهای مناسب:
🔹 نتیجهگیری:
🏎️ آیا JIT همیشه مفید است؟
#part_4 #opcache #jit
🔹 هدف:
➕ در OPcache باعث میشود که کدهای PHP پس از اولین اجرا، در حافظه کش شوند و نیازی به تفسیر مجدد نداشته باشند.
➕ اما در JIT برخی از بخشهای کد را مستقیماً به کد ماشین تبدیل میکند تا سریعتر اجرا شوند.
🔹 نحوه ذخیرهسازی:
➕ در OPcache کدهای PHP را به Bytecode تبدیل کرده و در حافظه ذخیره میکند.
➕ اما در JIT کدهای PHP را مستقیماً به کد ماشین (Machine Code) کامپایل میکند.
🔹 تأثیر روی عملکرد:
➕ در OPcache باعث کاهش تأخیر در اجرای اسکریپتهای معمولی میشود و عملکرد کلی PHP را بهبود میبخشد.
➕ اما در JIT مخصوص اجرای سریع محاسبات پیچیده و پردازشهای سنگین طراحی شده است.
🔹 محیطهای مناسب:
➕ در OPcache برای وبسایتها، CMSها، APIها و برنامههای معمولی PHP بسیار مفید است.
➕ اما در JIT بیشتر برای پردازشهای سنگین، یادگیری ماشین، پردازش ویدئو و محاسبات ریاضی پیچیده تأثیرگذار است.
🔹 نتیجهگیری:
➕ در OPcache برای تمام پروژههای PHP توصیه میشود و باید فعال باشد.
➕ اما در JIT تنها در شرایط خاص مفید است و برای وبسایتهای معمولی تأثیر محسوسی ندارد.
🏎️ آیا JIT همیشه مفید است؟
✅ در پردازشهای ریاضی سنگین، یادگیری ماشین، گرافیک و پردازش ویدئو، JIT تأثیر زیادی در سرعت اجرا دارد.
❌ اما برای وبسایتهای معمولی و APIها، JIT تأثیر خیلی زیادی ندارد و OPcache بهتنهایی کافی است.
#part_4 #opcache #jit
🚀 کانفیگهای بیشتر OPcache در PHP (php.ini)
🔥 کانفیگهای بیشتر JIT در PHP (php.ini)
🆔 Sources: JIT, OPCache, Configuration.
#part_5 #opcache #jit
; ✅ فعالسازی OPcache
opcache.enable=1
; ✅ فعالسازی OPcache برای CLI
opcache.enable_cli=1
; ✅ مقدار حافظه اختصاصیافته به OPcache (بر حسب مگابایت)
opcache.memory_consumption=128
; ✅ حداکثر تعداد اسکریپتهای کششده در OPcache
opcache.max_accelerated_files=10000
; ✅ بررسی تغییرات فایلها برای بهروزرسانی کش (۱ = فعال، ۰ = غیرفعال)
opcache.validate_timestamps=1
; ✅ فاصله زمانی برای بررسی تغییرات در فایلها (بر حسب ثانیه)
opcache.revalidate_freq=2
; ✅ فعالسازی بهینهسازی در OPcache
opcache.optimization_level=0x7FFFBFFF
; ✅ غیرفعالسازی کش برای فایلهای خاص (در صورت نیاز)
opcache.blacklist_filename=/path/to/blacklist.txt
; ✅ فعالسازی ذخیره در حافظه اشتراکی برای بهبود عملکرد
opcache.file_cache=/tmp
; ✅ مقدار زمان نگهداری فایلهای کششده در حافظه
opcache.file_cache_only=0
; ✅ غیرفعالسازی OPcache برای برخی توابع
opcache.restrict_api=
; ✅ نمایش اطلاعات کامل OPcache در `phpinfo()`
opcache.consistency_checks=0
; ✅ مقدار زمان نگهداری اطلاعات در حافظه پنهان
opcache.interned_strings_buffer=16
🔥 کانفیگهای بیشتر JIT در PHP (php.ini)
; ✅ تنظیم مقدار حافظه اختصاص دادهشده به JIT (بر حسب مگابایت)
opcache.jit_buffer_size=100M
; ✅ تعیین سطح بهینهسازی JIT (اعداد مختلف تأثیر متفاوتی دارند)
opcache.jit=1255
; ✅ فعالسازی JIT برای پردازشهای خاص
opcache.jit_hot_func=127
opcache.jit_hot_loop=64
opcache.jit_hot_return=8
opcache.jit_hot_side_exit=8
; ✅ تنظیمات بهینهسازی JIT برای پردازشهای مختلف
opcache.jit_max_root_traces=1024
opcache.jit_max_side_traces=128
opcache.jit_max_loop_unrolls=8
opcache.jit_max_polymorphic_calls=4
opcache.jit_max_recursive_calls=2
; ✅ فعالسازی JIT فقط برای محیط CLI (اختیاری)
opcache.jit_debug=0
; ✅ استفاده از JIT در شرایط خاص
opcache.jit_fadeout=8
opcache.jit_blacklist_root_trace=16
opcache.jit_blacklist_side_trace=8
📌 نکته: مقدار opcache.jit=1255 یکی از بهترین تنظیمات برای بهینهسازی است، اما میتوانید آن را با توجه به نیاز خود تغییر دهید.
🆔 Sources: JIT, OPCache, Configuration.
#part_5 #opcache #jit
🔥1
💀 بنچمارک جالب PHP با JIT فعال!
این کد PHP یه حلقهی سنگینه که ۱۰ میلیون بار اجرا میشه:
⁉️ توضیح:
➖ هر بار حلقه، متغیر
‼️ نتیجه با PHP JIT:
⏳ زمان اجرا: ۷.۷۶ ثانیه
☠ حجم فایل لاگ: ۱۸۷ مگابایت
این کد PHP یه حلقهی سنگینه که ۱۰ میلیون بار اجرا میشه:
for($str = "", $i = 0; $i < 10000000; $i++) {
$str .= ($i ** 15);
}
error_log($str);⁉️ توضیح:
➖ هر بار حلقه، متغیر
$i رو به توان ۱۵ میرسونه و نتیجه رو به متغیر $str اضافه میکنه. و بعد از اجرا، یه فایل error log ایجاد میشه! ‼️ نتیجه با PHP JIT:
⏳ زمان اجرا: ۷.۷۶ ثانیه
☠ حجم فایل لاگ: ۱۸۷ مگابایت
❤2👍1
🔍 بررسیهایی که روی هسته PHP داشتم بصورت اتفاقی چشمم به تابع json_validate افتاد که در PHP 8.3 اضافه شده! 🔥
فکر میکنم این ویژگی کمی دیر اضافه شد، چون قبلاً من خودم مجبور بودم این کار رو دستی انجام بدم. اما حالا با این تابع جدید، به راحتی میتونید بررسی کنید که آیا ورودی شما یک جیسون معتبر هست یا خیر! ✅
ساختار تابع:
پ. ن: حتی هوش مصنوعی از وجودش با خبر نشده(بدون اینکه بگید سرچ کنه).
فکر میکنم این ویژگی کمی دیر اضافه شد، چون قبلاً من خودم مجبور بودم این کار رو دستی انجام بدم. اما حالا با این تابع جدید، به راحتی میتونید بررسی کنید که آیا ورودی شما یک جیسون معتبر هست یا خیر! ✅
ساختار تابع:
function json_validate(string $json, int $depth = 512, int $flags = 0): bool {}پ. ن: حتی هوش مصنوعی از وجودش با خبر نشده(بدون اینکه بگید سرچ کنه).
This media is not supported in your browser
VIEW IN TELEGRAM
🎬 Sam showing little bit power 💀
کانال مهرداد لینوکس
معمولا اونی که با اسمبلی نوشته میشه کند تره به دو چیز وابسته هست سطح سواد و تسلط برنامه نویس به زبان ماشین و نوع الگوریتم استفاده شده این تا دلیل ، نشون میده چرا سرعت اسمبلی کمتر خواهد بود کامپایلر ها و اسمبلر ها مثل GCC توانایی شگفت اوری در بهینه سازی…
قشنگترین چیزی که میتونست منو متقاعد کنه سرعت اسمبلی کندتر میتونه باشه👌
👍2
Forwarded from ' 𝟸𝟺/𝟽 ' (Mobin)
این کوههایی که داری با خودت حملشون میکنی، قرار بود فقط ازشون بالا بری.
❤2
Web Programmer
🔹 شاید این ویژگی کمی مبهم به نظر بیاد. در واقع، با استفاده از match شما میتونید چند مقدار مختلف رو که به یک نتیجه یکسان میرسند، در یک بخش بنویسید تا از تکرار جلوگیری بشه. به جای اینکه برای هر مقدار مشابه یک خروجی تکراری بنویسید، میتونید همه اونها رو در…
کاملا جالب و کاربردی 👌
از PHP 7.4 به بعد این سینتکس قابل استفادهس
از PHP 7.4 به بعد این سینتکس قابل استفادهس
IoT is god 🤤
〰〰〰〰
👌 یه برد ESP برنامه ریزی شده که توسط برنامه(عکس هست) داخل گوشی لامپ خونه خاموش یا روشن میشه و بصورت کاملا اینترنتی از راه دور.
🤌 پ.ن: هنوز میخواد بره قشنگ تو پریز کار گذاشته بشه، فعلا روکار وصل کردم برا تست و دیباگینگ 😁
〰〰〰〰
👌 یه برد ESP برنامه ریزی شده که توسط برنامه(عکس هست) داخل گوشی لامپ خونه خاموش یا روشن میشه و بصورت کاملا اینترنتی از راه دور.
🤌 پ.ن: هنوز میخواد بره قشنگ تو پریز کار گذاشته بشه، فعلا روکار وصل کردم برا تست و دیباگینگ 😁
❤1
🧐 یه وقتایی پیش میاد که میخوایم یه فانکشن جدید به پروژه شیگرا توی PHP اضافه کنیم. معمولاً میایم و فایلش رو include میکنیم، ولی تا حالا به این فکر کردید که میشه از use هم استفاده کرد؟
✅ همونطور که میدونیم، use توی PHP معمولاً برای آبجکتها و namespaceها استفاده میشه، ولی جالبه بدونید که میتونید از ترکیب use function هم استفاده کنیم تا یه فانکشن رو به پروژهات اضافه کنیم.
🔆 مثال:
🔰 اگه از کامپوزر استفاده میکنی، تنظیمات autoload رو به این شکل ست کن:
اینجوری کد تمیزتر و حرفهایتر میشه! 🚀
✅ همونطور که میدونیم، use توی PHP معمولاً برای آبجکتها و namespaceها استفاده میشه، ولی جالبه بدونید که میتونید از ترکیب use function هم استفاده کنیم تا یه فانکشن رو به پروژهات اضافه کنیم.
🔆 مثال:
function file:
namespace You;
if( ! function_exists('greetings') ) {
function greetings(string $firstname): string {
return "Howdy $firstname!";
}
}
using in project oop:
require_once __DIR__ . '/vendor/autoload.php'; // if you use composer
use function You\greetings;
echo greetings('Mark'); // "Howdy Mark!"
🔰 اگه از کامپوزر استفاده میکنی، تنظیمات autoload رو به این شکل ست کن:
"autoload": {
"files": [
"src/greetings.php"
]
}اینجوری کد تمیزتر و حرفهایتر میشه! 🚀
🔥2