به طراح وب خوش آمدید.
Node.js v20 اکنون در دسترس است! در ۱۸ آوریل ۲۰۲۳، عمومی شد و اکنون برای همه قابل استفاده است. با این نسخه، Node.js باید بسیار امن تر باشد و عملکرد بهتری داشته باشد.
مهم است بدانید – از آنجایی که این یک نسخه زوج است، باید در اکتبر ۲۰۲۳ به پشتیبانی طولانی مدت (LTS) تبدیل شود و تا آوریل ۲۰۲۶ پشتیبانی خواهد شد. با این حال، تیم Node.js فعالانه به دنبال انجمن است. بازخورد برای شناسایی و رفع هر گونه مشکل قبل از اینکه به LTS منتقل شود.
این نسخه جدید Node.js بهروزرسانیها و ویژگیهای هیجانانگیزی را ارائه میکند که مطمئناً توسعهدهندگان از آنها استقبال خواهند کرد، مانند مدل مجوزهای آزمایشی، همزمان import.meta.resolve
اجرای آزمایشی پایدار، موتور جاوا اسکریپت V8 را به نسخه ۱۱٫۳ به روز می کند و بهبود عملکرد، رفع اشکال و موارد دیگر را به ارمغان می آورد.
در این مقاله، تغییرات ایجاد شده در Node.js v20 را با بررسی ویژگیها و قابلیتهای جدید آن بررسی خواهید کرد.
شروع کار با Node.js v20
نصب Node.js v20 بسیار شبیه به نصب نسخه های دیگر Node.js است. تنها کاری که باید انجام دهید این است:
- بسته نصبی را از وب سایت رسمی Node.js.
- پس از دانلود نصب کننده، آن را اجرا کنید و دستورالعمل ها را دنبال کنید تا مراحل نصب کامل شود. فرآیند بسیار ساده است و فقط باید با توافقنامه مجوز موافقت کنید و دکمه Next را کلیک کنید.
- پس از اتمام مراحل نصب، سیستم/کامپیوتر خود را مجددا راه اندازی کنید تا همه تغییرات اعمال شوند.
- نصب Node.js خود را با اجرای دستور زیر بررسی کنید:
node -v
اگر شماره نسخه (v20.0.0) را مشاهده کردید، به این معنی است که Node.js به درستی نصب شده است و شما آماده شروع کار با Node.js v20 هستید.
چه چیزی در Node.js v20 جدید است؟
بیایید نگاهی به ۵ آپدیت برتر معرفی شده در این نسخه Node.js بیندازیم. این ویژگی ها عبارتند از:
مدل مجوز آزمایشی
معرفی مدل مجوزهای آزمایشی در Node.js v20 افزودنی مهمی است که به توسعه دهندگان کنترل بیشتری بر دسترسی به منابع خاص در زمان اجرا می دهد.
این ویژگی جدید زمانی مفید است که امنیت و استفاده از منابع حیاتی است، مانند محیط تولید.
مدل مجوز چندین قابلیت از جمله محدود کردن دسترسی به سیستم فایل، پردازش های فرزند، worker_threads و افزونه های بومی دارد.
توسعه دهندگان می توانند از پرچم هایی مانند استفاده کنند --allow-fs-read
، --allow-fs-write
و --allow-child-process
برای نشان دادن منابع موجود برای فعال کردن این پرچمها، توسعهدهندگان باید از آن استفاده کنند --experimental-permission
پرچم همراه با مجوزهای لازم
در اینجا مثالی از نحوه استفاده از مدل مجوزها برای اجازه دسترسی خواندن و نوشتن به کل سیستم فایل آورده شده است:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
توسعه دهندگان همچنین می توانند از مدل مجوزها برای تعیین دسترسی به پوشه ها و فایل های خاص استفاده کنند. به عنوان مثال، دستور زیر اجازه دسترسی به نوشتن را می دهد /tmp/ پوشه:
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
یکی از مزایای قابل توجه مدل مجوزها، توانایی اعمال کنترل بیشتر بر دسترسی به سیستم فایل است. به عنوان مثال، توسعه دهندگان می توانند مسیرها و الگوهای عام را مشخص کنند تا امکان دسترسی به پوشه ها یا فایل های خاص را فراهم کنند.
$ node --experimental-permission --allow-fs-read=/home/user/* index.js
دستور بالا به همه پوشه های داخل دسترسی خواندن می دهد /خانه/کاربر/ کاتالوگ
از ویژگی مجوز یک شیء فرآیند نیز می توان برای بررسی اینکه آیا مجوز خاصی در زمان اجرا اعطا شده است یا خیر، استفاده کرد. به عنوان مثال، اگر می خواهید بررسی کنید که آیا فرآیند Node.js شما به یک پوشه خاص دسترسی خواندن دارد یا خیر، /home/user/documentsمی توانید از کد زیر استفاده کنید:
if (process.permission.has('fs.read', '/home/user/documents')) {
console.log('Read access granted to /home/user/documents');
} else {
console.log('Read access not granted to /home/user/documents');
}
با استفاده از مدل مجوزها، کنترل دقیق تری بر دسترسی سیستم فایل به فرآیندهای Node.js خود به دست می آورید، که می تواند منجر به بهبود امنیت و استفاده کارآمدتر از منابع شود.
توجه به این نکته مهم است که مدل مجوزها هنوز آزمایشی است و ممکن است در نسخه های بعدی Node.js تغییر کند. می خواهم آگاه باشم مستندات مدل مجوز و هنگام استفاده از این ویژگی های آزمایشی احتیاط کنید.
تستر پایدار
Node.js v20 شامل یک نسخه پایدار از ماژول test_runner است که به توسعه دهندگان اجازه می دهد تا به سرعت و به راحتی مجموعه های آزمایشی جاوا اسکریپت را بدون نصب وابستگی های اضافی ایجاد و اجرا کنند.
اجرای آزمایش پایدار در حال حاضر شامل چندین بلوک ساختمانی مانند describe
، it
/test
و قلاب هایی برای ایجاد و ساختار فایل های آزمایشی و همچنین شبیه سازی، حالت نمایش و امکان اجرای چندین فایل آزمایشی به صورت موازی با node --test
تیم
در اینجا مثالی از نحوه استفاده از تست runner آورده شده است:
import { test, mock } from 'node:test';
import assert from 'node:assert';
import fs from 'node:fs';
mock.method(fs, 'readFile', async () => "Hello World");
test('synchronous passing test', async
// This test passes because it does not throw an exception.
assert.strictEqual(await fs.readFile('a.txt'), "Hello World");
});
Test runner گزارش های تست سفارشی و سفارشی شده را از طریق ارائه می دهد --test-reporter
پرچم، پوشش آزمایشی آزمایشی در سراسر --experimental-test-coverage
پرچم و امکانات تمسخر.
اگرچه در نظر گرفته نشده است که جایگزین چارچوب های آزمایشی با امکانات کامل مانند است یا موکا، دونده تست پایدار یک راه آسان و سریع برای ایجاد مجموعه های آزمایشی ارائه می دهد. از زمان معرفی آن در Node.js v19 تا حد زیادی بهبود یافته است و از طریق آزمایش و بازخورد کاربران نهایی، اکنون در Node.js v20 به عنوان پایدار علامت گذاری شده است.
اطلاعات بیشتر را می توان در این مورد یافت درخواست کشش ترکیبی.
موتور جاوا اسکریپت V8 به نسخه ۱۱٫۳ به روز شده است.
موتور جاوا اسکریپت V8 که Node.js را تامین می کند به نسخه ۱۱٫۳ در Node.js v20 به روز شده است. این عملکرد را بهبود می بخشد و ویژگی های زبان جدیدی را معرفی می کند. برخی از ویژگی های جدید این به روز رسانی شامل:
String.prototype.isWellFormed
وtoWellFormed
: این روش ها به ویژه برای اطمینان از قالب بندی صحیح رشته مفید هستند. این کمک می کند تا اطمینان حاصل شود که رشته وارد شده توسط کاربر در قالب صحیح UTF-16 است و خطاها در دوره ایموجی را کاهش می دهد.- روشهایی که Array و TypedArray را با کپی تغییر میدهند: این میتواند برای ایجاد کپیهای اصلاحشده از آرایهها بدون تأثیر بر دادههای اصلی مفید باشد، که مخصوصاً در مواردی که نیاز دارید دادههای اصلی را برای مقایسه یا اهداف دیگر نگه دارید، صادق است.
- قابل تغییر اندازه
ArrayBuffer
و کشت می شودSharedArrayBuffer
: با اجازه دادن به شما برای تخصیص کارآمدتر حافظه، انعطاف بیشتری را فراهم می کند. - پرچم RegExp v با مجموعه ویژگی های علامت گذاری و رشته: قابلیت هایی را برای عبارات منظم اضافه می کند.
- فراخوانی دنباله WebAssembly: راهی برای بهینه سازی انواع خاصی از فراخوانی عملکرد ارائه می دهد.
این به روز رسانی ها تعهد مستمر جامعه توسعه دهندگان Node.js را به بهبود عملکرد و عملکرد نشان می دهد.
همزمان import.meta.resolve()
در Node.js v20، import.meta.resolve()
معرفی شد و نوشتن اسکریپت های مستقل از مکان را آسان تر کرد. این تابع به صورت همزمان بازمی گردد، مشابه رفتار مرورگر، و امکان اجرای کارآمدتر را فراهم می کند.
قلابهای وضوح لودر سفارشی همچنان میتوانند به عنوان یک تابع ناهمگام تعریف شوند، اما import.meta.resolve()
حتی اگر قلاب های مجوز ناهمزمان بارگیری شوند، همچنان به صورت همزمان برای کد برنامه باز می گردند.
رفتار همزمان import.meta.resolve()
به شما این امکان را می دهد که کد را با کارایی بیشتری اجرا کنید، به خصوص زمانی که با حجم زیادی از داده کار می کنید. بهعنوان نویسنده، میتوانید بسته به اولویت خود، قلابهای مجوز را بهعنوان توابع ناهمزمان یا همزمان تعریف کنید. کد برنامه همچنان به صورت همزمان اجرا می شود، صرف نظر از اینکه کنترل کننده های مجوز ناهمزمان بارگیری می شوند یا خیر.
برنامه های کاربردی منفرد اجرایی (SEA)
برنامههای اجرایی منفرد تجربی (SEA) یک ویژگی جدید است که در Node.js v20 معرفی شده است که به شما امکان میدهد برنامه خود را با یک باینری Node.js دستهبندی کنید و به کاربران نهایی اجازه میدهد آن را به عنوان یک فایل اجرایی واحد توزیع و اجرا کنند.
این یک درخواست طولانی مدت از سوی جامعه بوده است، و در طول سال گذشته تیم این رویکرد را اصلاح کرده است.
در Node.js v20، ساختن یک برنامه اجرایی منفرد، به جای تزریق یک فایل JS خام، مستلزم تزریق یک حباب آماده شده توسط Node.js از پیکربندی JSON است.
blob یک فایل حاوی داده های باینری است که در این مورد توسط Node.js تهیه شده است و در باینری تعبیه شده است. این تغییر برای اجازه دادن به چندین منبع همزیستی برای جاسازی شدن در SEA ایجاد شد که موارد استفاده جدید را باز می کند.
به عنوان مثال sea-config.json فایل:
{
"main": "myscript.js",
"output": "sea-prep.blob"
}
هنگامی که توسط دستور اجرا می شود node --experimental-sea-config sea-config.json
blob به نوشته شده است sea-prep.blob فایل، که سپس می تواند به یک فایل باینری تزریق شود.
ویژگی SEA به توسعه دهندگان اجازه می دهد تا برنامه های Node.js را بدون نیاز به نصب Node.js توسط کاربران توزیع کنند. عملکرد ایجاد شده است دارشان سنکه برنده جایزه Contribution Outstanding New Arrival در جوایز JavaScriptLandia در OpenJS World شد.
مایکروسافت، یکی از اعضای بنیاد OpenJS، در حال بررسی این ویژگی به عنوان راهی برای کاهش حملات برداری و گسترش معماری Node.js برای قابلیت همکاری بهتر است. در حالی که ویژگی SEA هنوز آزمایشی است، یک توسعه جدید هیجان انگیز را برای جامعه Node.js نشان می دهد.
کارایی
Node.js v20 با تمرکز تیم توسعه تازه تاسیس Node.js روی عملکرد، پیشرفت های قابل توجهی را در زمان اجرا به ارمغان می آورد. پیشرفتها شامل بهینهسازی بخشهای اصلی محیط زمان اجرا مانند URLها، fetch()
و EventTarget
.
یکی از پیشرفت های قابل توجه کاهش هزینه اولیه است EventTarget
، که نصف شده است و در نتیجه دسترسی سریعتر به تمامی زیرسیستم های استفاده کننده از آن می باشد. علاوه بر این، از فراخوانی های V8 Fast API برای بهبود عملکرد API هایی مانند URL.canParse()
و تایمرها
یکی دیگر از تغییرات خاص، گنجاندن نسخه به روز شده ۲٫۰ Ada است، یک تجزیه کننده URL سریع و سازگار با مشخصات که در C++ نوشته شده است.
خلاصه
در این مقاله، با برخی از ویژگیهای اصلی (تجربی و پایدار) و پیشرفتهایی که Node.js v20 به ارمغان میآورد، مانند بهبود موتور جاوا اسکریپت V8، عملکرد، اجراهای آزمایشی و معرفی یک مدل مجوزهای آزمایشی، آشنا شدید. و همچنین برنامه های یکبار اجرا .
مهم است که بدانید Node.js v14 در آوریل ۲۰۲۳ به طول عمر خود پایان می دهد، بنابراین ایده خوبی است که برنامه ارتقای خود را به Node.js v18 (LTS) یا vNode.js 20 (LTS به زودی) شروع کنید.
آیا می خواهید آخرین نسخه Node.js را امتحان کنید؟ می توانید این کار را با استقرار برنامه Node.js خود در Kinsta انجام دهید و اولین ۲۰ دلار خود را از ما دریافت کنید. ما قبلاً از Node.js v20 پشتیبانی می کنیم، به این معنی که از امروز می توانید ویژگی ها و عملکردهای جدید آن را آزمایش کنید.
نوبت شماست! چه ویژگی ها یا بهبودهایی را در Node.js v20 بیشتر جالب می دانید؟ آیا موارد مهمی وجود دارد که ممکن است نادیده گرفته باشیم؟ در نظرات به ما اطلاع دهید.