Ditty | دیتی @ditty_ir Channel on Telegram

Ditty | دیتی

@ditty_ir


دیتی | دنیای ساده‌شدهٔ برنامه‌نویسی وب
https://ditty.ir

Ditty | دیتی (Farsi)

با کانال تلگرام دیتی | دیتی آشنا شوید! این کانال با نام کاربری @ditty_ir فضایی مناسب برای کسانی فراهم کرده است که به برنامه‌نویسی وب علاقه‌مندند. در اینجا دنیای ساده‌شدهٔ برنامه‌نویسی وب را کشف خواهید کرد. اگر علاقه‌مند به یادگیری تکنولوژی‌های جدید و به روز هستید، این کانال بهترین مکان برای شماست. دیتی به شما کمک خواهد کرد تا مفاهیم پیچیده در حوزه برنامه‌نویسی وب را به صورت ساده و قابل درک بیاموزید. برای کسب اطلاعات بیشتر و مشارکت در جامعهٔ برنامه‌نویسی، حتما به کانال تلگرام دیتی | دیتی ملحق شوید. برای دسترسی به مطالب بیشتر وب‌سایت https://ditty.ir را مشاهده کنید.

Ditty | دیتی

07 Jul, 13:52


🔺قابلیت Type Predicate توی تایپ‌اسکریپت چیه؟ 🤔

- تایپ‌اسکریپت یه قابلیت کاربردی داره به اسم Type Predicate که کمک می‌کنه نوع یک مقدار به شکل یک خاص‌تر و مشخص‌تر برای ما در دسترس باشه

- برای مثال توی شرایطی که نوع یک مقدار ممکنه عدد باشه یا رشته، این قابلیت به ما کمک می‌کنه که از نوع اون مقدار قطعیت داشته باشیم. به قول معروف عملیات Narrowing رو برامون راحت‌تر می‌کنه

- توی این پست ابتدا با مفهوم Narrowing آشنا می‌شیم و بعد Type Predicate رو بررسی می‌کنیم:
ditty.ir/549

#typescript

Ditty | دیتی

10 Jun, 06:05


🔺سرویس‌ ورکر (Service Worker) چیه؟ 🤔

- سرویس ورکر به اسکریپت‌هایی گفته میشه که پشتِ پردهٔ برنامه‌های فرانت‌اندی اجرا میشن. به طوری که کاربر و Main Thread وجود اونها رو حس نمی‌کنه

- با سرویس‌ورکرها می‌تونیم:

• به شکل حرفه‌ای ریسورس‌ها رو کش کنیم و برنامه‌های آفلاین داشته باشیم
• عملیات و پردازش‌های سنگین انجام بدیم
• به کاربرا Push Notification ارسال کنیم
• و ...

- مهمترین هدف سرویس‌ورکر کم کردن حجم کارهای Main Thread هست. کارهایی که باعث افت کیفیت و سرعت برنامه‌های ما می‌شدن

- توی این قسمت می‌خوایم با سرویس‌ورکرها آشنا بشیم و ببینیم که چطوری می‌تونیم از این تکنیک برای Cache کردن ریسورس‌هامون استفاده کنیم:
ditty.ir/546

#frontend

Ditty | دیتی

27 May, 07:05


🔺با HTTP Caching و نحوهٔ کارکرد اون توی مرورگر آشنا بشیم

- توی این پست می‌خوایم با چند هدر HTTP آشنا بشیم که بطور اختصاصی برای Caching و مدیریت ذخیره‌سازی اطلاعات استفاده میشن

- این تکنیک با حذف کردن درخواست‌های HTTP اضافی، استفاده از پهنای باند رو به شکل قابل توجهی کاهش میده که نتیجهٔ اون افزایش سرعت و عملکرد برنامه‌های فرانت‌اندی هست

- جدیدترین پست دیتی:
ditty.ir/545

#frontend

Ditty | دیتی

21 May, 06:01


🔺 توی برنامه‌های فرانت‌اندی، آیا تفاوت Building و Bundling رو می‌دونیم؟ 🤔 تفاوت Minify و Uglify چطور؟

- توی این پست دیتی می‌خوایم ۶ واژه که شبیه به هم هستن رو بررسی کنیم:
ditty.ir/543

#frontend

Ditty | دیتی

01 May, 10:47


🔺یک منبع به‌روز و پر از آموزش و نکتهٔ برای فرانت‌اند:

https://frontendmasters.com/guides/front-end-handbook/2024

