Tech Stuff – Telegram
هوک useImperativeHandle در React

توی این پست، درباره یک چالش رایج توی ری‌اکت صحبت کردم: چطور از توابع و استیت‌های یک کامپوننت فرزند در کامپوننت والد استفاده کنیم، بدون اینکه کل ساختار کامپوننت رو به هم بریزیم.
برای حل این مسئله از هوک useImperativeHandle استفاده می‌کنم و به همراه مثال توضیحش میدم.

@techstuff100
👍5🔥1🎉1
تفاوت any و unknown توی TypeScript

توی TypeScript، وقتی نمی‌دونیم یه مقدار دقیقا چه نوعی داره، معمولا از any استفاده می‌کنیم. در کنارش یه گزینه دیگه هم داریم: unknown.

می‌تونیم اینطوری مقایسه‌شون کنیم: any یعنی «بی‌خیال تایپ شو و هر کاری دوست داری بکن» آزادی کامل میده، ولی ریسک کرش بالا میره. unknown یعنی «من نمی‌دونم تایپش چیه، ولی قبل از استفاده باید مطمئن بشی» یه جورایی جلوی اشتباهات رو می‌گیره و کد امن‌تر میشه.

مثال رو ببینید.

@techstuff100
🔥7👍1👏1
آشنایی با Database Sharding: وقتی دیتابیس بزرگ میشه چیکار کنیم؟

وقتی اپلیکیشن‌مون رشد می‌کنه و تعداد کاربرها و حجم دیتا زیاد میشه، یه نقطه‌ای میرسه که دیتابیس دیگه نمی‌کشه و response time میره بالا. این دقیقا همون جاییه که Database Sharding به کمکمون میاد.

تو Sharding میایم دیتابیس رو به تیکه‌های کوچکتر (shard) تقسیم می‌کنیم و روی چند تا سرور پخششون می‌کنیم. این کار رو می‌تونیم به روش‌های مختلفی مثل Range-based، Hash-based یا حتی Geo-based انجام بدیم. این کار پیچیدگی‌های خودش رو داره؛ مثلا باید حواسمون باشه که دیتا به صورت متوازن بین سرورها توزیع بشه تا hotspot نداشته باشیم.

لینک مقاله:
https://aws.amazon.com/what-is/database-sharding/

@techstuff100
🔥6👍1
نکته حرفه‌ای React: چطور یک کامپوننت سنگین با children رو memoize کنیم؟

مموایز کردن کامپوننت‌های سنگین که children دارن، یه چالش جالبه که خیلی‌ها توش اشتباه می‌کنن. اکثرا فکر می‌کنن اگه هم برای children و هم کامپوننت سنگین از memo استفاده کنن کافیه. (کد ۱)

راه‌حل درست اینه که children رو با useMemo مموایز کنیم. چون children در نهایت یک آبجکته و با هر بار رندر، یک آبجکت جدید ساخته میشه. (کد ۲)

@techstuff100
🔥7👍4
مدیریت state در React: از useState تا useReducer

مدیریت stateها توی کامپوننت‌های React گاهی خیلی پیچیده میشه. مخصوصا وقتی از useStateهای متعدد برای state های مرتبط استفاده می‌کنیم. نتیجه‌ش میشه یه کامپوننت شلوغ که نگهداریش سخته. وقتی stateها به هم وابسته‌ن، آپدیت کردنشون با useStateهای جداگانه می‌تونه دردسرساز بشه. هر تغییر کوچیک نیاز به کلی کد داره و پیدا کردن باگ‌ها هم سخت‌تر میشه؛ چون trace کردن تغییرات state خیلی پیچیده‌ست.

توی همچین وضعیتی، useReducer خیلی بکارمون میاد. به جای اینکه state‌های مرتبط رو با useState‌های جدا مدیریت کنیم، می‌تونیم همه‌شون رو توی یه آبجکت بذاریم و با یه reducer مدیریتشون کنیم. حتی می‌تونیم یه قدم جلوتر بریم و یه custom hook بسازیم که جزئیات پیاده‌سازی reducer رو مخفی کنه و یه interface تمیز به کامپوننت‌هامون بده. این جوری کدمون هم تمیزتر میشه، هم نگهداریش راحت‌تر.

