ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

| کانال توسعه‌دهندگان جاوااسکریپت |

| کانال توسعه‌دهندگان جاوااسکریپت |

前往频道在 Telegram

⭕️ کانال توسعه‌دهندگان جاوااسکریپت دولوپیکس 💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport

显示更多
3 838
订阅者
-324 小时
-187 天
-3130 天

正在加载数据

标签云
无数据
有任何问题?请刷新页面或联系我们的客服。
进出提及
---
---
---
---
---
---
吸引订阅者
10月 '26
十月 '26
+126
在0个频道中
九月 '260
在0个频道中
Get PRO
八月 '260
在0个频道中
Get PRO
七月 '260
在0个频道中
Get PRO
六月 '260
在0个频道中
Get PRO
五月 '260
在0个频道中
Get PRO
四月 '260
在0个频道中
Get PRO
三月 '260
在0个频道中
Get PRO
二月 '260
在0个频道中
Get PRO
一月 '260
在0个频道中
Get PRO
十二月 '250
在0个频道中
Get PRO
十一月 '250
在0个频道中
Get PRO
十月 '25
+38
在0个频道中
Get PRO
九月 '25
+90
在0个频道中
Get PRO
八月 '25
+138
在0个频道中
Get PRO
七月 '25
+167
在0个频道中
Get PRO
六月 '25
+167
在0个频道中
Get PRO
五月 '25
+174
在0个频道中
Get PRO
四月 '25
+167
在0个频道中
Get PRO
三月 '25
+167
在0个频道中
Get PRO
二月 '25
+203
在0个频道中
Get PRO
一月 '25
+234
在0个频道中
Get PRO
十二月 '24
+219
在1个频道中
Get PRO
十一月 '24
+224
在1个频道中
Get PRO
十月 '24
+208
在0个频道中
Get PRO
九月 '24
+253
在0个频道中
Get PRO
八月 '24
+266
在0个频道中
Get PRO
七月 '24
+286
在0个频道中
Get PRO
六月 '24
+246
在0个频道中
Get PRO
五月 '24
+192
在0个频道中
Get PRO
四月 '24
+147
在1个频道中
Get PRO
三月 '24
+214
在0个频道中
Get PRO
二月 '24
+302
在0个频道中
Get PRO
一月 '24
+597
在0个频道中
Get PRO
十二月 '23
+207
在0个频道中
Get PRO
十一月 '23
+839
在0个频道中
日期
订阅者增长
提及
频道
28 十月+2
27 十月+1
26 十月+1
25 十月+2
24 十月+1
23 十月0
22 十月0
21 十月0
20 十月0
19 十月+1
18 十月0
17 十月+1
16 十月0
15 十月0
14 十月+1
13 十月+2
\n\nو فایل جاوااسکریپت:\n\n// app.js\nconst form = document.querySelector(\"#todo-form\");\nconst input = document.querySelector(\"#todo-input\");\nconst list = document.querySelector(\"#todo-list\");\n\nconst STORAGE_KEY = \"jsdev_todos\";\nlet todos = loadTodos();\nrender();\n\nform.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n const text = input.value.trim();\n if (!text) return;\n\n todos.push({ id: Date.now(), text });\n input.value = \"\";\n saveTodos();\n render();\n});\n\nlist.addEventListener(\"click\", (e) => {\n if (!e.target.matches(\"button[data-id]\")) return;\n const id = Number(e.target.dataset.id);\n todos = todos.filter((t) => t.id !== id);\n saveTodos();\n render();\n});\n\nfunction loadTodos() {\n const raw = localStorage.getItem(STORAGE_KEY);\n try {\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction saveTodos() {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(todos));\n}\n\nfunction render() {\n list.innerHTML = \"\";\n todos.forEach((todo) => {\n const li = document.createElement(\"li\");\n li.textContent = todo.text + \" \";\n\n const btn = document.createElement(\"button\");\n btn.textContent = \"حذف\";\n btn.dataset.id = todo.id;\n\n li.appendChild(btn);\n list.appendChild(li);\n });\n}\n\nچند نکته ریز ولی مهم 🧠\n• همیشه روی داده localStorage یک try...catch بگذار که اگر خراب شد (مثلاً دستی ویرایش شده بود) اپ کرش نکند.\n• از یک key ثابت مثل jsdev_todos استفاده کن تا اگر بعداً چند بخش دیگر هم اضافه شد، تداخل نداشته باشند.\n• برای id ها اینجا از Date.now() استفاده شده، که برای پروژه‌های کوچک کافی است.\n\nبا همین ساختار پایه می‌شود بعدها checkbox برای completed، فیلتر، و حتی sync ساده با backend هم اضافه کرد. یک بار این نمونه را تا انتها بساز، بعد هر جای اپ‌های واقعی که state و UI sync می‌شوند خیلی قابل فهم‌تر به نظر می‌رسد ⚡️\n\nاگر ساختی و کمی شخصی‌سازی‌اش کردی، نسخه‌ات را برای بقیه بچه‌های جاوااسکریپت هم بفرست؛ همین مثال‌های کوچک کم‌کم تبدیل به component و pattern های جدی‌تر می‌شوند.\n\n🔖 #Javascript #JS #جاوااسکریپت #JavaScript #LocalStorage #DOM #VanillaJS #Frontend\n\n👤 Developix\n\n💎 Channel: @DevelopixJavascript","datePublished":"2026-07-14T17:00:27Z","dateModified":"2026-07-14T17:00:27Z","author":{"@type":"Organization","name":"| کانال توسعه‌دهندگان جاوااسکریپت |","url":"https://telemetr.io/ch/channels/1942875334-developixjavascript","image":"https://img.telemetr.io/c/27u6CW/5823301833593045169?ty=x"},"publisher":{"@type":"Organization","name":"| کانال توسعه‌دهندگان جاوااسکریپت |","url":"https://telemetr.io/ch/channels/1942875334-developixjavascript","image":"https://img.telemetr.io/c/27u6CW/5823301833593045169?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1512},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":8},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":22}]}}]}
频道帖子
🔥 پروژه: اتصال پیام‌رسان‌ها به DeepSeek Harness برای وصل‌کردن بات‌های پیام‌رسان به DeepSeek Harness، پروژهٔ dsh-im مسیر اتصا
🔥 پروژه: اتصال پیام‌رسان‌ها به DeepSeek Harness برای وصل‌کردن بات‌های پیام‌رسان به DeepSeek Harness، پروژهٔ dsh-im مسیر اتصال با اسکن QR یا اطلاعات احراز هویت بات را فراهم می‌کند. پشتیبانی از ۹ پیام‌رسان، از جمله Telegram، Discord، Slack و WhatsApp، آن را برای توسعه‌دهنده‌های جاوااسکریپت که روی بات‌ها و یکپارچه‌سازی سرویس‌ها کار می‌کنند، به گزینه‌ای مرتبط برای بررسی تبدیل می‌کند. برای آشنایی با روش اتصال هر پیام‌رسان، مخزن پروژه را ببینید؛ نقطهٔ شروع خوبی برای بررسی این یکپارچه‌سازی است. ⭐️ 441 stars this week 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #DeepSeek 💎 @DevelopixJavascript