#links

Ditty | دیتی

28 Apr, 04:04


🔺تصاویر، فونت‌ها، اسکریپت‌ها و فایل‌های یک برنامهٔ فرانت‌اندی رو چطوری مدیریت کنیم؟ 🤔

- یکی از مهارت‌هایی که به‌عنوان توسعه‌دهندهٔ فرانت‌اند باید اون رو بلد باشیم، نحوهٔ مدیریت Asset های برنامه هست

- توی این پست نکته‌ها و تجربیاتی رو برای مدیریت Asset ها (فایل‌ها و تصاویر و ...) توی برنامه‌های فرانت‌اند براتون به اشتراک گذاشتم:
ditty.ir/540

#tips

Ditty | دیتی

10 Apr, 05:01


سلام دوستان، عیدتون مبارک 👋


- نسخهٔ PDF برای ۸۰ سوال مصاحبهٔ فرانت‌اند و ۷۰ سوال مصاحبهٔ جاوااسکریپت رو می‌تونین دانلود کنین 👇

80 FE Interview Questions
70 JavaScript Interview Questions

#interview

Ditty | دیتی

07 Apr, 05:03


🔺توی جاوااسکریپت و مبحث پرامیس‌ها، تفاوت متدهای race و any چیه؟ متد all و allSettled چطور؟ 🤔

- این متدها که از Promise به صورت استاتیک قابل دسترس هستن (یعنی مثلاً ()Promise.resolve یا ()Promise.race) کاربردهای زیادی دارن و بهمون کمک می‌کنن یک برنامهٔ سریع‌تر و پویاتر داشته باشیم. توی این پست این متدها رو بررسی می‌کنیم و با مثال‌هایی از کاربرد اونها توی دنیای واقعی آشنا می‌شیم:
ditty.ir/537

#javascript

Ditty | دیتی

21 Mar, 06:13


🔺ترفند ری‌اکتی

- توی ری‌اکت وقتی از useState استفاده می‌کنیم، برای مقدار اولیه اون، بجای پاس دادن مقدار به‌صورت مستقیم می‌تونیم اون رو توی یک تابع محصور کنیم (مثل عکس)

- توی عکس همونطور که می‌بینیم، تابعی داریم به اسم heavyCalculation که مثلاً کار سنگینی انجام میده و می‌خوایم خروجی اون رو به عنوان مقدار useState قرار بدیم

- می‌تونستیم این کار رو بدون استفاده از تابع هم انجام بدیم، که توی این حالت باید بدونیم که هر بار که این کامپوننت رندر میشه، تابع پاس داده‌شده هم مجدد اجرا میشه. که اگه عملیات ما سنگین باشه باعث افت عملکرد کامپوننت میشه

- حالا وقتی که تابع یا یک عملیات سنگین رو توی یک تابع محصور می‌کنیم، ری‌اکت توی رندر ابتدایی، این تابع رو اجرا و توی رندرهای بعدی از خروجی این تابع (که توی رندر ابتدایی محاسبه شده) استفاده می‌کنه. یعنی فقط یک بار اجرای اون عملیات سنگین

- از این ترفند بهتره زمانی استفاده کنیم که واقعاً عملیات سنگینی داریم که هر بار اجرای اون، عملکرد کامپوننت رو تحت تأثیر قرار میده

- مشاهدهٔ نمونه عملی

#react

Ditty | دیتی

20 Mar, 05:16


سال قبل کلی پیام از شما گرفتم که مشکلات و دغدغه‌هاتون رو با من در میون گذاشتین. اگه بخوام همه این تجربه رو توی یک جمله خلاصه کنم، میشه: «یکمی بیشتر با هم مهربون باشیم»

سال نو همگی دوستان مبارک باشه 👋

#1403

Ditty | دیتی

12 Mar, 04:24


🔺آشنایی با ویژگی‌های جدید جاوااسکریپت (ES14)

- توی اکمااسکریپت ١۴ ویژگی‌های جالبی رو داریم از جمله چند متد کاربردی مربوط به آرایه‌ها

- توی این پست با این ویژگی‌ها که توی جدیدترین نسخه‌های جاوااسکریپت و تایپ‌اسکریپت در دسترس هستن آشنا بشیم:
https://ditty.ir/536

#javascript

Ditty | دیتی

11 Mar, 11:10


🔺ـReact Strict DOM چیه؟ 🤔

