قلب وردپرس | آموزش جامع
Статистикаمرجع تخصصی آموزش وردپرس گروه تخصصی : @woordpressi اینستاگرام : codin.uni ارتباط : t.me/wpheart?direct
- Последний пост
- 13 авг.
- Последнее чтение
- 15 авг.
- Постов за неделю
- 1
- Всего постов
- 31
- Тип
- открытый
- Язык
- персидский
- Категория
- Образование
- В каталоге с
- 13 авг.
- 1/24сутки в ленте
- 65
- 1/48двое суток
- 74
- 1/72трое суток
- 80
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
🚨میدونی که Nonce وردپرس «رمز یکبارمصرف» نیست! خیلیها فکر میکنن وقتی اینو مینویسن: wp_nonce_field( 'delete_product', 'my_nonce' ); دیگه عملیاتش کاملاً امن شده. ❌اما کاملا اشتباه! Nonce در وردپرس احراز هویت نیست و بهتنهایی مجوز انجام عملیات نمیده. پس Nonce دقیقاً چیکار میکنه؟ Nonce عمدتاً برای مقابله با CSRF استفاده میشه. یعنی کمک میکنه بفهمیم: این درخواست احتمالاً از همان سایت و جریان مورد انتظار ارسال شده؟ اما این به معنی این نیست که: این کاربر اجازه انجام این عملیات را دارد. ❌ در مثال زیر یک کد ناقص رو میبینیم : if ( wp_verify_nonce( $_POST['my_nonce'], 'delete_product' ) ) { wp_delete_post( $product_id ); } اینجا فقط Nonce بررسی شده. اما Capability کاربر بررسی نشده! ✅ روش حرفهای که در مثال زیر یک تکه کد کامل و اصولی رو میبینیم : if ( ! current_user_can( 'delete_post', $product_id ) ) { wp_die( 'Access denied' ); } if ( ! wp_verify_nonce( $_POST['my_nonce'] ?? '', 'delete_product' ) ) { wp_die( 'Invalid request' ); } wp_delete_post( $product_id ); اینجا دو موضوع جدا بررسی میشن: Nonce → آیا درخواست معتبر/مورد انتظار است؟ Capability → آیا این کاربر اجازه انجام این کار را دارد؟ 🤯 و یک نکته خفنتر که باید بدونید ! اسمش Nonce هست، اما در وردپرس الزاماً یکبارمصرف نیست! Nonceهای وردپرس معمولاً در یک بازه زمانی قابل استفاده مجدد هستند و عمر پیشفرضشان حدود ۱۲ تا ۲۴ ساعت است؛ بنابراین نباید آن را با OTP یا Token یکبارمصرف اشتباه گرفت. 💎 قانون حرفهای وردپرس که توسعه دهنده ها باید بدونن : Nonce = محافظت در برابر CSRF Capability = کنترل دسترسی Authentication = شناسایی کاربر این سه تا را با هم قاطی نکن. 🔥 بیشتر بدون 👇👇👇 @wpheart
видео или голосовое, без подписи
видео или голосовое, без подписи
#اطلاع_رسانی ❗️فوری سلام و عرض ادب، به یک نفر نیازمندیم برای طراحی یک صفحه معرفی افزونه و امکانات آن با المنتور ✅ سلیقه خوب ✅ رعایت کلیه نکات طراحی ✅ تسلط کافی به المنتور جهت کسب اطلاعات بیشتر لطفا به آیدی @mim_da پیام بدید.
🚨 هنوز جدول افزونهات رو با CREATE TABLE میسازی؟ اگر افزونهنویسی میکنی، این اشتباه میتونه موقع آپدیت افزونه، کاربرات رو به دردسر بندازه! 🤔 بیاید واقعی ببینیم فرض کن نسخه 1.0 افزونهات رو منتشر کردی و این جدول رو ساختی: global $wpdb; $table = $wpdb->prefix . 'customers'; $sql = "CREATE TABLE $table ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (id) );"; همه چیز عالیه 😐 اما مدتی بعد... تصمیم میگیری شماره موبایل مشتری رو هم ذخیره کنی. یعنی جدول باید این شکلی بشه: phone VARCHAR(20) NOT NULL حالا اگر دوباره همون CREATE TABLE رو اجرا کنی چی میشه؟ ❌ جدول از قبل وجود داره. ❌ ستون جدید اضافه نمیشه. ❌ افزونه روی سایت هزاران کاربر ناقص کار میکنه. ✅ راهکار حرفهای وردپرس به جای اجرای مستقیم SQL از: dbDelta(); استفاده کن. require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); 🔥 dbDelta() چه کار میکنه؟ اگر جدول وجود نداشته باشه: ✅ میسازه. اگر ستون جدید اضافه کرده باشی: ✅ فقط همون ستون رو اضافه میکنه. اگر Index جدید تعریف کرده باشی: ✅ اون رو هم اعمال میکنه. بدون اینکه اطلاعات قبلی کاربران حذف بشه. 📌 مثال واقعی نسخه 1.0 id name email نسخه 1.1 id name email phone کافیه مقدار $sql رو تغییر بدی و دوباره: dbDelta( $sql ); رو اجرا کنی. وردپرس خودش تشخیص میده فقط ستون phone کم شده و همون رو اضافه میکنه. ⚠️ نکته مهم dbDelta() فقط زمانی درست کار میکنه که SQL رو مطابق استاندارد وردپرس بنویسی. مثلاً: ✔️ حتماً PRIMARY KEY با دو فاصله قبل از پرانتز نوشته بشه: PRIMARY KEY (id) و بهتره از: require_once ABSPATH . 'wp-admin/includes/upgrade.php'; قبل از فراخوانی dbDelta() استفاده کنی، چون این تابع بهصورت پیشفرض در همه درخواستها بارگذاری نشده است. 💎 قانون Seniorها برنامهنویس حرفهای فقط به نصب افزونه فکر نمیکنه... به این فکر میکنه که نسخه ۱.۵ افزونه روی سایت ۵۰ هزار کاربر، بدون از دست رفتن حتی یک رکورد، بهروزرسانی بشه. 😏 اگر تا امروز فقط از CREATE TABLE استفاده میکردی الان میدونی چرا تیم توسعه وردپرس dbDelta() رو ساخته. 😉 @wpheart
🚨 این Hook مخفی قبل از ذخیره شدن هر Option اجرا میشه! فکر میکنی فقط بعد از ذخیره تنظیمات میشه کاری انجام داد؟ ❌ نه... وردپرس قبل از اینکه هر Option داخل دیتابیس ذخیره بشه، یک Hook فوقالعاده قدرتمند اجرا میکنه. pre_update_option_{$option} 🤔 این Hook چه کاری انجام میده؟ قبل از ذخیره شدن مقدار جدید، میتونی: ✅ مقدار رو تغییر بدی ✅ اعتبارسنجی کنی ✅ جلوی ذخیره شدنش رو بگیری ✅ دادهها رو رمزنگاری کنی ✅ مقدار قبلی و جدید رو با هم مقایسه کنی 🔥 مثال واقعی : فرض کن نمیخوای عنوان سایت تغییر کنه. add_filter('pre_update_option_site_name', function( $new, $old ) { return $old; }, 10, 2 ); نتیجه؟ هرچقدر هم کاربر ایمیل جدید وارد کنه... هیچوقت داخل دیتابیس ذخیره نمیشه! 🚀 کاربردهای حرفهای : ✔️ جلوگیری از تغییر تنظیمات حساس ✔️ ثبت Log قبل از تغییر ✔️ اعتبارسنجی تنظیمات ✔️ جلوگیری از ورود داده اشتباه ✔️ همگامسازی با APIهای خارجی ✔️ رمزنگاری اطلاعات قبل از ذخیره ⚠️ چیزی که کمتر کسی میدونه... اکثر برنامهنویسها بعد از ذخیره شدن اطلاعات سراغ update_option() میرن... در حالی که حرفهایها قبل از ذخیره شدن داده رو کنترل میکنن. 💎 قانون Seniorها همیشه بهترین زمان برای کنترل داده... قبل از ورود به دیتابیسه، نه بعد از اون. 😏 شرط میبندم کمتر از ۵٪ برنامهنویسهای وردپرس از این Hook استفاده کردن. @wpheart
❗️از اون پست هایی که منبعش ماییم 😜 🚨 افزونهای که هیچکس نمیتونه از پنل وردپرس غیرفعالش کنه! 🖌 فکر میکنی همه افزونههای وردپرس از مسیر: wp-content/plugins اجرا میشن؟ ❌ نه! اشتباه فکر کردی. وردپرس یک نوع افزونه ویژه داره به اسم: Must-Use Plugin (MU Plugin) که در مسیر: wp-content/mu-plugins قرار میگیره. ━━━━━━━━━━━━━━ 🤔 چرا اسمش Must-Use هست؟ چون... ✅ به محض قرار گرفتن داخل پوشه mu-plugins، بهصورت خودکار فعال میشه. و مهمتر اینکه... ❌ دکمه Deactivate نداره! یعنی مدیر سایت از پنل وردپرس نمیتونه غیرفعالش کنه. ━━━━━━━━━━━━━━ 🔥 MU Plugin چه کاربردی داره؟ ✔️ کدهای امنیتی ✔️ محدود کردن کاربران ✔️ اتصال به سرویسهای سازمانی ✔️ لاگگیری ✔️ تغییرات سراسری روی همه سایتها ✔️ کدهایی که نباید هیچوقت غیرفعال بشن ━━━━━━━━━━━━━━ 🚀 چرا شرکتهای بزرگ از MU Plugin استفاده میکنن؟ اگر یک کاربر تمام افزونههای سایت رو غیرفعال کنه باز هم MU Plugin اجرا میشه! به همین دلیل، برای قابلیتهای حیاتی انتخاب بسیار مناسبیه. ━━━━━━━━━━━━━━ ⚠️ اما یه نکته مهم : برخلاف افزونههای معمولی: ❌ فایل اصلی MU Plugin باید مستقیماً داخل پوشه mu-plugins قرار بگیره. اگر افزونه چند فایل داره، معمولاً یک فایل Loader داخل mu-plugins قرار میدن که فایلهای اصلی رو از پوشه دیگری require میکنه. ━━━━━━━━━━━━━━ 💎 قانون Seniorها همه چیز رو افزونه معمولی ننویس... بعضی قابلیتها باید همیشه فعال باشن، حتی اگر همه افزونههای سایت غیرفعال بشن. ━━━━━━━━━━━━━━ 🔰 اینجا یه قدم از خیلی از برنامهنویسهای وردپرس جلوتری. 😉 @wpheart
🚨 این ثابت (Constant) وردپرس میتونه مصرف رم سایتت رو نصف کنه! فکر میکنی هر بار که وردپرس اجرا میشه، تمام فایلهای افزونهها و قالب فقط یک بار Load میشن؟ ❌ اشتباهه... وردپرس برای پیدا کردن مسیر فایلها، بارها از توابعی مثل: plugin_dir_path() plugin_dir_url() get_template_directory() get_stylesheet_directory() استفاده میکنه. اما یه راه حرفهایتر وجود داره... ━━━━━━━━━━━━━━ ⚡ راهکار به جای اینکه داخل حلقه یا توابع پرتکرار، هر بار این توابع رو صدا بزنی، یک بار مسیر رو داخل Constant ذخیره کن. مثال: define( 'WPHEART_PATH', plugin_dir_path( __FILE__ ) ); define( 'WPHEART_URL', plugin_dir_url( __FILE__ ) ); بعد همه جا فقط از: WPHEART_PATH WPHEART_URL استفاده کن. ━━━━━━━━━━━━━━ 🔥 چرا بهتره؟ ✅ فراخوانی کمتر توابع ✅ خوانایی بیشتر کد ✅ نگهداری آسانتر پروژه ✅ بهینهتر برای افزونههای بزرگ ━━━━━━━━━━━━━━ ⚠️ نکته این تغییر به تنهایی قرار نیست سایتت رو از ۵ ثانیه به ۱ ثانیه برسونه؛ اما در افزونهها و پروژههای بزرگ، وقتی کنار دهها بهینهسازی دیگه استفاده بشه، باعث کد تمیزتر و کاهش سربار غیرضروری میشه. همین تفاوتهای کوچیکه که کد یه برنامهنویس حرفهای رو از بقیه جدا میکنه. 😉❤️ @wpheart
🚫 دیگه از شر پیام «تأیید ایمیل مدیر سایت» توی وردپرس خلاص شو! 🖌 اگر هر بار وارد پیشخوان میشی و با پیام تأیید ایمیل مدیر روبهرو میشی، فقط کد زیر رو داخل فایل functions.php قالب یا افزونه اختصاصیت قرار بده: add_filter( 'admin_email_check_interval', '__return_false' ); یا add_filter( 'admin_email_check_interval', function() { return 0; } ); ✅ از این به بعد وردپرس دیگه هیچوقت ازت نمیخواد ایمیل مدیر رو تأیید کنی. 💙 اگر این آموزش برات مفید بود: ❤️ پست رو لایک کن. 📌 ذخیرهش کن که بعداً دنبالش نگردی. 📤 برای دوست برنامهنویس یا وردپرسیات بفرست. ➕ و حتماً قلب وردپرس رو دنبال کن؛ هر روز ترفندها، آموزشهای حرفهای، افزونهنویسی و کدهای کاربردی منتشر میکنیم که ساعتها از وقتت رو ذخیره میکنن. #وردپرس #WordPress #PHP #افزونه_نویسی #برنامه_نویسی #توسعه_وردپرس #قلب_وردپرس @wpheart
#آموزشی یکی از نکاتی که برای افزایش سرعت لود و همچنین یوزر فرندلی بودن باید رعایت بشه ظاهر و کوئری هایی هست که توی سایت استفاده میشه! توی همه مطالب سایتتون ممکنه صدها و یا هزاران دیدگاه ثبت بشه و نمایش یکباره انها ممکنه سایت رو در صفحه سینکل پیج کند کنه! اینجا باید شما وارد عمل بشید و ابتکار به خرج بدید و دیدگاه های سایتتون رو بصورت پجینیشن و با ایجکس نمایش بدید. این ویدیو آموزشی برای حل این مشکل، شمارو کمک میکنه https://youtu.be/cY5rOnRyz7g?si=kqInA-j6dFj1DWT3 📌 با کمک این آموزش دیدگاه های سایتتون رو بصورت ایجکس نمایش میدید و لود اولیه صفحه رو بهینه میکنید 😉 @wpheart
جدیدا مد شده توی گروه ها و... هرکی هر سوالی میپرسه یه عده هستن فقط ریپلای میکنن و میگن چرا نمیدی هوش مصنوعی! خب عزیزدلم اخه قربون اون مغز فوق پیشرفتهات طرف خودش عقلش میرسه که هوش مصنوعی هم وجود داره. درسته هوش مصنوعی هست و کارهارو انجام میده ولی نه همهشو!!! ابزاریه برای سرعت بخشیدن به کار، ابزاری نیست که کارو بسپاری بهش دیگه ۱۰۰ درصد تحویل بگیری که. ضمنا باید عمل اینو هم داشته باشی که بتونی ازش استفاده کنی 😉
لینک ویدیو آموزشیشو بذارم؟؟؟
لینک ویدیو آموزشیشو بذارم؟؟؟
🚨 این تابع مخفی وردپرس میتونه زمان ایمپورت ۱۰ هزار پست رو به شدت کاهش بده! اگر تا حالا اسکریپت ایمپورت، خروجی گرفتن یا پردازش تعداد زیادی پست نوشتی، این پست رو از دست نده... ━━━━━━━━━━━━━━ 💣 بیشتر توسعهدهندهها هنگام درج پست این کار رو انجام میدن: wp_insert_post( $post_data ); اما چیزی که خیلیها نمیدونن اینه که... بعد از هر درج یا ویرایش، وردپرس تعداد دستهبندیها (Term Count) رو دوباره محاسبه میکنه. اگر هزاران پست وارد کنی... همین محاسبات میتونه زمان اجرای اسکریپت رو چند برابر کنه! ━━━━━━━━━━━━━━ 🔥 راهکار حرفهای: قبل از شروع ایمپورت: wp_defer_term_counting( true ); بعد از پایان کار: wp_defer_term_counting( false ); ━━━━━━━━━━━━━━ 🤔 این تابع چه کار میکنه؟ به وردپرس میگه: «فعلاً تعداد دستهبندیها و برچسبها رو بعد از هر تغییر محاسبه نکن؛ بذار آخر کار یکجا انجام بشه.» ━━━━━━━━━━━━━━ 🚀 نتیجه: ✅ کاهش تعداد عملیات غیرضروری ✅ ایمپورت سریعتر ✅ فشار کمتر روی دیتابیس ✅ عملکرد بهتر در پروژههای بزرگ ━━━━━━━━━━━━━━ ⚠️ نکته مهم این تابع برای ایمپورتهای انبوه، اسکریپتهای CLI و کرانجابها فوقالعاده است. اما برای درخواستهای معمولی کاربران، معمولاً نیازی به استفاده از آن نیست. ━━━━━━━━━━━━━━ 💎 قانون Seniorها همیشه بهینهسازی فقط کم کردن Query نیست... گاهی حذف عملیات تکراری و غیرضروری بیشترین تأثیر را روی سرعت دارد. ━━━━━━━━━━━━━━ 😄 اگه این تابع رو تا امروز نمیشناختی... الان یه کم بیشتر قدر منو میدونی و دعا میکنی به جونم 😉❤️ @wpheart
🚨 اگر هنوز از file_get_contents() برای API استفاده میکنی، این پست رو بخون! خیلی از توسعهدهندهها برای ارسال درخواست HTTP این کار رو انجام میدن: $response = file_get_contents($url); یا مستقیم سراغ cURL میرن... اما یک سؤال: 🤔 پس چرا خود وردپرس یک API اختصاصی برای این کار داره؟ ━━━━━━━━━━━━━━ 🔥 جواب: wp_remote_get() $response = wp_remote_get( 'https://example.com/api' ); ━━━━━━━━━━━━━━ 💎 چرا این روش حرفهایتره؟ وقتی از wp_remote_get() یا wp_remote_post() استفاده میکنی، وردپرس خودش: ✅ Timeout رو مدیریت میکنه. ✅ SSL رو بررسی میکنه. ✅ خطاها رو استاندارد برمیگردونه. ✅ از روش مناسب ارتباط (cURL یا Streams) استفاده میکنه. ✅ با فیلترها و Hookهای وردپرس سازگاره. ━━━━━━━━━━━━━━ 🚀 یعنی اگر فردا هاستت cURL نداشت... کدت همچنان میتونه بدون تغییر کار کنه. ━━━━━━━━━━━━━━ ⚠️ اشتباه رایج بعضی توسعهدهندهها مستقیماً cURL مینویسن و فکر میکنن حرفهایتره... در حالی که خودشون دارن امکاناتی رو دوباره پیادهسازی میکنن که وردپرس سالهاست براشون انجام میده. ━━━━━━━━━━━━━━ 🧠 قانون Seniorها قبل از اینکه یک قابلیت رو از صفر بنویسی... اول بررسی کن ببین WordPress Core قبلاً براش راهحل استاندارد ارائه کرده یا نه. ━━━━━━━━━━━━━━ 😄 اگه اینو نمیدونستی... الان یه کم بیشتر قدر منو میدونی و دعا میکنی به جونم 😉❤️ 📌 @wpheart
📌 راز های وردپرس قسمت ۱ 🚨 اگر از get_post_meta() داخل حلقه استفاده میکنی، این پست را از دست نده! بیشتر توسعهدهندهها این کد را مینویسند: while ( $query->have_posts() ) { $query->the_post(); $price = get_post_meta( get_the_ID(), 'price', true ); } همه چیز درست کار میکند... اما پشت پرده چه اتفاقی میافتد؟ ━━━━━━━━━━━━━━ 💣 اگر Meta Cache از قبل بارگذاری نشده باشد، هر بار فراخوانی get_post_meta() میتواند باعث اجرای Query روی دیتابیس شود. حالا تصور کن: 100 پست × 5 متا یعنی ممکن است صدها بار دیتابیس درگیر شود! ━━━━━━━━━━━━━━ 🚀 راهحل حرفهای اگر قرار است روی تعداد زیادی پست کار کنی، Meta Cache را از قبل بارگذاری کن. وردپرس این قابلیت را دارد: update_meta_cache( 'post', wp_list_pluck( $posts, 'ID' ) ); بعد از آن، get_post_meta() اطلاعات را از حافظه میخواند، نه از دیتابیس. ━━━━━━━━━━━━━━ ⚡ نتیجه ✅ Query کمتر ✅ فشار کمتر روی MySQL ✅ سرعت بیشتر در پردازش ━━━━━━━━━━━━━━ 💎 نکته مهم : مشکل اصلی سایتهای بزرگ، کند بودن MySQL نیست... مشکل، تعداد زیاد Queryهای غیرضروری است. ━━━━━━━━━━━━━━ 🎯 برنامهنویس حرفهای فقط کد نمینویسد... او قبل از نوشتن هر حلقه از خودش میپرسد: «این حلقه چند بار دیتابیس را صدا میزند؟» همراه ما باشید تا نکات مفیدی یاد بگیرید 😉 @wpheart
видео или голосовое, без подписи
#نکته #ترفند 🚨 آیا میدانی get_posts() در واقع همان WP_Query نیست؟! بیشتر توسعهدهندگان فکر میکنند این دو فقط از نظر نوشتاری فرق دارند... اما پشت پرده، تفاوت مهمی وجود دارد. ━━━━━━━━━━━━━━ 🤔 این کد را ببین: $posts = get_posts([ 'post_type' => 'post' ]); خیلیها تصور میکنند این فقط یک نسخه کوتاهتر از WP_Query است. اما این تصور کاملاً درست نیست. ━━━━━━━━━━━━━━ 🔥 نکتهای که کمتر کسی میداند تابع get_posts() بهصورت پیشفرض این مقدار را تنظیم میکند: 'no_found_rows' => true یعنی وردپرس دیگر تعداد کل نتایج را محاسبه نمیکند. همچنین صفحهبندی (Pagination) را هم در نظر نمیگیرد. ━━━━━━━━━━━━━━ 💣 چرا این موضوع مهم است؟ وقتی از WP_Query استفاده میکنی، اگر صفحهبندی فعال باشد، وردپرس معمولاً یک کوئری اضافه برای محاسبه تعداد کل نتایج اجرا میکند. این یعنی: زمان بیشتر فشار بیشتر روی دیتابیس مصرف منابع بیشتر اما get_posts() این هزینه را از ابتدا حذف میکند. ━━━━━━━━━━━━━━ 🚀 پس چه زمانی از get_posts() استفاده کنیم؟ اگر فقط میخواهی: ✅ آخرین نوشتهها را بگیری ✅ چند پست را برای یک ویجت نمایش دهی ✅ لیستی از آیتمها را بخوانی و به صفحهبندی نیاز نداری، get_posts() انتخاب بهتری است. ━━━━━━━━━━━━━━ ⚠️ اما اگر نیاز داری: تعداد کل نتایج را بدانی صفحهبندی داشته باشی از ویژگیهای کامل Loop استفاده کنی باید سراغ WP_Query بروی. ━━━━━━━━━━━━━━ 🧠 نکتهای که برنامهنویسان حرفهای رعایت میکنند آنها فقط به این فکر نمیکنند که «کد کار میکند». به این فکر میکنند که: آیا واقعاً به تمام قابلیتهایی که این کلاس فراهم میکند نیاز دارم؟ اگر جواب «نه» باشد، گزینه سبکتر را انتخاب میکنند. ━━━━━━━━━━━━━━ 🎯 بهینهسازی واقعی از حذف کارهای اضافه شروع میشود، نه از سریعتر انجام دادن همان کارها. همراه قلب وردپرس باش تا چیزایی رو یاد بگیری که هیچ کجا نیست 😉 @wpheart
سوال، مشکل، مورد؟ گپ بزنید بپرسید جواب میدم😉
🔥 چرا سایت من در لوکال سریع است ولی روی هاست کند؟ این سؤال یکی از پرتکرارترین سؤالهای دنیای وردپرس است. کد روی سیستم خودت: 0.8s لود میشود. همان سایت روی هاست: 6.2s لود میشود. پس مشکل از کجاست؟ ━━━━━━━━━━━━━━ 😳 اولین اشتباه بیشتر افراد سریع نتیجه میگیرند: ❌ هاست ضعیف است در حالی که خیلی وقتها مشکل جای دیگری است. ━━━━━━━━━━━━━━ 💣 تستی که کمتر کسی انجام میدهد تب Network مرورگر را باز کن. حالا ببین سایت واقعاً منتظر چه چیزی است. خیلی وقتها میبینی: fonts.googleapis.com gstatic.com unpkg.com cdn.jsdelivr.net یا دهها سرویس خارجی دیگر در حال لود شدن هستند. ━━━━━━━━━━━━━━ 🚀 اتفاقی که در لوکال نمیبینی در سیستم خودت: ✅ اینترنت پایدار ✅ DNS سریع ✅ تاخیر کم اما کاربر واقعی ممکن است: ❌ اینترنت ضعیف ❌ DNS کند ❌ محدودیت دسترسی داشته باشد. ━━━━━━━━━━━━━━ 😬 یک نمونه واقعی فقط یک فایل جاوااسکریپت: libphonenumber-max.js میتواند صدها میلیثانیه یا حتی چند ثانیه زمان بارگذاری اضافه کند. اگر آن فایل از CDN خارجی لود شود، شرایط بدتر هم میشود. ━━━━━━━━━━━━━━ 🔥 قانون طلایی هر چیزی که از دامنه شما لود نمیشود را بررسی کنید. مثلاً: ❌ فونت گوگل ❌ نقشه گوگل ❌ CDNهای عمومی ❌ اسکریپتهای تبلیغاتی ❌ ابزارهای آمارگیر ━━━━━━━━━━━━━━ ⚡ قبل از ارتقای هاست این سؤال را بپرس آیا واقعاً سرور کند است؟ یا مرورگر منتظر دانلود ۲۰ فایل از ۱۰ دامنه مختلف است؟ ━━━━━━━━━━━━━━ 💎 نکته حرفهای در بسیاری از پروژهها: بهینهسازی یک فایل JS خارجی بیشتر از ارتقای هاست از ۲ گیگ به ۸ گیگ RAM روی سرعت سایت تأثیر میگذارد. ━━━━━━━━━━━━━━ 🎯 هر وقت سایت کند شد، قبل از خرید هاست گرانتر: اول Network مرورگر را باز کن. خیلی وقتها مقصر اصلی چیزی نیست که فکر میکنی. ❗️هر چیزی که به ذهنت رسید و خواستی روی سایتت پیاده کنی ولی فکر میکنی نمیشه، ما برات شدنی میکنیم ☺️ @wpheart