Node Master
1.01K subscribers
24 photos
2 files
156 links
Group Chat: @nodemastergp
Admin: @napoleon_n1
Download Telegram
طبق عادت همیشگی داشتم پروژه Node روی گیتهاب چک میکردم و آخرین کامیت که ۳ ساعت پیش خورده خیلی جالب بود برام.
اینطور که شاهده کم کم باید شاهد اومدن http3 روی std برای #NodeJS باشیم باتوجه به این commit که دارن پروتکل quic رو جلو میبرن!

https://github.com/nodejs/node/commit/fc102f2180dfc8e1654ce672185f5bf97ec21b53

#Update
Node Master
یکی از موضوعاتی که واقعا جای خالیش در nodejs std حس میشه. پیاده سازی http3 هست. امروز داشتم گشت گذار میزدم و این library رو پیدا کردم. این لایبرری رو بیشتر برسی میکنم. https://github.com/unjs/h3
تیم SocketIO واقعا من رو سوپرایز کردن!
آپدیت 4.7 برای حدود 6 ماه پیش هست و در این آپدیت WebTransport رو اضافه کردن.
برای Full duplex Bidirectional communication پروتکل های مختلف وجود داره که پر استفاده ترینشون برای client to server همین web socket هست که همه میشناسیم.
پروتکل Web Socket روی HTTP/1.1 ( و فکر کنم HTTP/2 ) معمولا سوار میشه که همه میدونیم.
اما پروتکل WebTransport خیلی جدید هست و معمولا adaptation پروتکل ها فرایند خیلی کندی هست. به عنوان مثال پروتکل HTTP/1.1 سال 1999 منتشر شد و هنوز اکثر سایت ها استفاده میکنند. اصن شما وقتی با Express وب سرور درست میکنید روی پروتکلی هست که برای سال 1999 ساخته شده!
اما پروتکل WebTransport از HTTP/3 داره استفاده میکنه و یک Performance gain زیاد به نسبت WebSocket محسوب میشه.
نکته دیگ که خیلی من رو کنجکاو میکنه کلا adaptation rate برای HTTP/2 خیلی کند بود و کلا خیلیا اصلا نیازی ندیدن که مهاجرت کنن. اما adaptation rate پروتکل HTTP/3 خیلی بیشتره. این موضوع من رو کنجکاو میکنه که دلم بخواد یک تایم بزارم دقیق این پروتکل ها رو مطالعه کنم. اما الان به صورت کلی بخوام بگم حس میکنم بخاطر رها کردن TCP و استفاده از QUIC به عنوان Transport layer protocol هست که واقعا انقلابی هست. بنظرم این حرکت به اندازه منتشر شدن HTTP/1.1 در سال 1999 انقلابی هست.
یک نکته دیگ هم وجود داره که هنوز ما HTTP/3 رو روی #NodeJS std نداریم. چطور WebTransport رو اوردن نمیدونم و کنجکاوی خودم هم هست. البته شاید از پکیج H3 استفاده کردن که قبلا اینجا معرفی کرده بودیم یا شاید هم خودشون زدن که بعید میدونم.
هرچی هست دمشون گرم.
https://t.iss.one/NodeMaster/70
https://socket.io/docs/v4/changelog/4.7.0
👍13
نسخه 20.11 LTS برای #NodeJS منتشر شد.
- بهینه سازی های خیلی زیاد در fs module اتفاق افتاده.
- اضافه کردن معادل __dirname و __filename که در CJS وجود داشت در ماژول های ESM
import.iss.oneta.dirname // ESM
__dirname //CJS

import.iss.oneta.filename // ESM
__filename //CJS

قدیما برای بدست اوردن filename و dirname باید با استفاده از import.iss.oneta.url اینکار میکردی که زیاد جالب نبود.
به عنوان مثال معادل import.iss.oneta.dirname قبل از این ورژن این شکل بود.
import path from "node:path";
import url from "node:url";

const __dirname = path.dirname(url.fileURLToPath(import.iss.oneta.url)); // Before 20.11 LTS
// import.iss.oneta.dirname 20.11 LTS
const __filename = url.fileURLToPath(import.iss.oneta.url); // Before 20.11 LTS
// import.iss.oneta.filename 20.11 LTS

console.log(__filename);
console.log(__dirname);

#NodeJS
#Update
👍17
Node Master
سلام دوستان ارادت. امروز آپدیت جدید 20.12 LTS که به تازگی برای #NodeJS منتشر شده رو باهم برسی میکنیم. به نسبت این آپدیت تغییرات بیشتری از آپدیت های قبلی مثل 20.11 و 20.12 داشته و چنتا حرکت خوب هم بلاخره از Node درمورد single exec app ها دیدیم. در بخش آخر…
این پست برای دوستانی هست که این ویدیو آپدیت 20.12 LTS مربوط به #NodeJS رو ندیند.

