Web Programmer
32 subscribers
7 photos
5 videos
5 links
پشتیبان چنل: @Bot_MoMi
Download Telegram
یه اپ تازه توسعه یافته و رایگانو بدون محدودیت این مشکلاتم داره بلخره، همه هجوم آوردن 😂
🗿2
This media is not supported in your browser
VIEW IN TELEGRAM
👆 ویدئو بالا رو ببینید، سرعت زبان های برنامه نویسی رو نشون میده.

😐 نکته ای که حائز اهمیته اینه که 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 یا (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:

🔹 هدف:
در 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)
;  فعال‌سازی 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 یه حلقه‌ی سنگینه که ۱۰ میلیون بار اجرا میشه:
for($str = "", $i = 0; $i < 10000000; $i++) {
$str .= ($i ** 15);
}
error_log($str);

⁉️ توضیح:
هر بار حلقه، متغیر $i رو به توان ۱۵ می‌رسونه و نتیجه رو به متغیر $str اضافه می‌کنه. و بعد از اجرا، یه فایل error log ایجاد میشه!

‼️ نتیجه با PHP JIT:
زمان اجرا: ۷.۷۶ ثانیه
حجم فایل لاگ: ۱۸۷ مگابایت
2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔍 بررسی‌هایی که روی هسته PHP داشتم بصورت اتفاقی چشمم به تابع json_validate افتاد که در PHP 8.3 اضافه شده! 🔥

فکر می‌کنم این ویژگی کمی دیر اضافه شد، چون قبلاً من خودم مجبور بودم این کار رو دستی انجام بدم. اما حالا با این تابع جدید، به راحتی می‌تونید بررسی کنید که آیا ورودی شما یک جیسون معتبر هست یا خیر!

ساختار تابع:
function json_validate(string $json, int $depth = 512, int $flags = 0): bool {}


پ. ن: حتی هوش مصنوعی از وجودش با خبر نشده(بدون اینکه بگید سرچ کنه).
Forwarded from ' 𝟸𝟺/𝟽 ' (Mobin)
این کوه‌هایی که داری با خودت حمل‌شون می‌کنی، قرار بود فقط ازشون بالا بری.
2
IoT is god 🤤



👌 یه برد ESP برنامه ریزی شده که توسط برنامه(عکس هست) داخل گوشی لامپ خونه خاموش یا روشن میشه و بصورت کاملا اینترنتی از راه دور.

🤌 پ.ن: هنوز میخواد بره قشنگ تو پریز کار گذاشته بشه، فعلا روکار وصل کردم برا تست و دیباگینگ 😁
1
🧐 یه وقتایی پیش میاد که می‌خوایم یه فانکشن جدید به پروژه شی‌گرا توی PHP اضافه کنیم. معمولاً میایم و فایلش رو include می‌کنیم، ولی تا حالا به این فکر کردید که میشه از use هم استفاده کرد؟

همونطور که می‌دونیم، 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
سلام سلام، عیدتون مبارک ستونا ❤️
4🥰1
🚀 چند خروجی از توابع در پایتون و PHP

اگه با Python کار کرده باشید، می‌دونید که می‌تونیم با تاپل‌ها مقادیر برگشتی یک تابع رو در چندین متغیر بریزیم.
یعنی به جای داشتن یک خروجی، می‌تونیم چند خروجی داشته باشیم!


مثال در پایتون:
def sum_and_product(a, b) -> tuple:
suma = a + b
prod = a * b
return (suma, prod)

sum, product = sum_and_product(3, 5)
print(sum) # 🟢 8
print(product) # 🟢 15



اما داخل PHP هم ممکنه؟

جواب: بله! در PHP می‌تونیم از آرایه‌های فهرستی برای همین کار استفاده کنیم:
function sum_and_product(int $a, int $b): array {
$sum = $a + $b;
$prod = $a * $b;
return [$sum, $prod];
}

list($sum, $product) = sum_and_product(3, 5);

echo $sum . PHP_EOL; // 🟢 8
echo $product . PHP_EOL; // 🟢 15


💡 از PHP 7.1+ می‌تونیم از نسخه کوتاه شده هم استفاده کنیم:
[$sum, $product] = sum_and_product(3, 5); 



مزیت‌ها و قابلیت‌های بیشتر:

1. باز کردن چند سطحی:
$data = [1, [2, 3]];
[$a, [$b, $c]] = $data;


2. کار با آرایه‌های انجمنی:
$data = ['sum' => 8, 'product' => 15];
['sum' => $s, 'product' => $p] = $data;


3. نادیده گرفتن عناصر اضافی:
$data = [1, 2, 3, 4];
[, $b, , $d] = $data;


4. خواناتر و مدرن‌تر نسبت به list


نسخه کوتاه [ ] شبیه tuple unpacking پایتون است و خیلی انعطاف‌پذیرتر است.

💡 با این روش می‌تونید چند خروجی از یک تابع داشته باشید و کدتون هم خواناتر و ساختارمندتر بشه.
🔥1