لینک مقاله:
https://thetshaped.dev/p/how-to-use-reducer-in-react-for-better-and-simpler-state-management

@techstuff100
👍3🤔1
دیزاین پترن Compound Components در React

توی این پست درباره یه راه حل تمیز و اصولی برای ساخت کامپوننت‌های انعطاف‌پذیر با استفاده از Compound Components صحبت می‌کنم. با این الگو می‌تونیم کامپوننت‌های پیچیده رو به اجزای کوچکتر و قابل ترکیب تبدیل کنیم.

چندتا نکته:
— این الگو برای همه موارد مناسب نیست. وقتی ازش استفاده کنید که واقعا نیاز به انعطاف‌پذیری بالا دارید.
— اجزای compound component معمولا فقط در کنار هم معنی میدن و نباید جدا استفاده بشن.
— استفاده از Context باعث می‌شه نیازی به prop drilling نداشته باشیم.

@techstuff100
👍8🤔2
ریاضی پشت پرده فیلترهای Blur

وقتی برای عکس‌هامون از فیلتر blur استفاده می‌کنیم، در واقع یک عملیات ریاضی پیچیده به اسم Convolution روی عکس انجام میشه. این عملیات با استفاده از یک ماتریس کوچیک به اسم kernel، برای هر پیکسل، مقدار پیکسل‌های اطرافش رو می‌خونه و با یک فرمول خاص ترکیبشون می‌کنه.

معروف‌ترین نوع blur یعنی Gaussian Blur، از تابع گوسی استفاده می‌کنه. این فیلتر به جای اینکه همه پیکسل‌های اطراف رو یکسان در نظر بگیره، به پیکسل‌های نزدیک‌تر وزن بیشتری میده و همین باعث میشه blur طبیعی‌تری ایجاد بشه. این فیلتر علاوه بر ویرایش عکس و شبکه‌های اجتماعی، توی حوزه‌های بازی‌سازی (برای Motion Blur)، عکاسی حرفه‌ای (برای ایجاد عمق میدان)، و حتی رمزنگاری و حریم خصوصی داده‌ها هم کاربرد داره.

لینک مقاله:
https://readmedium.com/en/https:/medium.com/puzzle-sphere/math-behind-image-blur-instagram-snapchat-gaussian-function-quantum-mechanics-convolution-kernel-average-45757b744e83

@techstuff100
👍13🔥1
آشنایی با Rate Limiting

این مسئله وجود داره که یه سری کاربر یا سرویس، منابع سیستم رو به خودشون اختصاص میدن و بقیه کاربرها نمی‌تونن درست از سرویس استفاده کنن. مثلا یه API داریم که یهو یه کاربر شروع می‌کنه به ارسال درخواست‌های زیاد و کل سیستم رو کند می‌کنه. یا بدتر از اون، ممکنه با DoS attack روبرو بشیم که عملا سرویس‌مون رو از دسترس خارج کنه.

یکی از راه‌حل‌ها می‌تونه Rate Limiting باشه. با استفاده از الگوریتم‌هایی مثل Token Bucket یا Sliding Window می‌تونیم تعداد درخواست‌ها رو محدود و کنترل کنیم. مثلا می‌تونیم بگیم هر کاربر در هر دقیقه فقط ۱۰۰ تا درخواست می‌تونه بفرسته. یا می‌تونیم برای هر endpoint مشخص کنیم چقدر traffic قبول می‌کنه. این‌جوری هم جلوی سوءاستفاده رو می‌گیریم، هم تجربه کاربری بهتر میشه و هم هزینه‌های سرور رو می‌تونیم کنترل کنیم.

لینک مقاله:
https://www.solo.io/topics/rate-limiting

@techstuff100
👍4👏1