اگر در برنامه خودتون نیاز دارید که hash یک دیتا رو داشته باشیم فقط یک stream api برای این کار وجود داشت که استفاده از این api برای payload های کوچیک overhead زیادی داره و اما برای فایل های بزرگ واقعا api خوبی هست.
import { createHash } from "node:crypto";
const data = "this is my data";

const sha1 = createHash("SHA1");

const hexDigest = sha1.update(data).digest("hex");

console.log(hexDigest);

اما با این API جدید که در اختیار ما قرار گرفته overhead خیلی کمتری روی runtime داره و برای payload های کوچیک قطعا سریعتر و بهتر هست.
import { hash } from "node:crypto";

const data = "this is my data";
const hexDigest = hash("SHA1", data, "hex");


و این که ظاهرا مشکل type هم که در ویدیو گفته بودم فیکس شده. چون پکیج @types/node از تایم رکورد ویدیو از 20.12.2 به 20.12.5 آپدیت شده.

#Update
👍10
چند مدتی هست #Deno ورژن 1.42 منتشر شده و در این ورژن jsr.io رو به عنوان repo اصلی برای package های 3rd party خودش قرار داده و این بزرگترین حرکت این آپدیت بوده.
بزودی باهم این ویژگی برسی عمیق میکنیم.
https://deno.com/blog/v1.42
#Update
👍4
به تازگی نسخه جدید LTS یعنی 20.15 برای #NodeJS منتشر شده.
یکی از ویژگی های کاربردی که اضافه شده مربوط به "node:test" هست. قابلیت test plan هست
test('top level test', t => {
t.plan(2);
t.assert.ok('some relevant assertion here');
t.subtest('subtest', () => {});
});

به این صورت کار میکنه که اگر تعداد subtest ها و یا assertion ها برابر با plan نباشه تست به خطا میخوره و این موضوع در unit test خیلی میتونه کاربردی باشه به دلیل این که میتونه تست ها رو strict تر کنه.

موضوع بعدی اضافه شدن یک flag جدید هست
--inspect-wait

یکی از مهمترین flag های #NodeJS در حقیقت خانواده flag های inspect هست. حالا سوال پیش میاد چرا؟ با کمک این فلگ ها میتونید با استفاده از ابزار های کمکی مثل chrome dev tools که یک debugger مربوط به انجین V8 داره به جنگ Bug ها و Bottleneck ها برید. برای Bottleneck یک ابزاری که اینجا در دسترس هست flamegraph هست که فارغ از زبان تو هر زبان برنامه نویسی میتونی این مدل نمودار رو ببینی ( لازمه بگم کسایی که flamegraph بلدن بخونن واقعا آدم های قابل احترامی هستن ).
یکی دیگه از بزرگترین و مهمترین ابزار هایی که کمک میکنه و میتونه ساعت ها زندگیتون رو نجات بده Heap Profiler هست. کابوس هر برنامه نویس #NodeJS قطعا Memory leak هست و پیدا کردنش خیلی سخته. اما اگر از Heap Profiler درست استفاده بشه خیلی سریع میشه Memory leak ها رو پیدا کرد.

چندماه هست دوست دارم درمورد inspect عمیق بشیم ولی متاسفانه فرصتش هیچ وقت برام پیش نیومده. ولی قطعا یک روز این موضوع رو عمیق میشیم.

#Update
👍9
خدمت شما بگم #Deno 1.45 به تازگی منتشر شده. یکی از نکات خوبی که من در این آپدیت دیدم قابلیت Monorepo هست که اضافه شده.
و البته std هم داره نزدیک به stable شدن میشه.
و صد البته با فعال کردن flag زیر میتونید دسترسی به ویژگی های جدید #Deno در ورژن 2 داشته باشید.
DENO_FUTURE=1

#Update
👍8
یک بخش جدید به داکیومنت #NodeJS از ورژن 22 اضافه شده برای TypeScript.
خودش پیشنهاد میکنه از tsx استفاده کنیم برای NodeJS.

به صورت کلی فاصله زیادی داریم تا #NodeJS هم مثل #Bun و #Deno به صورت کامل و Stable از #TypeScript ساپورت کنه. داخل این داکیومنت در این مورد توضیحات مربوطه داده شده.
درکل برای پروژه Production درکل tsx یا ts-node گزینه منطقی تری هست.
https://nodejs.org/docs/latest-v22.x/api/typescript.html
#Update
👍11
چند روزی هست #NodeJS نسخه 22.12 LTS منتشر شده و شاهد یکی از بزرگترین قدم های #NodeJS برای آینده هستیم.
در این ورژن میشه ماژول های ESM رو در CJS بدون استفاده از --experimental-require-module فلگ استفاده کرد. این موضوع باعث میشه که اکوسیستم بیشتر سمت ESM بره و استفاده از CJS کمتر بشه.

https://nodejs.org/en/blog/release/v22.12.0

#Update
👍11