معرفی کتابخونه 📕⚒️
امروز میخوام یکی از اون کتابخانههایی رو معرفی کنم که اگه تو پروژهتون نباشه، عملا دارین چرخ رو از اول اختراع میکنین 🔄 : TanStack Query 📦
یا همون React Query سابق 🔄
خیلیها هنوز برای گرفتنِ دیتا (Data Fetching) از
✅ کش کردن خودکارِ دادهها.
✅ مدیریت هوشمندِ Stateهای درخواست (Loading, Error, Success).
✅ همگامسازیِ دادههای سرور با کلاینت.
این کتابخونه رسما استانداردی برای اپلیکیشنهای مدرنِ React/Next.js هست 🏗
⚠️ این کتابخونه فقط مختص به نکست یا ریاکت نیست و برای کتابخونه یا فریمورکهای
Preact
Vue
Angular
Solid
Svelte
Lit
هم قابل استفاده هست.
کسی هست که هنوز از
#Labs_library
امروز میخوام یکی از اون کتابخانههایی رو معرفی کنم که اگه تو پروژهتون نباشه، عملا دارین چرخ رو از اول اختراع میکنین 🔄 : TanStack Query 📦
یا همون React Query سابق 🔄
خیلیها هنوز برای گرفتنِ دیتا (Data Fetching) از
useEffect استفاده میکنن و درگیرِ مدیریتِ Loading، Error و Caching میشن 😫. اما TanStack Query این پیچیدگیها رو کامل حذف میکنه 🚀.✅ کش کردن خودکارِ دادهها.
✅ مدیریت هوشمندِ Stateهای درخواست (Loading, Error, Success).
✅ همگامسازیِ دادههای سرور با کلاینت.
این کتابخونه رسما استانداردی برای اپلیکیشنهای مدرنِ React/Next.js هست 🏗
⚠️ این کتابخونه فقط مختص به نکست یا ریاکت نیست و برای کتابخونه یا فریمورکهای
Preact
Vue
Angular
Solid
Svelte
Lit
هم قابل استفاده هست.
کسی هست که هنوز از
useEffect برای فچ کردنِ دیتا استفاده کنه 🧐؟#Labs_library
Tanstack
TanStack Query
Powerful asynchronous state management, server-state utilities and data fetching. Fetch, cache, update, and wrangle all forms of async data in your TS/JS, React, Vue, Solid, Svelte, Angular & Lit applications all without touching any "global state"
🌟 معرفی کتابخونه 📕⚒️
بیاین یه سناریوی خیلی آشنا رو بررسی کنیم. طراح یه دیزاین خفن بهمون میده که توش کاربر با هر بار اسکرول کردن، کل صفحه به صورت نرم و انیمیشنی میره روی بخش بعدی (دقیقا مثل سایتهای معرفی محصول اپل).
اولش با خودمون میگیم خب یه اسکرول ساده است دیگه اما وقتی شروع میکنیم به کد زدن، تازه دردسرها شروع میشه : هماهنگ کردن اسکرول موس، هندل کردن لمس (Touch) روی صفحه موبایل، باگهای مرورگرها و کلی کثیفکاری با جاوااسکریپت 🤦♂️
راهحل چیه؟
کتابخونه fullPage.js
این کتابخونه سالهاست که بهترین ابزار برای ساختن وبسایتهای اسکرولیِ تمامصفحه (Full-screen scrolling) به حساب میاد و خوشبختانه پکیج رسمی و بسیار پایداری برای React و Next.js داره (
چرا اینقدر محبوبه و کار رو راحت میکنه؟
📱 سازگاری بینقص با موبایل : خیالتون بابت رفتار Swipe (کشیدن صفحه) روی گوشیها کاملاً راحته.
🔗 آپدیت خودکار URL: با رفتن به هر اسلاید، آدرس سایت هم عوض میشه تا کاربر بتونه لینکِ همون بخش رو برای بقیه بفرسته (که برای سئو هم عالیه).
⚛️ بدون نیاز به کدهای اضافه : نیازی به درگیر شدن با رویدادهای پیچیده DOM یا CSSهای عجیب و غریب ندارید.
اگه تا الان برای این مدل دیزاینها خودتون رو با کدهای دستی خسته میکردین، تو پروژه بعدی حتما این کتابخونه رو تست کنین
💣 من به شخصه با تستش کردم و میتونم بگم واقعا خروجی خفن و بدون نقصی بهتون میده
تست کردنش 2 دقیقه زمان میره اما وقتی آشنا میشی باهاش دیوانت میکنه و کلی ایده خفن به ذهنتون برمیخوره 💥
#Labs_library
بیاین یه سناریوی خیلی آشنا رو بررسی کنیم. طراح یه دیزاین خفن بهمون میده که توش کاربر با هر بار اسکرول کردن، کل صفحه به صورت نرم و انیمیشنی میره روی بخش بعدی (دقیقا مثل سایتهای معرفی محصول اپل).
اولش با خودمون میگیم خب یه اسکرول ساده است دیگه اما وقتی شروع میکنیم به کد زدن، تازه دردسرها شروع میشه : هماهنگ کردن اسکرول موس، هندل کردن لمس (Touch) روی صفحه موبایل، باگهای مرورگرها و کلی کثیفکاری با جاوااسکریپت 🤦♂️
راهحل چیه؟
کتابخونه fullPage.js
این کتابخونه سالهاست که بهترین ابزار برای ساختن وبسایتهای اسکرولیِ تمامصفحه (Full-screen scrolling) به حساب میاد و خوشبختانه پکیج رسمی و بسیار پایداری برای React و Next.js داره (
@fullpage/react-fullpage).چرا اینقدر محبوبه و کار رو راحت میکنه؟
📱 سازگاری بینقص با موبایل : خیالتون بابت رفتار Swipe (کشیدن صفحه) روی گوشیها کاملاً راحته.
🔗 آپدیت خودکار URL: با رفتن به هر اسلاید، آدرس سایت هم عوض میشه تا کاربر بتونه لینکِ همون بخش رو برای بقیه بفرسته (که برای سئو هم عالیه).
⚛️ بدون نیاز به کدهای اضافه : نیازی به درگیر شدن با رویدادهای پیچیده DOM یا CSSهای عجیب و غریب ندارید.
اگه تا الان برای این مدل دیزاینها خودتون رو با کدهای دستی خسته میکردین، تو پروژه بعدی حتما این کتابخونه رو تست کنین
💣 من به شخصه با تستش کردم و میتونم بگم واقعا خروجی خفن و بدون نقصی بهتون میده
تست کردنش 2 دقیقه زمان میره اما وقتی آشنا میشی باهاش دیوانت میکنه و کلی ایده خفن به ذهنتون برمیخوره 💥
#Labs_library
Alvarotrigo
fullPage.js
Great Javascript library to create fullscreen scrolling websites
❤2
پیش اومده تو کدهای پروژه گیر کنین یا یه کار خیلی ازتون وقت بگیره ولی بعد با نصب یه کتابخونه (پکیج) خاص، ببینید چقدر کارتون راحت شده؟
توی پروژههاتون چه مشکلی داشتین و با چه کتابخونهای حلش کردین ؟ 🤔
اسم اون ابزار و کاری که براتون کرده رو تو کامنتا بنویسین تا همهمون چند تا پکیج جدید و به درد بخور یاد بگیرین
عشقید ❤️
توی پروژههاتون چه مشکلی داشتین و با چه کتابخونهای حلش کردین ؟ 🤔
اسم اون ابزار و کاری که براتون کرده رو تو کامنتا بنویسین تا همهمون چند تا پکیج جدید و به درد بخور یاد بگیرین
عشقید ❤️
معرفی کتابخونه 📕⚒️✨
تاحالا شده یه کامپوننت بسازین و بعدش مجبور بشین کلی وقت بذارید تا برای حالت لودینگش یه اسکلتون (Skeleton) دقیقا شبیه به خودش طراحی کنین ( قطعا شده )؟😫
سر و کله زدن با کلاسهای Tailwind و نوشتن تگهای اضافه برای ساخت لودینگها گاهی واقعاً خستهکننده میشه.🛠
امروز میخوام یه ابزار خیلی باحال به اسم Boneyard رو بهتون معرفی کنم.🚀
کار این ابزار چیه؟ خیلی ساده میاد از روی کامپوننتهای ریکت و نکستِ شما، به صورت خودکار Skeleton میسازه ( مجیک )🪄✨
✅ چرا خیلی به درد میخوره؟
دیگه نیازی نیست برای هر بخش از سایت، کدهای اسکلتون رو دستی بنویسین🚫✍️
فرم و ساختارِ اسکلتون دقیقا شبیه کامپوننت اصلیتون درمیاد🔍
سرعت توسعهتون رو بالا میبره و کدهاتون رو خیلی تمیزتر نگه میداره.🧹🚀
به جای درگیری با کدهای اضافه، این ابزار بهتون کمک میکنه تا ساختار لودینگِ پروژهها رو تو سریعترین زمان پیاده کنین.⚡️
پیشنهاد میکنم حتما یه نگاه به فیچرهاش بندازین 👀📖
#Labs_library
تاحالا شده یه کامپوننت بسازین و بعدش مجبور بشین کلی وقت بذارید تا برای حالت لودینگش یه اسکلتون (Skeleton) دقیقا شبیه به خودش طراحی کنین ( قطعا شده )؟😫
سر و کله زدن با کلاسهای Tailwind و نوشتن تگهای اضافه برای ساخت لودینگها گاهی واقعاً خستهکننده میشه.🛠
امروز میخوام یه ابزار خیلی باحال به اسم Boneyard رو بهتون معرفی کنم.🚀
کار این ابزار چیه؟ خیلی ساده میاد از روی کامپوننتهای ریکت و نکستِ شما، به صورت خودکار Skeleton میسازه ( مجیک )🪄✨
✅ چرا خیلی به درد میخوره؟
دیگه نیازی نیست برای هر بخش از سایت، کدهای اسکلتون رو دستی بنویسین🚫✍️
فرم و ساختارِ اسکلتون دقیقا شبیه کامپوننت اصلیتون درمیاد🔍
سرعت توسعهتون رو بالا میبره و کدهاتون رو خیلی تمیزتر نگه میداره.🧹🚀
به جای درگیری با کدهای اضافه، این ابزار بهتون کمک میکنه تا ساختار لودینگِ پروژهها رو تو سریعترین زمان پیاده کنین.⚡️
پیشنهاد میکنم حتما یه نگاه به فیچرهاش بندازین 👀📖
#Labs_library
boneyard.vercel.app
boneyard - skeleton screens for your UI
Pixel-perfect skeleton loading screens auto-extracted from your real DOM. Zero configuration, zero layout shift.
👍1
دوست دارید فردا بیشتر روی چه موضوعی تمرکز کنیم و در موردش بحث کنیم؟
معرفی کتابخونهها و ابزارهای کاربردی (مثل امروز)
بررسی یه چالش فنی و کدنویسی (تو ریکت و نکستجیاس)
برگشتن به مباحث معماری و دیزاین سیستم
یا اصلا یه گپ و بحث آزاد در مورد مسیر و دغدغههای برنامهنویسی؟
ریش و قیچی رو برای فردا دادم دست خودتون ببینم چی دوست دارین
مشارکت توی این بحث باعث خوشحالی من میشه ❤️
معرفی کتابخونهها و ابزارهای کاربردی (مثل امروز)
بررسی یه چالش فنی و کدنویسی (تو ریکت و نکستجیاس)
برگشتن به مباحث معماری و دیزاین سیستم
یا اصلا یه گپ و بحث آزاد در مورد مسیر و دغدغههای برنامهنویسی؟
ریش و قیچی رو برای فردا دادم دست خودتون ببینم چی دوست دارین
مشارکت توی این بحث باعث خوشحالی من میشه ❤️
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
صبحتون یه زیبایی مهندسی نرم افزار 😁
امروز بیاین یه نگاه به یکی از پایهایترین و مهمترین مباحث جاوااسکریپت بندازیم که اگه دقیق درکش نکنیم، کدهامون پر از باگهای عجیب و غریب میشه :
تفاوت Primitiveها و Objectها
تو جاوااسکریپت، متغیرها موقع کپی شدن به دو شکل کاملا متفاوت رفتار میکنن
⭕️ دادههای اولیه (Primitives)
شامل مواردی مثل Number، String، Boolean، Null و Undefined هستن. اینا خیلی سادن وقتی یه متغیر رو برابر با یه متغیر دیگه قرار میدین خودِ مقدار کپی میشه و دو تا متغیر کاملا از هم مستقل میشن.
🔴 آبجکتها و آرایهها (Objects & Arrays)
اینجا داستان فرق داره. این دادهها بر اساس آدرس حافظه (Reference) کار میکنن. وقتی یه آبجکت رو کپی میکنین، در واقع شما خودِ مقادیر رو کپی نمیکنن بلکه فقط دارین میگین که آدرس شی دومی هم همون آدرس شی اولی توی حافظه هست و این یعنی هر دو متغیر دارن به یک جا اشاره میکنن
⚠️ چرا این موضوع اینقدر مهمه؟ دلیل اصلی خیلی از باگهایی که توی ریکت و نکستجیاس موقع آپدیت کردن استیتها (State) باهاش مواجه میشیم، همین رفتار آبجکتهاست. برای همین همیشه تاکید میشه که استیتها رو مستقیم دستکاری نکنید و از روشهایی مثل اسپرد اپراتور (
#Labs_js
تفاوت Primitiveها و Objectها
تو جاوااسکریپت، متغیرها موقع کپی شدن به دو شکل کاملا متفاوت رفتار میکنن
⭕️ دادههای اولیه (Primitives)
شامل مواردی مثل Number، String، Boolean، Null و Undefined هستن. اینا خیلی سادن وقتی یه متغیر رو برابر با یه متغیر دیگه قرار میدین خودِ مقدار کپی میشه و دو تا متغیر کاملا از هم مستقل میشن.
let a = 10;
let b = a;
b = 20;
console.log(a); // خروجی همون 10 هست و تغییری نکرده
🔴 آبجکتها و آرایهها (Objects & Arrays)
اینجا داستان فرق داره. این دادهها بر اساس آدرس حافظه (Reference) کار میکنن. وقتی یه آبجکت رو کپی میکنین، در واقع شما خودِ مقادیر رو کپی نمیکنن بلکه فقط دارین میگین که آدرس شی دومی هم همون آدرس شی اولی توی حافظه هست و این یعنی هر دو متغیر دارن به یک جا اشاره میکنن
let user1 = { name: "Ali" };
let user2 = user1; // آدرس حافظه کپی میشه، نه خود آبجکت!
user2.name = "Reza";
console.log(user1.name); // خروجی میشه "Reza"! یوزر اول هم تغییر کرد⚠️ چرا این موضوع اینقدر مهمه؟ دلیل اصلی خیلی از باگهایی که توی ریکت و نکستجیاس موقع آپدیت کردن استیتها (State) باهاش مواجه میشیم، همین رفتار آبجکتهاست. برای همین همیشه تاکید میشه که استیتها رو مستقیم دستکاری نکنید و از روشهایی مثل اسپرد اپراتور (
...) برای کپی کردن استفاده کنین.#Labs_js
❤4
👀 تفاوت
وقتی دو تا مقدار رو با هم مقایسه میکنیم، جاوااسکریپت دو تا رفتار کاملا متفاوت از خودش نشون میده :
🔹 علامت
🔹 علامت
قانون طلایی : برای اینکه کدهاتون رفتار عجیب غریب از خودشون نشون ندن و اسیر باگهای بیخودی نشین، همیشه از
تنها استثنای قضیه معمولا وقتاییه که میخوایم خالی بودنِ (
#Labs_js
== و === وقتی دو تا مقدار رو با هم مقایسه میکنیم، جاوااسکریپت دو تا رفتار کاملا متفاوت از خودش نشون میده :
🔹 علامت
== (مقایسه کشکی) : این علامت اصلا به نوعِ دادهها کاری نداره. مثلا اگه عدد 1 رو با متنِ "1" مقایسه کنین، میگه با هم برابرن (true)! چون خودش پشت صحنه میاد متن رو به عدد تبدیل میکنه تا شبیه هم بشن.🔹 علامت
=== (مقایسه سختگیر) : این یکی خیلی دقیقه. هم خود مقدار رو چک میکنه و هم نوعش رو. از نظر این علامت، عدد 1 با متنِ "1" اصلا برابر نیست (false)، چون یکی عدده و اون یکی رشته.قانون طلایی : برای اینکه کدهاتون رفتار عجیب غریب از خودشون نشون ندن و اسیر باگهای بیخودی نشین، همیشه از
=== استفاده کنین.تنها استثنای قضیه معمولا وقتاییه که میخوایم خالی بودنِ (
null یا undefined) یه متغیر رو چک کنیم.#Labs_js
❤4💯1
⁉️حالا این مقایسه چطوری توسط موتور js انجام میشه و چه مراحلی رو طی میکنه ؟
توی پست قبلی گفتیم که علامت
اما تا حالا به این فکر کردید که چرا برعکسش اتفاق نمیفته؟ یعنی چرا جاوااسکریپت عدد رو به متن تبدیل نمیکنه؟ 🤔
🪙 عدد، ارز مرجع جاوااسکریپته
طراحهای جاوااسکریپت عمدا این کار رو کردن، چون برای کامپیوتر، عدد همیشه یک مبنای دقیقتر و منطقیتر برای مقایسهست.
مثلا فرض کنین میخوایم عدد
اگه عدد به متن تبدیل میشد، عدد ۱۰۰ تبدیل میشد به متنِ
اما وقتی متن به عدد تبدیل میشه، جاوااسکریپت میفهمه هر دو طرف واقعا ۱۰۰ هستن و جواب درست رو بهمون میده.
⚙️ جاوااسکریپت چطوری اینو تصمیم میگیره؟
پشت صحنه یک دستورالعمل خیلی مشخص وجود داره که قدم به قدم اینطوری عمل میکنه :
۱. همنوع بودن : اگه هر دو طرف از یه جنس باشن (مثلا هر دو عدد)، اصلا دست بهشون نمیزنه و مستقیم مقایسه میکنه.
۲. دوقلوها : اگه یه طرف
۳. رشته و بولین : اگه پای رشته یا بولین (
بخاطر همین لایههای پنهان و تبدیلهای عجیب غریبیه که همیشه توصیه میشه از
#Labs_js
توی پست قبلی گفتیم که علامت
== پشت صحنه میاد نوع دادهها رو تغییر میده تا بتونه مقایسهشون کنه؛ مثلاً متن "1" رو تبدیل به عدد 1 میکنه.اما تا حالا به این فکر کردید که چرا برعکسش اتفاق نمیفته؟ یعنی چرا جاوااسکریپت عدد رو به متن تبدیل نمیکنه؟ 🤔
🪙 عدد، ارز مرجع جاوااسکریپته
طراحهای جاوااسکریپت عمدا این کار رو کردن، چون برای کامپیوتر، عدد همیشه یک مبنای دقیقتر و منطقیتر برای مقایسهست.
مثلا فرض کنین میخوایم عدد
100 رو با متنِ "1e2" (که فرمت ریاضیِ همون عدد ۱۰۰ هست) مقایسه کنیم :اگه عدد به متن تبدیل میشد، عدد ۱۰۰ تبدیل میشد به متنِ
"100" و مقایسهش با "1e2" غلط در میومد!!!اما وقتی متن به عدد تبدیل میشه، جاوااسکریپت میفهمه هر دو طرف واقعا ۱۰۰ هستن و جواب درست رو بهمون میده.
⚙️ جاوااسکریپت چطوری اینو تصمیم میگیره؟
پشت صحنه یک دستورالعمل خیلی مشخص وجود داره که قدم به قدم اینطوری عمل میکنه :
۱. همنوع بودن : اگه هر دو طرف از یه جنس باشن (مثلا هر دو عدد)، اصلا دست بهشون نمیزنه و مستقیم مقایسه میکنه.
۲. دوقلوها : اگه یه طرف
null و طرف دیگه undefined باشه، بدون هیچ تبدیلی میگه با هم برابرن (true). ۳. رشته و بولین : اگه پای رشته یا بولین (
true و false) وسط باشه، اونها رو تبدیل به عدد میکنه و بعد مقایسه رو انجام میده.بخاطر همین لایههای پنهان و تبدیلهای عجیب غریبیه که همیشه توصیه میشه از
=== استفاده کنیم تا اسیر باگهای بیخودی نشیم.#Labs_js
❤5⚡1
معماری Event Loop در جاوااسکریپت : مدیریت همروندی پشت صحنه
جاوااسکریپت Single-threaded (تکنخی) هست یعنی فقط یک Call Stack داره و در هر لحظه میتونه دقیقا یک خط کد رو پردازش کنه. اما چطور بدون قفل شدن رابط کاربری، همزمان ریکوئستهای شبکه رو ارسال میکنیم، تایمر میزاریم و انیمیشنها رو اجرا میکنیم؟ این جادوی همروندی، وظیفه فرآیندی به اسم Event Loop عه
برای درک مهندسی این سیستم، باید محیط اجرای جاوااسکریپت (Runtime) رو به ۴ قطعهی اصلی تقسیم کنیم :
⚙️ اجزای اصلی معماری سیستم
Call Stack :
پردازنده اصلی کدهای همگام (Sync) که خط به خط و به ترتیب لایفو (LIFO) اجرا میشن
Web APIs :
این بخش جزو موتور جاوااسکریپت نیست، بلکه مرورگر یا Node.js این نخهای جداگانه را در پسزمینه فراهم میکنه تا کارهایی مثل تایمرها یا ریکوئستهای شبکه رو اونجا پردازش کنه.
Microtask Queue (صف VIP) :
صفِ نگهداری کالبکهای با اولویت بالا مثل
Task Queue (صف عادی) یا Macrotasks ها هم بهش میگن :
صفِ نگهداری کالبکهای معمولی مثل
🔄 الگوریتم Event Loop چطور کار میکنه ؟
حلقه رویداد یک مکانیزم مداوم هست که پشت صحنه این مراحل رو طی میکنه :
بررسی استک : اول چک میکنه که آیا کدهای همگام (Call Stack) کاملا خالی شدهاند یا نه. تا استک خالی نشه، کار جدیدی رو شروع نمیکنه
تخلیه صف VIP : به محض خالی شدن استک، سراغ Microtask Queue میره و تمام کالبکهای داخل اون رو یکییکی اجرا میکنه تا این صف کاملا صفر بشه
اجرای صف عادی : در نهایت سراغ Task Queue میره و فقط یک کالبک را برمیداره، به استک میفرستد تا اجرا بشه و دوباره به مرحله اول برمیگرده
یک تست مهندسی معروف
به ترتیب خروجی این کد دقت کنین
با اینکه تایمر روی صفر میلیثانیه تنظیم شده اما خروجی به این ترتیبه :
1 => 4 => 3 => 2
علتش چیه ؟
اعداد
کالبکِ
کالبکِ
بعد از اتمام کدهای همگام، Event Loop اول صف VIP را خالی میکند (چاپ عدد
اینم نحوه Event Loop توی موتور js که خیلی مبحث مهمی برای درک ترتیب اجرای کدهاتون هست و توی سوالات مصاحبه ای پرسیده میشه 😉
#Labs_js
جاوااسکریپت Single-threaded (تکنخی) هست یعنی فقط یک Call Stack داره و در هر لحظه میتونه دقیقا یک خط کد رو پردازش کنه. اما چطور بدون قفل شدن رابط کاربری، همزمان ریکوئستهای شبکه رو ارسال میکنیم، تایمر میزاریم و انیمیشنها رو اجرا میکنیم؟ این جادوی همروندی، وظیفه فرآیندی به اسم Event Loop عه
برای درک مهندسی این سیستم، باید محیط اجرای جاوااسکریپت (Runtime) رو به ۴ قطعهی اصلی تقسیم کنیم :
⚙️ اجزای اصلی معماری سیستم
Call Stack :
پردازنده اصلی کدهای همگام (Sync) که خط به خط و به ترتیب لایفو (LIFO) اجرا میشن
Web APIs :
این بخش جزو موتور جاوااسکریپت نیست، بلکه مرورگر یا Node.js این نخهای جداگانه را در پسزمینه فراهم میکنه تا کارهایی مثل تایمرها یا ریکوئستهای شبکه رو اونجا پردازش کنه.
Microtask Queue (صف VIP) :
صفِ نگهداری کالبکهای با اولویت بالا مثل
Promise.then و async/await.Task Queue (صف عادی) یا Macrotasks ها هم بهش میگن :
صفِ نگهداری کالبکهای معمولی مثل
setTimeout و رویدادهای کلیک🔄 الگوریتم Event Loop چطور کار میکنه ؟
حلقه رویداد یک مکانیزم مداوم هست که پشت صحنه این مراحل رو طی میکنه :
بررسی استک : اول چک میکنه که آیا کدهای همگام (Call Stack) کاملا خالی شدهاند یا نه. تا استک خالی نشه، کار جدیدی رو شروع نمیکنه
تخلیه صف VIP : به محض خالی شدن استک، سراغ Microtask Queue میره و تمام کالبکهای داخل اون رو یکییکی اجرا میکنه تا این صف کاملا صفر بشه
اجرای صف عادی : در نهایت سراغ Task Queue میره و فقط یک کالبک را برمیداره، به استک میفرستد تا اجرا بشه و دوباره به مرحله اول برمیگرده
یک تست مهندسی معروف
به ترتیب خروجی این کد دقت کنین
console.log('1');
setTimeout(() => {
console.log('2');
}, 0);
Promise.resolve().then(() => {
console.log('3');
});
console.log('4');با اینکه تایمر روی صفر میلیثانیه تنظیم شده اما خروجی به این ترتیبه :
1 => 4 => 3 => 2
علتش چیه ؟
اعداد
1 و 4 کدهای همگام هستن و مستقیم توی استک اجرا میشنکالبکِ
setTimeout به صف عادی (Task Queue) میرهکالبکِ
Promise به صف VIP (Microtask Queue) میرهبعد از اتمام کدهای همگام، Event Loop اول صف VIP را خالی میکند (چاپ عدد
3) و در آخر سراغ صف عادی (چاپ عدد 2) میرهاینم نحوه Event Loop توی موتور js که خیلی مبحث مهمی برای درک ترتیب اجرای کدهاتون هست و توی سوالات مصاحبه ای پرسیده میشه 😉
#Labs_js
❤6🔥2
از قوی ترین مدل حال حاضر که رقابت با کلاد داره برید استفاده کنین
روزانه 5 میلیون توکن رایگان هم بهتون میده
https://chat.z.ai/
روزانه 5 میلیون توکن رایگان هم بهتون میده
https://chat.z.ai/
chat.z.ai
Z.ai - Advanced AI Chatbot & Agent powered by GLM-5.2
Meet Z.ai, the AI assistant powered by GLM-5.2. Build websites, write code, handle long-horizon tasks, and get instant answers. Fast, smart, and reliable.
❤4
Foad Labs
از قوی ترین مدل حال حاضر که رقابت با کلاد داره برید استفاده کنین روزانه 5 میلیون توکن رایگان هم بهتون میده https://chat.z.ai/
با استفاده از این ادیتور هوش مصنوعی که بهتون دسترسی به glm-5.2 و نسخه توربو میده دارم یه نیاز رو تبدیل به محصول میکنم
امیدوارم توی ماه آینده یا شایدم زودتر یه نسخه اولیه ازش بتونم بدم بیرون
شما ازش برای چه کاری استفاده کردین ؟ یا اصلا نگاهشم نکردین ؟
امیدوارم توی ماه آینده یا شایدم زودتر یه نسخه اولیه ازش بتونم بدم بیرون
شما ازش برای چه کاری استفاده کردین ؟ یا اصلا نگاهشم نکردین ؟
❤1
تصمیم گرفتم کتابهای مربوط به برنامه نویسی رو شروع کنم و از کتاب React_Modern_Patterns_for_Developing_React_Apps شروع کردم
❤4
براتون روزانه آپدیت و مطالبی که یاد گرفتم رو در قالب پست های بهم پیوسته میزارم ❤️
❤3👍2
📕کتاب React Modern Patterns for Developing React Apps
〽️ ریاکت چطوری ساخته و وارد بازار برنامه نویسی شد؟
ریاکت توسط یه مهندس نرم افزار به اسم Jordan Walk که توی Facebook کار میکرد برپا شد و در سال 2011 در بخش خبری فیسبوک و بعد از اینکه توسط فیسبوک خریداری شد در سال 2012 در اینستاگرام هم گنجانده شد این برنامه.
توی سال 2013 ریاکت توسط جامعه JSConf به صورت اپن سورس ارائه شد و به دسته بندی هزاران کتابخونه دیگه مثل Angular, Dojo و ... پیوست.
ریاکت خودش رو به عنوان کلمه V در عبارت MVP که بیانگر View هست توصیف کرد که یعنی با استفاده از کامپوننتهای ساخته شده توسط اون به عنوان رابط کاربری javascript شما دیده میشن.
از همونجا بود که استفاده ازش بین کامیونیتی شروع کرد به پخش شدن. تو ژانویه 2015 نتفلیکس اعلام کرد که داره از React برای ساختن UI خودش استفاده میکنه. اواخر همون ماه هم React Native منتشر شد که یه کتابخونه برای ساخت اپلیکیشنهای موبایل با همون React بود. فیسبوک هم ReactVR رو منتشر کرد، یه ابزار دیگه که React رو به هدفهای رندرینگ گستردهتری میبرد. تو سالهای 2015 و 2016 هم یه تعداد خیلی زیاد از ابزارهای معروف مثل React Router، Redux و MobX اومدن روی کار تا کارهایی مثل Routing و State Management رو هندل کنن. آخرش هم React به عنوان یه کتابخونه شناخته میشد: یعنی فقط حواسش به پیادهسازی یه سری ویژگیهای خاص بود، نه اینکه بخواد برای هر کیس و استفادهای یه ابزار ارائه بده.
یه اتفاق خیلی بزرگ دیگه تو این تایملاین، انتشار React Fiber تو سال 2017 بود. فایبر یه بازنویسی از الگوریتم رندرینگ React بود که تو اجراش یه جورایی جادویی بود. این یه بازنویسی کامل از بخشهای داخلی React بود که تقریباً هیچ تغییری تو API عمومیش ایجاد نکرد. در واقع یه راهی بود برای اینکه React رو مدرنتر و سریعتر کنه بدون اینکه روی کاربران و برنامهنویسا تاثیری بذاره.
#RMP_ep1
〽️ ریاکت چطوری ساخته و وارد بازار برنامه نویسی شد؟
ریاکت توسط یه مهندس نرم افزار به اسم Jordan Walk که توی Facebook کار میکرد برپا شد و در سال 2011 در بخش خبری فیسبوک و بعد از اینکه توسط فیسبوک خریداری شد در سال 2012 در اینستاگرام هم گنجانده شد این برنامه.
توی سال 2013 ریاکت توسط جامعه JSConf به صورت اپن سورس ارائه شد و به دسته بندی هزاران کتابخونه دیگه مثل Angular, Dojo و ... پیوست.
ریاکت خودش رو به عنوان کلمه V در عبارت MVP که بیانگر View هست توصیف کرد که یعنی با استفاده از کامپوننتهای ساخته شده توسط اون به عنوان رابط کاربری javascript شما دیده میشن.
از همونجا بود که استفاده ازش بین کامیونیتی شروع کرد به پخش شدن. تو ژانویه 2015 نتفلیکس اعلام کرد که داره از React برای ساختن UI خودش استفاده میکنه. اواخر همون ماه هم React Native منتشر شد که یه کتابخونه برای ساخت اپلیکیشنهای موبایل با همون React بود. فیسبوک هم ReactVR رو منتشر کرد، یه ابزار دیگه که React رو به هدفهای رندرینگ گستردهتری میبرد. تو سالهای 2015 و 2016 هم یه تعداد خیلی زیاد از ابزارهای معروف مثل React Router، Redux و MobX اومدن روی کار تا کارهایی مثل Routing و State Management رو هندل کنن. آخرش هم React به عنوان یه کتابخونه شناخته میشد: یعنی فقط حواسش به پیادهسازی یه سری ویژگیهای خاص بود، نه اینکه بخواد برای هر کیس و استفادهای یه ابزار ارائه بده.
یه اتفاق خیلی بزرگ دیگه تو این تایملاین، انتشار React Fiber تو سال 2017 بود. فایبر یه بازنویسی از الگوریتم رندرینگ React بود که تو اجراش یه جورایی جادویی بود. این یه بازنویسی کامل از بخشهای داخلی React بود که تقریباً هیچ تغییری تو API عمومیش ایجاد نکرد. در واقع یه راهی بود برای اینکه React رو مدرنتر و سریعتر کنه بدون اینکه روی کاربران و برنامهنویسا تاثیری بذاره.
#RMP_ep1
❤4
یکم ناخوش احوالم نتونستم کتاب بخونم و براتون مطالبش رو بزارم
فردا جبرانش انشالا ❤️
فردا جبرانش انشالا ❤️
🔥1