Forwarded from Database Labdon
وقتی Cache بیشتر از این که کمک کنه، دردسر می سازه!
چند وقت پیش روی یه پروژه بزرگ کار می کردم که توش Redis برای کشینگ استفاده می کردیم. همه چیز خوب پیش می رفت تا اینکه یه روز، یه تغییر ظاهرا بی ضرر تو کد باعث شد کش درست Invalid نشه. نتیجه چی شد؟ کاربرا داده های قدیمی رو می دیدن، بعضیا نمی تونستن اطلاعاتشون رو آپدیت کنن، و پشتیبانی حسابی شلوغ شد!
کش توزیع شده یه شمشیر دولبه ست!
از یه طرف، می تونه فشار روی دیتابیس رو کم کنه و سرعت پاسخ گویی رو بالا ببره، ولی از طرف دیگه، اگه درست مدیریت نشه، مشکلاتی مثل:
مشکل Cache Inconsistency – وقتی دیتا تو کش و دیتابیس ناهماهنگ می شه و بعضی کاربرا داده های قدیمی می بینن.
مشکل Cache Stampede – همه درخواست ها همزمان به کش می رسن و فشار زیادی ایجاد می کنن.
مشکل TTL Misconfiguration – تنظیم اشتباه زمان اعتبار کش که باعث می شه یا دیتا زودتر از حد لازم حذف بشه یا تا مدت زیادی به روز نشه.
اون تجربه یه درس مهم بهم داد: کش چیزی نیست که فقط یه بار تنظیمش کنیم و فراموشش کنیم. باید یه استراتژی کش هوشمند داشته باشیم که همیشه بهینه بمونه.
<Hamed Farzanefar/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
چند وقت پیش روی یه پروژه بزرگ کار می کردم که توش Redis برای کشینگ استفاده می کردیم. همه چیز خوب پیش می رفت تا اینکه یه روز، یه تغییر ظاهرا بی ضرر تو کد باعث شد کش درست Invalid نشه. نتیجه چی شد؟ کاربرا داده های قدیمی رو می دیدن، بعضیا نمی تونستن اطلاعاتشون رو آپدیت کنن، و پشتیبانی حسابی شلوغ شد!
کش توزیع شده یه شمشیر دولبه ست!
از یه طرف، می تونه فشار روی دیتابیس رو کم کنه و سرعت پاسخ گویی رو بالا ببره، ولی از طرف دیگه، اگه درست مدیریت نشه، مشکلاتی مثل:
مشکل Cache Inconsistency – وقتی دیتا تو کش و دیتابیس ناهماهنگ می شه و بعضی کاربرا داده های قدیمی می بینن.
مشکل Cache Stampede – همه درخواست ها همزمان به کش می رسن و فشار زیادی ایجاد می کنن.
مشکل TTL Misconfiguration – تنظیم اشتباه زمان اعتبار کش که باعث می شه یا دیتا زودتر از حد لازم حذف بشه یا تا مدت زیادی به روز نشه.
اون تجربه یه درس مهم بهم داد: کش چیزی نیست که فقط یه بار تنظیمش کنیم و فراموشش کنیم. باید یه استراتژی کش هوشمند داشته باشیم که همیشه بهینه بمونه.
<Hamed Farzanefar/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
👍11🔥2
در لاراول یه متود داریم با نام ()lockForUpdate که برای جلوگیری از مشکلات Race Conditions استفاده میشه.
وقتی دو یا چند نفر میخوان بطور همزمان یک دیتا رو تغییر بدن، این متود باعث میشه فقط یکی ازونا بتونه دیتا رو تغییر بده و بقیه منتظر بمونن. این کار از یه سری اشتباها و تداخلهای ممکن پیشگیری میکنه. مثلاً وقتی میخوایم status یه سفارش رو تغییرش بدیم ، lockForUpdate() باعث میشه فقط یه نفر بتونه اونو در لحظه تغییر بده تا اشتباهی رخ نده.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/thelarrybarker/status/1889738111980118298?t=zQBNvx5a_46OyE2yF8Y4ng&s=35
وقتی دو یا چند نفر میخوان بطور همزمان یک دیتا رو تغییر بدن، این متود باعث میشه فقط یکی ازونا بتونه دیتا رو تغییر بده و بقیه منتظر بمونن. این کار از یه سری اشتباها و تداخلهای ممکن پیشگیری میکنه. مثلاً وقتی میخوایم status یه سفارش رو تغییرش بدیم ، lockForUpdate() باعث میشه فقط یه نفر بتونه اونو در لحظه تغییر بده تا اشتباهی رخ نده.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/thelarrybarker/status/1889738111980118298?t=zQBNvx5a_46OyE2yF8Y4ng&s=35
X (formerly Twitter)
Larry B (@thelarrybarker) on X
#Laravel tip:
Use lockForUpdate() to Prevent Race Conditions
Instead of allowing multiple processes to update the same row simultaneously, lockForUpdate() prevents conflicts.
Ensure only one process modifies an order at a time
Use lockForUpdate() to Prevent Race Conditions
Instead of allowing multiple processes to update the same row simultaneously, lockForUpdate() prevents conflicts.
Ensure only one process modifies an order at a time
❤5👍5
در MySQL میتونیم با استفاده از Table Partitioning جداول بزرگمونو به بخشهای کوچکتر تقسیم کنیم.
فایدش چیه؟؟
این کار query performance رو خیلی میتونه بهینه تر کنه برامون.
مثلا اگه جدول فروشمون خیلی بزرگ باشه و دیتاش شامل تاریخ فروش باشه، میتونیم جدولمونو بر اساس سال پارتیشنبندی کنیم و خب اینطوری وقتی بخوایم دیتاهای یه سال خاصی رو جستجو کنیم، فقط بخش مربوط به همون یه سال بررسی میشه که خب باعث میشه فرایند جستوجو سرعتش بهینه تر بشه.
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1890023138622116289?t=bgrX4CCiL7eaLwpI9CAdYw&s=35
فایدش چیه؟؟
این کار query performance رو خیلی میتونه بهینه تر کنه برامون.
مثلا اگه جدول فروشمون خیلی بزرگ باشه و دیتاش شامل تاریخ فروش باشه، میتونیم جدولمونو بر اساس سال پارتیشنبندی کنیم و خب اینطوری وقتی بخوایم دیتاهای یه سال خاصی رو جستجو کنیم، فقط بخش مربوط به همون یه سال بررسی میشه که خب باعث میشه فرایند جستوجو سرعتش بهینه تر بشه.
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1890023138622116289?t=bgrX4CCiL7eaLwpI9CAdYw&s=35
X (formerly Twitter)
Martin Joo (@mmartin_joo) on X
Table partitioning in MySQL can dramatically improve query performance by splitting large tables into smaller physical files.
❤8👍2🔥1
وقتی که نیاز داریم چندین کلاس رو از یک namespace وارد کنیم، معمولاً هر کدوم رو با use جداگانه درج میکنیم. اما میشه همهی این کلاس هارو توی یک خط use کنیم!
چجوری؟
مزایاش چیه؟؟
تمیزتر شدن و کمتر شدنه تعداد خطوط.
#PHP
#clean_code
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/laravelbackpack/status/1856313510768324670?t=qOO4OC7jKWvPITFKNSHOtA&s=1
چجوری؟
use Namespace\{ClassA, ClassB, ClassC};مزایاش چیه؟؟
تمیزتر شدن و کمتر شدنه تعداد خطوط.
#PHP
#clean_code
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/laravelbackpack/status/1856313510768324670?t=qOO4OC7jKWvPITFKNSHOtA&s=1
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
#Laravel and #PHP Tip
Did you know… you can import multiple classes from a single namespace like this👇
Way cleaner, right? 😁
Did you know… you can import multiple classes from a single namespace like this👇
Way cleaner, right? 😁
❤7👍7🏆1
DevTwitter | توییت برنامه نویسی
لاراول 12در 6 اسفند عرضه خواهد شد تیلور اعلام کرده که نسخه 12 لاراول در تاریخ 6 اسفند 1403 عرضه خواهد شد. به گفته او این اولین نسخه اصلی خواهد بود که بدون تغییرات مخرب (zero-breaking changes) عرضه میشود. @DevTwitter | <Pouya Farshidnia/>
به گفته ی تیلور:
نسخه ی جدید از لاراول ۱۲ ، روز دوشنبه منتشر میشه که بیشتر بروزرسانی dependency ها و یه سری اصلاحات جزئی رو شامل میشه که در نتیجه تغییرات زیادی در کد برنامهها ایجاد نخواهد کرد.
به همین دلیل بیشتر برنامهها میتونن بدون اعمال تغییر در کد، ازین نسخه استفاده کنند. تمرکز این نسخه از لاراول بر روی بروزرسانی dependency ها، سازگاری با نسخههای جدید PHP و معرفی ویژگیهای جدید هستش.
همچنین هفته آینده ابزارهای جدیدی مانند laravel cloud و starter kit های جدید منتشر میشن.
#Laravel
@GoldenCodeir
https://x.com/taylorotwell/status/1892337776298787188?t=aGz1lPyzd2Wy6zXmwpgUJQ&s=35
نسخه ی جدید از لاراول ۱۲ ، روز دوشنبه منتشر میشه که بیشتر بروزرسانی dependency ها و یه سری اصلاحات جزئی رو شامل میشه که در نتیجه تغییرات زیادی در کد برنامهها ایجاد نخواهد کرد.
به همین دلیل بیشتر برنامهها میتونن بدون اعمال تغییر در کد، ازین نسخه استفاده کنند. تمرکز این نسخه از لاراول بر روی بروزرسانی dependency ها، سازگاری با نسخههای جدید PHP و معرفی ویژگیهای جدید هستش.
همچنین هفته آینده ابزارهای جدیدی مانند laravel cloud و starter kit های جدید منتشر میشن.
#Laravel
@GoldenCodeir
https://x.com/taylorotwell/status/1892337776298787188?t=aGz1lPyzd2Wy6zXmwpgUJQ&s=35
X (formerly Twitter)
Taylor Otwell ☁️ 🦹 (@taylorotwell) on X
We will be releasing Laravel 12 on Monday.
This is primarily a maintenance focused release that updates upstream dependencies and has minimal breaking changes or major few features.
Because of that, the vast majority of applications will be able to upgrade…
This is primarily a maintenance focused release that updates upstream dependencies and has minimal breaking changes or major few features.
Because of that, the vast majority of applications will be able to upgrade…
👍9🔥3❤1👎1
متود times در لاراول بهتون این امکان رو میده که یک کار رو چندین بار به راحتی بتونید تکرار کنید بدون نیاز به نوشتن for یا foreach. یعنی شما میگید که یک کار رو مثلاً ۵ بار انجام بده، و لاراول به طور خودکار اون کار رو ۵ بار براتون انجام میده.
کاربردش؟؟
مثلا در تست نویسی(ایجاد رکورد با تعداد مدنظر در دیتابیس)
چجوری کار میکنه؟
در هر تکرار، شمارهی تکرار (که در اینجا number$ هستش) به closure داده میشه و میتونین ازش برای انجام کاری مثل چاپ پیام یا پردازش دیتای مدنظر استفاده کنین.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1896538556551884968?t=q22doKctgbLdIHAW0U24uA&s=35
کاربردش؟؟
مثلا در تست نویسی(ایجاد رکورد با تعداد مدنظر در دیتابیس)
چجوری کار میکنه؟
در هر تکرار، شمارهی تکرار (که در اینجا number$ هستش) به closure داده میشه و میتونین ازش برای انجام کاری مثل چاپ پیام یا پردازش دیتای مدنظر استفاده کنین.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1896538556551884968?t=q22doKctgbLdIHAW0U24uA&s=35
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
#Laravel Collections Tip
Check out the static `times` method. It creates a new collection, invoking the given closure a specified number of times.
Check out the static `times` method. It creates a new collection, invoking the given closure a specified number of times.
👍6👏2❤1
Forwarded from آموزش لاراول | LaravelHub (rwx-rwx-rwx)
📌 امروز وقتی وارد سرور ویندوزی خودم شدم، یه حس عجیبی داشتم... انگار یه چیزی درست نبود! کمی که دقت کردم، متوجه چند مورد مشکوک شدم و با خودم گفتم: "نکنه هک شدم؟!" 😨
اگه شما هم همچین حسی داشتید، این چکلیست امنیتی رو دنبال کنید تا بفهمید کسی به سرورتون نفوذ کرده یا نه!
✅ ۱. بررسی کاربران جدید
🔹 توی جستجوی ویندوز، عبارت User رو تایپ کنید.
🔹 به بخش Local Users and Groups برید.
🔹 نباید کاربر ناشناسی توی لیست باشه! اگه بود، فوراً حذفش کنید.
✅ ۲. چک کردن لاگهای ورود و خروج
🔹 دکمههای Win + R رو بزنید و تایپ کنید:
🔹 بعد برید به مسیر:
🔹 دنبال Event ID 4624 (ورود موفق) و Event ID 4625 (ورود ناموفق) بگردید.
اگه آیپی مشکوک دیدید، یعنی کسی غیر از شما وارد شده! 🚨
✅ ۳. بررسی اتصالات فعال به سرور
🔹 CMD رو باز کنید و این دستور رو بزنید:
🔹 اگه آیپیهای ناشناس توی لیست بود، یعنی کسی هنوز به سرورتون وصله! 😱
✅ ۴. چک کردن پردازشهای مشکوک
🔹 Task Manager رو باز کنید (Ctrl + Shift + Esc)
🔹 توی تب Processes ببینید برنامهای هست که نباید باشه؟
🔹 اگه اسم عجیبوغریب داشت، فوراً End Task کنید!
✅ ۵. بستن دسترسی هکر
🔹 رمز عبور ادمین رو عوض کنید.
🔹 پورت 3389 (RDP) رو توی فایروال ببندید.
🔹 فقط آیپیهای مطمئن رو مجاز کنید.
🔹 با آنتیویروس یه اسکن کامل بزنید.
⚠️ اگه این مراحل رو انجام دادید و چیزی مشکوک پیدا کردید، یعنی سرورتون هک شده! سریعاً اقدام کنید و امنیت رو بالا ببرید.
📢 این مطلبو برای دوستات بفرست که امنیت سرورشون حفظ بشه! 🔐💻
#کدنویسی #امنیت #کشف_جرایم_رایانه_ای
🔥⚡️ کانال آموزشی LaravelHub
@LaravelHub
اگه شما هم همچین حسی داشتید، این چکلیست امنیتی رو دنبال کنید تا بفهمید کسی به سرورتون نفوذ کرده یا نه!
✅ ۱. بررسی کاربران جدید
🔹 توی جستجوی ویندوز، عبارت User رو تایپ کنید.
🔹 به بخش Local Users and Groups برید.
🔹 نباید کاربر ناشناسی توی لیست باشه! اگه بود، فوراً حذفش کنید.
✅ ۲. چک کردن لاگهای ورود و خروج
🔹 دکمههای Win + R رو بزنید و تایپ کنید:
eventvwr.msc
🔹 بعد برید به مسیر:
Windows Logs > Security
🔹 دنبال Event ID 4624 (ورود موفق) و Event ID 4625 (ورود ناموفق) بگردید.
اگه آیپی مشکوک دیدید، یعنی کسی غیر از شما وارد شده! 🚨
✅ ۳. بررسی اتصالات فعال به سرور
🔹 CMD رو باز کنید و این دستور رو بزنید:
netstat -an | findstr "ESTABLISHED"
🔹 اگه آیپیهای ناشناس توی لیست بود، یعنی کسی هنوز به سرورتون وصله! 😱
✅ ۴. چک کردن پردازشهای مشکوک
🔹 Task Manager رو باز کنید (Ctrl + Shift + Esc)
🔹 توی تب Processes ببینید برنامهای هست که نباید باشه؟
🔹 اگه اسم عجیبوغریب داشت، فوراً End Task کنید!
✅ ۵. بستن دسترسی هکر
🔹 رمز عبور ادمین رو عوض کنید.
🔹 پورت 3389 (RDP) رو توی فایروال ببندید.
🔹 فقط آیپیهای مطمئن رو مجاز کنید.
🔹 با آنتیویروس یه اسکن کامل بزنید.
⚠️ اگه این مراحل رو انجام دادید و چیزی مشکوک پیدا کردید، یعنی سرورتون هک شده! سریعاً اقدام کنید و امنیت رو بالا ببرید.
📢 این مطلبو برای دوستات بفرست که امنیت سرورشون حفظ بشه! 🔐💻
#کدنویسی #امنیت #کشف_جرایم_رایانه_ای
🔥⚡️ کانال آموزشی LaravelHub
@LaravelHub
🔥5❤4👍2
در لاراول میتونیم از متودهایی مثل throwIfStatus برای مدیریت خودکار خطاهامون در هنگام ارسال request به API استفاده کنیم.
این متودها به ما کمک میکنن تا اگه وضعیت response یک API بصورت خطا (مثلا ۴۰۰ یا ۵۰۰) باشه، خودش بطور خودکار یک exception مناسب ایجاد کنه و ما دیگه نیازی به بررسی دستی وضعیت response نخواهیم داشت.
(من فقط یکی ازین متودارو گفتم، مابقیش و چگونگیه استفاده ازین دسته متود ها در تصویر ذکر)
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/OussamaMater/status/1898800422476788177?t=sQquSOys96KZAxj7UNeTlQ&s=1
این متودها به ما کمک میکنن تا اگه وضعیت response یک API بصورت خطا (مثلا ۴۰۰ یا ۵۰۰) باشه، خودش بطور خودکار یک exception مناسب ایجاد کنه و ما دیگه نیازی به بررسی دستی وضعیت response نخواهیم داشت.
(من فقط یکی ازین متودارو گفتم، مابقیش و چگونگیه استفاده ازین دسته متود ها در تصویر ذکر)
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/OussamaMater/status/1898800422476788177?t=sQquSOys96KZAxj7UNeTlQ&s=1
X (formerly Twitter)
OussamaMater (@OussamaMater) on X
Laravel Tip 💡: Convert Responses to Exceptions
When consuming APIs, your request might fail. While you can manually check and throw exceptions, Laravel ships with handy helpers to do exactly that 🚀
#laravel
When consuming APIs, your request might fail. While you can manually check and throw exceptions, Laravel ships with handy helpers to do exactly that 🚀
#laravel
🙏2👍1
Forwarded from DevTwitter | توییت برنامه نویسی
یه راه حل خیلی ساده برای بالا بردن performance برنامههایی که با PHP نوشتیم:
یکی از مشکلاتی که در PHP وجود داره، مقیاسپذیری و سرعت پایین پردازشهای همزمان هست. یکی از راه حلها استفاده از FrankenPHP میتونه باشه.
در حالت عادی، وقتی برنامه PHP اجرا میشه، هر بار که درخواست جدیدی میاد، PHP باید اسکریپتها رو از نو بارگذاری کنه. این فرآیند باعث میشه که زمان بارگذاری و پاسخدهی افزایش پیدا کنه، مخصوصاً توی برنامههای سنگین یا با ترافیک بالا.
اما با FrankenPHP، این فرآیند تغییر میکنه. FrankenPHP به جای اینکه هر بار اسکریپتها رو دوباره بازگذاری کنه، فقط یک بار فایلهای PHP رو کش میکنه و از همون نسخه کش شده برای درخواستهای بعدی استفاده میکنه. این یعنی توی درخواستهای بعدی دیگه نیاز به اجرای دوباره نیست و PHP خیلی سریعتر جواب میده.
مزایاش چیه؟
سرعت بیشتر: با استفاده از FrankenPHP، کدهای PHP سریعتر اجرا میشن. این یعنی میتونید تعداد درخواستهای بیشتری رو در یک زمان پردازش کنید و بار ترافیکی بالا رو بهتر مدیریت کنید.
برای میکروسرویسها مناسبه: اگر دارید یک سیستم میکروسرویسی میسازید، FrankenPHP میتونه به شدت کمک کنه چون برای این نوع معماری ساخته شده و سرعت و مقیاسپذیری بالایی داره.
مقیاسپذیری راحتتر: FrankenPHP به شما این امکان رو میده که به راحتی مقیاس پروژههاتون رو افزایش بدید بدون اینکه از سرعت و عملکرد کم بشه.
پردازش همزمان: این پلتفرم کمک میکنه که پردازشهای سنگین رو در پسزمینه انجام بدید و در عین حال از سرعت کلی سیستم کاسته نشه.
اگر برنامهای دارید که باید با سرعت بالا به درخواستها پاسخ بده یا نیاز به مقیاسپذیری بیشتر در محیطهای ابری داره، یه سر به FrankenPHP بزنید. با Laravel Octane هم خیلی راحت میشه از FrankenPHP در لاراول استفاده کرد.
@DevTwitter | <Iman Rajabi/>
یکی از مشکلاتی که در PHP وجود داره، مقیاسپذیری و سرعت پایین پردازشهای همزمان هست. یکی از راه حلها استفاده از FrankenPHP میتونه باشه.
در حالت عادی، وقتی برنامه PHP اجرا میشه، هر بار که درخواست جدیدی میاد، PHP باید اسکریپتها رو از نو بارگذاری کنه. این فرآیند باعث میشه که زمان بارگذاری و پاسخدهی افزایش پیدا کنه، مخصوصاً توی برنامههای سنگین یا با ترافیک بالا.
اما با FrankenPHP، این فرآیند تغییر میکنه. FrankenPHP به جای اینکه هر بار اسکریپتها رو دوباره بازگذاری کنه، فقط یک بار فایلهای PHP رو کش میکنه و از همون نسخه کش شده برای درخواستهای بعدی استفاده میکنه. این یعنی توی درخواستهای بعدی دیگه نیاز به اجرای دوباره نیست و PHP خیلی سریعتر جواب میده.
مزایاش چیه؟
سرعت بیشتر: با استفاده از FrankenPHP، کدهای PHP سریعتر اجرا میشن. این یعنی میتونید تعداد درخواستهای بیشتری رو در یک زمان پردازش کنید و بار ترافیکی بالا رو بهتر مدیریت کنید.
برای میکروسرویسها مناسبه: اگر دارید یک سیستم میکروسرویسی میسازید، FrankenPHP میتونه به شدت کمک کنه چون برای این نوع معماری ساخته شده و سرعت و مقیاسپذیری بالایی داره.
مقیاسپذیری راحتتر: FrankenPHP به شما این امکان رو میده که به راحتی مقیاس پروژههاتون رو افزایش بدید بدون اینکه از سرعت و عملکرد کم بشه.
پردازش همزمان: این پلتفرم کمک میکنه که پردازشهای سنگین رو در پسزمینه انجام بدید و در عین حال از سرعت کلی سیستم کاسته نشه.
اگر برنامهای دارید که باید با سرعت بالا به درخواستها پاسخ بده یا نیاز به مقیاسپذیری بیشتر در محیطهای ابری داره، یه سر به FrankenPHP بزنید. با Laravel Octane هم خیلی راحت میشه از FrankenPHP در لاراول استفاده کرد.
@DevTwitter | <Iman Rajabi/>
👍6🔥1
اگه بخواید سرعت پروژهتون (مثل زمان اجرای یک query) رو بررسی کنید و بخشهای کند رو پیدا کنید تا بتونید بهبودش بدید، میتونید از کلاس Benchmark در لاراول استفاده کنید. 🔥
این کلاس به شما کمک میکنه تا مدت زمانی که یه عملیات خاص انجام میده رو بدست بیارید و قسمتهایی که نیاز به بهبود دارن رو شناسایی کنید.
(نحوه استفادش هم در تصویر شرح داده شده)
@GoldenCodeir
#Laravel
(به منبع و مثالش توجه کنین 👇🏾)
https://x.com/laravelbackpack/status/1900162434356432927?t=eC4AGkAMOS2InxZQSXWKkw&s=35
این کلاس به شما کمک میکنه تا مدت زمانی که یه عملیات خاص انجام میده رو بدست بیارید و قسمتهایی که نیاز به بهبود دارن رو شناسایی کنید.
(نحوه استفادش هم در تصویر شرح داده شده)
@GoldenCodeir
#Laravel
(به منبع و مثالش توجه کنین 👇🏾)
https://x.com/laravelbackpack/status/1900162434356432927?t=eC4AGkAMOS2InxZQSXWKkw&s=35
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
#Laravel Tip
Did you know... Laravel has a Benchmark class that lets you measure the time of any task:
Did you know... Laravel has a Benchmark class that lets you measure the time of any task:
❤4👍3
در لاراول اگه بخوایم query ما نتایج تکراری رو حذف کنه، از کدام متود باید استفاده کنیم؟
Anonymous Quiz
49%
distinct()
4%
groupBy()
32%
unique()
15%
removeDuplicates()
👍6⚡2
وقتی از دستور "%LIKE "%fo برای جستجو استفاده میکنیم، درین شرایط دیتابیس باید تمام اطلاعات رو برامون بررسی کنه که خب باعث میشه سرعت پایین بیاد. راه بهتر برای جستجوی سریعتر استفاده از full-text هستش.
این روش کمک میکنه تا دیتابیس خیلی سریعتر و کارآمدتر فرایند جستجو رو انجام بده.
(طریقه استفادش در تصویر درج شده)
#SQL
#PHP
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1902014134561947783?t=jHjPbh6DAmevpRPeQSCDWg&s=35
این روش کمک میکنه تا دیتابیس خیلی سریعتر و کارآمدتر فرایند جستجو رو انجام بده.
(طریقه استفادش در تصویر درج شده)
#SQL
#PHP
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1902014134561947783?t=jHjPbh6DAmevpRPeQSCDWg&s=35
X (formerly Twitter)
Martin Joo (@mmartin_joo) on X
LIKE "%foo%" queries can be very slow.
Use full-text index and full-text search instead:
Use full-text index and full-text search instead:
🔥5❤1👏1🤔1
در لاراول 12، ویژگی جدیدی به نام NamedScope اضافه شده که به ما این امکان رو میده که query scope ها رو بدون نیاز به پیشوند scope تعریف کنیم.
( یعنی میتونیم نام متودها رو به طور مستقیم و سادهتر بنویسیم. )
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/jordankdalton/status/1902502113659273313?t=GA_f4AoLSdNqQJ_FPXfj4A&s=19
( یعنی میتونیم نام متودها رو به طور مستقیم و سادهتر بنویسیم. )
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/jordankdalton/status/1902502113659273313?t=GA_f4AoLSdNqQJ_FPXfj4A&s=19
X (formerly Twitter)
Jordan Dalton (@jordankdalton) on X
Checkout NamedScope which was added to Laravel 12.
This allows a new way to define Eloquent query scopes without requiring the additional scope prefix in method names.
This allows a new way to define Eloquent query scopes without requiring the additional scope prefix in method names.
❤2👍2🙏2
در دیتابیس مفهومه ACID چیه؟
شماره یک ( 🅰️ - Atomicity):
به این معناست که یک transaction (عملیات در دیتابیس) یا کامل انجام میشه یا اصلاً انجام نمیشه.
اگه در طول اجرای transaction خطایی رخ بده، تمام تغییرات انجامشده در دیتابیس باید لغو بشه (rollback) تا دیتابیس در وضعیت اولیه باقی بمونه.
📌 مثلا؟؟
فرض کنین شما در حال انتقال پول از حساب بانکیتون به حساب شخص دیگه ای هستین. اگه فرایند انتقال بطور کامل انجام بشه (یعنی پول از حساب شما کم شده و به حساب اون شخص اضافه بشه)، تراکنش موفقیتآمیزه.✅️
اما اگه وسطه عملیات مشکلی پیش بیاد (مثلاً اتصال اینترنت قطع بشه)، هیچکدوم از این تغییرات نباید در دیتابیس باقی بمونه. یعنی یا همه عملیاتها باید انجام بشن، یا هیچکدوم نباید انجام بشن.
#Database
#ACID
#Atomicity
@GoldenCodeir
شماره یک ( 🅰️ - Atomicity):
به این معناست که یک transaction (عملیات در دیتابیس) یا کامل انجام میشه یا اصلاً انجام نمیشه.
اگه در طول اجرای transaction خطایی رخ بده، تمام تغییرات انجامشده در دیتابیس باید لغو بشه (rollback) تا دیتابیس در وضعیت اولیه باقی بمونه.
📌 مثلا؟؟
فرض کنین شما در حال انتقال پول از حساب بانکیتون به حساب شخص دیگه ای هستین. اگه فرایند انتقال بطور کامل انجام بشه (یعنی پول از حساب شما کم شده و به حساب اون شخص اضافه بشه)، تراکنش موفقیتآمیزه.✅️
اما اگه وسطه عملیات مشکلی پیش بیاد (مثلاً اتصال اینترنت قطع بشه)، هیچکدوم از این تغییرات نباید در دیتابیس باقی بمونه. یعنی یا همه عملیاتها باید انجام بشن، یا هیچکدوم نباید انجام بشن.
#Database
#ACID
#Atomicity
@GoldenCodeir
👍13❤4🗿2
در لاراول میتونیم بجای استفاده از whereIn برای جستجو در مجموعهای از مقادیر، از whereKey استفاده کنیم تا کدی تمیزتر و ساده تر داشته باشیم. این روش بطور خودکار از ID مدلها استفاده میکنه.
برای جستجوی برعکسش هم از whereKeyNot بجای whereNotIn استفاده میکنیم.
📌 همچنین میتونیم مشخص کنیم که primary key مدل ما از چه ستونی استفاده کند.
(✅️ با توجه به عکس زیر متوجه میشید چجوری باعث ساده تر شدنه کد میشه)
#Laravel
@GoldenCodeir
https://x.com/Akr4mKhan/status/1903493801030909990?t=-sVOBYg54lj1MzJpHh1hkQ&s=35
برای جستجوی برعکسش هم از whereKeyNot بجای whereNotIn استفاده میکنیم.
📌 همچنین میتونیم مشخص کنیم که primary key مدل ما از چه ستونی استفاده کند.
(✅️ با توجه به عکس زیر متوجه میشید چجوری باعث ساده تر شدنه کد میشه)
#Laravel
@GoldenCodeir
https://x.com/Akr4mKhan/status/1903493801030909990?t=-sVOBYg54lj1MzJpHh1hkQ&s=35
X (formerly Twitter)
Akram ⚡️ (@Akr4mKhan) on X
Option B: #Laravel Tips 💡
1️⃣ Use whereKey instead of whereIn for cleaner and more readable queries, as it automatically uses the model's primary key. Similarly, whereKeyNot works like whereNotIn.
1️⃣ Use whereKey instead of whereIn for cleaner and more readable queries, as it automatically uses the model's primary key. Similarly, whereKeyNot works like whereNotIn.
👍5❤4👏2🔥1
در لاراول ۱۲، یه متود جدیدی به نام pipe() به query builder اضافه شده. این متود به شما این امکان رو میده که تغییرات مختلفی مثل فیلتر کردن، مرتبسازی یا هر چیزه دیگهای رو به راحتی به query تون اضافه کنین، بدون اینکه نیازی به نوشتن کد پیچیده و طولانی باشه.
میتونید چند عملیات مختلف رو به صورت جداگانه و مرتب روی query اعمال کنین و این کار باعث میشه کد شما تمیزتر و خواناتر بشه و نگهداریش هم راحتتر بشه. استفاده از pipe() خیلی کمک میکنه که از تکرار و شلوغی کد جلوگیری کنیم.
مثلا میتونیم منطق یک فیلتر رو یه بار بنویسیم و در بخشهای مختلف پروژه از همون یک منطق استفاده کنیم.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/jordankdalton/status/1905311519014789464?t=Jxnq3qqNdlyITwe2V-mUyA&s=19
میتونید چند عملیات مختلف رو به صورت جداگانه و مرتب روی query اعمال کنین و این کار باعث میشه کد شما تمیزتر و خواناتر بشه و نگهداریش هم راحتتر بشه. استفاده از pipe() خیلی کمک میکنه که از تکرار و شلوغی کد جلوگیری کنیم.
مثلا میتونیم منطق یک فیلتر رو یه بار بنویسیم و در بخشهای مختلف پروژه از همون یک منطق استفاده کنیم.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/jordankdalton/status/1905311519014789464?t=Jxnq3qqNdlyITwe2V-mUyA&s=19
X (formerly Twitter)
Jordan Dalton (@jordankdalton) on X
Laravel 12.x adds new `pipe()` method to query builders - allowing transformations that can return a custom result.
❤4🔥3
اگر یک query در دیتابیس کند باشه، میتونیم از دستور EXPLAIN استفاده کنیم تا بفهمیم مثلا چطوری یک سرچ یا فیلتر اجرا میشه.
اگه در خروجی EXPLAIN دیدید که 'access type' برابر با ALL هست، یعنی دیتابیس همهی رکوردهای جدول رو داره بررسی میکنه که باعث کندی میشه. درین صورت باید از index استفاده کنیم تا سرعت query بیشتر بشه.
حالا چجوری ازش استفاده کنیم؟
#sql
@GoldenCodeir
(بهمنبع دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1904174361642205309?t=rdYfmiptB7CN_obg0VDafg&s=19
اگه در خروجی EXPLAIN دیدید که 'access type' برابر با ALL هست، یعنی دیتابیس همهی رکوردهای جدول رو داره بررسی میکنه که باعث کندی میشه. درین صورت باید از index استفاده کنیم تا سرعت query بیشتر بشه.
حالا چجوری ازش استفاده کنیم؟
EXPLAIN SELECT * FROM users WHERE age > 30;
#sql
@GoldenCodeir
(بهمنبع دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1904174361642205309?t=rdYfmiptB7CN_obg0VDafg&s=19
👍9❤1
در لاراول، قابلیت جدید fragment@ به ما اجازه میده فقط یک بخش مشخص از یک ویو رو رندر کنیم، نه کل صفحه رو.
کاربردش:
● با AJAX کار میکنیم.
● فقط یه قسمت از صفحه باید آپدیت بشه.
● میخوایم سرعت لود بالا بره و مصرف کمتر شه.
مثال از کاربردش؟
زمانیکه با جاوااسکریپت قراره یک درخواست AJAX بفرستیم برای گرفتن اطلاعات کاربر.
حالا بجای اینکه کل صفحه رو دوباره بفرستیم، فقط همون بخش لازم (مثلاً user name) رو از ویو میفرستیم.
در نتیجه صفحه ی ما سریعتر و بهینه تر کار میکنه.
#Laravel
@GoldenCodeir
(استفاده ازش هم سادست، به منبع و مثالش دقت کنید 👇🏾)
https://x.com/MrPunyapal/status/1914293970848326130?s=35
کاربردش:
● با AJAX کار میکنیم.
● فقط یه قسمت از صفحه باید آپدیت بشه.
● میخوایم سرعت لود بالا بره و مصرف کمتر شه.
مثال از کاربردش؟
زمانیکه با جاوااسکریپت قراره یک درخواست AJAX بفرستیم برای گرفتن اطلاعات کاربر.
حالا بجای اینکه کل صفحه رو دوباره بفرستیم، فقط همون بخش لازم (مثلاً user name) رو از ویو میفرستیم.
در نتیجه صفحه ی ما سریعتر و بهینه تر کار میکنه.
#Laravel
@GoldenCodeir
(استفاده ازش هم سادست، به منبع و مثالش دقت کنید 👇🏾)
https://x.com/MrPunyapal/status/1914293970848326130?s=35
❤2👍2🔥1
در لاراول، میتونیم یه ستونی که دیتای JSON داره رو به راحتی به یک آرایه PHP تبدیل کنیم. این کار فقط با نوشتن یک خط کد در مدل انجام میشه و نیازی به تبدیل دستی دیتامون نداریم.
مثال؟؟
فرض کنیم یه جدول داریم که در اون یک ستون به نام settings داریم که دیتای JSON داره. برای تبدیل خودکار این دادهها به آرایه PHP، باید این خط کد رو در مدل بنویسیم:
حالا وقتی دیتارو از دیتابیس میخونیم، ستون settings به صورت خودکار به یک آرایه PHP تبدیل میشه و میتونیم ازون مانند هر آرایه دیگه ای استفاده کنیم:
@GoldenCodeir 🔥
#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1915730028014546980?t=Ke92_xZaGJL7cJVBdgKZxA&s=19
مثال؟؟
فرض کنیم یه جدول داریم که در اون یک ستون به نام settings داریم که دیتای JSON داره. برای تبدیل خودکار این دادهها به آرایه PHP، باید این خط کد رو در مدل بنویسیم:
protected $casts = [
'settings' => 'array',
];
حالا وقتی دیتارو از دیتابیس میخونیم، ستون settings به صورت خودکار به یک آرایه PHP تبدیل میشه و میتونیم ازون مانند هر آرایه دیگه ای استفاده کنیم:
$user = User::find(1);
$settings = $user->settings;
@GoldenCodeir 🔥
#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1915730028014546980?t=Ke92_xZaGJL7cJVBdgKZxA&s=19
👍7💯2❤1
Forwarded from DevTwitter | توییت برنامه نویسی
اگر از Git استفاده میکنید، احتمالاً با gitignore. آشنا هستید. ولی یه فایل دیگه هم هست به اسم exclude
حالا این دوتا چه فرقی دارن؟
gitignore.
این فایل توی ریشهی پروژه است و برای نادیده گرفتن فایلهایی استفاده میشه که همهی اعضای تیم نباید پیگیریشون کنن. خودش هم commit میشه و داخل repo میمونه.
exclude
مسیرش توی git/info/exclude. هست و فقط روی سیستم شخصی شما تأثیر داره. ایدهآله برای فایلهایی که فقط خودت نمیخوای track بشن، بدون اینکه توی repo دیده بشن.
پس اگر فایل لوکال خاصی داری و نمیخوای توی gitignore. بذاری، برو سراغ exclude
@DevTwitter | <Amir Mohammad Rezvaninia/>
حالا این دوتا چه فرقی دارن؟
gitignore.
این فایل توی ریشهی پروژه است و برای نادیده گرفتن فایلهایی استفاده میشه که همهی اعضای تیم نباید پیگیریشون کنن. خودش هم commit میشه و داخل repo میمونه.
exclude
مسیرش توی git/info/exclude. هست و فقط روی سیستم شخصی شما تأثیر داره. ایدهآله برای فایلهایی که فقط خودت نمیخوای track بشن، بدون اینکه توی repo دیده بشن.
پس اگر فایل لوکال خاصی داری و نمیخوای توی gitignore. بذاری، برو سراغ exclude
@DevTwitter | <Amir Mohammad Rezvaninia/>
👍8❤2🆒2🔥1
چجوری شت کد بنویسیم؟؟
1. هیچ قانونی نداشته باش!
بذار هرکی هرجوری دلش خواست کد بزنه.
2. کیفیت؟ این دیگه چه مزخرفیه؟
فقط سریع باش! وقتت رو حرومه بررسی و تست نکن. هرچی زودتر تحویل بدی بهتره!
3. امنیت؟ ولش کن!
هرکی اومد، همه چی رو بهش بده. رمز نمیخواد، ورود نمیخواد، اعتبارسنجی؟ چی هست اصن؟ همه چیز آزاده! چرا سخت میگیری
4. کد تکراری ؟ اشکال نداره!
یه تیکه کد نوشتی؟ صدبار کپیش کن توو جاهای مختلف. چرا زحمت بکشی تابع درست کنی؟
5. به سرعت لاکپشت وفادار باش!
نه کشی، نه بهینهسازی، نه تست عملکرد. بذار برنامت در حد اینترنت دایل آپ اجرا بشه!
6. کیفیت برای دیگران؟ نه بابا!
فقط رو سیستم خودت تست کن اونم فقط با chrome. اگه کسی با سیستم یا مرورگره دیگهای وارد شد، مشکل خودشونه! شما که خودت همه چیز رو دیدی!
7. پروژهتو توی غار بنویس!
نه فیدبک بگیر، نه دمو بده...
8. نظارت؟ حسش نیس!
صبر کن کاربر خودش زنگ بزنه و بگه: «سایتتون به فنا رفته!» بعد تازه بپرسی: چی دیدی؟ چه اروری بود؟ چی زدی؟!
و...
📌 اگه میخوای یه نرمافزار ضعیف بسازی، فقط کافیه این دستورالعملها همیشه اولویتت باشه!
ولی اگه میخوای حرفهای باشی، باید دقیقاً برعکس اینارو انجام بدی.
@GoldenCodeir
(به منبع دقت کنید👇🏾)
https://x.com/housecor/status/1916897024131072408?s=35
1. هیچ قانونی نداشته باش!
بذار هرکی هرجوری دلش خواست کد بزنه.
2. کیفیت؟ این دیگه چه مزخرفیه؟
فقط سریع باش! وقتت رو حرومه بررسی و تست نکن. هرچی زودتر تحویل بدی بهتره!
3. امنیت؟ ولش کن!
هرکی اومد، همه چی رو بهش بده. رمز نمیخواد، ورود نمیخواد، اعتبارسنجی؟ چی هست اصن؟ همه چیز آزاده! چرا سخت میگیری
4. کد تکراری ؟ اشکال نداره!
یه تیکه کد نوشتی؟ صدبار کپیش کن توو جاهای مختلف. چرا زحمت بکشی تابع درست کنی؟
5. به سرعت لاکپشت وفادار باش!
نه کشی، نه بهینهسازی، نه تست عملکرد. بذار برنامت در حد اینترنت دایل آپ اجرا بشه!
6. کیفیت برای دیگران؟ نه بابا!
فقط رو سیستم خودت تست کن اونم فقط با chrome. اگه کسی با سیستم یا مرورگره دیگهای وارد شد، مشکل خودشونه! شما که خودت همه چیز رو دیدی!
7. پروژهتو توی غار بنویس!
نه فیدبک بگیر، نه دمو بده...
8. نظارت؟ حسش نیس!
صبر کن کاربر خودش زنگ بزنه و بگه: «سایتتون به فنا رفته!» بعد تازه بپرسی: چی دیدی؟ چه اروری بود؟ چی زدی؟!
و...
📌 اگه میخوای یه نرمافزار ضعیف بسازی، فقط کافیه این دستورالعملها همیشه اولویتت باشه!
ولی اگه میخوای حرفهای باشی، باید دقیقاً برعکس اینارو انجام بدی.
@GoldenCodeir
(به منبع دقت کنید👇🏾)
https://x.com/housecor/status/1916897024131072408?s=35
👍6😁1