با ماژول 'util' بیشتر آشنا بشید! 🦦
ماژول «util» در Node.js مجموعه ای از فانکشن های مختلف رو به عنوان ابزارهای مفیدی برای دیباگ، inspecting objects و کار با انواع data types جاوا اسکریپت ارائه میده. اگرچه به اندازه برخی از ماژولهای اصلی دیگه مثل «fs» یا «http» شناخته شده نیست، اما «util» برای کارهای خاصی ضروری هست.
این ماژول چه کاربردی داره؟
1⃣ یکی از توابع اولیه ارائه شده «util.format()» هست که راهی رو برای قالب بندی استرینگ ها مشابه «printf» در C ارائه میده. این فانکشن به شما اجازه میده تا متغیرها رو با استفاده از %s برای رشتهها، «%d» برای اعداد و «%j» برای JSON، لاگ بگیرید.
2⃣ یکی دیگه از تابع های رایج این ماژول، "util.inspect()" هست که برای دیباگ کردن بسیار ارزشمنده، و این امکان رو به شما میده تا آبجکت ها، آرایه ها، و دیگر ساختارهای داده رو بررسی کنید و نمای دقیق و قابل تنظیمی از خصوصیات و محتویات اون ها، ارائه میده.
3⃣ فانکشن 'util.promisify()' یکی دیگه از ویژگی های قدرتمند هست که امکان تبدیل توابع مبتنی بر callback-based رو به Promise-based، فراهم میکنه.
به صورت کلی ماژول «util» در Node.js کمی کم کاربرد به نظر میرسه، اما ممکنه در برخی قسمت های پروژه فانکشن هاش به کارمون بیاد. برای کسب اطلاعات بیشتر به داکیومنت این ماژول مراجعه کنید.
#nodejs
@CodeModule
ماژول «util» در Node.js مجموعه ای از فانکشن های مختلف رو به عنوان ابزارهای مفیدی برای دیباگ، inspecting objects و کار با انواع data types جاوا اسکریپت ارائه میده. اگرچه به اندازه برخی از ماژولهای اصلی دیگه مثل «fs» یا «http» شناخته شده نیست، اما «util» برای کارهای خاصی ضروری هست.
این ماژول چه کاربردی داره؟
به صورت کلی ماژول «util» در Node.js کمی کم کاربرد به نظر میرسه، اما ممکنه در برخی قسمت های پروژه فانکشن هاش به کارمون بیاد. برای کسب اطلاعات بیشتر به داکیومنت این ماژول مراجعه کنید.
#nodejs
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡11🔥2
با هونو بیشتر آشنا بشید! 🦦
Hono یک فریمورک مینیمالیست برای Node.js هست که بر عملکرد و سادگی تأکید داره. از فریمورک هایی مانند Express و Koa الهام گرفته شده اما به گونه ای طراحی شده که حتی سبک تر و سریع تر باشه. هدف Hono ارائه یک روش کارآمد برای ایجاد برنامه های کاربردی وب و API، بدون هزینه اضافی و غیر ضروری هست.
هونو چه کاربردی داره؟
Hono برای دولوپر هایی ایده آل هست که به دنبال یک فریمورک ساده و با کارایی بالا، برای ساخت برنامه های سمت سرور هستن. این یک API مختصر ارائه میده که شروع رو آسون میکنه و در عین حال انعطاف پذیری مورد نیاز برای برنامه های پیچیده تر رو فراهم میکنه. Hono در سناریوهایی که سرعت و مینیمالیسم بسیار مهم هستن، مثل میکروسرویس ها و API gateways میدرخشه.
اما Hono چه ویژگی هایی داره؟
- API مینیمالیست : Hono یک API مینیمالیست ارائه میده که دولوپر رو قادر میسازه، تا به سرعت route ها رو ایجاد و ریکویست/ریسپانس ها رو رسیدگی و ارسال کنه.
- پشتیبانی از میدلور ها: Hono از میدلور ها پشتیبانی میکنه و به دولوپر ها این امکان رو میده تا عملکرد فریمورک رو به راحتی گسترش بدن.
- پشتیبانی از تایپ اسکریپت: Hono پشتیبانی کامل از تایپ اسکریپت رو ارائه میده که type safety و تجربه بهتر توسعه دهنده رو ممکن میسازه.
Hono یک فریمورک وب قدرتمند و در عین حال مینیمالیسته، که انتخابی مناسب برای دولوپرایی هست که به دنبال سرعت و سادگی هستن. برای کسب اطلاعات بیشتر به داکیومنت این فریمورک مراجعه کنید.
#nodejs #hono
@CodeModule
Hono یک فریمورک مینیمالیست برای Node.js هست که بر عملکرد و سادگی تأکید داره. از فریمورک هایی مانند Express و Koa الهام گرفته شده اما به گونه ای طراحی شده که حتی سبک تر و سریع تر باشه. هدف Hono ارائه یک روش کارآمد برای ایجاد برنامه های کاربردی وب و API، بدون هزینه اضافی و غیر ضروری هست.
هونو چه کاربردی داره؟
Hono برای دولوپر هایی ایده آل هست که به دنبال یک فریمورک ساده و با کارایی بالا، برای ساخت برنامه های سمت سرور هستن. این یک API مختصر ارائه میده که شروع رو آسون میکنه و در عین حال انعطاف پذیری مورد نیاز برای برنامه های پیچیده تر رو فراهم میکنه. Hono در سناریوهایی که سرعت و مینیمالیسم بسیار مهم هستن، مثل میکروسرویس ها و API gateways میدرخشه.
اما Hono چه ویژگی هایی داره؟
- API مینیمالیست : Hono یک API مینیمالیست ارائه میده که دولوپر رو قادر میسازه، تا به سرعت route ها رو ایجاد و ریکویست/ریسپانس ها رو رسیدگی و ارسال کنه.
- پشتیبانی از میدلور ها: Hono از میدلور ها پشتیبانی میکنه و به دولوپر ها این امکان رو میده تا عملکرد فریمورک رو به راحتی گسترش بدن.
- پشتیبانی از تایپ اسکریپت: Hono پشتیبانی کامل از تایپ اسکریپت رو ارائه میده که type safety و تجربه بهتر توسعه دهنده رو ممکن میسازه.
Hono یک فریمورک وب قدرتمند و در عین حال مینیمالیسته، که انتخابی مناسب برای دولوپرایی هست که به دنبال سرعت و سادگی هستن. برای کسب اطلاعات بیشتر به داکیومنت این فریمورک مراجعه کنید.
#nodejs #hono
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡9🔥4
با ماژول crypto بیشتر آشنا بشید! 💀
ماژول crypto یک فریمورک داخلیه که انواع عملکردهای رمزنگاری ضروری رو برای ایمن سازی داده ها، از جمله هش، رمزگذاری، و رمزگشایی، و همچنین مدیریت signatures و certificates ارائه میده.
دقیق تر این ماژول چه کاربردی داره؟
ماژول «کریپتو» عمدتاً برای پیادهسازی ویژگیهای امنیتی در برنامههای Node.js استفاده میشه. برای مثال:
1⃣ Hashing: هش کردن فانکشن، یک طرفه هست و داده ها رو به رشته ای با اندازه ثابت از کاراکترها تبدیل میکنه که معمولاً برای ذخیره رمزهای عبور ایمن استفاده میشه. ماژول «crypto» متد هایی مثل «createHash» برای تولید هش با استفاده از الگوریتمهای مختلف ارائه میکنه.
2⃣ رمزگذاری و رمزگشایی: برای ایمن نگه داشتن داده های حساس، ماژول crypto به شما امکان میده داده ها رو رمزگذاری کنید و بعداً با استفاده از همان کلید یا کلید دیگری رمزگشایی کنید. این برای انتقال ایمن داده ها در سراسر شبکه مفیده.
3⃣ امضای دیجیتال: این ماژول همچنین از ایجاد و تأیید signatures پشتیبانی میکنه و از صحت داده ها، اطمینان میده. این به ویژه در سناریوهایی که نیاز به ارتباط امن یا توزیع نرم افزار دارن مفیده.
4⃣ تولید کلید: تولید ایمن کلیدهای رمزنگاری یک جنبه حیاتی رمزنگاری هست و ماژول crypto، عملکردهایی رو برای ایجاد کلیدهای تصادفی برای رمزگذاری، و سایر فرآیندهای رمزنگاری ارائه میده.
به صورت کلی ماژول «crypto» در Node.js یک ابزار قدرتمند برای دولوپرا هست، تا بتونن ویژگی های امنیتی رو در برنامه های خودشون پیاده سازی کنن. برای کسب اطلاعات بیشتر به داکیومنت ماژول مراجعه کنید.
#nodejs #crypto
@CodeModule
ماژول crypto یک فریمورک داخلیه که انواع عملکردهای رمزنگاری ضروری رو برای ایمن سازی داده ها، از جمله هش، رمزگذاری، و رمزگشایی، و همچنین مدیریت signatures و certificates ارائه میده.
دقیق تر این ماژول چه کاربردی داره؟
ماژول «کریپتو» عمدتاً برای پیادهسازی ویژگیهای امنیتی در برنامههای Node.js استفاده میشه. برای مثال:
به صورت کلی ماژول «crypto» در Node.js یک ابزار قدرتمند برای دولوپرا هست، تا بتونن ویژگی های امنیتی رو در برنامه های خودشون پیاده سازی کنن. برای کسب اطلاعات بیشتر به داکیومنت ماژول مراجعه کنید.
#nodejs #crypto
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👌3
با ماژول DNS آشنا بشید!🦫
در حوزه برنامه نویسی شبکه، domain name resolution یک وظیفه اساسی هست. ماژول DNS (سیستم نام دامنه) در Node.js یک راه قوی و ساده برای تعامل با DNS ارائه میده و به دولوپر ها این امکان رو میده، تا عملیات مختلف مربوط به نام دامنه و آدرس های IP رو انجام بدن.
از این ماژول چه استفاده ای میشه؟
1️⃣ حل نام دامنه: میتونید از متد هایی مثل «dns.lookup()» و «dns.resolve()» برای تبدیل نام دامنه به آدرس IP و بالعکس استفاده کنین. این به ویژه برای برنامههایی که نیاز به اتصال به سرورها یا سرویسهای شناسایی شده با نام دامنه دارن، مفیده.
2️⃣ پرسش سوابق DNS: این ماژول به شما امکان میده انواع مختلف رکوردهای DNS مثل رکوردهای A، رکوردهای AAAA، رکوردهای MX و غیره رو بازیابی کنید. به عنوان مثال،
3️⃣ معکوس جستجوهای DNS: با
4️⃣ رسیدگی به خطاهای DNS : این ماژول دارای مکانیزم هایی برای رسیدگی به خطاهای DNS نیز هست. به عنوان مثال، هنگامی که یک query DNS با شکست مواجه میشه، ماژول اطلاعات خطای مفصلی رو ارائه میده که میتونه برای تشخیص و رسیدگی موثر به مسائل استفاده بشه.
به صورت کلی ماژول DNS در Node.js، یک ابزار ضروری برای دولوپر هایی هست که با برنامه های شبکه ای کار میکنن و به وضوح به نام دامنه و قابلیت های جستجوی DNS نیاز دارن. برای کسب اطلاعات بیشتر به داکیومنت ماژول مراجعه کنید.
#nodejs
@CodeModule
در حوزه برنامه نویسی شبکه، domain name resolution یک وظیفه اساسی هست. ماژول DNS (سیستم نام دامنه) در Node.js یک راه قوی و ساده برای تعامل با DNS ارائه میده و به دولوپر ها این امکان رو میده، تا عملیات مختلف مربوط به نام دامنه و آدرس های IP رو انجام بدن.
از این ماژول چه استفاده ای میشه؟
dns.resolveMx()
سرورهای تبادل رو برای یک دامنه بازیابی میکنن، در حالی که dns.resolveSrv()
اطلاعاتی در مورد سوابق سرویس ارائه میده.dns.reverse()
، میتونید جستجوهای معکوس DNS رو برای یافتن نام دامنه مرتبط با یک آدرس IP معین انجام بدید. این برای برنامه هایی که نیاز به تأیید یا ثبت منبع درخواست های دریافتی دارن، مفیده.به صورت کلی ماژول DNS در Node.js، یک ابزار ضروری برای دولوپر هایی هست که با برنامه های شبکه ای کار میکنن و به وضوح به نام دامنه و قابلیت های جستجوی DNS نیاز دارن. برای کسب اطلاعات بیشتر به داکیومنت ماژول مراجعه کنید.
#nodejs
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡9🔥2
ارتباط امن با ماژول TLS 🪼
Transport Layer Security (TLS) پروتکلی هست که حریم خصوصی و یکپارچگی داده ها رو بین دو برنامه در حال ارتباط فراهم میکنه. در Node.js، ماژول "tls" یک ماژول داخلی هست که به دولوپر ها اجازه میده تا ارتباطات شبکه ایمن رو از طریق TCP (Transmission Control Protocol) با استفاده از TLS و SSL پیاده سازی کنن.
از این ماژول چه استفاده ای میشه؟
ماژول "tls" در درجه اول برای ایجاد سرورها و کلاینت های ایمن استفاده میشه که از طریق کانال های رمزگذاری شده ارتباط برقرار میکنن. این تضمین میکنه که هرگونه داده رد و بدل شده در برابر دستکاری محافظت میشه.
1⃣ ایجاد سرور TLS: متد «tls.createServer()» به شما امکان میده یک سرور امن ایجاد کنید که به اتصالات ورودی گوش میده. شما باید یک آبجکت حاوی certificates ها و کلیدهای مورد نیاز برای رمزگذاری ارائه کنید.
2⃣ ایجاد یک کلاینت سرور: به طور مشابه، متد «tls.connect()» به شما امکان میده کلاینت ایجاد کنید که به طور ایمن به یک سرور TLS متصل بشه و میتونید، گزینه هایی مانند نام، هاست و پورت رو مشخص کنیم.
3⃣ ویژگی های اضافی: ماژول
به صورت کلی ماژول
#nodejs #tls
@CodeModule
Transport Layer Security (TLS) پروتکلی هست که حریم خصوصی و یکپارچگی داده ها رو بین دو برنامه در حال ارتباط فراهم میکنه. در Node.js، ماژول "tls" یک ماژول داخلی هست که به دولوپر ها اجازه میده تا ارتباطات شبکه ایمن رو از طریق TCP (Transmission Control Protocol) با استفاده از TLS و SSL پیاده سازی کنن.
از این ماژول چه استفاده ای میشه؟
ماژول "tls" در درجه اول برای ایجاد سرورها و کلاینت های ایمن استفاده میشه که از طریق کانال های رمزگذاری شده ارتباط برقرار میکنن. این تضمین میکنه که هرگونه داده رد و بدل شده در برابر دستکاری محافظت میشه.
tls
همچنین از ویژگی های مختلفی مانند احراز هویت، و مدیریت چندین اتصال امن به طور همزمان پشتیبانی میکنه.به صورت کلی ماژول
tls
در Node.js ابزار قدرتمندی برای پیاده سازی ارتباطات ایمن در انواع اپلیکیشن ها هست. با استفاده از TLS، میتونیم اطمینان حاصل کنیم که داده های منتقل شده بین سرور و مشتریان شما محرمانه باقی میمونه و در برابر تهدیدات امنیتی رایج تا حد امکان محافظت میشه. برای کسب اطلاعات بیشتر به داکیومنت ماژول مراجعه کنید.#nodejs #tls
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9⚡2
با ماژول Readline ورودی هارو مدیریت کن! 😐
ماژول «readline» در Node.js یک ابزار قدرتمند و همه کاره هست که فرایند خوندن ورودی، مثل ورودی استاندارد فرآیند ها («process.stdin») رو مدیریت میکنه. این ماژول یک رابط برای خوندن دادهها در یک خط و زمان فراهم میکنه و اون رو برای ساخت برنامههای کامندلاین، درخواستهای تعاملی و سایر برنامههای ورودی محور بسیار مفید میکنه.
چطور از این ماژول استفاده کنیم؟🤔
یکی از رایج ترین استفاده ها از ماژول readline، اینه که پرامت های کاربر رو مدیریت کنه و این کار رو میشه با استفاده از متد "question" انجام داد.
در این مثال، برنامه از کاربر اسمش رو میپرسه و سپس به او سلام میکنه. متد «rl.close()» برای بستن رابط پس از تکمیل فراخوانی میشه.
یا مثلا ما یک فایل داریم و میخوایم خط به خط اون رو بررسی کنیم.
میتونیم با استفاده از متد "createInterface" این کار رو انجام بدیم:
ما در مثال بالا خط به خط فایل داده شده رو بررسی میکنیم که آیا، «keyword» داده شده در فایل هست یا خیر.
به صورت کلی با استفاده از ماژول «readline»، دولوپر ها میتونن به راحتی ورودی کاربر رو مدیریت کنن، دادهها رو validate کنن، و تجربیات تعاملی رو مستقیماً از کامند لاین ایجاد کنن. برای کسب اطلاعات بیشتر به داکیومنت این ماژول مراجعه کنید.
#nodejs
@CodeModule
ماژول «readline» در Node.js یک ابزار قدرتمند و همه کاره هست که فرایند خوندن ورودی، مثل ورودی استاندارد فرآیند ها («process.stdin») رو مدیریت میکنه. این ماژول یک رابط برای خوندن دادهها در یک خط و زمان فراهم میکنه و اون رو برای ساخت برنامههای کامندلاین، درخواستهای تعاملی و سایر برنامههای ورودی محور بسیار مفید میکنه.
چطور از این ماژول استفاده کنیم؟
یکی از رایج ترین استفاده ها از ماژول readline، اینه که پرامت های کاربر رو مدیریت کنه و این کار رو میشه با استفاده از متد "question" انجام داد.
rl.question('What is your name? ', (answer) => {
console.log(`Hello, ${answer}!`);
rl.close();
});
در این مثال، برنامه از کاربر اسمش رو میپرسه و سپس به او سلام میکنه. متد «rl.close()» برای بستن رابط پس از تکمیل فراخوانی میشه.
یا مثلا ما یک فایل داریم و میخوایم خط به خط اون رو بررسی کنیم.
میتونیم با استفاده از متد "createInterface" این کار رو انجام بدیم:
let f = false;
const stream = fs.createReadStream(filePath, { encoding: 'utf8' });
const rl = createInterface({ input: stream });
rl.on('line', (line) => {
if (f) {
return;
}
if (line.includes(keyword)) {
f = true;
rl.close();
stream.destroy();
resolve(true);
}
});
ما در مثال بالا خط به خط فایل داده شده رو بررسی میکنیم که آیا، «keyword» داده شده در فایل هست یا خیر.
به صورت کلی با استفاده از ماژول «readline»، دولوپر ها میتونن به راحتی ورودی کاربر رو مدیریت کنن، دادهها رو validate کنن، و تجربیات تعاملی رو مستقیماً از کامند لاین ایجاد کنن. برای کسب اطلاعات بیشتر به داکیومنت این ماژول مراجعه کنید.
#nodejs
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡9🔥2
علتش چیه؟ 😠
چند وقت پیش داشتم الگوریتم مرتب سازی insertion رو پیاده سازی میکردم و برام سوال شد، چجوری میتونم سرعت مرتب سازی رو بیشتر کنم (در حد کنجکاوی). در هنگام پیادهسازی الگوریتم مرتبسازی Insertion Sort در جاوااسکریپت، معمولاً این الگوریتم به صورت زیر نوشته میشه:
در اینجا، زمان اجرای الگوریتم با استفاده از console.time() و console.timeEnd() اندازهگیری میشه. معمولاً زمان اجرای این کد بین ۱۰ تا ۱۵ میلیثانیه متغیر هست. به این صورت:
حالا اگر خروجی آرایه رو به یک رشته تبدیل کنیم و سپس اون رو برگردونیم:
خروجی:
با انجام این تغییر، زمان اجرای الگوریتم به صورت چشمگیری کاهش پیدا میکنه و بین ۸ تا ۱۰ میلیثانیه متغیر میشه.
سوال اصلی اما اینجاست:
چرا تبدیل آرایه به رشته باعث کاهش زمان اجرای الگوریتم مرتبسازی Insertion میشه؟ آیا این تغییرات قابل توجه هستن و باید در برنامه هایی که میسازیم نگران چنین تفاوتهای جزئی ای باشیم؟
#nodejs #array
@CodeModule
چند وقت پیش داشتم الگوریتم مرتب سازی insertion رو پیاده سازی میکردم و برام سوال شد، چجوری میتونم سرعت مرتب سازی رو بیشتر کنم (در حد کنجکاوی). در هنگام پیادهسازی الگوریتم مرتبسازی Insertion Sort در جاوااسکریپت، معمولاً این الگوریتم به صورت زیر نوشته میشه:
function insertionSort(arr) {
for (let i = 1; i < arr.length; i = i + 1) {
let cE = arr[i];
let j = i;
while (j > 0 && arr[j - 1] > cE) {
arr[j] = arr[j - 1];
j = j - 1;
}
arr[j] = cE;
}
return arr;
}
console.time();
const uArray = [20, 10, 4, 51, 0, 0xd3, 0x42, 0.4, 0.00002, 0x2];
const sArray = insertionSort(uArray);
console.log("Sorted array:", sArray);
console.timeEnd();
در اینجا، زمان اجرای الگوریتم با استفاده از console.time() و console.timeEnd() اندازهگیری میشه. معمولاً زمان اجرای این کد بین ۱۰ تا ۱۵ میلیثانیه متغیر هست. به این صورت:
Sorted array: [ 0, 0.00002, 0.4, 2, 4, 10, 20, 51, 66, 211 ]
default: 10.793ms
حالا اگر خروجی آرایه رو به یک رشته تبدیل کنیم و سپس اون رو برگردونیم:
return String(arr);
خروجی:
Sorted array: 0,0.00002,0.4,2,4,10,20,51,66,211
default: 8.899ms
با انجام این تغییر، زمان اجرای الگوریتم به صورت چشمگیری کاهش پیدا میکنه و بین ۸ تا ۱۰ میلیثانیه متغیر میشه.
سوال اصلی اما اینجاست:
چرا تبدیل آرایه به رشته باعث کاهش زمان اجرای الگوریتم مرتبسازی Insertion میشه؟ آیا این تغییرات قابل توجه هستن و باید در برنامه هایی که میسازیم نگران چنین تفاوتهای جزئی ای باشیم؟
#nodejs #array
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤🔥2
Do not use fs sync methods in Javascript⚡️
زمانی که ماژول fs رو در Node.js فراخوانی میکنیم، یک فهرست طولانی از متد های Syntc بهمون میده مثل: .readFileSync, fs.rmSync, fs.writeFileSync و... خیلی از متد های دیگه شبیه این متد ها هستن. مثلا من میخام یک فایل رو بخونیم:
اگه ما این فایل رو اجرا کنیم واقعا متوجه این کند بودن نمیشیم (جوری که فکر میکنیم دسترسی به فایل ها و خوندن سریع هست)، در حالی که اینگونه نیست! دسترسی به فایل سیستم کند هست و این هم باید در نظر بگیریم که کد های js در بین چندین لایه کد قرار داره (کد های خود js و c++ و...) هرجور بخوایم حساب کنیم در بهترین شرایط باز هم دسترسی به فایل ها کند هست! به عنوان مثال من امروز نیاز داشتم که 10 هزار فایل که حجم هر فایل 10 بایت هست رو ایجاد کنم. پیاده سازی اولیه من با استفاده از fs و متد های Sync بود. وقتی تست رو ران کردم این خروجی بهم داد( به صورت تقریبی هست):
چیزی حدود 4 دقیقه طول میکشه و خب خوب نیست. درواقع وقتی ما از متد های Sync استفاده میکنیم ایونت لوپ Nodejs رو متوقف میکنیم و بهش میگیم:"صبر کن کار من تموم شه" که همین باعث میشه چیزی حدود 4 دقیقه کمتر یا بیشتر طول بکشه. اما اگر همین کار رو بدون استفاده از متد ها Sync و از fs.promises استفاده کنیم نتیجه خیلی چشمگیر و بهتر از قبلی هست. که با چنین خروجی احتمالی روبرو میشیم:
چیزی حدود 7 ثانیه که متغیر هست 👀
این یکی از محکم ترین دلایلی هست که "نباید از متد های Sync استفاده کنیم". شما میتونید برای اطلاعات بیشتر مقاله زیر و کد ها رو بخونید (با متد های sync و بدون آنها)
- Article
#nodejs
@CodeModule
زمانی که ماژول fs رو در Node.js فراخوانی میکنیم، یک فهرست طولانی از متد های Syntc بهمون میده مثل: .readFileSync, fs.rmSync, fs.writeFileSync و... خیلی از متد های دیگه شبیه این متد ها هستن. مثلا من میخام یک فایل رو بخونیم:
const file = fs.readFileSync("codemodule.txt")
اگه ما این فایل رو اجرا کنیم واقعا متوجه این کند بودن نمیشیم (جوری که فکر میکنیم دسترسی به فایل ها و خوندن سریع هست)، در حالی که اینگونه نیست! دسترسی به فایل سیستم کند هست و این هم باید در نظر بگیریم که کد های js در بین چندین لایه کد قرار داره (کد های خود js و c++ و...) هرجور بخوایم حساب کنیم در بهترین شرایط باز هم دسترسی به فایل ها کند هست! به عنوان مثال من امروز نیاز داشتم که 10 هزار فایل که حجم هر فایل 10 بایت هست رو ایجاد کنم. پیاده سازی اولیه من با استفاده از fs و متد های Sync بود. وقتی تست رو ران کردم این خروجی بهم داد( به صورت تقریبی هست):
Logging with frequent rotations took 223981~~ ms
چیزی حدود 4 دقیقه طول میکشه و خب خوب نیست. درواقع وقتی ما از متد های Sync استفاده میکنیم ایونت لوپ Nodejs رو متوقف میکنیم و بهش میگیم:"صبر کن کار من تموم شه" که همین باعث میشه چیزی حدود 4 دقیقه کمتر یا بیشتر طول بکشه. اما اگر همین کار رو بدون استفاده از متد ها Sync و از fs.promises استفاده کنیم نتیجه خیلی چشمگیر و بهتر از قبلی هست. که با چنین خروجی احتمالی روبرو میشیم:
Logging with frequent rotations took 7555.057167 ms
چیزی حدود 7 ثانیه که متغیر هست 👀
این یکی از محکم ترین دلایلی هست که "نباید از متد های Sync استفاده کنیم". شما میتونید برای اطلاعات بیشتر مقاله زیر و کد ها رو بخونید (با متد های sync و بدون آنها)
- Article
#nodejs
@CodeModule
🔥12⚡2👌2
ماژول perf_hooks چیکار میکنه؟ ⚡️
ماژول
ماژول «perf_hooks» در درجه اول بر روی اندازهگیریهای عملکرد با وضوح بالا تمرکز داره. مثلا با استفاده از روش «performance.now()»، دولوپر ها میتونن فواصل زمانی دقیق تا میکروثانیه رو اندازهگیری کنن که برای ردیابی مدت زمان انجام عملیات خاص مفید هست.
- مثال:
به صورت کلی ماژول
#nodejs
@CodeModule
ماژول
perf_hooks
در Node.js یک ابزار قدرتمند برای نظارت بر عملکرد و بهینه سازی هست. این یک رابط برای اندازهگیری عملکرد عملیات مختلف در یک برنامه ارائه میکنه و دولوپر ها رو قادر میسازه تا Bottleneck رو شناسایی، کد رو بهینه و معیارهای کلیدی مثل تاخیرهای حلقه رویداد، زمانهای اجرای عملکرد و موارد دیگه رو نظارت کنن.ماژول «perf_hooks» در درجه اول بر روی اندازهگیریهای عملکرد با وضوح بالا تمرکز داره. مثلا با استفاده از روش «performance.now()»، دولوپر ها میتونن فواصل زمانی دقیق تا میکروثانیه رو اندازهگیری کنن که برای ردیابی مدت زمان انجام عملیات خاص مفید هست.
- مثال:
const { performance } = require('perf_hooks');
const start = performance.now();
// Execute some code here
const end = performance.now();
console.log(`Execution took ${end - start} milliseconds.`);
به صورت کلی ماژول
perf_hooks
ابزارهای ضروری رو برای درک و بهینه سازی عملکرد برنامه به دولوپر های Node.js، ارائه میده. با ارائه معیارهای دقیق در زمانبندی، تاخیرهای حلقه رویداد و استفاده از حافظه، به دولوپر ها کمک میکنه تا مشکلات عملکرد رو تشخیص داده و کارایی برنامه رو افزایش بدن. برای اطلاعات بیشتر به داکیومنت این ماژول مراجعه کنید.#nodejs
@CodeModule
🔥9👌4
میدونستی با Node.js میتونی انیمیشن های جذابی توی ترمینال بسازی؟ 🚀
یکی از کارهایی که میتونید به عنوان سرگرمی انجام بدید، ساخت انیمیشن های ترمینال هست. مقاله vladimirvovk یک راهنمای جامع در مورد چگونگی انجام این کار هست. این مقاله نحوه ساخت digital rain که شبیه به Matrix هست رو نشون میده که با استفاده از process.stdout، اون رو میسازه(البته به صورت کوچیک شده). همچنین یک مقدمه کوتاهی از ANSIS هم داره که کار رو برای ساخت رنگ ها ساده میکنه و میتونید از اون توی انیمیشن هاتون استفاده کنید.
برای اطلاعات بیشتر به این مقاله مراجعه کنید.
#nodejs
@CodeModule
یکی از کارهایی که میتونید به عنوان سرگرمی انجام بدید، ساخت انیمیشن های ترمینال هست. مقاله vladimirvovk یک راهنمای جامع در مورد چگونگی انجام این کار هست. این مقاله نحوه ساخت digital rain که شبیه به Matrix هست رو نشون میده که با استفاده از process.stdout، اون رو میسازه(البته به صورت کوچیک شده). همچنین یک مقدمه کوتاهی از ANSIS هم داره که کار رو برای ساخت رنگ ها ساده میکنه و میتونید از اون توی انیمیشن هاتون استفاده کنید.
برای اطلاعات بیشتر به این مقاله مراجعه کنید.
#nodejs
@CodeModule
DEV Community
Terminal Animations with Node.js
Node.js has the process object with stdout property which is a stream connected to stdout. Using the...
⚡12👌5
Trust Proxy توی Express.js چیه و دقیقاً چه کاری میکنه؟ 🤔
Trust Proxy یه تنظیم توی Express هست که به اپلیکیشن میگه آیا باید به اطلاعاتی که توی هدرهای X-Forwarded-For و X-Forwarded-Proto میاد، اعتماد کنه یا نه.
حالا این یعنی چی؟ یعنی وقتی برنامه بک اند یه سرور واسطهای (مثل Nginx یا Cloudflare) قرار داره، IP و پروتکل واقعی کاربر توی این هدرها قرار میگیره. Express بهطور پیشفرض به این اطلاعات اعتماد نداره اما اگه trust proxy رو فعال کنید، Express از این هدرها برای تعیین IP و پروتکل واقعی کاربر استفاده میکنه.
۲. Trust Proxy به چه دردی میخوره؟
وقتی که برنامه شما رو یه پراکسی معکوس (Reverse Proxy) یا یه لود بالانسر اجرا میشه، در حالت عادی Express فقط IP و اطلاعاتی که از سمت اون پراکسی دریافت کرده رو میبینه، نه اطلاعات اصلی کاربر. این یعنی ممکنه req.ip اشتباه باشه، req.protocol به جای
اینجاست که Trust Proxy به درد میخوره 👇🏻
- وقتی فعال بشه، Express مقدار واقعی IP کاربر رو از X-Forwarded-For میخونه.
- req.protocol رو بر اساس X-Forwarded-Proto تنظیم میکنه.
- req.hostname رو درست مقداردهی میکنه
۳. چجوری Trust Proxy رو توی Express فعال کنیم؟
خیلی ساده!
با این تنظیم:
- req.ip مقدار واقعی آیپی کاربر رو میده.
- req.protocol مقدار واقعی http یا https رو نشون میده.
۴. Trust Proxy چه مقدارهایی میگیره؟
مقدار
Trust Proxy یه تنظیم مهمه که وقتی برنامتون یه پراکسی مثل Nginx یا Cloudflare باشه، کمک میکنه Express اطلاعات واقعی کاربر رو تشخیص بده. اما باید دقت کنی که به هر پراکسیای اعتماد نکنید! برای امنیت بیشتر، فقط به آیپیهایی که واقعاً Proxyهای خودتون هستن اجازه بدید.
برای جزئیات بیشتر میتونید به مستندات رسمی Express در مورد TrustProxy مراجعه کنید، که این جنبه ها رو با عمق بیشتری توضیح میده.
#nodejs #express
@CodeModule
Trust Proxy یه تنظیم توی Express هست که به اپلیکیشن میگه آیا باید به اطلاعاتی که توی هدرهای X-Forwarded-For و X-Forwarded-Proto میاد، اعتماد کنه یا نه.
حالا این یعنی چی؟ یعنی وقتی برنامه بک اند یه سرور واسطهای (مثل Nginx یا Cloudflare) قرار داره، IP و پروتکل واقعی کاربر توی این هدرها قرار میگیره. Express بهطور پیشفرض به این اطلاعات اعتماد نداره اما اگه trust proxy رو فعال کنید، Express از این هدرها برای تعیین IP و پروتکل واقعی کاربر استفاده میکنه.
۲. Trust Proxy به چه دردی میخوره؟
وقتی که برنامه شما رو یه پراکسی معکوس (Reverse Proxy) یا یه لود بالانسر اجرا میشه، در حالت عادی Express فقط IP و اطلاعاتی که از سمت اون پراکسی دریافت کرده رو میبینه، نه اطلاعات اصلی کاربر. این یعنی ممکنه req.ip اشتباه باشه، req.protocol به جای
https
مقدار http
داشته باشه و کلی مشکل دیگه. اینجاست که Trust Proxy به درد میخوره 👇🏻
- وقتی فعال بشه، Express مقدار واقعی IP کاربر رو از X-Forwarded-For میخونه.
- req.protocol رو بر اساس X-Forwarded-Proto تنظیم میکنه.
- req.hostname رو درست مقداردهی میکنه
۳. چجوری Trust Proxy رو توی Express فعال کنیم؟
خیلی ساده!
const app = express();
app.set("trust proxy", true);
با این تنظیم:
- req.ip مقدار واقعی آیپی کاربر رو میده.
- req.protocol مقدار واقعی http یا https رو نشون میده.
اما... فعال کردنش به این سادگی هم نیست! چون ممکنه سرورهای پراکسی مختلفی جلوی اپلیکیشن باشن و تو نیاز داشته باشی مشخص کنی که به کدوم پراکسیها اعتماد داری.
۴. Trust Proxy چه مقدارهایی میگیره؟
مقدار
true
همیشه بهترین گزینه نیست. Express چند مدل مقدار رو قبول میکنه: app.set("trust proxy", false); // پیشفرض، هیچ پراکسیای رو قبول نمیکنه.
app.set("trust proxy", true); // به همه پراکسیها اعتماد میکنه.
app.set("trust proxy", "loopback"); // فقط به 127.0.0.1 اعتماد میکنه.
app.set("trust proxy", "127.0.0.1"); // فقط به این IP خاص اعتماد میکنه.
app.set("trust proxy", ["192.168.1.1", "10.0.0.1"]); // لیستی از پراکسیهای قابلاعتماد.
app.set("trust proxy", 2); // از آخرین دو پراکسی مقدار رو میخونه.
- مقدار 2 یعنی چی؟
وقتی مقدار 2 رو میدید، Express میاد ip واقعی کاربر رو از دو پراکسی آخر توی X-Forwarded-For استخراج میکنه. این کار به درد جایی میخوره که چند تا سرور بین کاربر و اپلیکیشن هستن.
- پس مقدار true بدیم یا نه؟
بهتره فقط به پراکسیهایی که میشناسی اعتماد کنید. مثلاً اگه سرور فقط Cloudflare یا Nginx قرار داره، میتونید فقط به اون آیپیها اعتماد کنین تا از IP Spoofing جلوگیری بشه.
Trust Proxy یه تنظیم مهمه که وقتی برنامتون یه پراکسی مثل Nginx یا Cloudflare باشه، کمک میکنه Express اطلاعات واقعی کاربر رو تشخیص بده. اما باید دقت کنی که به هر پراکسیای اعتماد نکنید! برای امنیت بیشتر، فقط به آیپیهایی که واقعاً Proxyهای خودتون هستن اجازه بدید.
برای جزئیات بیشتر میتونید به مستندات رسمی Express در مورد TrustProxy مراجعه کنید، که این جنبه ها رو با عمق بیشتری توضیح میده.
#nodejs #express
@CodeModule
⚡13👌3