- اگه تجربه توسعه برنامه‌های موبایلی با React Native رو داشته باشین، می‌دونین که استفاده از کامپوننت‌های ری‌اکت نسخه وب توی نِیتیو خیلی هم ساده نیست. و باید از یک‌سری کامپوننت‌های خاص استفاده کرد

- مثلاً توی نیتیو نمی‌تونیم از div استفاده کنیم و بجاش باید از المنت View استفاده کرد

- اما فیسبوک این پکیج (که فعلاً آزمایشی هست) رو چند روز پیش منتشر کرده که اجازه میده کامپوننت‌هایی داشته باشیم که به قول معروف Universal و عمومی‌تر هستن و کمک می‌کنن راحت‌تر بتونیم از کامپوننت‌های موجود بین برنامه‌های وب و نیتیو استفاده کنیم

- برای مثال بجای استفاده از <div> و یا <View>، از یک المنت مشترک به اسم <html.div> استفاده می‌کنیم. و این ابزار پشت پرده کار تبدیل رو به‌صورت خودکار انجام میده

🔗 مشاهده نمونه
#react

Ditty | دیتی

04 Mar, 04:30


🔺تجربهٔ مصاحبه

فرض کنین چنین سوالی ازتون پرسیده میشه: «برای شروع یک پروژه چه ابزارهایی رو انتخاب می‌کنید؟»

- جواب غلط: «من برای شروع یک پروژه از Next.js و GraphQL و تایپ‌اسکریپت و تیلویند و استوری‌بوک و [+۱۰۰ ابزار دیگه که نشون بدیم چقدر خفن و با کاربلد هستیم]»

- چرا این جواب غلطه؟ چون با حداقل اطلاعات و چشم‌بسته داریم چنین جوابی رو می‌دیم و بنابراین نشون‌دهندهٔ تعصب هست. شما برای شغل ری‌اکتی اقدام کردین و مصاحبه‌کننده قطعاً می‌دونه که شما در حالت عادی از چنین ابزارهایی استفاده می‌کنین. یک مصاحبه‌شونده و یک مصاحبه‌کنندهٔ سالم از تعصب خوشش نمیاد. و تعصب هم یعنی یک هم‌تیمی مغرور و غیر قابل انعطاف.

- جواب درست: «کاملاً بستگی داره. من قبل از شروع پروژه بررسی می‌کنم که موضوع پروژه چیه، چقدر زمان و بودجه در نظر گرفته شده. در واقع باید ابتدا اولویت‌ها رو بررسی کنیم و همچنین ببینیم افرادی که توی پروژه دخیل هستن چه مهارت‌هایی دارن. و براساس این اطلاعات حتی شاید مجبور بشیم با ابزارهایی کار کنیم که تابحال تجربهٔ نداشتیم.»

- در واقع بهتره که از تکنیک پست قبل هم استفاده کنین. مثلاً به مصاحبه‌کننده بگید که «کاملاً بستگی داره» و ازش بخواین که بیشتر توضیح بده. مثلاً:
«راستش بسته به اینکه موضوع پروژه و نیازهای ما چه چیزهایی هستن، ابزارهای متفاوتی رو میشه به کار گرفت. امکانش هست لطفاً بیشتر درباره این موارد توضیح بدین تا جواب بهتری می‌تونم بدم؟» اون هم مشتاقانه جواب میده «بله بله! البته! ببینید، ... » و شما هم زمان بیشتری بدست میارین تا به سوال فکر کنین و هم جواب مرتبط‌تری می‌دین :)
#tips

Ditty | دیتی

22 Feb, 08:47


🔺 تجربه مصاحبه

دوستان توی #مصاحبه وقتی از شما سوالی میشه، فوراً شروع نکنین به جواب دادن. سعی کنین اطلاعات بیشتری از سوال بدست بیارین.

مثلاً از شما پرسیده میشه که بزرگترین چالشی که توی آخرین پروژه‌تون داشتین چی بوده. شما اینجا بهتره تلاش کنین که منظور سوال رو متوجه بشین. چه نوع چالشی منظورش هست؟ فنی؟ ارتباطی؟

یک جواب مناسب می‌تونه این باشه:
«راستش توی پروژه قبلی چالش‌های مختلفی داشتیم. هم فنی و هم غیر فنی. اما میشه لطفاً مشخص کنین که چه نوع چالشی منظورتون هست؟»