2
🎊 پکیج‌های پرطرفدار UltraGPT 🎁با پکیج‌های ۶۰ روزه‌ UltraGPT به ۳۳ مدل هوش مصنوعی از طریق API دسترسی داشته باشید و در بسته‌ه
🎊 پکیج‌های پرطرفدار UltraGPT 🎁با پکیج‌های ۶۰ روزه‌ UltraGPT به ۳۳ مدل هوش مصنوعی از طریق API دسترسی داشته باشید و در بسته‌های مشمول، دو برابر اعتبار بیشتر دریافت کنید! ✨ امکانات: ✅ استفاده از مدل‌ها در Claude Code، Codex و نرم‌افزارهای محبوب دیگر ✅ امکان دریافت بونس با همراهی و استفاده از سرویس ✅ امکان تست رایگان پیش از خرید ⌛ نمونه‌ای از مدل‌های موجود: 🤖 Fable 5.1 claude-opus-5.5 claude-sonnet-5.5 🤖 gemini-3.8-flash 🤖 gpt-6.1-sol gpt-6-astra 🤖 grok-4.7 و مدل‌های دیگر…  🎁 برای تست سرویس و دریافت API رایگان ۲ دلاری، به پشتیبانی پیام دهید.( امکان تست تمام نسخه ها) ⚙️ مشاهده‌ی جزئیات و پکیج‌ها ا🔤 پشتیبانی و فروش: @UltraGPT_SU ⏺الترا جی پی تی فارسی را دنبال کنید : @UltraGPTiran
311
3
🚦 درخواست‌های موازی، بدون هجوم به سرور وقتی برای ده‌ها آدرس از Promise.all استفاده می‌کنی، شروع هم‌زمان همهٔ درخواست‌ها می‌تواند به سرویس مقصد فشار بیاورد. کتابخانهٔ p-limit تعداد کارهای هم‌زمان را محدود می‌کند؛ بدون اینکه مجبور شوی همه را پشت‌سرهم اجرا کنی. 📦 نصب و نمونه در پروژهٔ دارای ES Modules: // npm install p-limit import pLimit from 'p-limit'; const limit = pLimit(3); const urls = ['/api/users', '/api/posts', '/api/tags']; const data = await Promise.all( urls.map(url => limit(async () => { const res = await fetch(url); if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); })) ); ⚡ حداکثر سه کار هم‌زمان اجرا می‌شوند. تعداد کارهای فعال و منتظر هم قابل مشاهده است. 💡 این ابزار محدودکنندهٔ «درخواست در ثانیه» نیست؛ فقط هم‌زمانی را کنترل می‌کند. مستندات و کد رسمی 🌱 در کارهای دسته‌ای بعدی امتحانش کن؛ از یک سقف کوچک شروع کن. 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Concurrency #p_limit 👤 Developix 💎 Channel: @DevelopixJavascript
608
4
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.10.0 به 26.11.1 🔹 لیست تغییرات این نسخه: - افزودن
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.10.0 به 26.11.1 🔹 لیست تغییرات این نسخه: - افزودن اعتبارسنجی نام و مقدار هدرهای HTTP - پایدار شدن process.ref و process.unref - افزودن محدودیت زمانی اجرای پردازش - ارتقای پشتیبانی Alpine Linux به سطح دوم - افزودن محاسبه طول رشته با Buffer.stringLength - رفع مشکل دسترسی به مستندات و موارد دیگر 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
695
5
🔥 پروژه: مدیریت خودکار یوتیوب با عامل‌های AI برای خودکارسازی کارهای یک کانال یوتیوب، این پروژه از عامل‌های AI استفاده می‌کند
🔥 پروژه: مدیریت خودکار یوتیوب با عامل‌های AI برای خودکارسازی کارهای یک کانال یوتیوب، این پروژه از عامل‌های AI استفاده می‌کند؛ ساخت، بهینه‌سازی و انتشار ویدیو را به‌صورت شبانه‌روزی انجام می‌دهد. با API رایگان Gemini یا OpenAI کار می‌کند و برای استفاده از آن نیازی به کدنویسی نیست. برای توسعه‌دهندگان جاوااسکریپتِ علاقه‌مند به اتوماسیون، نمونه‌ای کاربردی از کنار هم قرار گرفتن عامل‌های AI در یک فرایند تولید محتواست. برای آشنایی با مسیر راه‌اندازی، مخزن پروژه را ببینید 🎬 ⭐️ 275 stars this week 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #YouTube 💎 @DevelopixJavascript
828
6
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.9.0 به 26.10.0 🔹 لیست تغییرات این نسخه: - افزودن
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.9.0 به 26.10.0 🔹 لیست تغییرات این نسخه: - افزودن تابع جدید crypto.parsePKCS12 برای پردازش PKCS12 - قابلیت بارگذاری کتابخانه‌ها از VFS در ffi - اضافه شدن متد fs.openAsBlobSync برای کار با فایل به صورت Blob - امکان ارسال net.BoundSocket به Thread و فرایند فرزند - افزودن SlidingWindowHistogram و تحلیل qrde در perf_hooks - بهبودهای متعدد دیگر در util، sqlite و غیره 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
974
7
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.8.2 به 26.9.0 🔹 لیست تغییرات این نسخه: - افزودن A
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.8.2 به 26.9.0 🔹 لیست تغییرات این نسخه: - افزودن API عمومی برای MAC در ماژول crypto - کشف خودکار cipherها از OpenSSL providerها در crypto - کشف خودکار hashها از OpenSSL providerها در crypto - فعال شدن پیش‌فرض ماژول FFI برای اتصال به کتابخانه‌های بومی - معرفی node:bench و بهبودهای perf_hooks برای بنچمارک - پشتیبانی Web Workers و API آزمایشی DTLS و تغییرات دیگر 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
902
8
وقتی با تاریخ سروکار داری، این که چطور استرینگ رو تبدیل به Date کنی خیلی مهمه. تو نسخهٔ اول، مستقیم از new Date() با یه استری+1
وقتی با تاریخ سروکار داری، این که چطور استرینگ رو تبدیل به Date کنی خیلی مهمه. تو نسخهٔ اول، مستقیم از new Date() با یه استرینگ مبهم استفاده شده؛ این کار بسته‌به محیط و تایم‌زون می‌تونه خروجی متفاوت بده، حتی ممکنه رو بعضی سیستم‌ها Invalid Date برگردونه. تو نسخهٔ دوم، با کمک یه پارسر قابل‌اعتماد (مثل کتابخونه‌های معروف تاریخ) فرمت استرینگ رو صریح مشخص کردیم؛ هم نتیجه پایدارتره، هم باگ‌های خفنِ Production کمتر می‌گیری. اگه با تاریخ و زمان کار می‌کنی، روش دوم رو جایگزین روش اول کن تا رفتارت تو همهٔ محیط‌ها قابل پیش‌بینی باشه و بعداً درگیر باگ‌های مرموز نشی. 🔖 #Javascript #JS #جاوااسکریپت 👤 Developix 💎 Channel: @DevelopixJavascript
947
9
🔥 پروژه: ‎دانلودر TikTok و Douyin ابزار متن‌باز TikTokDownloader برای دانلود و جمع‌آوری داده از ویدئوهای TikTok و نسخه چینی
🔥 پروژه: ‎دانلودر TikTok و Douyin ابزار متن‌باز TikTokDownloader برای دانلود و جمع‌آوری داده از ویدئوهای TikTok و نسخه چینی آن Douyin طراحی شده 🛰️ به‌درد جاوااسکریپتی‌ها برای ساخت کرالرهای شخصی، داشبوردهای آنالیتیکس، تست الگوریتم‌های پیشنهاد محتوا و بازی با متادیتای ویدئوها می‌خورد. سورس تمیز و قابل‌مطالعه است و ایده‌های خوبی برای مهندسی معکوس APIهای پلتفرم می‌دهد. نگاهی بهش انداختن ارزش دارد 👇 لینک گیت‌هاب ⭐️ 154 stars this week 🔖 #Javascript #JS #جاوااسکریپت #جاوااسکریپت #پروژه_متن‌باز 💎 @DevelopixJavascript
828
10
بررسی نوع داده Symbol در جاوا اسکریپت در این مطلب به معرفی نوع داده Primitive و یکتای Symbol، تفاوت آن با سایر انواع داده، نح
بررسی نوع داده Symbol در جاوا اسکریپت در این مطلب به معرفی نوع داده Primitive و یکتای Symbol، تفاوت آن با سایر انواع داده، نحوه استفاده از Global Symbol Registry با متدهای Symbol.for و Symbol.keyFor و همچنین کاربرد Symbol در کپسوله‌سازی و تعریف کلیدهای اختصاصی در اشیا پرداخته شده است. برای مشاهده کامل این آموزش می‌توانید به لینک زیر مراجعه کنید: [https://gnutec.net/javascript-symbol/] 🔖 #Javascript #JS #جاوااسکریپت 👤 ابوالفضل 💎 Channel: @DevelopixJavascript
929
11
یکی از ساده‌ترین تکنیک‌های Refactoring برای تمیزتر شدن کد جاوااسکریپت، استفاده از الگوی Early Return است ✨ در این الگو به‌جای اینکه یک تابع را با if تو در تو و بلاک‌های بزرگ بپیچیم، شرط‌های نامعتبر را زودتر برمی‌گردانیم و مسیر «عادی» تابع را خوانا و سرراست نگه می‌کنیم. نمونه کد شلوغ بدون Early Return 👇 function createOrder(user, items) { if (user) { if (user.isActive) { if (Array.isArray(items) && items.length > 0) { const total = items.reduce((sum, it) => sum + it.price, 0); if (total > 0) { return { userId: user.id, total, status: "CREATED" }; } else { throw new Error("Total must be positive"); } } else { throw new Error("Items required"); } } else { throw new Error("User not active"); } } else { throw new Error("User required"); } } خواندن این تابع سخت است؛ منطق اصلی بین ifهای تودرتو گم شده. همان منطق با Early Return 🧼 function createOrder(user, items) { if (!user) { throw new Error("User required"); } if (!user.isActive) { throw new Error("User not active"); } if (!Array.isArray(items) || items.length === 0) { throw new Error("Items required"); } const total = items.reduce((sum, it) => sum + it.price, 0); if (total <= 0) { throw new Error("Total must be positive"); } return { userId: user.id, total, status: "CREATED" }; } حالا: • تمام شرط‌های نامعتبر بالا جمع شده‌اند و سریع تابع را ترک می‌کنند ✅ • «مسیر خوشحال» وسط تابع مثل یک داستان خطی و قابل‌خواندن است ✅ • دیباگ و لاگ‌گرفتن ساده‌تر شده است ✅ نکته کاربردی در پروژه‌های React / Node.js در هندلرهای API و کنترلرهای Express هم همین الگو کمک زیادی می‌کند تا از callback hell جدید یعنی if hell فرار شود: export const handler = async (req, res) => { const { user } = req; if (!user) { return res.status(401).json({ message: "Unauthorized" }); } if (!user.isActive) { return res.status(403).json({ message: "Inactive user" }); } const data = await loadDashboardData(user.id); return res.json(data); }; در مستندات MDN درباره return و جریان کنترل توضیحات بیشتری آمده که مطالعه‌اش دید خوبی می‌دهد. هرجا تابعی دیدۀ می‌شود که تو در تو و سخت‌خوان است، یک بار با Early Return بازنویسی‌اش، هم برای خودتان هم برای تیم، خوانایی کد را چند درجه بالا می‌برد 🚀 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Refactoring #Early_Return #Node_js #Express #Readability 👤 Developix 💎 Channel: @DevelopixJavascript
1 008
12
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.7.0 به 26.8.1 🔹 لیست تغییرات این نسخه: - رفع مشکل
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.7.0 به 26.8.1 🔹 لیست تغییرات این نسخه: - رفع مشکل نمایش اشتباه نسخه در خروجی node --version 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
899
13
💠 نسخه جدید سوپرست تایپ‌اسکریپت (Typescript) منتشر شده است 🔸 ارتقا از نسخه 6.0.3 به 7.0.2 🔹 لیست تغییرات این نسخه: 🔖 #typ
💠 نسخه جدید سوپرست تایپ‌اسکریپت (Typescript) منتشر شده است 🔸 ارتقا از نسخه 6.0.3 به 7.0.2 🔹 لیست تغییرات این نسخه: 🔖 #typescript, #web, #js, #react, #vue, #release 💎 @DevelopixJavascript
1 136
14
اصل مهمی در Clean Code این است که هر تابع فقط یک وظیفهٔ واضح داشته باشد ✨ وقتی یک تابع چند کار مختلف انجام می‌دهد: - تست‌نویسی سخت می‌شود - احتمال باگ بالا می‌رود - خواندن و تغییر کد زمان‌بر می‌شود به این ایده در Design Principleها می‌گویند: Single Responsibility Principle (SRP). نمونهٔ یک تابع شلوغ در Node.js 👇 const registerUser = async (req, res) => { const { email, password } = req.body; // validate if (!email || !password || password.length < 8) { return res.status(400).json({ message: 'Invalid data' }); } // check duplicate const existing = await User.findOne({ email }); if (existing) { return res.status(409).json({ message: 'Email exists' }); } // hash password const bcrypt = await import('bcrypt'); const hashed = await bcrypt.hash(password, 10); // save user const user = await User.create({ email, password: hashed }); // send welcome email await sendWelcomeEmail(email); return res.status(201).json({ id: user.id, email: user.email }); }; این تابع هم اعتبارسنجی می‌کند، هم دیتابیس می‌زند، هم ایمیل می‌فرستد؛ یعنی چند مسئولیت در یک جا. حالا همان منطق را با توابع کوچک‌تر تمیزتر می‌کنیم 🧼 const validateRegisterInput = ({ email, password }) => { if (!email || !password) return 'Email and password are required'; if (password.length < 8) return 'Password too short'; return null; }; const ensureEmailUnique = async (email) => { const existing = await User.findOne({ email }); if (existing) throw new Error('EMAIL_TAKEN'); }; const createUser = async ({ email, password }) => { const bcrypt = await import('bcrypt'); const hashed = await bcrypt.hash(password, 10); return User.create({ email, password: hashed }); }; const registerUser = async (req, res) => { const { email, password } = req.body; const error = validateRegisterInput({ email, password }); if (error) return res.status(400).json({ message: error }); try { await ensureEmailUnique(email); const user = await createUser({ email, password }); await sendWelcomeEmail(email); return res.status(201).json({ id: user.id, email: user.email }); } catch (err) { if (err.message === 'EMAIL_TAKEN') { return res.status(409).json({ message: 'Email exists' }); } return res.status(500).json({ message: 'Server error' }); } }; حالا: - تست کردن validateRegisterInput و createUser مستقل و ساده است ✅ - تغییر قانون پسورد، فقط در یک تابع انجام می‌شود ✅ - خطاها واضح‌تر و قابل مدیریت‌تر هستند ✅ برای کدهای React، Express، Next.js و هر محیط JavaScript/TypeScript دیگر همین ایده جواب می‌دهد: توابع کوچک، با نام خوب و یک کار مشخص. برای مطالعهٔ بیشتر می‌توان از Refactoring.Guru و MDN کمک گرفت. قدم‌های کوچک refactor کردن همین امروز روی یکی از فانکشن‌های شلوغ پروژه، بعد از چند هفته تاثیر زیادی در خوانایی و کیفیت کد می‌گذارد 🚀 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Node_js #Refactoring #SRP 👤 Developix 💎 Channel: @DevelopixJavascript
1 183
15
🔥 پروژه: ‏DrawDB؛ طراحی بصری دیتابیس آنلاین ویرایشگر تحت‌وب DrawDB یک ابزار رایگان برای طراحی نمودار دیتابیس و تولید خودکار
🔥 پروژه: ‏DrawDB؛ طراحی بصری دیتابیس آنلاین ویرایشگر تحت‌وب DrawDB یک ابزار رایگان برای طراحی نمودار دیتابیس و تولید خودکار SQL است 🧩 برای وقتی عالی است که قبل از نوشتن کد، اسکیمای دیتابیس پروژه جاوااسکریپتی‌تان (مثلاً با ORMهایی مثل Prisma یا TypeORM) را می‌خواهید شفاف و تمیز طراحی کنید. رابط کاربری خیلی ساده است: جدول می‌سازی، ستون و رابطه می‌کشی و درنهایت اسکریپت SQL ساخت جداول را تحویل می‌گیری. برای دیدن پروژه و دمو، سر بزن به: سورس DrawDB روی گیت‌هاب ⭐️ 665 stars this week 🔖 #Javascript #JS #جاوااسکریپت #جاوااسکریپت #طراحی_دیتابیس 💎 @DevelopixJavascript
990
16
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.6.0 به 26.7.0 🔹 لیست تغییرات این نسخه: - پشتیبانی
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.6.0 به 26.7.0 🔹 لیست تغییرات این نسخه: - پشتیبانی از بارگذاری کلید خصوصی با STORE loaderها در crypto - به‌روزرسانی ریشه‌گواهی‌ها به NSS 3.125 در crypto - افزودن پشتیبانی Perfetto برای پروفایلینگ کارایی - پیاده‌سازی Symbol.dispose در ModuleHooks ماژول‌ها - افزودن فلگ --test-coverage-include-all به test_runner - به‌روزرسانی npm به نسخه 11.19.0 و سایر وابستگی‌ها و غیره 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
1 252
17
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.5.1 به 26.6.0 🔹 لیست تغییرات این نسخه: - افزودن ت
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.5.1 به 26.6.0 🔹 لیست تغییرات این نسخه: - افزودن تابع جدید ffi.getCurrentEventLoop - افزودن context.log() و رویداد test:log در test_runner - گزارش فیلد entryFile در رویدادهای TestStream - بهبودهای کارایی رویدادها و once()/removeListener() - قابلیت انتقال TCP Server و Socket بین worker threads - به‌روزرسانی وابستگی‌ها (npm 11.18.0، V8، OpenSSL، zlib و غیره) 🔖 #nodejs, #web, #js, #release 💎 @DevelopixJavascript
1 213
18
در کد زیر یک اشتباه رایج در استفاده از async/await داخل حلقه دیده می‌شود که باعث اجرای سریالی درخواست‌ها و کند شدن شدید برنام+1
در کد زیر یک اشتباه رایج در استفاده از async/await داخل حلقه دیده می‌شود که باعث اجرای سریالی درخواست‌ها و کند شدن شدید برنامه در مواجهه با تعداد آیتم‌های زیاد می‌شود. در نسخه‌ی اصلاح‌شده با استفاده از Promise.all و تبدیل حلقه به مجموعه‌ای از Promiseها، همه‌ی درخواست‌ها به صورت موازی اجرا می‌شوند و در سناریوهایی مثل فراخوانی چندین API مستقل، زمان پاسخ برنامه به شکل چشم‌گیری کاهش پیدا می‌کند. به نمونه‌کد بالا دقت کنید: در چه شرایطی استفاده از Promise.all به جای await داخل حلقه می‌تواند بهترین انتخاب برای بهبود Performance و کاهش زمان اجرای کل عملیات باشد؟ 🔖 #Javascript #JS #جاوااسکریپت 👤 Developix 💎 Channel: @DevelopixJavascript
1 423
19
با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀 با خرید اولین سرور ابری غیرساعتی از **هاس
با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀 با خرید اولین سرور ابری غیرساعتی از **هاست‌ایران**، بسته ترافیک هدیه مهاجرت به‌صورت خودکار برای سرویس شما فعال می‌شود: ✅ حداقل ۱۰۰ گیگابایت ترافیک هدیه مهاجرت ✅ افزایش حجم هدیه متناسب با ظرفیت دیسک اولیه ✅ ترافیک آپلود رایگان ✅ بدون محدودیت زمانی سرور ابری هاست‌ایران را راه‌اندازی کنید و بکاپ‌ها، فایل‌ها و پایگاه داده خود را بدون دغدغه هزینه‌های پنهان ترافیک منتقل کنید. 👇 مشاهده پلن‌های سرور ابری هاست‌ایران hostiran.club/Migration hostiran.club/Migration
1 487
20
ساخت TODO List یکی از بهترین تمرین‌های واقعی برای جا افتادن مفاهیم DOM، event ها و ذخیره داده‌ها در مرورگر است. این بار بدون React و فریم‌ورک، فقط با Vanilla JS و LocalStorage 💪 منبع اصلی ایده و توضیحات: آموزش MDN درباره Web Storage API و مستندات DOM Manipulation. ایده کلی 👇 یک فرم ساده داریم برای اضافه‌کردن task ها، لیست را با JS توی DOM رندر می‌کنیم و هر تغییری که کاربر می‌دهد را در localStorage ذخیره می‌کنیم تا بعد از refresh هم از بین نرود. نکته خوبش این است که با همین مثال ساده، چند تا چیز مهم جا می‌افتد: • کار با querySelector و ساخت element های جدید • مدیریت event ها مثل submit و click • تبدیل array به string و برعکس با JSON.stringify و JSON.parse • sync نگه‌داشتن UI با state ذخیره‌شده در localStorage یک اسکلت ساده از کد 👇 <!-- index.html --> <form id="todo-form"> <input id="todo-input" placeholder="کار جدید..." /> <button type="submit">اضافه کن</button> </form> <ul id="todo-list"></ul> <script src="app.js"></script> و فایل جاوااسکریپت: // app.js const form = document.querySelector("#todo-form"); const input = document.querySelector("#todo-input"); const list = document.querySelector("#todo-list"); const STORAGE_KEY = "jsdev_todos"; let todos = loadTodos(); render(); form.addEventListener("submit", (e) => { e.preventDefault(); const text = input.value.trim(); if (!text) return; todos.push({ id: Date.now(), text }); input.value = ""; saveTodos(); render(); }); list.addEventListener("click", (e) => { if (!e.target.matches("button[data-id]")) return; const id = Number(e.target.dataset.id); todos = todos.filter((t) => t.id !== id); saveTodos(); render(); }); function loadTodos() { const raw = localStorage.getItem(STORAGE_KEY); try { return raw ? JSON.parse(raw) : []; } catch { return []; } } function saveTodos() { localStorage.setItem(STORAGE_KEY, JSON.stringify(todos)); } function render() { list.innerHTML = ""; todos.forEach((todo) => { const li = document.createElement("li"); li.textContent = todo.text + " "; const btn = document.createElement("button"); btn.textContent = "حذف"; btn.dataset.id = todo.id; li.appendChild(btn); list.appendChild(li); }); } چند نکته ریز ولی مهم 🧠 • همیشه روی داده localStorage یک try...catch بگذار که اگر خراب شد (مثلاً دستی ویرایش شده بود) اپ کرش نکند. • از یک key ثابت مثل jsdev_todos استفاده کن تا اگر بعداً چند بخش دیگر هم اضافه شد، تداخل نداشته باشند. • برای id ها اینجا از Date.now() استفاده شده، که برای پروژه‌های کوچک کافی است. با همین ساختار پایه می‌شود بعدها checkbox برای completed، فیلتر، و حتی sync ساده با backend هم اضافه کرد. یک بار این نمونه را تا انتها بساز، بعد هر جای اپ‌های واقعی که state و UI sync می‌شوند خیلی قابل فهم‌تر به نظر می‌رسد ⚡️ اگر ساختی و کمی شخصی‌سازی‌اش کردی، نسخه‌ات را برای بقیه بچه‌های جاوااسکریپت هم بفرست؛ همین مثال‌های کوچک کم‌کم تبدیل به component و pattern های جدی‌تر می‌شوند. 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #LocalStorage #DOM #VanillaJS #Frontend 👤 Developix 💎 Channel: @DevelopixJavascript
1 512