با این کار هم سوال رو دقیق‌تر متوجه میشین و می‌تونین جواب مناسب‌تری بدین، و هم زمان بیشتری برای فکر کردن به جواب بدست میارین.

#tips

Ditty | دیتی

05 Feb, 21:00


🔺همینطور که به روز ولنتاین نزدیک می‌شیم، بد نیست کدهای HTTP رو با مثال‌هایی از این روز یاد بگیریم:
HTTP codes as Valentine’s Day comics

#fun

Ditty | دیتی

27 Jan, 20:18


🔺می‌خواید به صورت عملی ببینید #جاوااسکریپت چطوری عملیات Async رو مدیریت می‌کنه؟ اینجا رو ببینید:👇
https://www.jsv9000.app

#links

Ditty | دیتی

23 Jan, 18:17


🔺نویسندهٔ کتاب You Don't Know JS، آقای کایل سیمپسون یه جایی درباره رجکت شدنش توی مصاحبه با یه شرکت معروف صحبت می‌کرد و می‌گفت اون شرکت با دلیل اینکه «فکر نمی‌کنیم به اندازهٔ کافی جاوااسکریپت بلد باشی» من رو رد کردن.

- داستان‌های جالبی رو از رجکت شدن افراد توی مصاحبه‌های شغلی اینجا می‌تونین ببینین:
https://rejected.us

#interview

Ditty | دیتی

18 Jan, 11:41


🔺یه نکتهٔ ریز ری‌اکتی که دوست داشتم براتون به اشتراک بذارم

- همونطور که می‌دونیم وقتی توی یک کامپوننت والد تغییری رخ میده (مثلاً State بروز میشه)، باعث میشه کامپوننت‌های فرزند Re-render بشن. برای جلوگیری از این اتفاق می‌تونیم از React.memo تو کامپوننت فرزند استفاده کنیم


- کامپوننتی که از React.memo استفاده می‌کنه، فقط زمانی Re-render میشه که تغییری توی Props اون رخ بده


- حالا فرض کنیم می‌خوایم از کامپوننت والد به فرزند یک آبجکت یا یک تابع (Callback) رو پاس بدیم. اینجا حتی اگه تغییری توی این آبجکت یا تابع رخ نده، در صورت ری‌-رندر شدن کامپوننت والد، کامپوننت‌های فرزند در هر صورت (با memo یا بدون اون) ری-رندر میشن


- دلیل این اتفاق اینه که توی Re-render هایی که برای یک کامپوننت رخ میده، تمام State ها از نو ساخته میشن و بنابراین اگه یک State از نوع آبجکت داشته باشیم، اون آبجکت توی رندر اولیه کاملاً متفاوت هست با آبجکتی که توی رندرهای بعدی داریم. گرچه ممکنه تغییری توی ظاهر آبجکت رخ نده، می‌دونیم که دو آبجکت با ظاهر یکسان با هم برابر نیستن


- بنابراین اگه یک کامپوننت فرزند داره از React.memo استفاده می‌کنه و در صورتی که داریم یک آبجکت یا تابع (توابع هم نوعی آبجکت هستن) رو به اون کامپوننت پاس می‌دیم، با Re-render شدن کامپوننت والد، کامپوننت فرزند باز هم Re-render میشه. چون React.memo می‌بینه که پراپرتی‌ها با هم برابر نیستن {} ==! {}


- اینجاست که هوک‌های useCallback و useMemo به کارمون میان. این هوک‌ها تضمین می‌کنن که توی رندرهای متعدد، مقدارها و توابع ما بدون تغییر باقی می‌مونن و توی هر رندر دقیقاً همون مقدار پیشین رو برمی‌گردونن (از useRef هم میشه استفاده کرد)


- بنابراین، اگه جایی از برنامه پرفورمنس برامون اهمیت داره و به کامپوننت‌های فرزند داریم مقادیر غیر Primitive (آبجکت، آرایه، تابع کال‌بک) پاس می‌دیم، بهتره به این نکته توجه کنیم


- مثال عملی رو می‌تونید از اینجا ببینید:
https://bit.ly/3O9oTIm


پ.ن: این فقط یکی از کاربردهای useMemo هست. کاربرد اصلی اون کش کردن خروجی توابع هست.
#react #tricks

Ditty | دیتی

16 Jan, 21:28


🔺ترفند: توی کنسول کروم و فایرفاکس می‌تونیم با استفاده از 0$ به آخرین المنتی که توی تب Inspect انتخاب شده دسترسی داشته باشیم
#tricks