diff --git a/navigation.json b/navigation.json
index a78e9835dbeaa..7987739fae938 100644
--- a/navigation.json
+++ b/navigation.json
@@ -1,9 +1,4 @@
{
- "home": {
- "link": "/",
- "translationId": "components.header.links.home",
- "items": {}
- },
"about": {
"link": "/about",
"translationId": "components.header.links.about",
@@ -11,6 +6,14 @@
"governance": {
"link": "/about/governance",
"translationId": "components.navigation.about.links.governance"
+ },
+ "releases": {
+ "link": "/about/previous-releases",
+ "translationId": "components.navigation.about.links.releases"
+ },
+ "security": {
+ "link": "/about/security-reporting",
+ "translationId": "components.navigation.about.links.security"
}
}
},
@@ -30,10 +33,6 @@
"link": "/download/package-manager",
"translationId": "components.downloadList.links.packageManager"
},
- "previousReleases": {
- "link": "/download/releases",
- "translationId": "components.downloadList.links.previousReleases"
- },
"nightlyReleases": {
"link": "https://nodejs.org/download/nightly/",
"translationId": "components.downloadList.links.nightlyReleases"
@@ -100,11 +99,6 @@
}
}
},
- "security": {
- "link": "https://github.com/nodejs/node/security/policy#security",
- "translationId": "components.header.links.security",
- "items": {}
- },
"certification": {
"link": "https://openjsf.org/certification",
"translationId": "components.header.links.certification",
diff --git a/pages/ar/404.md b/pages/ar/404.md
deleted file mode 100644
index 9156292c3bff7..0000000000000
--- a/pages/ar/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: صفحة غير موجودة
-
-### ENOENT: لا يوجد ملف أو مسار بهذا الإسم
diff --git a/pages/ar/about/governance.md b/pages/ar/about/governance.md
deleted file mode 100644
index bde056aa1bcce..0000000000000
--- a/pages/ar/about/governance.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: حوكمة المشروع
-layout: about.hbs
----
-
-# حوكمة المشروع
-
-## منهج الإجماع في إتخاذ القرارات
-
-يتبع النود جي اس نموذج [منهج الإجماع في إتخاذ القرارات][].
-
-## المساهمون
-
-تتم صيانة المستودع الرئيسي [nodejs/node][] من طرف مجموعة من المساهمين الذين تتم إضافتهم من قبل [لجنة التوجيه التقني][] بصفة مستمرة
-
-يعتبر الاشخاص الذين يساهمون مساهمة قيمة و ملحوظة مساهمين فعليين، و يمنحون حق اجراء تغييرات إلى المشروع مباشرة، و يتم تحديد هؤلاء الأشخاص من قبل لجنة التوجيه التقني، كما تتم مناقشة تسميتهم مع المساهمين الحاليين.
-
-للاطلاع على قائمة المساهمين الحالية، انظر ملف [README.md][] الخاص بالمشروع
-
-يجدر الإشارة أيضا إلى أن هناك دليلا يخص المساهمين و تتم مراجعته دوريا في ملف [collaborator-guide.md][]
-
-## اللجان العليا
-
-يتم قيادة المشروع بشكل مشترك من قبل كل من [لجنة التوجيه التقني (TSC)][] المسؤولة عن القيادة العليا للمشروع و [لجنة المجتمع (CommComm)][] المسؤولة عن توسيع مجتمع النود جي اس.
-
-[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
-[لجنة المجتمع (CommComm)]: https://github.com/nodejs/community-committee/blob/master/Community-Committee-Charter.md
-[منهج الإجماع في إتخاذ القرارات]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making
-[README.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
-[لجنة التوجيه التقني (TSC)]: https://github.com/nodejs/TSC/blob/master/TSC-Charter.md
-[لجنة التوجيه التقني]: https://github.com/nodejs/TSC
-[nodejs/node]: https://github.com/nodejs/node
diff --git a/pages/ar/about/index.md b/pages/ar/about/index.md
deleted file mode 100644
index eb34d9e8b400f..0000000000000
--- a/pages/ar/about/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-layout: about.hbs
-title: عن النود جي اس
-trademark: العلامة التجارية
----
-
-# عن الـ Node.js ®
-
-كونه بيئة تشغيل جافاسكريبت غير متزامنة و مدفوعة بالاحداث، فإن Node.js صمم لبناء تطبيقات للشبكات قابلة للتطوير. في المثال الأتي، يمكن التحكم في عدة اتصالات معا في وقت واحد و مع كل اتصال يتم تشغيل دالة مستدعاة، وعندما لن يكون هناك عمل لاتمامه، سيقف النود جي اس عن العمل مؤقتا.
-
-```javascript
-const http = require('http');
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hello World');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server running at http://${hostname}:${port}/`);
-});
-```
-
-هذا على النقيض من نموذج التزامن الأكثر شيوعا اليوم أين يتم استخدام الخيوط الخاصة بالنظام
-
-إن شبكة مبنية على الخيوط تعتبر غير فعالة نسبيا، و صعبة الاستخدام. و إضافة إلى ذلك فإن مستخدمي Node.js لن يكون لديهم قلق حول اغلاق العملية بما أنه ليس هنالك اقفال. تقريبا، ليس هنالك من دالة في Node.js تعمل مباشرة على مستوى الادخال و الاخراج لذلك لا تتوقف اي عملية، لذلك فإن بناء انظمة قابلة للتطوير بNode.js يعد امرا محببا و منطقيا. اذا كانت الفقرة السابقة تحتوي على مصطلحات مبهمة بالنسبة إليك تفضل بقراءة هذا المقال للتعمق (باللغة الانجليزية) [Blocking vs Non-Blocking][].
-
----
-
-تعتبر النود جي اس شبيهة في تصميمها بمكتبات و أنظمة مثل [Event Machine][] الخاصة بالروبي و [Twisted][] الخاصة بالبايثون.
-
-تأخذ Node.js نموذج الاحداث (event model) ابعد قليلا فتمثل الحلقة التكرارية الخاصة بالاحداث ([event loop][]) كمكون اساسي في وقت التشغيل (runtime construct) وليس كمكتبة في انظمة أخرى، حيث ان هنالك دائما استدعاء متزامن (blocking call) للبدء في حلقة الاحداث. مبدئيا، يتم تحديد السلوك عبر دالة مستدعاة في بداية السكريبت في نهايتها تقوم بتشغيل خادم (server) عبر استدعاءٍ غير متزامن (blocking call) مثل `EventMachine::run()`، ولكن في Node.js لا يوجد شيء من هذا القبيل. تقوم Node.js بكل بساطة بدخول حلقة الاحداث بعد تنفيذها لسكريبت الادخال و تخرج من الحلقة السالفة الذكر عندما لا يكون هنالك اي دوال مستدعاة اخرى تستوجب التنفيذ. هذا النمط يشبه JavaScript الخاصة بالمتصفح اين يتم اخفاء حلقة الاحداث عن المستخدم.
-
-يعتبر بروتوكول الـHTTP مهما في Node.js. حيث انه تم أخذ اعتبار بث و تقليل وقت التأخير و هذا ما يجعل النود ممتازة لبناء مكتبات و إطارات عمل خاصة بالويب.
-
-[Blocking vs Non-Blocking]: /en/docs/guides/blocking-vs-non-blocking/
-[event loop]: /en/docs/guides/event-loop-timers-and-nexttick/
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/ar/docs/es6.md b/pages/ar/docs/es6.md
deleted file mode 100644
index a5ae9276e2238..0000000000000
--- a/pages/ar/docs/es6.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: ECMAScript 2015 (ES6) و ما بعدها
-layout: docs.hbs
----
-
-# نسخة ECMAScript 2015 (ES6) و ما بعدها
-
-تم بناء الـ Node.js باستعمال نسخ حديثة من الـ [V8](https://v8.dev/docs/profile)، وهذا يضمن إتاحة آخر المميزات الخاصة بالجافاسكريبت والموافقة لـ [مواصفات JavaScript ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm) للمطورين في الوقت المناسب، إضافة إلى التحسينات المستمرة في الأداء والثبات.
-
-تقسم مميزات الـ ECMAScript 2015 (ES6) إلى ثلاثة مجموعات: **المميزات التي تم شحنها** و**المميزات التي سيتم شحنها** و**المميزات قيد التقدم** حيث:
-
-- أن كافة **المميزات التي تم شحنها**، والتي يعتبرها الـ V8 ثابتة **يتم تشغيلها تلقائيا على الـ Node.js** ولا تتطلب أي نوع من الإعلام في وقت التشغيل.
-- أن **المميزات التي سيتم شحنها** والتي هي مميزات مكتملة تقريبا ولكنها لا تعتبر ثابتة حسب فريق تطوير الـ V8 تتطلب علما في وقت التشغيل لاستعمالها: `--harmony`
-- أن **المميزات قيد التقدم** يمكن تشغيلها فرديا عبر العلم الخاص بها، رغم أن هذا الأمر منصوح بشدة تجنبه إلا لأغراض الاختبار. ملاحظة: هذه الأعلام معرفة من قبل الـ V8 ومن الممكن لها أن تتغير دون إشعار بذلك.
-
-## أي من المميزات تشحن مع أي نسخة من الـ Node.js افتراضيا ؟
-
-يوفر موقع [node.green](https://node.green/) نظرة عامة ممتازة حول مميزات الـ ECMAScript المدعومة في مختلف نسخ الـ Node.js بناء على جدول كانغاكس.
-
-## أي من المميزات هي قيد التقدم ؟
-
-تتم إضافة مميزات جديدة للـ V8 دوريا، وعموما يتوقع وصول هذه المميزات إلى الـ Node.js على الرغم من أن التوقيت يبقى غير معلوم.
-
-يمكنك الاطلاع على هذه المميزات التي هي **قيد التقدم** في كل نسخة من نسخ الـ Node.js عبر استعمال الأمر `grep` مع `--v8-options` وتجدر الأشارة إلى أن هذه المميزات غير مكتملة وقد تتعطل، لذلك فإن استعمالها يقع على مسؤوليتك الخاصة:
-
-```bash
-node --v8-options | grep "in progress"
-```
-
-## لقد قمت بإعداد بنيتي التحتية للاستفادة من علم `--harmony`. هل يجب علي إلغاء ذلك؟
-
-إن السلوك الحالي لعلم `--harmony` هو تمكين **المميزات التي سيتم شحنها** فقط. ففي نهاية المطاف هي تعتبر مرادفاً لـ `--es_staging`، وكما ذكر مسبقا فإن هذه الميزات تعتبر كاملة ولكن غير ثابتة بعد. إذا أردت أن يتم ذلك بأمان، خصوصا في بيئة إنتاجية فيجب عليك أن تأخذ بعين الاعتبار حذف هذا العلم حتى يتم شحن تلك الميزات افتراضيا مع الـ V8، ومن ثم مع الـ Node.js. إذا أبقيت على هذه الميزات مفعلة، فيجب أن تتوقع تَوَقُف شيفرتك عن العمل في ترقيات قادمة من الـ Node.js إذا غير الـ V8 من مسمياتهم لاتباع المعايير أكثر.
-
-## كيف يمكنني معرفة أي نسخة من الـ V8 يتم تضمينها مع نسخة معينة من الـ Node.js ؟
-
-يوفر الـ Node.js طريقة سهلة لسرد كافة الاعتمادات والنسخ التي يتم تضمينها مع ملف ثنائي محدد عبر الكائن العام `process`. في حالة محرك الـ V8، بكتابة الأمر التالي في الطرفية لمعرفة نسخته:
-
-```bash
-node -p process.versions.v8
-```
diff --git a/pages/ar/docs/guides/abi-stability.md b/pages/ar/docs/guides/abi-stability.md
deleted file mode 100644
index a647cdadb5bff..0000000000000
--- a/pages/ar/docs/guides/abi-stability.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: الواجهة الثنائية للتطبيق
-layout: docs.hbs
----
-
-# ثبات الواجهة الثنائية للتطبيق
-
-## مقدمة
-
-تعتبر الواجهة الثنائية للتطبيق طريقة يمكن للبرامج من خلالها أن تستدعي دوال و تستعمل هياكل بيانات من برامج مفسرة أخرى.
-فهي تعتبر النسخة المفسرة لواجهة برمجة تطبيق الخاصة برنامج ما. بعبارة أخرى، هي ترويسات الملفات التي تصف المصنفات و الدوال
-و هياكل البيانات و التعدادات إضافة إلى الثوابت التي تسمح لتطبيق بأن ينفذ مهمة مرغوبة استجابة لطريقة تفسير مجموعة من العناوين و قيم الإعدادات المتوقعة سلفاُ
-إضافة إلى احجام هياكل الذاكرة و الأنساق التي بواسطتها تم تفسير مزود الواجهة الثنائية للتطبيق.
-
-يجب على التطبيق الذي يستعمل الواجهة الثنائية للتطبيق أن يُفسر بطريقة تجعل العناوين و الإعدادات المتوقعة و أحجام هياكل الذاكرة و الأنساق متوافقة مع
-تلك التي تم بواسطتها تفسير مزود الواجهة الثنئاية للتطبيق، ويتم تحقيق هذا عادة عبر التفسير باستخدام الترويس التي تم توفيرها من طرف مزود الواجهة الثنائية للتطبيق.
-
-بما أن مزود الواجهة الثنائية للتطبيق و مستخدم الواجهة الثنائية للتطبيق قد يتم تفسيرهما في أوقات مختلفة باستعمال نسخ مفسرات مختلفة، فإن القطعة المسؤولة عن
-عن ضمان توافق الواجهة الثنائية للتطبيق تكون داخل المفسر. يجب على النسخ المختلفة من المفسرات التي قد يتم توفيرها من طرف بائعين مختلفين أن تنتج نفس النسخة من
-الواجهة الثنائية للتطبيق انطلاقا من ملف ترويسة ذو محتوى محدد، كما يجب عليها ان تنتج شيفرة خاصة بالتطبيق باستعمال الواجهة الثنائية للتطبيق التي يمكنها الوصول إلى الواجهة البرمجية
-للتطبيق و التي تم وصفها في ترويسة معطاة استنادا إلى الناتج المتفق عليه للواجهة الثنائية للتطبيق الناتجة عن الوصف المتوفر في الترويسة. إن المفسرات الحديثة تمتلك سجل تتبع جيداُ فيما يخص
-تحقيق التوافق بين الواجهات الثنائية للتطبيقات التي تنتجها.
-
-تقع المسؤولية الباقية فيما يخص ضمان توافق الواجهة الثنائية للتطبيق على عاتق الفرق المسؤول عن صيانة ملفات الترويس التي توفر واجهة برمجية للتطبيق التي بدورها تنتج
-عن تفسير الواجهة الثنائية للتطبيق التي تبقى ثابتة. يمكن إجراء تغييرات على على ملفات الترويس، لكن يجب تتبع طبيعة هذه التغييرات بدقة لضمان أنه بعد تفسير الواجه الثنائية للتطبيق،
-ﻻ تتغير بطريقة تؤدي إلى الإخلال بتوافق الواجهات الثنائية للتطبيقات الخاصة بالمستخدمين الحاليين مع النسخ الجديدة.
-
-## ثبات الواجهة البرمجية للتطبيقات في الـ Node.js
-
-توفر الـ Node.js ملفات ترويس يتم صيانتها من طرف عدة فرق تقنية مستقلة. على سبيل المثال، ملفات الترويس مثل `node.h` و `node_buffer.h` يتم صيانتها من طرف فريق الـ Node.js، بينما يتم صيانة ملف `v8.h` من طرف فريق الـ V8، الذي هو مستقل و يمتلك اجندته و أولوياته الخاصة رغم تعاونه الوثيق مع فريق الـ Node.js. مع ذلك، ليس لفريق الـ Node.js سوى تحكم جزئي على التغييرات التي يتم طرحها في ملفات الترويس التي يوفرها المشروع. نتيجة لما سبق، فإن مشروع الـ Node.js تبنى سياسة [الترميز الدلالي](https://semver.org/) ليضمن أن الواجهة البرمجية للتطبيق الموفرة من المشروع تنتج واجهة ثنائية ثابتة لجميع نسخ الـ Node.js الصغرى و الإصلاحية التي تم إطلاقها تحت نسخة رئيسية واحدة، وهذا يعني أن مشروع الـ Node.js يلزم نفسه بضمان أن الإضافات الأصلية للـ Node.js التي تم تفسيرها بواسطة نسخة رئيسية من الـ Node.js تعمل بنجاح عند تشغيلها من طرف أي نسخة ثانوية أو نسخة اصلاحية للـ Node.js تنتمي للنسخة الرئيسية التي تم تفسيرها اساسا بها.
-
-## N-API
-
-لقد تزايد الطلب لتزويد الـ Node.js بواجهة تطبيقات برمجية تنتج واجهة تطبيقات ثنائية تكون ثابتة على عدة نسخ رئيسية من الـ Node.js، و ما حفزنا لإنشاء واجهة برمجية مشابهة هو ما يلي:
-
-- بقاء لغة الجافاسكريبت متوافقة مع ذاتها من أيامها الأولى، بينما تتغير الواجهة الثنائية للتطبيق الخاصة بالمحرك الذي ينفذ الجافاسكريبت مع كل نسخة رئيسية للـ Node.js و هذا يعني أن أي تطبيق كُتب تماما بالجافاسكريبت لا يحتاج ﻹعادة تفسيره أو تثبيته أو نشره لأن النسخة الرئيسية الجديدة من الـ Node.js قد تم التخلي عنها في البيئة الانتاجية التي يشتغل عليها التطبيق. هذا التفاوت بين حزم الـ Node.js التي تحتوي على إضافات أصلية و تلك المكتوبة كليا بالجافاسكريبت قد أُضيف لعبئ صيانة الأنظمة الانتاجية التي تعتمد على الإضافات الأصلية.
-
-- وجود مشاريع أخرى بدأت في إنتاج واجهات الجافاسكريبت التي تعتبر بدائل للـ Node.js. بما أن هذه المشاريع قد تم بناؤها اعتمادا على محركات جافاسكريبت مختلفة عن الـ V8، فإن اضافاتها الأصلية تنطوي بالضرورة على هيكلية مختلفة و تستعمل واجهة برمجية مختلفة، و رغم ذلك، فإن استعمال واجهة برمجية واحدة خاصة بإضافة أصلية في عدة نسخ لواجهة الجافاسكريبت البرمجية الخاصة بالـ Node.js سيسمح لهذه المشاريع بأن تستعمل مميزات النظام البيئي لحزم الجافاسكريبت التي تتمحور حول الـ Node.js
-- قد يحتوي الـ Node.js على محركات جافاسكريبت مختلفة مستقبلا، و هذا يعني أن جميع واجهات الـ Node.js ستبقى نفسها خارجيا، لكن سيعني أيضا أن ملفات الترويس الخاصة بالـ V8 ستكون غائبة.
- مثل هذه الخطوة ستؤدي إلى اختلال النظام البيئي للـ Node.js عموماً و النظام البيئي الخاص بالإضافات خصوصاً إذا كانت الواجهة البرمجية للإضافة التي لا تستعمل محرك جافاسكريبت ليست موفرة من قبل الـ Node.js و غير متبناة من طرف الإضافات الأصلية.
-
-لهذه الأطراف، تم طرح الـ N-API في النسخة 8.6.0 و تم تمييزه كميزة مستقرة في النسخة 8.12.0. هذه الواجهة البرمجية معرفة في ملفات الترويس [`node_api.h`][] و [`node_api_types.h`][] و تضمن توافقا متقدما على مستوى عدة نسخ رئيسية من الـ Node.js كما يلي:
-**تتوفر نسخة معينة _n_ من الـ N-API في النسخة الرئيسية من الـ Node.js التي نشرت فيها، و في كافة نسخ الـ Node.js اللاحقة بما فيها النسخ الرئيسية منها.**
-
-يمكن لمطوري الإضافات الأصلية إستغلال التوافق المتقدم الذي يضمنه الـ N-API عبر ضمان أن الإضافة تستعمل الواجهات البرمجية المحددة في في ملف ترويس `node_api.h` فقط مع هياكل البيانات و الثوابت المحدد في ملف `node_api_types.h`. بالقيام بذلك، يسهل المطورون تبني إضافاتهم عبر تنبيه المستخدمين في مرحلة الإنتاج إلى أن عبء صيانة تطبيقاتهم لن يزيد بتغيير الإضافات الأصلية في مشاريعهم بل بإضافة حزم مكتوبة كليا بالجافاسكريبت.
-
-ينطوي الـ N-API على نسخ عدة لكون أن هناك واجهات برمجية جديدة تضاف من وقت ﻵخر، وعكس الترميز الدلالي، فإن تنسيخ الـ N-API هو تراكمي، أي أن كل نسخة منه تمثل نفس المعنى للنسخ الثانوية في نظام الترميز الدلالي و بالتالي فإن كل التغييرات التي يتم إجراؤها على الـ N-API تكون متوافقة مع النسخ الأقدم. إضافة إلى ما سبق، فإن هناك نسخ جديدة من الـ N-API تضاف تحت بند "تجريبي" لإعطاء المجتمع الفرصة لفحصها في بيئة إنتاجية. تعني الحالة التجريبية أنه على الرغم من ان هناك اهتماماً لضمان أن ﻻ يجب تعديل الواجهات البرمجية الجديدة بطريقة تلغي توافق الواجهات الثنائية للتطبيقات مستقبلا، فإنه لم يتم الموافقة على كونها صحيحة و مفيدة بشكل كافٍ في الانتاج كما تم تصميمها، وعليه فيمكنها ان تنطوي على تغييرات غير متوافقة مع الواجهات الثنائية للتطبيق قبل أن يتم دمجها أخيراً مع نسخة قادمة من الـ N-API. بمعنى آخر، فإن نسخة تجريبية من الـ N-API لا يُضمن ان تحقق توافقا متقدما.
-
-[`node_api.h`]: https://github.com/nodejs/node/blob/main/src/node_api.h
-[`node_api_types.h`]: https://github.com/nodejs/node/blob/main/src/node_api_types.h
diff --git a/pages/ar/docs/guides/anatomy-of-an-http-transaction.md b/pages/ar/docs/guides/anatomy-of-an-http-transaction.md
deleted file mode 100644
index 97be558463a19..0000000000000
--- a/pages/ar/docs/guides/anatomy-of-an-http-transaction.md
+++ /dev/null
@@ -1,426 +0,0 @@
----
-title: التركيبة البنيوية لمُعَامَلَة HTTP
-layout: docs.hbs
----
-
-# التركيبة البنيوية لمُعَامَلَة HTTP
-
-الغاية من هذا الدليل هو مَنَح معارف قوية لعمل Node.js في معالجة HTTP. لنفرض أنك تعرف
-بشكل عام كيف تعمل طلبات HTTP بغض النظر عن اللغة أو بيئة البرمجة وسنفرض أيضا على دِرَايَة
-بقليلا من Node.js [`EventEmitters`][] و [`Streams`][]. إذا لم تكن فِعْلاً على دِرَايَة بهم وإنه
-الجَدِير قيام بقراءة سريعة من خلال توثيقات واجهة برمجة التطبيقات (API) لكل منهم.
-
-## إنشاء الخادم
-
-أي تطبيق خادم الويب node وفي نقطة ما لإنشاء كائن خادم الويب، يتم ذلك
-بإستعمال [`createServer`][].
-
-```javascript
-const http = require('http');
-
-const server = http.createServer((request, response) => {
- // السحر يحدث هنا!
-});
-```
-
-هذه الدالة تمرر داخل [`createServer`][] وهذا يدعى واحدة لكل طلب HTTP وهذا ما يجعله
-مُقَابِلَ هذا الخادم ولذا يدعى معالج الطالب، في الحقيقة كائن الخادم [`Server`][] مرجع
-بواسطة [`createServer`][] هو مُصدِر الحدث [`EventEmitter`][] و ما لدينا هنا فقط إختزال
-لإنشاء كائن الخادم `server` وبعدها إضافة المستمع لاحقا.
-
-```javascript
-const server = http.createServer();
-server.on('request', (request, response) => {
- // نفس النوع من السحر يحدث هنا!
-});
-```
-
-عندما طلب HTTP يضرب الخادم، node يستدعي دالة معالجة الطالب مع القليل من الكائنات
-المتاحة لتعامل مع المُدَاوَلَةٌ الطلب `request` و الجواب `response`، سوف نجلبهم قَرِيباً.
-
-في التقدم الفعلي لطلب الخادم، طريقة الإستماع [`listen`][] تحتاج لإستدعاء كائن الخادم
-`server` في أغلب الحالات، كل ماتحتاج لتمريره للمستمع `listen` هو رقم المنفذ "port" الذي
-تريد الخادم الإستماع إليه، يوجد بعض الخيارات الاخرى أيضا لذا راجع المرجع [API reference][].
-
-## طريقة 'Method' و رابط 'URL' و رؤوس 'Headers'
-
-عند معالجة الطلب أول حاجَة ربما تود القيام بها هي تفقد الطرق و الرابط URL، لذا
-هذه الإجراءات المُلاَئِمة يمكن إتخاذها. Node جعل هذه متعبة نسبيا بوضع خَواصُّ المعالجة داخل
-كائن الطلب `request`.
-
-```javascript
-const { method, url } = request;
-```
-
-> **ملاحظة:** كائن الطلب `request` هو مثيل لرسالة القادمة [`IncomingMessage`][].
-
-الطريقة `method` هنا ستكون دائما HTTP method/verb عاديا و `url` هو الرابط بدون خادم و
-البروتوكول أو المنفذ. لرابط نموذجي هذا يعني أن كل شئ بعد و مُتَضَمّن الخط مائلة للأمام "/" الثالث.
-
-الرؤوس هي أيضا ليست بعيدة جدا، هم يملكون كائن في الطلب `request` يدعى الرؤوس `headers`.
-
-```javascript
-const { headers } = request;
-const userAgent = headers['user-agent'];
-```
-
-من المهم أن نذكر هنا أن جميع الرؤوس تًظهر الأحرف الصغيرة فقط وبِغَضّ النّظَرِ عن كيف ما
-أرسلها العميل. هذا يسهل عملية تحليل الرؤوس لأي غرض محتمل.
-
-إذا تم تكرار بعض الرؤوس وبعدها هذه القيم إعادة الكتابة عليها أو سلاسل مَوْصُولة بفاصلة
-إسْتِنَاداً إلى الرأس، في بعض الحالات يمكن أن يكون مشكل لذا الروؤس الخام [`rawHeaders`][]
-هي أيضا متاحة.
-
-## طلب الجسم (Request Body)
-
-عند تلقي طلب من `POST` أو `PUT`، جسم الطلب ربما يكون مهماً لتطبيقك.
-للحصول على بيانات الجسم هو يَتَضَمّن أكثر من الوصول لطلبات الروؤس،
-كائن الـ`request` تمرر داخل أدوات المعالجة لواجهة الـ[`ReadableStream`][].
-هذا التدفق يمكن الإستماع له أو نقله كأي تدفق أخر. يمكنك أخذ البيانات مباشرة
-من التدفق عن طريق الإستماع إلى أحداث التدفقات `'data'` و `'end'`.
-
-الأجزاء الباعثة في كل `'data'` والحدث هو [`Buffer`][]. إذا كنت تعرف أنها
-ستكون سِلْسِلَة من البيانات، أفضل شئ تفعله هو تجميع البيانات في مصفوفة
-وبعدها في `'end'`، الرصفهم وتحويلهم إلى نصوص.
-
-```javascript
-let body = [];
-request
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- // في هذه النقطة، `body` عنده كامل طلب الجسم مخزن فيه على شكل سلسلة نصية
- });
-```
-
-> **ملاحظة:** قد يبدو هذا صبيانيا ومملا، وفي كثير من الحالات هو كذلك و لحسن الحظ
-> هناك وحدات مثل [`concat-stream`][] و [`body`][] في [`npm`][] والتي يمكن أن تساعد
-> في إخفاء بعضاً من هذا المنطق. من المهم أن تفهم جيدا ماذا يحدث قبل الخوض في هذا
-> الطريق ولهذا السبب أنت هنا!
-
-## حاجَة سريعة حول الأخطاء
-
-بِما أَنَّ كائن `request` هو [`ReadableStream`][] إنه أيضًا [`EventEmitter`][]
-و يتصرف كما أن خطأً قد حدث.
-
-أي خطأ في تدفق `request` يقدم نفسه ببعث لحدث `'error'` في التدفق. **إذا لم يكن
-لديك مستمع لهذا الحدث، فالخطأ س*يلقي*، والتي سيحبط برنامج Node.js الخاص بك.**
-ولذا يجب عليك إضافة مستمع لـ`'error'` على طلب تدفقاتك، حتى وإن سجلته فقط و
-أكملت في طريقك.(ولو أنه من الأفضل لإرسال مشابه لخطأ جواب HTTP. المزيد على ذلك لاحقًا.)
-
-```javascript
-request.on('error', err => {
- // هذا يطبع رسالة الخطأ و أثره مكدس في `stderr`.
- console.error(err.stack);
-});
-```
-
-هنالك طرق أخرى لمعالجة الأخطاء [handling these errors][] مثل بعض ملخصات و
-الأدوات لكن كن دائمًا على دراية بأن الأخطاء يمكن أن تحدث وستحدث و ستقوم
-بالتعامل معهم.
-
-## على ماذا حصلت لِحَدّ الآن
-
-في هذه النقطة لقد غطينا إنشاء خادم و إنْتِزاع الطرق و الروابط الروؤس و الجسم من
-الطلبات. عندما نضع كل ذلك معا رُبّمَا ستظهر كما هذه:
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- const { headers, method, url } = request;
- let body = [];
- request
- .on('error', err => {
- console.error(err);
- })
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- // في هذه النقطة، لدينا الرؤوس و الطريقة و الرابط و الجسم ويمكن الآن
- // القيام بما نحتاج إليه في أمر للجواب لهذا الطلب
- });
- })
- .listen(8080); // تنشيط الخادم و الاستماع على منفذ 8080.
-```
-
-إذا شغلنا هذا المثال سنكون قادرين على _تلقي_ الطلبات، لكن لا _نرد_ عليهم،
-في حَقِيقَةِ الأمْر إذا عَرَض هذا في المتصفح، طلبك سيكون خارج المهلة ولاشئ يعاد
-.إرساله للعميل
-
-حتى الآن نحن لم نلمس كائن الجواب `response` كلياً. أَيّما في ما ذاك لـ[`ServerResponse`][]
-و مِمّ هو [`WritableStream`][]. أنه يحتوي على العديد من الطرق المفيدة لإرسال البيانات
-الراجعة لعميل و سنقوم بتغطية ذلك لاحقا.
-
-## رمز الحالة HTTP
-
-إذا كنت لا تُبالي في إعداده، رمز الحالة لـHTTP سيكون دائما في الروؤس 200،
-طبعاً ليس في كل جواب يعلمك به و في بعض النقاط حتما ستريد إرسال رمز حالة
-مختلف، للقيام بهذا يمكنك تعيين خاصية `statusCode`.
-
-```javascript
-response.statusCode = 404; // أخبر العميل أنه لم يتم العثور على المصدر.
-```
-
-هناك بعض الاختصارات الأخرى لهذا ، كما سنرى قريبًا.
-
-## إعداد جواب رؤوس
-
-يتم تعيين الرؤوس من خلال طريقة مناسبة تسمى [`setHeader`][].
-
-```javascript
-response.setHeader('Content-Type', 'application/json');
-response.setHeader('X-Powered-By', 'bacon');
-```
-
-عند ضبط الرؤوس على الجواب، في الحالة التي تكون غير مدرك لأسمائهم.
-إذا عينت الروؤس بشكل متكرر القيمة الأخيرة التي هي القيمة التي ترسل.
-
-## مُرفق إرسال بيانات الرأس
-
-الطرق لضبط الروؤس و رمز الحالة والتي سبق أن تناقشنا بإعتبرك أنك تستخدم "الروؤس المضمنة"
-"implicit headers". هذا يعني أنك مُعْتَمِد على node للإرسال الروؤس لك في الوقت الحالي قبل البدء
-في إرسال بيانات الجسم.
-
-إذا أردت يمكنك _تصريح_ بكتابة الروؤس لتدفق الجواب، للقيام بهذا يوجد طريقة تدعى [`writeHead`][]
-التي تكتب رمز الحالة و الروؤس إلى التدفق.
-
-```javascript
-response.writeHead(200, {
- 'Content-Type': 'application/json',
- 'X-Powered-By': 'bacon',
-});
-```
-
-بمجرد تعيينك الروؤس (سواء ضمنيًا أو صريحًا)، أنت مستعد للبدء في إرسال بيانات الجواب.
-
-## إرسال جواب الجسم
-
-بِما أَنَّ كائن الجواب `response` هو تدفق قابل للكتابة [`WritableStream`][]، كتابة جسم الجواب
-خارجيا للعميل هي فقط مَسْألَة للإستخدام طرق التدفق الإعتيادية.
-
-```javascript
-response.write('');
-response.write('');
-response.write('
Hello, World!
');
-response.write('');
-response.write('');
-response.end();
-```
-
-دالة النهاية `end` في التدفقات يمكن ان تأخذ في بعض البيانات الإختيارية لإرسالها
-كأخر حرف من البيانات في التدفقات لذا يمكن تبسيطها في المثال الأعلى.
-
-```javascript
-response.end('
Hello, World!
');
-```
-
-> **ملاحظة:** من المهم تعيين الحالة و الروؤس _قبل_ البدء بكتابة أقسام من البيانات
-> للجسم وهذا يبدو منطقيا. منذ متى تأتي النص قبل الرؤوس في جوابات HTTP.
-
-## حاجَة أخرى سريعة حول الأخطاء
-
-تدفق الجواب `response` يمكن أن يبعث حالة الأخطاء `'error'` و بعض النقاط ستتعامل معه أيضا.
-جميع النصائح لتدفق أخطاء الطلب `request` لاتزال تطبق هنا.
-
-## لنضعهم جميعا مع بعض
-
-الآن بعد أن تعلمنا عن عمل جوابات HTTP، لنقم بوضعهم كلهم معاً.
-بناء على المثال السابق سنقوم بإنشاء خادم يعيد إرسال جميع البيانات التي إرسلها
-إلينا من قِبل المستخدم وسنقوم بتنسيق البيانات على شكل JSON بإستعمال `JSON.stringify`.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- const { headers, method, url } = request;
- let body = [];
- request
- .on('error', err => {
- console.error(err);
- })
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- // بداية الاشياء الجديدة
-
- response.on('error', err => {
- console.error(err);
- });
-
- response.statusCode = 200;
- response.setHeader('Content-Type', 'application/json');
- // ملاحظة: السطرين في الأعلى يمكن إستبداله بالسطر التالي.
- // response.writeHead(200, {'Content-Type': 'application/json'})
-
- const responseBody = { headers, method, url, body };
-
- response.write(JSON.stringify(responseBody));
- response.end();
- // ملاحظة: السطرين في الأعلى يمكن إستبداله بالسطر التالي.
- // response.end(JSON.stringify(responseBody))
-
- // نهاية الاشياء الجديدة
- });
- })
- .listen(8080);
-```
-
-## مثال لتردد خادم
-
-لنسهل المثال السابق لإنشاء خادم ترددي بسيط، أَيّ يرسل مهما كانت البيانات فقط والتي أستلمت
-من توا من الجواب. كل ما نريد فعله هو أخذ طلب التدفق و كتابة البيانات في جواب التدفق وهو
-مماثل ما فعلنا في السابق.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- let body = [];
- request
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- response.end(body);
- });
- })
- .listen(8080);
-```
-
-الآن لنقم تطويع هذه، نريد إرسال فقط تردد وفقا لشروط لمتبعة:
-
-- طريقة الطلب هي POST.
-- الرابط 'URL' هو `/echo`
-
-في حالة أخرى نحن نريد تبسيط الرد مع 404.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- if (request.method === 'POST' && request.url === '/echo') {
- let body = [];
- request
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- response.end(body);
- });
- } else {
- response.statusCode = 404;
- response.end();
- }
- })
- .listen(8080);
-```
-
-> **ملاحظة:** عند التحقق من الرابط URL بهذه الطريقة، نحن نقوم بشكل من التوجيه "routing".
-> ويوجد أشكال أخرى للتوجيه بسيطة مثل دالة `بَدَّالَةٌ` `switch` أو معقدة كما في أدوات مثل
-> [`express`][]. إذا كنت نبحث على شئ يقوم بالتوجيه ولاشئ أخر جرب [`router`][].
-
-رائع! الآن نستقر على تبسيط هذا وتذكر كائنات الطلب `request` هي تدقف قابل للقراءة
-[`ReadableStream`][] و كائنات الجواب `response` هي تدفق قابل للكتابة [`WritableStream`][].
-وهذا يعني أنه يمكننا إستخدام [`pipe`][] لتوجيه البيانات من واحدة لأخرى. وهذا تماما مانريده
-من خادم إرتدادي!
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- if (request.method === 'POST' && request.url === '/echo') {
- request.pipe(response);
- } else {
- response.statusCode = 404;
- response.end();
- }
- })
- .listen(8080);
-```
-
-أجل التدفقات!
-
-نحن لم ننتهي بعد على الرغم كما ذكرنا في عدة مرات في هذا الدليل، الأخطاء واردة
-و نحتاج التعامل معها.
-
-لتعامل مع الأخطاء في طلب التدقف، وكذا مخرج الخطأ في `stderr` و إرسال رمز الحالة 404
-تدل على أن طلب سيء `Bad Request` ليس كما التطبيق في الحقيقي على أية حال، نود تفحص
-الخطأ لمعرفة ماهو رمز الحالة الصحيح وما ستكون الرسالة كالعادة في الأخطاء،يجب عليك مراجعة
-توثيقة `الخطأ` [`Error` documentation][].
-
-في الجواب، سنسجل الخطأ فقط في`stderr`.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- request.on('error', err => {
- console.error(err);
- response.statusCode = 400;
- response.end();
- });
- response.on('error', err => {
- console.error(err);
- });
- if (request.method === 'POST' && request.url === '/echo') {
- request.pipe(response);
- } else {
- response.statusCode = 404;
- response.end();
- }
- })
- .listen(8080);
-```
-
-لقد قمنا الآن بتغطية أغلب الأساسيات مُعَالَجَة طالبات HTTP وفي هذه المرحلة من المفترض
-تقدر على:
-
-تجسيد HTTP مع دالة معالجة الطلب و لإستماع للمنفذ.
-الحصول على الرؤوس و الرابط 'URL' و طرق و بيانات الجسم من كائنات `request`.
-صنع قرارات التوجيه إستنادا إلى الرابط و / أو بيانات أخرى في كائنات `request`.
-إرسال الرؤوس و رموز حالات HTTP و بيانات الجسم بواسطة كائنات `request`.
-نقل البيانات من كائنات `request` وإلى كائنات `response`.
-تعامل مع أخطاء التدفق في حالتي تدقفات `request` و `response`.
-من هذه الأساسيات، خوادم Node.js HTTP في العديد من حالات نَوْعِيّة يمكن إنشاؤه. يوجد
-الكثير مثل هذه الأشياء مزودة بـAPIs لذا تأكد من قرأة التوثيقات الAPI منها
-[`EventEmitters`][] و [`Streams`][] و [`HTTP`][].
-
-[`EventEmitters`]: https://nodejs.org/api/events.html
-[`Streams`]: https://nodejs.org/api/stream.html
-[`createServer`]: https://nodejs.org/api/http.html#http_http_createserver_requestlistener
-[`Server`]: https://nodejs.org/api/http.html#http_class_http_server
-[`listen`]: https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback
-[API reference]: https://nodejs.org/api/http.html
-[`IncomingMessage`]: https://nodejs.org/api/http.html#http_class_http_incomingmessage
-[`ReadableStream`]: https://nodejs.org/api/stream.html#stream_class_stream_readable
-[`rawHeaders`]: https://nodejs.org/api/http.html#http_message_rawheaders
-[`Buffer`]: https://nodejs.org/api/buffer.html
-[`concat-stream`]: https://www.npmjs.com/package/concat-stream
-[`body`]: https://www.npmjs.com/package/body
-[`npm`]: https://www.npmjs.com
-[`EventEmitter`]: https://nodejs.org/api/events.html#events_class_eventemitter
-[handling these errors]: https://nodejs.org/api/errors.html
-[`ServerResponse`]: https://nodejs.org/api/http.html#http_class_http_serverresponse
-[`setHeader`]: https://nodejs.org/api/http.html#http_response_setheader_name_value
-[`WritableStream`]: https://nodejs.org/api/stream.html#stream_class_stream_writable
-[`writeHead`]: https://nodejs.org/api/http.html#http_response_writehead_statuscode_statusmessage_headers
-[`express`]: https://www.npmjs.com/package/express
-[`router`]: https://www.npmjs.com/package/router
-[`pipe`]: https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
-[`Error` documentation]: https://nodejs.org/api/errors.html
-[`HTTP`]: https://nodejs.org/api/http.html
diff --git a/pages/ar/docs/guides/debugging-getting-started.md b/pages/ar/docs/guides/debugging-getting-started.md
deleted file mode 100644
index efedba8d9f011..0000000000000
--- a/pages/ar/docs/guides/debugging-getting-started.md
+++ /dev/null
@@ -1,221 +0,0 @@
----
-title: تصحيح الأخطاء - دليل البدء
-layout: docs.hbs
----
-
-# دليل التصحيح
-
-سيساعدك هذا الدليل للبدء في تصحيح سكريبتات و تطبيقات الـ Node.js الخاصة بك.
-
-## تمكين المدقق
-
-عند بدء الـ Node.js مع تمكين `--inspect`، يتم الانصات إلى عملية تصحيح، و افتراضيا، يتم هذا الانصات عبر المضيف و المنفذ 127.0.0.1:9229.
-يتم إعطاء كل عملية إنصات رقم [UUID][] حصري.
-
-يجب على عميل التدقيق معرفة و تحديد عنوان المضيف و رقم المنفذ، إضافة إلى الـUUID حتى يتم الاتصال.
-سيبدو العنوان كاملا كما يلي:
-`ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`
-
-ستستمع الـ Node.js إلى رسائل التصحيح إذا تلقت إشارة `SIGUSR1` (`SIGUSR1` غير متوفر على ويندوز)، حيث انه
-في الـ Node.js 7 و ما قبله، ينشط إستقبال هذه الإشارة واجهة برمجة التطبيقات القديمة الخاصة بالتصحيح،
-أما في الـ Node.js 8 و ما بعده، فذلك ينشط واجهة برمجة التطبيقات الخاصة بالمدقق
-
----
-
-## تأثيرات أمنية
-
-بما أن لدى مصحح الأخطاء وصولاً كاملاً إلى بيئة تنفيذ الـ Node.js، قد يمكن لبرمجية ضارة متصلة بهذا المنفذ أن تنفذ
-شيفرات عشوائية من خلال عملية الـ Node، ولذلك فإنه من المهم فهم التأثيرات الأمنية المحتملة التي تنتج عن إتاحة
-المنفذ الخاص بمصحح الأخطاء في الشبكات العامة و الخاصة.
-
-## إتاحة المنفذ الخاص بالتصحيح للعامة غير آمن
-
-إذا كان لمصحح الأخطاء عنوان عام، او كان عنوانه هو 0.0.0.0، فيمكن لأي عميل قادر على الوصول لعنوان الانترنت
-الخاص بك أن يتواصل مع مصحح الأخطاء بدون أية قيود، و سيتمكن من تنفيذ برمجيات عشوائية.
-
-إفتراضيا، تأخذ العملية `node --inspect` العنوان 127.0.0.1، ويجب عليك تحديد العنوان العام لها صراحة سواء كان
-0.0.0.0 أو غيره من العناوين إذا كنت تنوي ان تسمح بإتصالات خارجية لمصحح الأخطاء، ولكن فعل هذا قد يعرضك لمخاطر
-أمنية جمة. تأكد من توظيف الجدران النارية و صلاحيات الوصول المناسبة لمنع أي تهديد أمني.
-
-إقرأ القسم المعنون بـ [سيناريوهات تمكين تصحيح الأخطاء عن بعد](#سيناريوهات-تمكين-تصحيح-الأخطاء-عن-بعد) للحصول
-على بعض النصائح حول كيفية تمكين الاتصالات عن بعد بمصحح الأخطاء بشكل آمن.
-
-## التطبيقات المحلية تمتلك الوصول الكامل للمدقق
-
-حتى لو قمت بربط منقذ المدقق بالعنوان 127.0.0.1 (الإفتراضي)، فإن أي تطبيقات محلية ستحصل على صلاحية الوصول الكاملة
-له. لقد تم تصميم ذلك حتى يتسنى لمصححات الأخطاء المحلية أن ترتبط به بالشكل المناسب.
-
-## المتصفحات و مآخذ الويب و سياسة نفس الأصل
-
-يمكن لمواقع الانترنت المفتوحة من متصفح أن تجري طلبات HTTP و webSockets تحت النموذج الأمني الخاص بالمتصفح، و يعد ضروريا
-إجراء اتصال HTTP مبدئي لأجل الحصول على معرف حصري خاص بجلسة تصحيح الأخطاء. تمنع سياسة نفس الأصل المواقع من إجراء هذا الإتصال
-وكتأمين من هجمات الـ [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding)، يقوم الـ Node.js بالتحقق من أن الرؤوس الخاصة
-بالمضيف و الخاصة بالاتصال إما تحدد عنوانا أو `localhost` أو `localhost6` بدقة.
-
-تمنع سياسات التأمين هذه الإتصال عن طريق تحديد إسم المضيف بخادم لتصحيح الأخطاء عن بعد، لكن يمكنك إيجاد طريقة للالتفاف حول هذا بتحديد عنوان
-بروتوكول الانترنت أو باستعمال نفق ssh كما هو موصوف اسفله.
-
-## برامج التدقيق
-
-هناك عدة أدوات مفتوحة المصدر يمكنها الإتصال بالدقق الخاص بالـ Node.js و ما يلي هي معلومات مبدئية عنها:
-
-### [node-inspect](https://github.com/nodejs/node-inspect)
-
-- مصحح أخطاء في سطر الأوامر مدعوم من مؤسسة الـ Node.js و يستعمل البروتوكول المسمى [Inspector Protocol][].
-- تشحن نسخة منه مع الـ Node و يمكن استعماله بواسطة الأمر `node inspect myscript.js`.
-- يمكن تثبيت آخر نسخة منه بشكل مستقل (`npm install -g node-inspect` على سبيل المثال) و يمكن استعمالها بواسطة الأمر `node inspect myscript.js`.
-
-### [Chrome DevTools](https://github.com/ChromeDevTools/devtools-frontend) 55+
-
-- **الطريقة الأولى**: قم بفتح العنوان `chrome://inspect` في أي متصفح مبني على Chromium. قم بالضغط على زر Configure و تأكد
- من أن المضيف و المنفذ في القائمة.
-- **الطريقة الثانية**: قم بنسخ `devtoolsFrontendUrl` من الناتج عن `/json/list` (أنظر أعلاه) أو النص التلميحي الناتج عن --inspect
- و قم بلصقه في Chrome.
-
-### [Visual Studio Code](https://github.com/microsoft/vscode) 1.10+
-
-- في قائمة تصحيح الأخطاء، إضغط على ايقونة الإعدادات لفتح `.vscode/launch.json`.
- قم باختيار "Node.js" للتثبيت الأولي.
-
-### [Visual Studio](https://github.com/Microsoft/nodejstools) 2017+
-
-- قم باختيار "Debug > Start Debugging" من القائمة أو قم بالضغط على F5.
-- [خطوات تفصيلية بالإنجليزية](https://github.com/Microsoft/nodejstools/wiki/Debugging)
-
-### [JetBrains WebStorm](https://www.jetbrains.com/webstorm/) 2017.1+ و منتجات JetBrains الأخرى
-
-- قم بإنشاء إعدادات تصحيح جديدة خاصة بالـ Node.js و اضغط على Debug. سيتم استعمال `--inspect` افتراضياً بالنسبة للنسخ 7 فما فوق.
- لإلغاء ذلك، قم بإلغاء تمكين `js.debugger.node.use.inspect` في السجل الخاص بالبرنامج.
-
-### [chrome-remote-interface](https://github.com/cyrus-and/chrome-remote-interface)
-
-- مكتبة تسهل التواصل بأطراف اتصال بروتوكول التدقيق.
-
-### [Gitpod](https://www.gitpod.io)
-
-- قم بإنشاء إعدادات تصحيح الأخطاء الخاصة بالـ Node.js من `Debug` أو قم بالضغط على F5. هنا [خطوات تفصيلية بالإنجليزية](https://medium.com/gitpod/debugging-node-js-applications-in-theia-76c94c76f0a1)
-
-### [Eclipse IDE](https://eclipse.org/eclipseide) مع إضافة إكليبس الشاملة لتطوير الويب
-
-- من ملف .js، اختر "Debug As... > Node program", او
-- إنشاء اعدادات المنقح لكي يتمكن من تشغيل تطبيق Node (بدأ بـ `--inspect`).
-
----
-
-## خيارات سطر الأوامر
-
-يبين الجدول الآتي تأثير كل تخصيص خاص بوقت التشغيل على تصحيح الأخطاء:
-
-
-
التخصيص
المعنى
-
-
--inspect
-
-
-
يقوم بتمكين عميل التدقيق
-
يشتغل إفتراضيا على العنوان و المنفذ (127.0.0.1:9229)
-
-
-
-
-
--inspect=[host:port]
-
-
-
يقوم بتمكين عميل التدقيق
-
يحدد عنوانا أو إسم مضيف host (افتراضيا: 127.0.0.1)
-
يشتغل على المنفذ port (افتراضيا: 9229)
-
-
-
-
-
--inspect-brk
-
-
-
يقوم بتمكين عميل التدقيق
-
يشتغل على العنوان و المنفذ الافتراضيين (127.0.0.1:9229)
-
يتوقف قبل بدء تنفيذ شيفرة المستخدم
-
-
-
-
-
--inspect-brk=[host:port]
-
-
-
يقوم بتمكين عميل التدقيق
-
يحدد عنوانا قيمته host (افتراضيا: 127.0.0.1)
-
يشتغل على المنفذ port (افتراضيا: 9229)
-
يتوقف قبل بدء تنفيذ شيفرة المستخدم
-
-
-
-
-
node inspect script.js
-
-
-
يخبر العمليات الفرعية بتنفيذ السكربت الخاص بالمستخدم تحت علم --inspect مع استعمال العملية الرئيسية لتشغيل مصحح الأخطاء من سطر الأوامر.
-
-
-
-
-
node inspect --port=xxxx script.js
-
-
-
يخبر العمليات الفرعية بتنفيذ السكربت الخاص بالمستخدم تحت علم --inspect مع استعمال العملية الرئيسية لتشغيل مصحح الأخطاء من سطر الأوامر.
-
يشتغل عبر المنفذ port (افتراضيا: 9229)
-
-
-
-
-
----
-
-## سيناريوهات تمكين تصحيح الأخطاء عن بعد
-
-نوصي دائما بعدم تشغيل مصحح الأخطاء على عنوان انترنت عام. إذا أردت تمكين تصحيح الأخطاء عن بعد، فننصح بإستعمال قنوات الـ ssh بدلا من ذلك.
-المثال الآتي لأغراض توضيحية فقط. يجب عليك فهم المخاطر الأمنية المحتملة عند السماح بالوصول عن بعد لخدمة ذات امتيازات قبل أن تمضي قدما.
-
-فلنفترض أنك قمت بتشغيل الـ Node في حاسوب بعيد، remote.example.com على سبيل المثال، و تريد ان تتمكن من تصحيح الأخطاء فيها.
-في ذلك الحاسوب البعيد، عليك بدء عملية node مع جعل المدقق يستمع على المضيف المحلي فقط (وهو الافتراضي).
-
-```bash
-node --inspect server.js
-```
-
-الآن، و على حاسوبك المحلي الذي تريد من خلاله إنشاء اتصال بعميل تصحيح الأخطاء، يمكنك إنشاء قناة ssh:
-
-```bash
-ssh -L 9221:localhost:9229 user@remote.example.com
-```
-
-يقوم هذا الأمر بإنشاء جلسة لقناة ssh حيث يتم إعادة توجيه الإتصال من المنفذ 9221 على جهازك المحلي إلى المنفذ 9221 على النطاق remote.example.com.
-يمكنك الآن ربط مصحح أخطاء مثل Chrome DevTools أو Visual Studio Code بالعنوان localhost:9221
-مما يعني أنه قادر على بدء تصحيح الأخطاء كما لو أن تطبيق الـ Node.js يشتغل محليا.
-
----
-
-## مصحح الأخطاء القديم
-
-\*\*لقد تم اعتبار مصحح الأخطاء القديم قديماً ابتداء من نسخة الـ Node 7.7.0. قم باستعمال --inspect
-أو المدقق بدلا منه.
-
-عند تشغيل مصحح الأخطاء القديم مع **--debug** أو **--debug-brk** في النسخة 7
-و ما قبلها، تستمع الـ Node.js إلى تعليمات التصحيح المعرفة من قبل بروتوكول التصحيح الخاص بالـ V8 الذي تم ايقاف تطويره و ذلك على منفذ TCP
-`5858` افتراضياً. يستطيع أي عميل تصحيح يستخدم هذا البروتوكول أن يتصل و يصحح العملية الجاري تنفيذها، و من أشهرها ما سيُذكر أسفله.
-
-إن بروتوكول التصحيح الخاص بالـ V8 لم تعد يتم صيانته أو توثيقه دوريا.
-
-### [مصحح الأخطاء المبني ضمنيا](https://nodejs.org/dist/latest/docs/api/debugger.html)
-
-قم بتنفيذ الأمر `node debug script_name.js` لبدء النص البرمجي الخاص بك عن طريق مصحح الأخطاء المبني ضمنيا في Node.
-يمكن للنص البرمجي الخاص بك أن يبدأ في عملية Node اخرى باستعمال `--debug-brk` كما تشغل عملية Node
-المبدئية الملف `_debugger.js` و توصلك بوجهتك.
-
-### [node-inspector](https://github.com/node-inspector/node-inspector)
-
-قم بتصحيح الأخطاء في تطبيق Node.js الخاص بواسطة الـ Chrome DevTools و ذلك باستعمال عملية وسيطة تقوم بتحويل
-بروتوكول المدقق المستعمل في Chromium إلى بروتوكول تصحيح الأخطاء في الـ V8 المستعمل في الـ Node.js
-
-
-
-[Inspector Protocol]: https://chromedevtools.github.io/debugger-protocol-viewer/v8/
-[UUID]: https://tools.ietf.org/html/rfc4122
diff --git a/pages/ar/docs/guides/getting-started-guide.md b/pages/ar/docs/guides/getting-started-guide.md
deleted file mode 100644
index ef11ed81c827c..0000000000000
--- a/pages/ar/docs/guides/getting-started-guide.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: دليل البدء
-layout: docs.hbs
----
-
-# كيف أبدأ باستعمال الـ Node.js بعد أن قمت بتثبيته؟
-
-بعد تثبيتك للـ Node، دعنا نجرب كيفية بناء أول خادوم ويب باستعماله.
-قم بإنشاء ملف بإسم "app.js" و ألصق داخله الشفرة الآتية:
-
-```javascript
-const http = require('http');
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hello World');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server running at http://${hostname}:${port}/`);
-});
-```
-
-بعد ذلك، قم بتشغيل هذا الخادوم باستعمال الأمر `node app.js`، و قم بزيارة الرابط `http://localhost:3000` لترى رسالة مفادها 'Hello World'.
diff --git a/pages/ar/docs/guides/index.md b/pages/ar/docs/guides/index.md
deleted file mode 100644
index 793ee8c4d8412..0000000000000
--- a/pages/ar/docs/guides/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: الإرشادات
-layout: docs.hbs
----
-
-# الإرشادات
-
-## عام
-
-- [دليل البدء](/ar/docs/guides/getting-started-guide/)
-- [التنقيح - البدء](/ar/docs/guides/debugging-getting-started/)
-- [سهل التنميط من أجل تطبيقات Node.js](/en/docs/guides/simple-profiling/)
-- [عمل دوكر على تطبيق ويب Node.js](/en/docs/guides/nodejs-docker-webapp/)
-- [ترحيل إلى منشئات Buffer آمنة](/en/docs/guides/buffer-constructor-deprecation/)
-
-## المفاهيم الأساسية في الـ Node.js
-
-- [مقارنة عامة بين Blocking و Non-Blocking](/en/docs/guides/blocking-vs-non-blocking/)
-- [الـ Node.js حلقة التكرارية، المؤقتات و process.nextTick()](/en/docs/guides/event-loop-timers-and-nexttick/)
-- [لا تعرقل الحلقة التكرارية (أو يحشد العمل)](/en/docs/guides/dont-block-the-event-loop/)
-- [مؤقتات في Node.js](/en/docs/guides/timers-in-node/)
-
-## الأدلة لوحدة المتعلقة
-
-- [التشريح لمعاملات HTTP](/ar/docs/guides/anatomy-of-an-http-transaction/)
-- [العمل مع مختلف أنظمة الملفات](/en/docs/guides/working-with-different-filesystems/)
-- [الضغط الخلفي في القنوات](/en/docs/guides/backpressuring-in-streams/)
-- [مِقْيَاسُ مَجَال تحليل](/en/docs/guides/domain-postmortem/)
-- [كيفية نشر حزمة N-API](/ar/docs/guides/publishing-napi-modules/)
-- [استقرارية ABI](/ar/docs/guides/abi-stability/)
diff --git a/pages/ar/docs/guides/publishing-napi-modules.md b/pages/ar/docs/guides/publishing-napi-modules.md
deleted file mode 100644
index 89c65c154dd05..0000000000000
--- a/pages/ar/docs/guides/publishing-napi-modules.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: كيفية نشر حزمة N-API
-layout: docs.hbs
----
-
-# نشر نسخة N-API لحزمة موازية مع نسخة غير خاصة بـ N-API
-
-يتم توضيح الخطوات الآتية بإستعمال حزمة `iotivity-node`:
-
-- كخطوة أولى، قم بنشر النسخة الغير خاصة بالـ N-API من الحزمة.
- - قم بتحديث النسخة في ملف `package.json`. بالنسبة لـ `iotivity-node` فإن النسخة ستصبح `1.2.0-2`
- - قم بتفحص قائمة التأكيدات الخاصة بالإصدارات (تأكد من ان test/demos/docs على ما يرام)
- - `npm publish`
-- بعد ذلك، قم بنشر النسخة الخاصة بالـ N-API:
- - قم بتحديث النسخة في ملفة `package.json`. في حالة `iotivity-node`، فإن النسخة ستصبح `1.2.0-3`. عند وضع أرقام النسخ، ننصحك بإتباع الطريقة الآتية لوضع نسخ قبلية:
- [semver.org](https://semver.org/#spec-item-9). `1.2.0-napi` كمثال.
- - قم بتفحص قائمة التأكيدات الخاصة بالإصدارات (تأكد من ان test/demos/docs على ما يرام)
- - `npm publish --tag n-api`
-
-في هذا المثال، فإن وسم الحزمة بالوسم `n-api` سيضمن ذلك، رغم أن النسخة 1.2.0-3 احدث من آخر نسخة غير خاصة بالـ N-API تم نشرها (1.2.0-2). لن يتم تثبيت الحزمة إذا قام احدهم بفعل ذلك عن طريق الأمر
-`npm install iotivity-node` ، بل سيتم تثبيت نسخة غير خاصة بالـ N-API افتراضيا.
-حتى يتمكن المستخدم من تثبيت نسخة خاصة بالـ N-API، يجب عليه تنفيذ الأمر `npm install iotivity-node@n-api`.
-لمزيد من المعلومات حول كيفية استعمال الوسوم مع مدير حزم النود، قم بزيارة ["Using dist-tags"][].
-
-## كيفية تقديم اعتماد في نسخة لحزمة خاصة بـ N-API
-
-لإضافة نسخة خاصة بالـ N-API من حزمة `iotivity-node` كإعتماد ، يجب على ملف `package.json` أن يبدو كما يلي:
-
-```json
-"dependencies": {
- "iotivity-node": "n-api"
-}
-```
-
-**ملاحظة** مثل ما تم شرحه في ["Using dist-tags"][]، و على النقيض من النسخ العادية، فإن النسخ الموسومة لا يمكن ان يُشار إليها باستعمال "مدى النسخ" مثل `"^2.0.0"` داخل ملف `package.json`، وسبب ذلك هو أن الوسم يشير لنسخة واحدة فقط لذلك، إذا اختار الشخص المسؤول عن الحزمة أن يسم نسخة احدث من الحزمة باستعمال نفس الوسم، فإن الأمر `npm update` سيستقبل آخر نسخة، و هذا عادي نظرا لكون الـ N-API ما يزال اختباريا.
-لاستعمال اعتماد خاص بنسخة تدعم N-API عدا عن آخر نسخة تم نشرها، يجب ان يشار في ملف `package.json` إلى النسخ بالتحديد كما يلي:
-
-```json
-"dependencies": {
- "iotivity-node": "1.2.0-3"
-}
-```
-
-["Using dist-tags"]: https://docs.npmjs.com/getting-started/using-tags
diff --git a/pages/ar/docs/index.mdx b/pages/ar/docs/index.mdx
deleted file mode 100644
index 1700141c6a024..0000000000000
--- a/pages/ar/docs/index.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: التوثيق
-layout: docs.hbs
-labels:
- lts: LTS
----
-
-# عن التوثيق
-
-تتوفر عدة توثيقات على هذا الموقع:
-
-- التوثيق الخاص بمرجع واجهة برمجة التطبيق (API)
-- مميزات ES6
-- الإرشادات
-
-## التوثيق الخاص بمرجع واجهة برمجة التطبيق (API)
-
-يوفر [التوثيق الخاص بمرجع واجهة برمجة التطبيق](https://nodejs.org/api/) معلومات مفصلة حول أي دالة أو كائن في الـ Node.js، حيث يبين هذا التطبيق أيا من المعطيات تقبلها دالة معينة، والقيمة التي ترجعها تلك الدالة إضافة إلى الأخطاء التي لها علاقة بتلك الدالة، كما يبين التوثيق أيضاً أي دوال متوفرة في النسخ المختلفة من الـ Node.js.
-
-يصف هذا التوثيق الوحدات المضمنة في الـ Node.js، وهو لا يوثق للوحدات المتوفرة عن طريق المجتمع.
-
-
-
-## خصائص الـ ES6
-
-يصف [قسم الـ ES6](/ar/docs/es6/) مجموعات الميزات الثلاثة الخاصة بالـ ES6، ويتحدث بالتفصيل عن المميزات المفعلة افتراضيا منها في الـ Node.js مع توفير روابط للشرح، كما يبين أي نسخة من الـ V8 يتم استعمالها مع إصدار محدد من الـ Node.js
-
-## الإرشادات
-
-يحتوي [قسم الإرشادات](/ar/docs/guides/) على مقالات مطولة ومعمقة حول القدرات والمميزات التقنية للـ Node.js
diff --git a/pages/ar/download/current.md b/pages/ar/download/current.md
deleted file mode 100644
index b93cca06e4860..0000000000000
--- a/pages/ar/download/current.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download-current.hbs
-title: التنزيلات
-download: تنزيل
-downloads:
- headline: التنزيلات
- lts: مستقر
- current: الحالي
- tagline-current: يحتوي على آخر الميزات
- tagline-lts: موصى به لأغلب المستخدمين
- display-hint: عرض التنزيلات لـ
- intro: >
- قم بتنزيل الكود المصدري للنود جي اس أو مثبت مبني لمنصتك و ابدأ التطوير اليوم.
- currentVersion: آخر نسخة مستقرة
- buildInstructions: بناء Node.js من المصدر على منصات مدعومة
- WindowsInstaller: مثبت للويندوز
- WindowsBinary: ملف ثنائي للويندوز
- MacOSInstaller: مثبت للماك
- MacOSBinary: ملف ثنائي للماك
- LinuxBinaries: ملف ثنائي للينكس
- SourceCode: الكود المصدري
-additional:
- headline: منصات إضافية
- intro: >
- يقوم أعضاء من مجتمع Node.js بالاشراف على نسخ غير رسمية من Node.js لمنصات أخرى. يجب التذكير أن هذه النسخ غير مدعومة من الفريق الأساسي للنود جي اس و قد لا تكون على نفس مستوى التطوير الخاص بالاصدارات الحالية للنود جي اس.
- platform: منصة
- provider: مزود
- SmartOSBinaries: ملف ثنائي لـSmartOS
- DockerImage: اسطوانة دوكر
- officialDockerImage: اسطوانة نود جي اس الرسمية الخاصة بالدوكر
- LinuxPowerSystems: لينكس على Power LE Systems
- LinuxSystemZ: لينكس على System z
- AIXPowerSystems: AIX على Power Systems
----
diff --git a/pages/ar/download/index.md b/pages/ar/download/index.md
deleted file mode 100644
index 69d6c33fe4d5b..0000000000000
--- a/pages/ar/download/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-layout: download.hbs
-title: التنزيلات
-download: تنزيل
-downloads:
- headline: التنزيلات
- lts: مستقر
- current: الحالي
- tagline-current: يحتوي على آخر الميزات
- tagline-lts: موصى به لأغلب المستخدمين
- display-hint: عرض التنزيلات لـ
- intro: >
- قم بتنزيل الكود المصدري للنود جي اس أو مثبت مبني لمنصتك و ابدأ التطوير اليوم.
- currentVersion: آخر نسخة مستقرة
- buildInstructions: بناء Node.js من المصدر على منصات مدعومة
- WindowsInstaller: مثبت للويندوز
- WindowsBinary: ملف ثنائي للويندوز
- MacOSInstaller: مثبت للماك
- MacOSBinary: ملف ثنائي للماك
- LinuxBinaries: ملف ثنائي للينكس
- SourceCode: الكود المصدري
-additional:
- headline: منصات إضافية
- intro: >
- platform: منصة
- provider: مزود
- SmartOSBinaries: ملف ثنائي لـSmartOS
- DockerImage: اسطوانة دوكر
- officialDockerImage: اسطوانة نود جي اس الرسمية الخاصة بالدوكر
- LinuxPowerSystems: لينكس على Power LE Systems
- LinuxSystemZ: لينكس على System z
- AIXPowerSystems: AIX على Power Systems
----
diff --git a/pages/ar/download/package-manager.md b/pages/ar/download/package-manager.md
deleted file mode 100644
index 30224818a93c3..0000000000000
--- a/pages/ar/download/package-manager.md
+++ /dev/null
@@ -1,297 +0,0 @@
----
-layout: page.hbs
-title: تثبيت Node.js عن طريق مدير الحزم
----
-
-# تثبيت النود جي اس عبر مدير حزم
-
-**_ملاحظة_** إن صيانة و دعم الحزم المذكورة في هذه الصفحة تتم عبر المشرفين على مديري الحزم، و **ليس** فريق النود جي اس الأساسي. تفضل بإبلاغ أية مشكلة إلى المشرفين على الحزم و إذا كانت مشكلتك عبارة عن خطأ في النود جي اس بحد ذاتها فسيبلغ المشرف عن هذه المشكلة صعودا.
-
----
-
-- [آندرويد](#android)
-- [Arch Linux](#arch-linux)
-- [التوزيعات المبنية على ديبيان أو اوبنتو، لينكس للمؤسسات / فيدورا و حزم سناب](#debian-and-ubuntu-based-linux-distributions-enterprise-linux-fedora-and-snap-packages)
-- [FreeBSD](#freebsd)
-- [Gentoo](#gentoo)
-- [IBM i](#ibm-i)
-- [NetBSD](#netbsd)
-- [nvm](#nvm)
-- [nvs](#nvs)
-- [OpenBSD](#openbsd)
-- [openSUSE و SLE](#opensuse-and-sle)
-- [macOS](#macos)
-- [SmartOS و illumos](#smartos-and-illumos)
-- [Solus](#solus)
-- [Void Linux](#void-linux)
-- [Windows](#windows1)
-
----
-
-## آندرويد
-
-لا يزال دعم النود جي اس على الاندرويد قيد التجربة، لذلك فإن الملفات الثنائية المنتجة قبلا لا تزال غير متوفرة من قبل مطوري النود جي اس.
-
-رغم ذلك، هناك بعض الحلول الموفرة من طرف ثالث، فمثلا يوفر مجتمع [Termux](https://termux.com/) محاكي طرفية و بيئة لينكس للأندرويد، إضافة إلى مدير حزم خاص و [مجموعة واسعة](https://github.com/termux/termux-packages) من العديد من التطبيقات المنتجة قبلا.
-الأمر التالي سيثبت آخر نسخة متوفرة من النود جي اس:
-
-```bash
-pkg install nodejs
-```
-
-حاليا، النسخ الثنائية الخاصة بـ Termux و هي مربوطة بـ `system-icu` (تعتمد على حزمة `libicu`).
-
-## Arch Linux
-
-تتوفر حزم النود جي اس و الـ npm على مستوى مستودعات المجتمع.
-
-```bash
-pacman -S nodejs npm
-```
-
-## التوزيعات المبنية على ديبيان أو اوبنتو، لينكس للمؤسسات / فيدورا و حزم سناب
-
-يتم توفير [الملف الثنائي الرسمي للنود جي اس](https://github.com/nodesource/distributions) من قبل NodeSource.
-
-## FreeBSD
-
-آخر إصدارات النود جي اس متوفرة عبر [www/node](https://www.freshports.org/www/node)
-
-يمكنك تثبيت حزمة ثنائية عبر [pkg](https://www.freebsd.org/cgi/man.cgi?pkg):
-
-```bash
-pkg install node
-```
-
-او يمكنك انتاجها باستعمال الـ[ports](https://www.freebsd.org/cgi/man.cgi?ports) الخاص بك:
-
-```bash
-cd /usr/ports/www/node && make install
-```
-
-## Gentoo
-
-النود جي اس متوفر عبر portage tree.
-
-```bash
-emerge nodejs
-```
-
-## IBM i
-
-نسخ LTS لـNode.js متوفرة من IBM و متوفرة عبر [مدير الحزمة الـ'yum'](https://ibm.biz/ibmi-rpms). إسم الحزمة هو `nodejs` متبوعا برقم الإصدار الرائد (مثلا، `nodejs8`، `nodejs10`، `nodejs12`، إلخ
-
-لتثبيت Node.js 12.x باستخدام سطر الأوامر، شغل الامر التالي كمستخدم مع سلطة \*ALLOBJ الخاصة :
-
-```bash
-yum install nodejs12
-```
-
-يمكن أيضًا تثبيت Node.js مع منتج IBM i الخاص بحلول وصول العملاء. انظر [وثيقة الدعم هذه](http://www-01.ibm.com/support/docview.wss?uid=nas8N1022619) لتفاصيل أكثر
-
-## NetBSD
-
-النود جي اس متوفر في pkgsrc tree:
-
-```bash
-cd /usr/pkgsrc/lang/nodejs && make install
-```
-
-أو يمكنك تثبيت حزمة ثنائية (إذا كانت متوفرة لمنصتك) باستعمال pkgin:
-
-```bash
-pkgin -y install nodejs
-```
-
-## nvm
-
-مدير نسخ النود هو عبارة عن سكريبت خاص بالباش يستخدم لإدارة عدة نسخ من النود جي اس، حيث يسمح لك بالقيام بعمليات مختلفة كتثبيت و إلغاء تثبيت و تبديل نسخة معينة و اكثر من ذلك.
-لتثبيت مدير نسخ النود استعمل [سكريبت التثبيت](https://github.com/nvm-sh/nvm#install--update-script).
-
-على انظمة يونيكس و OS X، يمكن تثبيت نسخة من النود جي اس تم بنائها من المصدر عبر [مدير نسخ النود (nvm)](https://github.com/creationix/nvm) عبر تثبيتها في المسار الذي يتوقعه مدير نسخ النود:
-
-```bash
-env VERSION=`python tools/getnodeversion.py` make install DESTDIR=`nvm_version_path v$VERSION` PREFIX=""
-```
-
-بعد قيامك بهذه الخطوة، يمكنك استعمال مدير نسخ النود للتبديل بين النسخ المحررة و النسخ المبنية من المصدر.
-على سبيل المثال ، اذا كانت نسخة النود جي اس الحالية هي v8.0.0-pre:
-
-```bash
-nvm use 8
-```
-
-حالما يتم إطلاق نسخة رسمية، قم بإلغاء تثبيت النسخة المبنية من المصدر:
-
-```bash
-nvm uninstall 8
-```
-
-## nvs
-
-#### Windows
-
-The `nvs` version manager is cross-platform and can be used on Windows, macOS, and Unix-like systems
-
-To install `nvs` on Windows go to the [release page](https://github.com/jasongin/nvs/releases) here and download the MSI installer file of the latest release.
-
-You can also use `chocolatey` to install it:
-
-```bash
-choco install nvs
-```
-
-#### macOS,UnixLike
-
-You can find the documentation regarding the installation steps of `nvs` in macOS/Unix-like systems [here](https://github.com/jasongin/nvs/blob/master/doc/SETUP.md#mac-linux)
-
-#### Usage
-
-After this you can use `nvs` to switch between different versions of node.
-
-To add the latest version of node:
-
-```bash
-nvs add latest
-```
-
-Or to add the latest LTS version of node:
-
-```bash
-nvs add lts
-```
-
-Then run the `nvs use` command to add a version of node to your `PATH` for the current shell:
-
-```bash
-$ nvs use lts
-PATH -= %LOCALAPPDATA%\nvs\default
-PATH += %LOCALAPPDATA%\nvs\node\14.17.0\x64
-```
-
-To add it to `PATH` permanently, use `nvs link`:
-
-```bash
-nvs link lts
-```
-
-## OpenBSD
-
-يتوفر النود جي اس حاليا عبر نظام البوابات.
-
-```bash
-/usr/ports/lang/node
-```
-
-باستعمال [pkg_add](https://man.openbsd.org/OpenBSD-current/man1/pkg_add.1) على OpenBSD:
-
-```bash
-pkg_add node
-```
-
-## openSUSE و SLE
-
-يتوفر النود جي اس في المستودعات الرئيسية تحت الحزم الاتية:
-
-- **openSUSE Leap 42.2**: `nodejs4`
-- **openSUSE Leap 42.3**: `nodejs4`, `nodejs6`
-- **openSUSE Tumbleweed**: `nodejs4`, `nodejs6`, `nodejs8`
-- **SUSE Linux Enterprise Server (SLES) 12**: `nodejs4`, `nodejs6`
- (يجب إضافة الـ "موديل الويب و البرمجة" [قبل التثبيت](https://www.suse.com/documentation/sles-12/book_sle_deployment/data/sec_add-ons_extensions.html))
-
-على سبيل المثال، لتثبيت النود جي اس 4.x على openSUSE Leap 42.2 قم بتنفيذ ما يلي كجذر:
-
-```bash
-zypper install nodejs4
-```
-
-## macOS
-
-بكل بساطة، قم بتنزيل [مثبت الماك او اس](https://nodejs.org/ar/#home-downloadhead) مباشرة من موقع [nodejs.org](https://nodejs.org/).
-
-_إذا كنت تريد تنزيل الحزمة باستعمال الباش:_
-
-```bash
-curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
-```
-
-### البدائل
-
-باستعمال **[Homebrew](https://brew.sh/)**:
-
-```bash
-brew install node
-```
-
-باستعمال **[MacPorts](https://www.macports.org/)**:
-
-```bash
-port install nodejs
-
-# على سبيل المثال
-port install nodejs7
-```
-
-باستعمال **[pkgsrc](https://pkgsrc.joyent.com/install-on-osx/)**:
-
-تثبيت الحزمة الثنائية:
-
-```bash
-pkgin -y install nodejs
-```
-
-من أو قم ببنائها يدويا من pkgsrc:
-
-```bash
-cd pkgsrc/lang/nodejs && bmake install
-```
-
-## SmartOS و illumos
-
-تأتي اسطوانة SmartOS مثبتة افتراضيا مع pkgsrc. على توزيعات أخرى من illumos، قم بتثبيت **[pkgsrc](https://pkgsrc.joyent.com/install-on-illumos/)** أولا و عندها يمكنك تثبيت الحزمة الثنائية اعتياديا:
-
-```bash
-pkgin -y install nodejs
-```
-
-او قم ببنائها يدويا من pkgsrc:
-
-```bash
-cd pkgsrc/lang/nodejs && bmake install
-```
-
-## Solus
-
-توفر Solus النود جي اس في مستودعها الرئيسي.
-
-```bash
-sudo eopkg install nodejs
-```
-
-## Void Linux
-
-يوفر Void Linux نسخة مستقرة من النود جي اس في المستودع الرئيسي.
-
-```bash
-xbps-install -Sy nodejs
-```
-
-## ويندوز
-
-قم بتحميل [المثبت الخاص بويندوز](https://nodejs.org/ar/#home-downloadhead) مباشرة من موقع [nodejs.org](https://nodejs.org/).
-
-### البدائل
-
-باستعمال **[Chocolatey](https://chocolatey.org/)**:
-
-```bash
-cinst nodejs
-# أو للتثبيت الكامل بواسطة npm
-cinst nodejs.install
-```
-
-باستعمال **[Scoop](https://scoop.sh/)**:
-
-```bash
-scoop install nodejs
-```
diff --git a/pages/ar/download/releases.md b/pages/ar/download/releases.md
deleted file mode 100644
index d78d04ace0b13..0000000000000
--- a/pages/ar/download/releases.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-layout: download-releases.hbs
-title: النسخ سابقة
-modules: 'يشير NODE_MODULE_VERSION إلى رقم نسخة Node.js الخاص بالواجهة الثنائية (ABI) للتطبيق، وهو يستعمل لتحديد أي من نسخ Node.js المنتجة كملفات ثنائية خاصة بالسي ++ يمكنها ان تحمل بدون الحاجة إلى إعادة انتاجها. في وقت سابق، كان يتم تخزينها على شكل قيم ستة عشرية (hex) اما الآن فهي تمثل على شكل ارقام صحيحة'
----
-
-### io.js و Node.js
-
-لقد كانت الاصدارات من 1.x إلى 3.x تسمى "io.js" و كانت جزء من فرع io.js، اما بالنسبة للنود جي اس 4.0.0، فإن اسطر النسخ السابقة من io.js تلاقت مع Node.js 0.12.x في نسخ موحدة
-
-### هل تبحث عن آخر اصدار من فرع محدد؟
diff --git a/pages/ar/get-involved/collab-summit.md b/pages/ar/get-involved/collab-summit.md
deleted file mode 100644
index 9305bb9eed758..0000000000000
--- a/pages/ar/get-involved/collab-summit.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: القمة التعاونية
-layout: contribute.hbs
----
-
-# القمة التعاونية
-
-القمة التعاونية هي مؤتمر غايته جمع المساهمين الحاليين مع المساهمين المحتملين للنقاش حول الـ Node.js وذلك بتعاون وتعليم حيين، و بمشاركة المعارف . تجتمع اللجان و مجموعات العمل مرتين في السنة للاتخاذ قرارات مهمة مع القدرة على العمل على بعض الجهود الشيقة التي يريدون دعمها شخصيا.
-
-## من يستطيع الحضور ؟
-
-جميع الأشخاص مرحب بهم لحضور قمة تعاونية. ، خلال القمة، سيساعد القادة المتعاونين على الانخراط في المجموعات التي يودون المساعدة فيها و ذلك لدمجهم في ورشات العمل.
-.
-هذه فرصتك لتعلم ما يحدث داخل المجتمع، حتى تساهم فيه بالمهارات التي تمتلكها و تريد صقلها.
-
-ستضع مجموعات العمل رزنامات معاً حتى يتسنى للأشخاص ان يعتادوا عليها قبل الإنطلاق، و ذلك بإجراء الأحاديث العامة بين المتعاونين، و من ثم التعمق في الورشات.
-
-سوف يسرنا أن نراك في قمة تعاونية! قم بزيارة مستودع [Summit repo](https://github.com/nodejs/summit) لمعرفة القمم التعاونية القادمة و التي انقضت، و ألقِ نظرة على [المشاكل المطروحة](https://github.com/nodejs/summit/issues) التي تحتوي على ما تتطلع اللجان و مجموعات العمل لمناقشته شخصيا.
diff --git a/pages/ar/get-involved/contribute.md b/pages/ar/get-involved/contribute.md
deleted file mode 100644
index d351d1b967d1a..0000000000000
--- a/pages/ar/get-involved/contribute.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: المساهمة
-layout: contribute.hbs
----
-
-# المساهمة
-
-شكراً لاهتمامك بالمساهمة في الـ Node.js! هنالك عدة طرق و أماكن يمكنك المساهمة فيها، و نحن هنا لتسهيل ذلك.
-
-## طلب مساعدة عامة
-
-الأسئلة المتعلقة بأي مساعدة عامة توجه إلى [مستودع المساعدة للـ Node.js](https://github.com/nodejs/help/issues) و ذلك لأن مستودع `nodejs/node` نشيط جدا.
-
-## الإبلاغ عن مشكلة
-
-إذا وجدت أي شيء تعتقد انه مشكلة في الـ Node.js، لا تتردد في في فتح مشكلة على المشروع في الـ GitHub. عند طرح مشكلتك، احرص على ان تعبر عنها بفحوصات قابلة للاعادة، كما يجب على تلك الفحوصات ألا تستعين بأي مكتبات خارجية. بشكل أوضح، يجب على تلك الفحوصات ان تكون قابلة للتنفيذ اعتماداً على الـ Node.js لا أكثر.
-
-عند التبليغ عن مشكل، نحتاج اكبر قدر ممكن من المعلومات حول بيئة التشغيل التي تستعملها. لا ندري أي معلومة لها صلة وثيقة بالمشكلة عند محاولة حصر المشكلة، قم بتضمين المعلومات التالية على الأقل:
-
-- إصدار الـ Node.js
-- منصة التشغيل التي تعمل عليها (macOS, SmartOS, Linux, Windows)
-- بنية حاسوبك (32 بت أو 64 بت و x86 أو ARM)
-
-حاليا، يتم تسيير مشروع الـ Node.js على عدد من المستودعات في الـ GitHub، ولكل واحد منها قاعدة بيانات مستقلة للمشكلات الخاصة بها. إذا أمكن، قم بطرح المشكلة التي تنوي الإبلاغ عنها في المستودع المناسب و لكن لا تقلق إذا وضعتها في المكان الخطأ، فمجتمع المساهمين سيكون سعيدا بتوجيهك إلى المستودع الملائم.
-
-- لإبلاغ عن مشكلة خاصة بالـ Node.js ، الرجاء إستخدام [nodejs/node](https://github.com/nodejs/node)
-- لإبلاغ عن مشكلة خاصة بالموقع،الرجاء إستخدام [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org/issues)
-
-## المساهمات في الشفرة المصدرية
-
-إذا أردت المساهمة في إصلاح أخطاء برمجية، إو إضافة ميزات للـ Node.js، تأكد من إطلاعك على [دليل المساهمة في الـ Node.js](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md/#pull-requests). ستجد شرحاً عن عمليات المراجعة من قبل المساهمين الحاليين في جميع المستودعات الخاصة بالمشروع.
-
-إذا كنت تتسائل حول كيفية البدء، يمكنك الإطلاع على [Node Todo](https://www.nodetodo.org/)، حيث يمكن له أن يريك كيفية القيام بمساهمتك الأولى.
-
-## كيف تصبح مساهماً
-
-عندما تصبح مساهما، تمتلك تأثيراً أكبر على المشروع. يمكن للمساهمين مساعدة بعضهم عبر مراجعة مساهماتهم، و تقصي المشكلات، و حتى تشكيل مستقبل المشروع، كما يمكن للأفراد الذين تحددهم لجنة التوجيه التقني بأنهم يقدمون مساهمات نوعية أن يتم ترقيتهم لمتعاونين، و يتم منحهم حق الكتابة في المشروع، حيث تمثل الأنشطة التي يتم أخذها بعين الاعتبار (ولكنها غير محدودة بها) نوعية:
-
-- المساهمة في الشفرة المصدرية و طلبات السحب
-- المساهمة في التوثيق و طلبات السحب
-- التعليقات على المشاكل و طلبات السحب
-- المساهمات في موقع الـ Node.js
-- المساعدة المقدمة للمستخدمين النهائيين و المساهمين الجدد
-- المشاركة في مجموعات العمل
-- المشاركات الأخرى في مجتمع الـ Node.js بصفة عامة.
-
-إذا كان هناك فرد يقوم بمساهمات قيمة ولا يريد ان يمنح حق الكتابة، يمكن له ان [يطرح مشكلة](https://github.com/nodejs/TSC/issues) او يتواصل مع [أحد أعضاء لجنة التوجيه التقني](https://github.com/nodejs/TSC#current-members).
diff --git a/pages/ar/get-involved/index.md b/pages/ar/get-involved/index.md
deleted file mode 100644
index 4f7e36334f324..0000000000000
--- a/pages/ar/get-involved/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: الإنخراط
-layout: contribute.hbs
----
-
-# الإنخراط
-
-## نقاش المجتمع
-
-- تعتبر [قائمة المشكلات على GitHub](https://github.com/nodejs/node/issues) المكان المخصص للنقاشات حول المميزات الأساسية للـ Node.js.
-- الحساب الرسمي للـ Node.js على تويتر هو [nodejs](https://twitter.com/nodejs)
-- [رزنامة مؤسسة الـ Node.js](https://nodejs.org/calendar) تحتوي على تواريخ لقاءات جميع الفرق العامة.
-
-## التعلم
-
-- [التوثيق الرسمي لواجهة برمجة التطبيق](https://nodejs.org/api/) يتحدث بالتفصيل على وجاهة برمجة التطبيق الخاصة بالـ Node.js
-- [دلائل الـ Node.js](https://nodejs.dev) يرشدك إلى أساسيات تطوير تطبيقات باستعمال الـ Node.js.
-- [NodeSchool.io](https://nodeschool.io/) سيعلمك مفاهيم الـ Node.js باستعمال العاب سطر اوامر تفاعلية.
-- [التاق الخاص بالـ Node.js على Stack Overflow](https://stackoverflow.com/questions/tagged/node.js) يجمع معلومات جديدة كل يوم.
-- [التاق الخاص بمجتمع مطوري الـ Node.js](https://dev.to/t/node) يمثل مكانا لمشاركة مشاريع الـ Node.js و المقالات و الدروس المتعلقة به إضافة إلى بدء النقاشات و طلب الآراء عن المواضيع المتعلقة بالـ Node.js. إن جميع المطورين من كافة المستويات مرحب بها هنا.
-- [Nodeiflux](https://discordapp.com/invite/vUsrbjd) هو مجتمع داعم لمطوري الجهة الخلفية للـ Node.js الذين يدعمون بعضهم على منصة Discord.
-
-## مواقع و مشاريع المجتمع دولي
-
-- [مجموعة الفيسبوك للـ Node.js بالعربية](https://www.facebook.com/groups/node.ar)
-- [مجتمع Node.js الصيني](https://cnodejs.org/)
-- [المجتمع المجري (المجرية)](https://nodehun.blogspot.com/)
-- [مجموعة المستخدمين اليابانية](https://nodejs.jp/)
-- [مجموعة الفيسبوك باللغة الأسبانية للـ Node.js](https://www.facebook.com/groups/node.es/)
-- [مجتمع Node.js الفيتنامي](https://www.facebook.com/nodejs.vn/)
-- [المجموعة الأوزبكستانية لـ Node.js](https://t.me/nodejs_uz)
diff --git a/pages/ar/index.md b/pages/ar/index.md
deleted file mode 100644
index d38d3be315ef1..0000000000000
--- a/pages/ar/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: الإصدار الحالي
- download: تحميل
- download-for: تحميل النسخة الخاصة بـ
- other-downloads: تحميل نسخ أخرى
- current: النسخة الحالية
- lts: LTS
- tagline-current: آخر المستجدات
- tagline-lts: موصى به لجميع المستخدمين
- changelog: سجل التغييرات
- api: API Docs
- version-schedule-prompt: أو انظر إلى
- version-schedule-prompt-link-text: أجندة LTS
----
-
-Node.js® هو إطار عمل مبني على محرك [Chrome V8](https://v8.dev/).
diff --git a/pages/be/404.md b/pages/be/404.md
deleted file mode 100644
index b27632fdd42d2..0000000000000
--- a/pages/be/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Старонка не знойдзена
-
-### ENOENT: няма такога файла або каталога
diff --git a/pages/be/about/governance.md b/pages/be/about/governance.md
deleted file mode 100644
index 7794be3c2c534..0000000000000
--- a/pages/be/about/governance.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Кіраванне праектам
-layout: about.hbs
----
-
-# Кіраванне праектам
-
-## Працэс пошуку кансэнсусу
-
-Праект Node.js прытрымліваецца мадэлі [пошуку кансэнсусу](https://en.wikipedia.org/wiki/Consensus-seeking_decision-making) ў прыняцці рашэнняў.
-
-## Суаўтары
-
-Рэпазіторый [nodejs/node][] на GitHub падтрымліваецца і развіваецца Суаўтарамі, якіх дадае Тэхнічны кіруючы камітэт ([TSC][]) на пастаяннай аснове.
-
-Людзі, якія ўносяць значны і каштоўны ўклад, становяцца Суаўтарамі і атрымліваюць доступ да праекта з дазволам на ўнясенне змяненняў. Гэтых людзей вызначае КТК (кіруючы тэхнічны камітэт), і іх вылучэнне абмяркоўваецца з існуючымі Суаўтарамі.
-
-Бягучы спіс Суаўтараў глядзіце ў [README.md][] праекта.
-
-Кіраўніцтва для Суаўтараў знаходзіцца ў [collaborator-guide.md][].
-
-## Кіруючы тэхнічны камітэт
-
-Праект кіруецца [Кіруючым тэхнічным камітэтам (КТК)][] які адказвае за высокаўзроўневае кіраўніцтва праектам.
-
-[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
-[README.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
-[Кіруючым тэхнічным камітэтам (КТК)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
-[TSC]: https://github.com/nodejs/TSC
-[nodejs/node]: https://github.com/nodejs/node
diff --git a/pages/be/about/index.md b/pages/be/about/index.md
deleted file mode 100644
index 94acfa1ac82e1..0000000000000
--- a/pages/be/about/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-layout: about.hbs
-title: Аб праекце
-trademark: Гандлёвая марка
----
-
-# Аб Node.js®
-
-Node.js — гэта падзейна-арыентаванае асінхроннае асяроддзе выканання JavaScript-кода, спраектаванае для стварэння маштабуемых сеткавых праграм. Ніжэй прыведзены прыклад "hello world", які можа адначасова апрацоўваць шмат злучэнняў. Для кожнага злучэння выклікаецца функцыя зваротнага выкліку, але калі злучэнняў няма, Node.js "засынае".
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hello World');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server running at http://${hostname}:${port}/`);
-});
-```
-
-Гэта адрозніваецца ад сённяшняй больш распаўсюджанай мадэлі паралелізму, у якой выкарыстоўваюцца патокі АС. Камунікацыя, заснаваная на патоках, з'яўляецца адносна неэфектыўнай і вельмі цяжкай у выкарыстанні. Больш за тое, карыстальнікі Node.js могуць не турбавацца аб блакіроўках працэсаў, паколькі іх не існуе. Амаль ніводная функцыя ў Node.js не працуе напрамую з уводам/вывадам, таму працэс ніколі не блакіруецца, за выключэннем выпадкаў, калі ўвод/вывад выконваецца з выкарыстаннем сінхронных метадаў стандартнай бібліятэкі Node.js. Такім чынам, паколькі нішто не блакіруецца, вельмі мэтазгодна распрацоўваць маштабуемыя сістэмы на Node.js.
-
-Больш падрабязна з гэтым падыходам можна азнаёміцца ў поўным артыкуле [Blocking vs. Non-Blocking][].
-
----
-
-Node.js быў створаны пад уплывам такіх сістэм, як [Event Machine][] у Ruby і [Twisted][] у Python. Але пры гэтым падзейная сістэма ў ім выкарыстоўваецца значна шырэй: [цыкл падзей][] з'яўляецца часткай асяроддзя выканання, а не асобнай бібліятэкай. У іншых сістэмах заўсёды існуе блакіруючы выклік для запуску цыкла падзей. Звычайна, логіка праграмы вызначаецца праз зваротныя выклікі (callbacks) у пачатку скрыпта, а ў канцы праз блакіруючы выклік, напрыклад `EventMachine::run()`, запускаецца серверная частка. У Node.js няма нічога падобнага на выклік пачатку цыкла падзей. Node.js проста ўваходзіць у цыкл падзей пасля запуску скрыпта і выходзіць з цыкла, калі больш не застаецца зарэгістраваных функцый зваротнага выкліку. Гэта падобна на працу JavaScript у браўзеры, дзе цыкл падзей схаваны ад карыстальніка.
-
-HTTP — важны элемент Node.js, распрацаваны з улікам паточнасці і малой затрымкі. Гэта робіць Node.js добрай асновай для вэб-бібліятэкі ці фрэймворка.
-
-Тое, што Node.js спраектаваны без выкарыстання патокаў, зусім не азначае, што вы не зможаце скарыстацца перавагамі свайго шмат’ядзернага працоўнага асяроддзя. Даччыныя працэсы можна ствараць з дапамогай нашага API [`child_process.fork()`][]. Даччыныя працэсы спраектаваны так, каб з імі было лёгка ўзаемадзейнічаць. На аснове таго ж інтэрфейсу пабудаваны модуль [`cluster`][], які дазваляе размяркоўваць сокеты паміж працэсамі, каб збалансаваць нагрузку на ядры вашай сістэмы.
-
-[Blocking vs. Non-Blocking]: /en/docs/guides/blocking-vs-non-blocking/
-[`child_process.fork()`]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
-[`cluster`]: https://nodejs.org/api/cluster.html
-[цыкл падзей]: /en/docs/guides/event-loop-timers-and-nexttick/
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/be/docs/guides/diagnostics/live-debugging/index.md b/pages/be/docs/guides/diagnostics/live-debugging/index.md
deleted file mode 100644
index b35eca2c1e72a..0000000000000
--- a/pages/be/docs/guides/diagnostics/live-debugging/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Адладка ў рэальным часе
-layout: docs.hbs
----
-
-# Адладка ў рэальным часе
-
-- [Адладка ў рэальным часе](#live-debugging)
- - [Мая праграма паводзіць сябе не так, як чакалася](#my-application-doesnt-behave-as-expected)
- - [Сімптомы](#symptoms)
- - [Адладка](#debugging)
-
-У гэтым дакуменце вы даведаецеся аб тым, як у рэальным часе адладжваць працэс Node.js.
-
-## Мая праграма паводзіць сябе не так, як чакалася
-
-### Сімптомы
-
-Карыстальнік можа заўважыць, што праграма не выдае чаканы вынік для пэўных уваходных даных, напрыклад, HTTP-сервер вяртае адказ JSON, у якім некаторыя палі пустыя. Падчас працы могуць адбыцца розныя памылкі, але ў дадзеным прыкладзе мы галоўным чынам засяродзімся на логіцы праграмы і яе правільнасці.
-
-### Адладка
-
-У гэтым прыкладзе карыстальнік жадаў бы зразумець паслядоўнасць выканання кода нашай праграмы для пэўнай падзеі, напрыклад, уваходнага HTTP-запыту. Ён таксама можа захацець паглядзець выкананне кода крок за крокам, а таксама праверыць, якія значэнні захоўваюць пераменныя.
-
-- [Выкарыстанне інспектара](/en/docs/guides/diagnostics/live-debugging/using-inspector)
diff --git a/pages/be/docs/guides/event-loop-timers-and-nexttick.md b/pages/be/docs/guides/event-loop-timers-and-nexttick.md
deleted file mode 100644
index 45fb3dc2a05da..0000000000000
--- a/pages/be/docs/guides/event-loop-timers-and-nexttick.md
+++ /dev/null
@@ -1,344 +0,0 @@
----
-title: Цыкл падзей Node.js, таймеры і функцыя process.nextTick()
-layout: docs.hbs
----
-
-# Цыкл падзей Node.js, таймеры і функцыя `process.nextTick()`
-
-## Што такое Цыкл падзей?
-
-Цыкл падзей (Event Loop) — гэта тое, што дазваляе Node.js выконваць аперацыі ўводу-вываду без блакіроўкі (нягледзячы на тое, што JavaScript з'яўляецца аднапаточным), шляхам выгрузкі аперацый у ядро сістэмы, калі гэта магчыма.
-
-Большасць сучасных ядраў з'яўляюцца шматпаточнымі. Гэта значыць, што яны могуць апрацоўваць некалькі аперацый у фонавым рэжыме. Калі адна з гэтых аперацый завяршаецца, ядро паведамляе Node.js, што адпаведная callback-функцыя можа быць дададзена ў чаргу апытання (**poll**) для выканання. Мы разгледзім гэта больш падрабязна далей у артыкуле.
-
-## Падрабязней пра цыкл падзей
-
-Пры старце Node.js ініцыялізуе цыкл падзей (event loop). Пасля гэтага апрацоўваецца ўводны скрыпт (input script) (або працэс трапляе ў [REPL][], але гэта не разглядаецца ў гэтым артыкуле). Уводны скрыпт можа рабіць асінхронныя выклікі API, планаваць таймеры або выклікаць функцыю `process.nextTick()`. Пасля апрацоўкі ўводнага скрыпта пачынаецца апрацоўка цыкла падзей.
-
-На дыяграме ніжэй паказаны спрошчаны агляд паслядоўнасці аперацый цыкла падзей.
-
-```
- ┌───────────────────────────┐
-┌─>│ timers │
-│ └─────────────┬─────────────┘
-│ ┌─────────────┴─────────────┐
-│ │ pending callbacks │
-│ └─────────────┬─────────────┘
-│ ┌─────────────┴─────────────┐
-│ │ idle, prepare │
-│ └─────────────┬─────────────┘ ┌───────────────┐
-│ ┌─────────────┴─────────────┐ │ incoming: │
-│ │ poll │<─────┤ connections, │
-│ └─────────────┬─────────────┘ │ data, etc. │
-│ ┌─────────────┴─────────────┐ └───────────────┘
-│ │ check │
-│ └─────────────┬─────────────┘
-│ ┌─────────────┴─────────────┐
-└──┤ close callbacks │
- └───────────────────────────┘
-```
-
-> Кожны блок дыяграмы далей будзе называецца "фазай" цыкла падзей.
-
-Кожная фаза мае FIFO чаргу callback-функцый для выканання. Хоць кожная фаза па-свойму асаблівая, але звычайна кожная фаза працуе па наступным алгарытме. Калі цыкл падзей пераходзіць на пэўную фазу, то спачатку будуць выкананы ўсе аперацыі, характэрныя для гэтай фазы, а затым будуць выкананы callback-функцыі з чаргі гэтай фазы. Callback-функцыі фазы будуць выконвацца пакуль чарга не будзе вычарпана або пакуль не будзе выканана максімальна дазволеная колькасць callback-функцый. Калі чарга вычарпана або дасягнуты ліміт на колькасць выкананых callback-функцый, цыкл падзей пяройдзе да наступнай фазы і гэтак далей.
-
-Паколькі любая з гэтых аперацый можа запланаваць _больш_ аперацый і новыя падзеі, якія апрацоўваюцца на фазе **poll**, дадаюцца ў чаргу ядром, падзеі для фазы poll могуць дадавацца ў чаргу падчас апрацоўкі падзей фазы poll. Такім чынам callback-функцыі, якія патрабуюць шмат часу на выкананне, могуць дазволіць фазе poll працаваць значна даўжэй, чым ліміт чакання дадзенага таймера. Больш падрабязную інфармацыю глядзіце ў раздзелах [**timers**](#timers) і [**poll**](#poll).
-
-> Існуе невялікае разыходжанне паміж рэалізацыяй Windows і Unix/Linux, але гэта не важна для гэтай дэманстрацыі. Тут будуць разгледжаны самыя важныя часткі. Фактычна існуе сем або восем этапаў, але тыя, якія нас цікавяць (тыя, якія насамрэч выкарыстоўвае Node.js) — прыведзены вышэй.
-
-## Агляд фаз
-
-- **timers**: на гэтай фазе выконваюцца callback-функцыі, якія былі запланаваны з дапамогай функцый `setTimeout()` і `setInterval()`.
-- **pending callbacks**: выконваюцца callback-функцыі ўводу/вываду, якія былі адкладзены да наступнай ітэрацыі цыкла.
-- **idle, prepare**: толькі для ўнутранага выкарыстання.
-- **poll**: атрымліваюцца новыя падзеі ўводу-вываду; выконваюцца callback-функцыі звязаныя з уводам-вывадам (амаль усе, за выключэннем callback-функцый закрыцця і callback-функцый запланаваных таймерамі і функцыяй `setImmediate()`); Node будзе блакіраваць выкананне тут, калі гэта неабходна.
-- **check**: выклікаюцца callback-функцыі, зарэгістраваныя функцыяй `setImmediate()`.
-- **close callbacks**: выконваюцца некаторыя callback-функцыі закрыцця, напрыклад, `socket.on('close', ...)`.
-
-Паміж кожным запускам цыкла падзей Node.js правярае, ці чакаюцца якія-небудзь асінхронныя аперацыі ўводу/вываду або таймеры (timers). Калі нічога няма, то працэс Node.js завяршае сваю працу.
-
-## Падрабязны агляд фаз
-
-### timers (таймеры)
-
-Таймер вызначае **парогавае значэнне**, _пасля якога_ зададзеная callback-функцыя _можа быць выканана_, а не **дакладны** час, калі _яе трэба выканаць_. Callback-функцыі таймера будуць выкананы як толькі Node.js зможа запланаваць іх пасля заканчэння вызначанага часу чакання. Аднак планаванне аперацыйнай сістэмы або выкананне іншых callback-функцый можа затрымаць іх выкананне.
-
-> Тэхнічна, фаза [**poll**](#poll) кантралюе час, калі будуць выкананы таймеры.
-
-Напрыклад, вы запланавалі callback-функцыю, якая павінна быць выканана пасля 100мс чакання, пасля гэтага ваш скрыпт пачынае асінхроннае чытанне файла, якое займае 95мс:
-
-```js
-const fs = require('fs');
-
-function someAsyncOperation(callback) {
- // Дапусцім, што гэта займе 95мс
- fs.readFile('/path/to/file', callback);
-}
-
-const timeoutScheduled = Date.now();
-
-setTimeout(() => {
- const delay = Date.now() - timeoutScheduled;
-
- console.log(`${delay}мс прайшло з таго часу, як я была запланавана`);
-}, 100);
-
-// выканаем функцыю someAsyncOperation, якая займае 95 мс
-someAsyncOperation(() => {
- const startCallback = Date.now();
-
- // зробім што-небудзь, што зойме 10 мс…
- while (Date.now() - startCallback < 10) {
- // нічога не рабіць
- }
-});
-```
-
-Калі цыкл падзей пераходзіць у фазу **poll**, то яна мае пустую чаргу (функцыя `fs.readFile()` яшчэ не завершана), таму цыкл падзей будзе чакаць столькі мілісекунд, колькі засталося, да парогу чакання найбліжэйшага таймера. Пакуль ён чакае 95мс, функцыя `fs.readFile()` завяршае чытанне файла і callback-функцыя, выкананне якой займае 10мс, дадаецца ў чаргу фазы **poll**, а затым выконваецца. Калі callback-функцыя завершыцца, у чарзе больш не застанецца іншых callback-функцый, таму цыкл падзей убачыць, што парог чакання найбліжэйшага таймера дасягнуты, пасля чаго вернецца да фазы **timers**, каб выканаць callback-функцыі таймера. У гэтым прыкладзе вы ўбачыце, што агульная затрымка паміж запланаваным таймерам і выкананнем яго callback-функцыі складзе 105мс.
-
-> Каб прадухіліць фазу **poll** ад вычарпання цыкла падзей, [libuv][] (бібліятэка напісаная на мове C, якая рэалізуе цыкл падзей Node.js і ўсе асінхронныя паводзіны платформы) таксама мае жорсткі максімум (які залежыць ад сістэмы), пасля якога яна спыніць апытанне новых падзей.
-
-### pending callbacks (callback-функцыі ў чаканні)
-
-На гэтым этапе выконваюцца callback-функцыі для некаторых сістэмных аперацый, напрыклад, для памылак TCP. Некаторыя \*nix сістэмы чакаюць перад тым як паведаміць, што TCP-сокет атрымаў памылку `ECONNREFUSED` падчас спробы злучэння. Гэта падзея будзе дададзена ў чаргу для выканання ў фазе **pending callbacks**.
-
-### poll (апытанне)
-
-Фаза **poll** мае дзве асноўныя функцыі:
-
-1. Разлік таго, як доўга яна павінна блакіраваць і апытваць увод-вывад, а затым
-2. Апрацоўка падзей у чарзе фазы **poll**.
-
-Калі цыкл падзей пераходзіць у фазу **poll** _і запланаваныя таймеры адсутнічаюць_, адбудзецца адно з двух:
-
-- _Калі чарга фазы **poll** — **не пустая**_, цыкл падзей будзе перабіраць чаргу callback-функцый, выконваючы іх сінхронна, пакуль чарга не будзе вычарпана або не будзе дасягнуты сістэмны жорсткі ліміт.
-
-- _Калі чарга фазы **poll** — **пустая**_, адбудзецца адно з двух:
-
- - Калі скрыпты былі запланаваны функцыяй `setImmediate()`, цыкл падзей скончыць фазу **poll** і пяройдзе да фазы **check**, каб выканаць гэтыя запланаваныя скрыпты.
-
- - Калі скрыпты **не былі** запланаваны з дапамогай функцыі `setImmediate()`, цыкл падзей будзе чакаць, пакуль callback-функцыі будуць дададзены ў чаргу, а затым неадкладна выканае іх.
-
-Пасля таго, як чарга для фазы **poll** апусцее, цыкл пачне правяраць таймеры ў якіх быў _дасягнуты парогавы час чакання_. Калі адзін або некалькі таймераў дасягнулі гэты парог, цыкл падзей вернецца да фазы **timers**, каб выканаць запланаваныя callback-функцыі гэтых таймераў.
-
-### check (этап агляду)
-
-Гэтая фаза дазваляе карыстальніку выконваць callback-функцыі адразу пасля завяршэння фазы **poll**. Калі фаза **poll** становіцца бяздзейнай і callback-функцыі былі пастаўлены ў чаргу з дапамогай функцыі `setImmediate()`, цыкл падзей можа перайсці да фазы **check** замест чакання.
-
-Функцыя `setImmediate()` на самай справе з'яўляецца спецыяльным таймерам, які працуе ў асобнай фазе цыкла падзей. Яна выкарыстоўвае API бібліятэкі libuv, якое плануе выкананне callback-функцый пасля завяршэння фазы **poll**.
-
-Як правіла, па меры выканання кода цыкл падзей трапляе ў фазу **poll**, дзе ён будзе чакаць уваходнага злучэння, запыту і г. д. Аднак, калі callback-функцыя была запланавана з дапамогай функцыі `setImmediate()` і фаза **poll** становіцца бяздзейнай, то гэта фаза завершыцца і цыкл падзей пяройдзе да фазы **check** замест чакання падзей для фазы **poll**.
-
-### close callbacks (callback-функцыі закрыцця)
-
-Калі сокет або дэскрыптар раптоўна закрываюцца (напрыклад, `socket.destroy()`), на гэтай фазе будзе сгенерыравана падзея `'close'`. Інакш яна будзе сгенерыравана праз функцыю `process.nextTick()`.
-
-## `setImmediate()` супраць `setTimeout()`
-
-Функцыі `setImmediate()` і `setTimeout()` падобныя, але паводзяць сябе па-рознаму ў залежнасці ад таго, калі яны былі выкліканы.
-
-- Функцыя `setImmediate()` прызначана для выканання скрыпта пасля завяршэння бягучай фазы **poll**.
-- Функцыя `setTimeout()` плануе запуск скрыпта пасля таго, як скончыцца мінімальны парог чакання ў мілісекундах.
-
-Парадак выканання таймераў будзе мяняцца ў залежнасці ад кантэксту, у якім яны выклікаюцца. Калі абодва таймеры выклікаюцца з галоўнага модуля, то час, калі яны будуць выкананы, будзе залежаць ад прадукцыйнасці працэсу (на якую могуць уплываць іншыя праграмы, запушчаныя на машыне).
-
-Напрыклад, калі мы запусцім наступны скрыпт, які не знаходзіцца ўнутры цыкла ўводу-вываду (то-бок галоўнага модуля), парадак выканання двух таймераў не з'яўляецца дэтэрмінаваным, паколькі ён залежыць ад прадукцыйнасці працэсу:
-
-```js
-// timeout_vs_immediate.js
-setTimeout(() => {
- console.log('timeout');
-}, 0);
-
-setImmediate(() => {
- console.log('immediate');
-});
-```
-
-```
-$ node timeout_vs_immediate.js
-timeout
-immediate
-
-$ node timeout_vs_immediate.js
-immediate
-timeout
-```
-
-Аднак, калі вы перамесціце два выклікі ў цыкл уводу-вываду, неадкладная (immediate) callback-функцыя заўсёды будзе выконвацца першай:
-
-```js
-// timeout_vs_immediate.js
-const fs = require('fs');
-
-fs.readFile(__filename, () => {
- setTimeout(() => {
- console.log('timeout');
- }, 0);
- setImmediate(() => {
- console.log('immediate');
- });
-});
-```
-
-```
-$ node timeout_vs_immediate.js
-immediate
-timeout
-
-$ node timeout_vs_immediate.js
-immediate
-timeout
-```
-
-Асноўная перавага выкарыстання функцыі `setImmediate()` над функцыяй `setTimeout()` заключаецца ў тым, што функцыя `setImmediate()` заўсёды будзе выконвацца перад таймерамі, калі яна запланавана ўнутры цыкла ўводу-вывыду, незалежна ад колькасці таймераў.
-
-## `Функцыя process.nextTick()`
-
-### Разуменне функцыі `process.nextTick()`
-
-Магчыма, вы заўважылі, што функцыя `process.nextTick()` не была адлюстравана на дыяграме, хаця яна і з'яўляецца часткай асінхроннага API. Гэта адбылося таму, што функцыя `process.nextTick()` тэхнічна не з'яўляецца часткай цыкла падзей. Замест гэтага, чарга функцыі (`nextTickQueue`) будзе апрацавана пасля завяршэння бягучай аперацыі, незалежна ад бягучай фазы цыкла падзей. _Аперацыя_ тут — гэта пераход кантролю ад асноўнага апрацоўшчыка C/C++, а таксама апрацоўка JavaScript, які неабходна выканаць.
-
-Гледзячы на нашу схему можна ўбачыць, што кожны раз, калі вы выклікаеце функцыю `process.nextTick()` у зададзенай фазе, усе callback-функцыі перададзеныя ў функцыю `process.nextTick()` будуць выкананы перад тым, як цыкл падзей працягне сваю працу. Гэта можа прывесці да непрыемных вынікаў, таму што **гэта дазваляе "вычарпаць" чаргу ўводу/вываду, зрабіўшы рэкурсіўныя выклікі функцыі `process.nextTick()`**, што не дасць цыклу падзей дасягнуць фазы **poll**.
-
-### Чаму гэта дазволена?
-
-Навошта дадаваць нешта падобнае ў Node.js? Часткова таму, што гэта філасофія дызайну, згодна з якой API заўсёды павінен быць асінхронным, нават калі гэта не патрэбна. Возьмем, напрыклад, гэты фрагмент кода:
-
-```js
-function apiCall(arg, callback) {
- if (typeof arg !== 'string')
- return process.nextTick(
- callback,
- new TypeError('аргумент павінен мець тып string')
- );
-}
-```
-
-У гэтым фрагменце кода адбываецца праверка аргумента, калі аргумент памылковы — у callback-функцыю будзе перададзена памылка. Даволі нядаўна API было абноўлена, каб дазволіць перадаваць аргументы ў функцыю `process.nextTick()`. Цяпер пасля callback-функцыі можна перадаць любую колькасць аргументаў і яны будуць перададзены ў callback-функцыю ў якасці яе аргументаў, такім чынам вам не трэбы ствараць укладзеныя функцыі.
-
-Мы перадаём памылку назад карыстальніку, але толькі _пасля_ таго, як астатняя частка карыстальніцкага кода будзе выканана. З дапамогай функцыі `process.nextTick()` мы гарантуем, што функцыя `apiCall()` заўсёды будзе запускаць свае callback-функцыі _пасля_ астатняй часткі карыстальніцкага кода і _да таго_, як цыклу падзей будзе дазволена працягваць сваё выкананне. Для гэтага стэк выклікаў JS дазволена раскруціць, а потым неадкладна выканаць дадзеную callback-функцыю. Гэта дазваляе карыстальніку рабіць рэкурсіўныя выклікі функцыі `process.nextTick()` не атрымліваючы `RangeError: Перавышаны максімальны памер стэка выкліку` ад v8.
-
-Гэтая філасофія можа прывесці да некаторых патэнцыйна праблемных сітуацый. Возьмем, напрыклад, гэты код:
-
-```js
-let bar;
-
-// гэта функцыя мае асінхронную сігнатуру, але выклікае callback-функцыю сінхронна
-function someAsyncApiCall(callback) {
- callback();
-}
-
-// callback-функцыя выклікаецца да завяршэння `someAsyncApiCall`.
-someAsyncApiCall(() => {
- // паколькі функцыя someAsyncApiCall не была завершана, пераменнай bar
- // не было прысвоена ніякае значэнне
- console.log('bar', bar); // undefined
-});
-
-bar = 1;
-```
-
-Карыстальнік вызначае функцыю `someAsyncApiCall()` як функцыю з асінхроннай сігнатурай, але яна на самай справе працуе сінхронна. Калі яе выклікаюць, то callback-функцыя, перададзеная ў `someAsyncApiCall()`, выклікаецца ў той жа фазе цыкла падзей, таму што `someAsyncApiCall()` насамрэч не робіць нічога асінхроннага. У выніку callback-функцыя спрабуе спасылацца на пераменную `bar`, хоць такой пераменнай яшчэ можа не быць у вобласці бачнасці гэтай функцыі, таму што скрыпт магчыма яшчэ не дайшоў да канца.
-
-Калі мы памесцім callback-функцыю ў `process.nextTick()`, то скрыпт будзе выкананы да канца, і толькі пасля гэтага будзе выканана callback-функцыя, а значыць, што ў момант выканання callback-функцыі ўсе пераменныя, функцыі і г.д. ужо будуць ініцыялізаваныя. Перавага гэтага спосабу яшчэ і ў тым, што ён не дазваляе цыклу падзей працягваць сваё выкананне. Гэта можа быць карысна калі мы хочам папярэдзіць карыстальніка аб памылцы да таго, як цыкл падзей працягне сваю працу. Вось папярэдні прыклад з выкарыстаннем функцыі `process.nextTick()`:
-
-```js
-let bar;
-
-function someAsyncApiCall(callback) {
- process.nextTick(callback);
-}
-
-someAsyncApiCall(() => {
- console.log('bar', bar); // 1
-});
-
-bar = 1;
-```
-
-Вось яшчэ адзін рэальны прыклад:
-
-```js
-const server = net.createServer(() => {}).listen(8080);
-
-server.on('listening', () => {});
-```
-
-Калі перадаецца толькі порт, то порт прывязваецца адразу ж. Такім чынам, callback-функцыю для падзеі `'listening'` можна неадкладна выклікаць. Праблема заключаецца ў тым, што callback-функцыя `.on('listening')` у гэты момант яшчэ не будзе зададзена.
-
-Каб абысці гэта, падзея `'listening'` ставіцца ў чаргу праз функцыю `nextTick()`, каб дазволіць скрыпту дайсці да канца. Гэта дазваляе карыстальніку дадаць любыя апрацоўшчыкі падзей.
-
-## `process.nextTick()` супраць `setImmediate()`
-
-У нас ёсць два функцыі, які выглядаюць падобнымі з пункту гледжання карыстальнікаў, але іх назвы могуць заблытаць.
-
-- Функцыя `process.nextTick()` запускаецца адразу ў той жа самай фазе
-- Функцыя `setImmediate()` спрацоўвае на наступнай ітэрацыі або 'ціку' цыкла падзей
-
-Па сутнасці, імёны трэба памяняць месцамі. Функцыя `process.nextTick()` спрацоўвае хутчэй, чым функцыя `setImmediate()`, але гэта артэфакт мінулага, і вельмі малаверагодна, што гэта ўжо зменіцца. Гэта змена прывядзе да паломкі вялікага працэнта існуючых пакетаў у npm. Новыя модулі дадаюцца кожны дзень, таму з кожным днём чакання, колькасць патэнцыяльных праблем павялічваецца. І хоць назвы функцый прыводзяць да блытаніны, але яны не зменяцца.
-
-> Мы рэкамендуем распрацоўшчыкам выкарыстоўваць функцыю `setImmediate()`, таму што яе прасцей зразумець.
-
-## Навошта выкарыстоўваць функцыю `process.nextTick()`?
-
-На гэта ёсць дзве асноўныя прычыны:
-
-1. Дазволіць карыстальнікам апрацоўваць памылкі, ачышчаць усе непатрэбныя рэсурсы або, напрыклад, паўтарыць запыт, перш чым цыкл падзей працягне сваю працу.
-
-2. Часам неабходна дазволіць выкананне callback-функцыі пасля раскручвання стэка выклікаў, але перад тым, як цыкл падзей працягне сваю працу.
-
-Адзін з прыкладаў — адпавядаць чаканням карыстальніка. Просты прыклад:
-
-```js
-const server = net.createServer();
-server.on('connection', conn => {});
-
-server.listen(8080);
-server.on('listening', () => {});
-```
-
-Уявім, што функцыя `listen()` запускаецца ў пачатку цыкла падзей, але callback-функцыя, для падзеі 'listening' змяшчаецца ў функцыі `setImmediate()`. Акрамя выпадку калі імя хоста перададзена, прывязка да порта адбудзецца імгненна. Для працягу сваёй працы цыкл падзей павінен перайсці ў фазу **poll**, што азначае, што існуе шанец таго, што злучэнне магло быць атрымана. Гэта значыць, што падзея 'connection' была створана да падзеі 'listening'.
-
-Іншы прыклад — пашырэнне `EventEmitter` і стварэнне падзеі ў канструктары:
-
-```js
-const EventEmitter = require('events');
-
-class MyEmitter extends EventEmitter {
- constructor() {
- super();
- this.emit('event');
- }
-}
-
-const myEmitter = new MyEmitter();
-myEmitter.on('event', () => {
- console.log('адбылася падзея!');
-});
-```
-
-Вы не можаце стварыць падзею наўпрост з канструктара, таму што скрыпт яшчэ не дойдзе да таго месца, дзе карыстальнік прызначае callback-функцыю для апрацоўкі гэтай падзеі. Таму ў самім канструктары вы можаце выкарыстоўваць функцыю `process.nextTick()`, і задаць ёй callback-функцыю, якая створыць падзею ўжо пасля завяршэння працы канструктара, што забяспечыць чаканыя вынікі:
-
-```js
-const EventEmitter = require('events');
-
-class MyEmitter extends EventEmitter {
- constructor() {
- super();
-
- // выкарыстоўвайце nextTick, каб стварыць падзею, як толькі прызначаны апрацоўшчык
- process.nextTick(() => {
- this.emit('event');
- });
- }
-}
-
-const myEmitter = new MyEmitter();
-myEmitter.on('event', () => {
- console.log('адбылася падзея!');
-});
-```
-
-[libuv]: https://libuv.org/
-[REPL]: https://nodejs.org/api/repl.html#repl_repl
diff --git a/pages/be/download/current.md b/pages/be/download/current.md
deleted file mode 100644
index 718cf26428690..0000000000000
--- a/pages/be/download/current.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download-current.hbs
-title: Спампаваць
-download: Спампаваць
-downloads:
- headline: Спампоўкі
- lts: LTS
- current: Бягучая
- tagline-current: Найноўшыя функцыі
- tagline-lts: Рэкамендавана для большасці
- display-hint: Паказаць спампоўкі для
- intro: >
- Спампуйце зыходны код Node.js або ўсталёўшчык для вашай платформы і пачніце распрацоўку сёння.
- currentVersion: Актуальная бягучая версія
- buildInstructions: Зборка Node.js з зыходнага кода на платформах, што падтрымліваюцца
- WindowsInstaller: Усталёўшчык для Windows
- WindowsBinary: Двайковыя файлы для Windows
- MacOSInstaller: Усталёўшчык для macOS
- MacOSBinary: Двайковыя файлы для macOS
- LinuxBinaries: Двайковыя файлы для Linux
- SourceCode: Зыходны код
-additional:
- headline: Дадатковыя платформы
- intro: >
- Удзельнікі супольнасці Node.js падтрымліваюць неафіцыйныя зборкі Node.js для дадатковых платформ. Майце на ўвазе, што гэтыя зборкі не падтрымліваюцца асноўнай камандай Node.js і могуць не адпавядаць бягучым афіцыйным версіям Node.js.
- platform: Платформа
- provider: Пастаўшчык
- SmartOSBinaries: Двайковыя файлы для SmartOS
- DockerImage: Вобраз для Docker
- officialDockerImage: Афіцыйны вобраз Node.js для Docker
- LinuxPowerSystems: Linux на Power LE Systems
- LinuxSystemZ: Linux на System z
- AIXPowerSystems: AIX на Power Systems
----
diff --git a/pages/be/download/index.md b/pages/be/download/index.md
deleted file mode 100644
index e74bb99e3b604..0000000000000
--- a/pages/be/download/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download.hbs
-title: Спампаваць
-download: Спампаваць
-downloads:
- headline: Спампоўкі
- lts: LTS
- current: Бягучая
- tagline-current: Найноўшыя функцыі
- tagline-lts: Рэкамендавана для большасці
- display-hint: Паказаць спампоўкі для
- intro: >
- Спампуйце зыходны код Node.js або ўсталёўшчык для вашай платформы і пачніце распрацоўку сёння.
- currentVersion: Актуальная LTS версія
- buildInstructions: Зборка Node.js з зыходнага кода на платформах, што падтрымліваюцца
- WindowsInstaller: Усталёўшчык для Windows
- WindowsBinary: Двайковыя файлы для Windows
- MacOSInstaller: Усталёўшчык для macOS
- MacOSBinary: Двайковыя файлы для macOS
- LinuxBinaries: Двайковыя файлы для Linux
- SourceCode: Зыходны код
-additional:
- headline: Дадатковыя платформы
- intro: >
- Удзельнікі супольнасці Node.js падтрымліваюць неафіцыйныя зборкі Node.js для дадатковых платформ. Майце на ўвазе, што гэтыя зборкі не падтрымліваюцца асноўнай камандай Node.js і могуць не адпавядаць бягучым афіцыйным версіям Node.js.
- platform: Платформа
- provider: Пастаўшчык
- SmartOSBinaries: Двайковыя файлы для SmartOS
- DockerImage: Вобраз для Docker
- officialDockerImage: Афіцыйны вобраз Node.js для Docker
- LinuxPowerSystems: Linux на Power LE Systems
- LinuxSystemZ: Linux на System z
- AIXPowerSystems: AIX на Power Systems
----
diff --git a/pages/be/download/releases.md b/pages/be/download/releases.md
deleted file mode 100644
index e8262ec63302a..0000000000000
--- a/pages/be/download/releases.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-layout: download-releases.hbs
-title: Папярэднія рэлізы
-modules: '<код>NODE_MODULE_VERSIONкод> адносіцца да нумара версіі ABI (двайковы інтэрфейс праграмы) Node.js, які выкарыстоўваецца для вызначэння таго, якія версіі двайковых файлаў C++ дапаўненняў, скампіляваных Node.js, можна загружаць без паўторнай кампіляцыі. Раней, у больш ранніх версіях, яно захоўвалася як шаснаццатковае значэнне, але цяпер прадстаўлена ў выглядзе цэлага ліку.'
----
-
-### io.js і Node.js
-
-Рэлізы з 1.x па 3.x называліся "io.js", таму што яны былі часткай форка io.js. Пачынаючы з Node.js 4.0.0 io.js быў аб'яднаны з Node.js 0.12.x у агульны рэліз Node.js.
-
-### Шукаеце апошні рэліз пэўнай версіі?
diff --git a/pages/be/index.md b/pages/be/index.md
deleted file mode 100644
index 5b7dcd2ab5c93..0000000000000
--- a/pages/be/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: Бягучая версія
- download: Спампаваць
- download-for: Спампаваць для
- other-downloads: Іншыя спампоўкі
- current: Бягучая
- lts: LTS
- tagline-current: Найноўшыя функцыі
- tagline-lts: Рэкамендавана для большасці
- changelog: Спіс змен
- api: Дакументацыя API
- version-schedule-prompt: Інфармацыю аб падтрымліваемых выпусках можна знайсці на
- version-schedule-prompt-link-text: графік LTS
----
-
-Node.js® — гэта кросплатформеннае асяроддзе выканання JavaScript з адкрытым зыходным кодам.
diff --git a/pages/ca/404.md b/pages/ca/404.md
deleted file mode 100644
index 4c86ad4ece44c..0000000000000
--- a/pages/ca/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Pàgina no trobada
-
-### ENOENT: L'arxiu o directori no existeix
diff --git a/pages/ca/about/index.md b/pages/ca/about/index.md
deleted file mode 100644
index 447d13de3a53a..0000000000000
--- a/pages/ca/about/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-layout: about.hbs
-title: Sobre nosaltres
-trademark: Trademark
----
-
-# Sobre Node.js®
-
-Nascut com a un entorn d'execució de JavaScript orientat a esdeveniments asíncrons, Node.js està dissenyat per a crear aplicacions en xarxa de manera escalable. En la següent aplicació d'exemple "hola món", es pot manegar moltes connexions concurrents. Per a cada connexió el callback serà executat, no obstant si no hi hagués tasques pendents per a fer, Node.js romandrà adormit.
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hola Món');
-});
-
-server.listen(port, hostname, () => {
- console.log(`El servidor s'està executant en http://${hostname}:${port}/`);
-});
-```
-
-Això contrasta amb el model de concurrència més comú d'avui dia, o es fan servir els fils del Sistema Operatiu. Les operacions en xarxes basades en fils són relativament ineficients i són molt més complicades de fer servir. A més a més, els usuaris de Node.js no han d'estar preocupats quant als bloquejos dels processos ja que són inexistents. Gairebé cap funció en Node.js realitza I/O directament, d'aquesta manera el procés mai és bloquejat. A raó de què no hi ha bloquejos, és més raonable desenvolupar sistemes escalables en Node.js.
-
-Si cap d'aquests termes no li és familiar, hi ha un article complet en [Blocking vs Non-Blocking][].
-
----
-
-Node té un disseny similar i està influenciat per sistemes com [Event Machine][] de Ruby o [Twisted][] de Python. Node porta el model d'esdeveniments una mica més enllà, aquest presenta un [bucle d'esdeveniments][] com un entorn en comptes d'una llibreria. En altres sistemes sempre existeix una trucada que bloqueja per iniciar el bucle d'esdeveniments. El comportament és típicament definit a través de _callbacks_ a l'inici del script i al final s'inicia el servidor mitjançant una trucada de bloqueig com `EventMachine::run()`. En Node no existeix aquesta trucada. Node simplement ingressa el bucle d'esdeveniments després d'executar el script d'entrada. Node surt del bucle d'esdeveniments quan no hi ha més _callbacks_ que executar. s comporta d'una forma similar a JavaScript al navegador - el bucle d'esdeveniments està ocult a l'usuari.
-
-HTTP es ciutadà de primera classe en Node, disenyat amb operacions de streaming y baixa latència en ment. Això no fa a Node candidat per ser la base d'una llibrería o un framework web.
-
-Solament perquè Node està dissenyat sense fils, no significa que vostè no pot aprofitar els múltiples cores del seu sistema. Processos fills poden ser llençats usant la nostra API [`child_process.fork()`][], la qual està dissenyada per comunicar-se fàcilment amb el procés principal. Construïda sobre la mateixa interfície està el mòdul [`cluster`][], el qual permet compartir sockets entre processos per activar el balanceig de càrregues en els seus múltiples cores.
-
-[Blocking vs Non-Blocking]: https://nodejs.org/ca/docs/guides/blocking-vs-non-blocking/
-[`child_process.fork()`]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
-[`cluster`]: https://nodejs.org/api/cluster.html
-[bucle d'esdeveniments]: https://github.com/nodejs/node/blob/main/doc/topics/event-loop-timers-and-nexttick.md
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/ca/docs/index.mdx b/pages/ca/docs/index.mdx
deleted file mode 100644
index 1e9b8750e6e84..0000000000000
--- a/pages/ca/docs/index.mdx
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Documentació
-layout: docs.hbs
-labels:
- lts: LTS
----
-
-# Sobre la documentació
-
-Existeixen tres tipus de documentació a l'abast en aquest lloc:
-
-- Referència de la API
-- Característiques d'ES6
-- Preguntes freqüents
-
-## Referència de l'API
-
-La [Referència de l'API](https://nodejs.org/api/) proporciona informació detallada sobre una funció ó un objecte en Node.js. Aquesta
-documentació indica quins arguments acepta un mètode, el valor que retorna aquest mètode i quins errors poden estar
-relacionats al mateix. També indica quins mètodes són a l'abast per les diferents versions de Node.js
-
-També descriu els mòduls inclosos que proporciona Node.js, mes no documenta els mòduls que proporciona la comunitat.
-
-
-
-### Buscant la referència de l'API per a una versió anterior?
-
-
-
-[Totes les versions](https://nodejs.org/docs/)
-
-
-
-## Característiques d'ES6
-
-La [secció d'ES6](/en/docs/es6/) descriu l'arbre dels grups de les característiques d'ES6, i detalla quines
-característiques són activades per defecte en Node.js, juntament amb enllaços explicatius. També mostra com trobar
-quina versió de V8 fa servir una versió particular de Node.js.
-
-## Guides
-
-The [Guides section](/en/docs/guides/) has long-form, in-depth articles about Node.js technical features and capabilities.
diff --git a/pages/ca/download/current.md b/pages/ca/download/current.md
deleted file mode 100644
index 396dd99cf232f..0000000000000
--- a/pages/ca/download/current.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download-current.hbs
-title: Descàrrega
-download: Descàrrega
-downloads:
- headline: Descàrregues
- lts: LTS
- current: Actual
- tagline-current: Últimes característiques
- tagline-lts: Recomanat per a la majoria
- display-hint: Mostrar descàrregues per a
- intro: >
- Descarregui el codi font de Node.js o un instal·lador pre-compilat per a la seva plataforma, i comenci a desenvolupar avui.
- currentVersion: Versió actual
- buildInstructions: Building Node.js from source on supported platforms
- WindowsInstaller: Windows Installer
- WindowsBinary: Windows Binary
- MacOSInstaller: macOS Installer
- MacOSBinary: macOS Binary
- LinuxBinaries: Linux Binaries
- SourceCode: Source Code
-additional:
- headline: Plataformes addicionals
- intro: >
- Membres de la comunitat de Node.js proveeixen paquets pre-compilats de forma no oficial per a plataformes addicionals no suportades per l'equip central de Node.js que poden no estar al mateix nivell de les versions actuals oficials de Node.js.
- platform: Plataforma
- provider: Proveïdor
- SmartOSBinaries: SmartOS Binaries
- DockerImage: Docker Image
- officialDockerImage: Official Node.js Docker Image
- LinuxPowerSystems: Linux on Power LE Systems
- LinuxSystemZ: Linux on System z
- AIXPowerSystems: AIX on Power Systems
----
diff --git a/pages/ca/download/index.md b/pages/ca/download/index.md
deleted file mode 100644
index b8ad11ff07c1a..0000000000000
--- a/pages/ca/download/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download.hbs
-title: Descàrrega
-download: Descàrrega
-downloads:
- headline: Descàrregues
- lts: LTS
- current: Actual
- tagline-current: Últimes característiques
- tagline-lts: Recomanat per a la majoria
- display-hint: Mostrar descàrregues per a
- intro: >
- Descarregui el codi font de Node.js o un instal·lador pre-compilat per a la seva plataforma, i comenci a desenvolupar avui.
- currentVersion: Versió LTS
- buildInstructions: Building Node.js from source on supported platforms
- WindowsInstaller: Windows Installer
- WindowsBinary: Windows Binary
- MacOSInstaller: macOS Installer
- MacOSBinary: macOS Binary
- LinuxBinaries: Linux Binaries
- SourceCode: Source Code
-additional:
- headline: Plataformes addicionals
- intro: >
- Membres de la comunitat de Node.js proveeixen paquets pre-compilats de forma no oficial per a plataformes addicionals no suportades per l'equip central de Node.js que poden no estar al mateix nivell de les versions actuals oficials de Node.js.
- platform: Plataforma
- provider: Proveïdor
- SmartOSBinaries: SmartOS Binaries
- DockerImage: Docker Image
- officialDockerImage: Official Node.js Docker Image
- LinuxPowerSystems: Linux on Power LE Systems
- LinuxSystemZ: Linux on System z
- AIXPowerSystems: AIX on Power Systems
----
diff --git a/pages/ca/get-involved/index.md b/pages/ca/get-involved/index.md
deleted file mode 100644
index d8d55af32831b..0000000000000
--- a/pages/ca/get-involved/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Participa
-layout: contribute.hbs
----
-
-# Participa
-
-## Discussió de la comunitat
-
-- La [llista d'incidències de GitHub](https://github.com/nodejs/node/issues) és el lloc per discutir les característiques del nucli de Node.js.
-- El compte de Twitter oficial de Node.js és [nodejs](https://twitter.com/nodejs).
-- The [Node.js Foundation calendar](https://nodejs.org/calendar) with all public team meetings.
-
-## Aprenentatge
-
-- La [Documentació oficial de l'API](https://nodejs.org/api/) detalla l'API de Node.
-- [NodeSchool.io](https://nodeschool.io/) li ensenyarà conceptes de Node.js de forma interactiva mitjançant jocs utilitzant la línia de comandes.
-- L'[etiqueta de Node.js en Stack Overflow](https://stackoverflow.com/questions/tagged/node.js) col·lecciona nova informació cada dia.
-- L'[etiqueta de Node.js en la DEV Community](https://dev.to/t/node) és un lloc on compartir projectes de Node.js, articles i tutorials, així com iniciar debats i demanar realimentació sobre temes relacionats amb Node.js. Els desenvolupadors de tots els nivells d'experiència són benvinguts a participar.
-- [Nodeiflux](https://discordapp.com/invite/vUsrbjd) és una comunitat amigable de desenvolupadors de backend amb Node.js que es recolzen mútuament a Discord.
-
-## Llocs de la comunitat internacional i projectes
-
-- [Comunitat Xinesa de Node.js](https://cnodejs.org/)
-- [Comunitat d'Hongria(Magyar)](https://nodehun.blogspot.com/)
-- [Grup de Facebook israelià per Node.js](https://www.facebook.com/groups/node.il/)
-- [Grup d'usuaris de Japó](https://nodejs.jp/)
-- [Grup de Facebook en espanyol de Node.js](https://www.facebook.com/groups/node.es/)
-- [Vietnamese Node.js community](https://www.facebook.com/nodejs.vn/)
-- [Uzbekistan group for Node.js](https://t.me/nodejs_uz)
diff --git a/pages/ca/index.md b/pages/ca/index.md
deleted file mode 100644
index 93aa2634886b7..0000000000000
--- a/pages/ca/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: Versió actual
- download: Descarregar
- download-for: Descarregar per
- other-downloads: Altres Descàrregues
- current: Actual
- lts: LTS
- tagline-current: Últimes característiques
- tagline-lts: Recomanat per a la majoria
- changelog: Canvis
- api: Documentació de l'API
- version-schedule-prompt: O revisi la
- version-schedule-prompt-link-text: Agenda de LTS
----
-
-Node.js® és un entorn d'execució per a JavaScript construït amb el [motor de JavaScript V8 de Chrome](https://v8.dev/).
diff --git a/pages/de/404.md b/pages/de/404.md
deleted file mode 100644
index 6f7c11b0d5174..0000000000000
--- a/pages/de/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Seite wurde nicht gefunden
-
-### ENOENT: Datei oder Ordner nicht gefunden
diff --git a/pages/de/about/governance.md b/pages/de/about/governance.md
deleted file mode 100644
index 7f634eeb6b75a..0000000000000
--- a/pages/de/about/governance.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Projektmanagment
-layout: about.hbs
----
-
-# Projektmanagment
-
-## Konsensus Suchprozess
-
-Das Node.js Projekt folgt dem [Konsensprinzip][].
-
-## Mitwirkende
-
-Die [nodejs/node][] Kern-GitHub Repository wird von den Mitarbeitern verwaltet, die vom Technischen Lenkungsausschuss ([TSC][]) ständig hinzugefügt werden.
-
-Personen, die bedeutende und wertvolle Beiträge leisten, werden zu Mitarbeitern gezählt und erhalten Commit-Zugriff auf das Projekt. Diese Personen werden vom TSC identifiziert und ihre Nominierung wird mit den bestehenden Mitarbeitern abgesprochen.
-
-Die aktuelle Liste der Mitarbeiter finden Sie in der [README.md][] des Projekts.
-
-Ein Leitfaden für Mitarbeiter wird unter [collaborator-guide.md][] gepflegt.
-
-## Technischer Lenkungsausschuss
-
-Das Projekt wird vom [Technischen Lenkungsausschuss (TSC)][] geleitet, der für die Leitung des Projekts auf höchster Ebene verantwortlich ist.
-
-[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
-[Konsensprinzip]: https://de.wikipedia.org/wiki/Konsensprinzip
-[README.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
-[Technischen Lenkungsausschuss (TSC)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
-[TSC]: https://github.com/nodejs/TSC
-[nodejs/node]: https://github.com/nodejs/node
diff --git a/pages/de/about/index.md b/pages/de/about/index.md
deleted file mode 100644
index 82dbd8d249605..0000000000000
--- a/pages/de/about/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-layout: about.hbs
-title: Über Node.js
-trademark: Markenzeichen
----
-
-# Über Node.js®
-
-Als asynchrone, Event-basierte Laufzeitumgebung wurde Node.js speziell für die Entwicklung von skalierbaren Netzwerkanwendungen entworfen. Im nachfolgenden "Hallo Welt"-Beispiel können viele Verbindungen gleichzeitig bearbeitet werden. Bei jeder neuen Anfrage wird die Callback-Funktion ausgeführt. Gibt es jedoch nichts zu tun, befindet sich Node.js im Ruhezustand.
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hallo Welt');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server läuft unter http://${hostname}:${port}/`);
-});
-```
-
-Dies steht im Gegensatz zu den heutzutage üblichen Modellen für Nebenläufigkeit, bei denen Threads des Betriebssystems genutzt werden. Thread-basiertes Networking ist vergleichsweise ineffizient und sehr schwer umzusetzen. Zudem müssen sich Node-Nutzer nicht um Deadlocks im Prozess sorgen, da es keine Blockierung gibt. Fast keine Funktion in Node.js führt direkt I/O-Operationen aus, daher wird der Prozess nie blockiert. Da nichts blockiert, können mit Node.js sinnvoll skalierbare Systeme entwickelt werden.
-
-Wenn einige dieser Konzepte unbekannt sind, gibt es hier einen Artikel zum Thema [blockierend vs. blockierungsfrei][] (auf Englisch).
-
----
-
-Node.js ähnelt im Design und ist beeinflusst von Systemen wie Rubys "[Event Machine][]" oder Pythons "[Twisted][]". Node.js führt das Event-Modell noch etwas weiter. Die [Ereignisschleife][] ist ein Konstrukt direkt in der Laufzeitumgebung und wird nicht über eine Bibliothek eingebunden. In anderen Systemen ist immer ein blockierender Aufruf notwendig, um die Ereignisschleife zu starten. Üblicherweise wird das Verhalten in Callback-Funktionen am Anfang des Skripts definiert und am Ende wird mit einem blockierenden Aufruf wie `EventMachine::run()` ein Server gestartet. In Node.js gibt es keinen solchen Aufruf, um die Ereignisschleife zu starten. Node.js beginnt einfach mit der Ereignisschleife, nachdem das Eingabe-Skript ausgeführt wurde. Node.js verlässt die Ereignisschleife, wenn keine Callback-Funktionen mehr auszuführen sind. Dieses Verhalten ist wie bei Browser-JavaScript - die Ereignisschleife ist vor dem Nutzer versteckt.
-
-HTTP ist ein Basiselement in Node, entworfen mit Fokus auf Streaming und geringe Latenz. Dadurch ist Node.js sehr gut als Grundlage für Web-Bibliotheken oder Frameworks geeignet.
-
-Dass Node.js ohne Threads entworfen ist, bedeutet nicht, dass man die Vorteile von mehreren Kernen auf einer Maschine nicht ausnutzen kann. Untergeordnete Prozesse können mit der [`child_process.fork()`][] API gestartet werden und sie wurden so entworfen, dass man leicht mit ihnen kommunizieren kann. Auf der gleichen Schnittstelle setzt das [`Cluster`][] Modul auf, dass es Prozessen erlaubt Sockets gemeinsam zu nutzen, um Lastverteilung über Kerne hinweg zu ermöglichen.
-
-[blockierend vs. blockierungsfrei]: /en/docs/guides/blocking-vs-non-blocking/
-[`child_process.fork()`]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
-[`Cluster`]: https://nodejs.org/api/cluster.html
-[Ereignisschleife]: /en/docs/guides/event-loop-timers-and-nexttick/
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/de/docs/index.mdx b/pages/de/docs/index.mdx
deleted file mode 100644
index bcfcb2a8cdb9a..0000000000000
--- a/pages/de/docs/index.mdx
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Dokumentation
-layout: docs.hbs
-labels:
- lts: LTS
----
-
-# Über die Dokumentationen
-
-Auf dieser Webseite gibt es verschiedene Arten von Dokumentationen:
-
-- API-Referenz
-- ES6 Funktionalitäten
-- Anleitungen
-
-## API-Referenz
-
-Die [API-Referenz](https://nodejs.org/api/) stellt detaillierte Informationen über Funktionen und
-Objekte in Node.js bereit. Diese Dokumentation zeigt, welche Argumente die
-Methoden erlauben, den Rückgabewert der Methode und welche Fehler im
-Zusammenhang mit der Methode stehen. Die Dokumentation zeigt auch, welche
-Methoden in den verschiedenen Node.js-Versionen verfügbar sind.
-
-Die API-Referenz beschreibt Module, die in Node.js integriert sind. Module, die
-von der Community zur Verfügung gestellt werden, sind dort nicht dokumentiert.
-
-
-
-### Du suchst nach API Referenzen für ältere Versionen?
-
-
-
-[Alle Versionen](https://nodejs.org/docs/)
-
-
-
-## ES6 Funktionalitäten
-
-Der [ES6-Bereich](/en/docs/es6/) beschreibt die drei Gruppen von ES6-Funktionalitäten und gibt Detailinformation dazu, welche Funktionalitäten
-standardmäßig in Node.js eingeschaltet sind. Zudem gibt es Links zu weiteren
-Erklärungen. Dort finden sich auch Informationen, welche Version von V8 in
-welcher Node.js-Version enthalten ist.
-
-## Anleitungen
-
-Unter Anleitungen finden sich ausführliche Artikel über technische
-Funktionalitäten und Leistungsfähigkeit von Node.js.
diff --git a/pages/de/download/current.md b/pages/de/download/current.md
deleted file mode 100644
index 2b03dbe53c4a3..0000000000000
--- a/pages/de/download/current.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download-current.hbs
-title: Herunterladen
-download: Download
-downloads:
- headline: Downloads
- lts: LTS
- current: Aktuell
- tagline-current: Neueste Funktionalitäten
- tagline-lts: Für die meisten Nutzer empfohlen
- display-hint: Downloads anzeigen für
- intro: >
- Lade den Node.js Quellcode oder ein bestehendes Installationsprogramm für deine Plattform herunter und beginne gleich mit der Entwicklung.
- currentVersion: Aktuellste Version
- buildInstructions: Erstellen von Node.js aus dem Quellcode auf unterstützten Plattformen
- WindowsInstaller: Windows-Installationsprogramm
- WindowsBinary: Windows Binärdatei
- MacOSInstaller: macOS Installationsprogramm
- MacOSBinary: macOS Binärdatei
- LinuxBinaries: Linux Binärdateien
- SourceCode: Quellcode
-additional:
- headline: Weitere Plattformen
- intro: >
- Mitglieder der Node.js Community pflegen inoffizielle, gebaute Versionen von Node.js für weitere Plattformen. Beachte, dass solche Versionen nicht vom Node.js-Kernteam unterstützt werden und daher eventuell noch nicht auf dem selben Level wie die aktuelle Node.js-Version sind.
- platform: Plattform
- provider: Anbieter
- SmartOSBinaries: SmartOS Binärdateien
- DockerImage: Docker Abbild
- officialDockerImage: Offizielles Node.js Docker Abbild
- LinuxPowerSystems: Linux auf Power LE Systemen
- LinuxSystemZ: Linux auf System z
- AIXPowerSystems: AIX auf Power Systems
----
diff --git a/pages/de/download/index.md b/pages/de/download/index.md
deleted file mode 100644
index c09915ce95dd9..0000000000000
--- a/pages/de/download/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download.hbs
-title: Download
-download: Download
-downloads:
- headline: Downloads
- lts: LTS
- current: Aktuell
- tagline-current: Neueste Funktionalitäten
- tagline-lts: Für die meisten Nutzer empfohlen
- display-hint: Downloads anzeigen für
- intro: >
- Lade den Node.js-Quellcode oder ein bestehendes Installationsprogramm für deine Plattform herunter und beginne gleich mit der Entwicklung.
- currentVersion: Aktuellste LTS-Version
- buildInstructions: Building Node.js from source on supported platforms
- WindowsInstaller: Windows Installer
- WindowsBinary: Windows Binary
- MacOSInstaller: macOS Installer
- MacOSBinary: macOS Binary
- LinuxBinaries: Linux Binaries
- SourceCode: Source Code
-additional:
- headline: Weitere Plattformen
- intro: >
- Mitglieder der Node.js Community pflegen inoffizielle, gebaute Versionen von Node.js für weitere Plattformen. Beachte, dass solche Versionen nicht vom Node.js-Kernteam unterstützt werden und daher eventuell noch nicht auf dem selben Level wie die aktuelle Node.js-Version sind.
- platform: Plattform
- provider: Anbieter
- SmartOSBinaries: SmartOS Binaries
- DockerImage: Docker Image
- officialDockerImage: Official Node.js Docker Image
- LinuxPowerSystems: Linux on Power LE Systems
- LinuxSystemZ: Linux on System z
- AIXPowerSystems: AIX on Power Systems
----
diff --git a/pages/de/index.md b/pages/de/index.md
deleted file mode 100644
index 45ecec50aee1d..0000000000000
--- a/pages/de/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: Aktuelle Version
- download: Herunterladen
- download-for: Herunterladen für
- other-downloads: Andere Downloads
- current: Aktuell
- lts: LTS
- tagline-current: Neueste Funktionalitäten
- tagline-lts: Für die meisten Nutzer empfohlen
- changelog: Änderungshistorie
- api: API Dokumentation
- version-schedule-prompt: Oder wirf einen Blick auf den
- version-schedule-prompt-link-text: LTS Release Plan
----
-
-Node.js® ist eine JavaScript-Laufzeitumgebung, die auf [Chromes V8 JavaScript-Engine](https://v8.dev/) basiert.
diff --git a/pages/en/about/governance.md b/pages/en/about/governance.md
index fe758d1fd29a5..5d933d47cd5b1 100644
--- a/pages/en/about/governance.md
+++ b/pages/en/about/governance.md
@@ -27,9 +27,9 @@ A guide for Collaborators is maintained at [collaborator-guide.md][].
The project is governed by the [Technical Steering Committee (TSC)][]
which is responsible for high-level guidance of the project.
+[consensus seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making
+[readme.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
+[tsc]: https://github.com/nodejs/TSC
+[technical steering committee (tsc)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
-[Consensus Seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making
-[README.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
-[Technical Steering Committee (TSC)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
-[TSC]: https://github.com/nodejs/TSC
[nodejs/node]: https://github.com/nodejs/node
diff --git a/pages/en/about/index.md b/pages/en/about/index.md
index 456f5c4c819d6..6526bdf199df8 100644
--- a/pages/en/about/index.md
+++ b/pages/en/about/index.md
@@ -11,7 +11,7 @@ scalable network applications. In the following "hello world" example, many
connections can be handled concurrently. Upon each connection, the callback is
fired, but if there is no work to be done, Node.js will sleep.
-```javascript
+```js
const http = require('http');
const hostname = '127.0.0.1';
@@ -43,7 +43,7 @@ If some of this language is unfamiliar, there is a full article on
Node.js is similar in design to, and influenced by, systems like Ruby's
[Event Machine][] and Python's [Twisted][]. Node.js takes the event model a bit
-further. It presents an [event loop][] as a runtime construct instead of as a library. In other systems,
+further. It presents an event loop as a runtime construct instead of as a library. In other systems,
there is always a blocking call to start the event-loop.
Typically, behavior is defined through callbacks at the beginning of a script, and
at the end a server is started through a blocking call like `EventMachine::run()`.
@@ -62,9 +62,8 @@ communicate with. Built upon that same interface is the [`cluster`][] module,
which allows you to share sockets between processes to enable load balancing
over your cores.
-[Blocking vs. Non-Blocking]: /en/docs/guides/blocking-vs-non-blocking/
-[`child_process.fork()`]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
+[blocking vs. non-blocking]: /learn/overview-of-blocking-vs-non-blocking/
+[`child_process.fork()`]: /api/child_process/
[`cluster`]: https://nodejs.org/api/cluster.html
-[event loop]: /en/docs/guides/event-loop-timers-and-nexttick/
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
+[event machine]: https://github.com/eventmachine/eventmachine
+[twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/en/about/previous-releases.md b/pages/en/about/previous-releases.md
new file mode 100644
index 0000000000000..9ed530b3e4864
--- /dev/null
+++ b/pages/en/about/previous-releases.md
@@ -0,0 +1,20 @@
+---
+title: Releases
+layout: download-releases.hbs
+modules: 'NODE_MODULE_VERSION refers to the ABI (application binary interface) version number of Node.js, used to determine which versions of Node.js compiled C++ add-on binaries can be loaded in to without needing to be re-compiled. It used to be stored as hex value in earlier versions, but is now represented as an integer.'
+---
+
+# Releases
+
+Major Node.js versions enter _Current_ release status for six months, which gives library authors time to add support for them.
+After six months, odd-numbered releases (9, 11, etc.) become unsupported, and even-numbered releases (10, 12, etc.) move to _Active LTS_ status and are ready for general use.
+_LTS_ release status is "long-term support", which typically guarantees that critical bugs will be fixed for a total of 30 months.
+Production applications should only use _Active LTS_ or _Maintenance LTS_ releases.
+
+### Release Schedule
+
+![Releases](https://raw.githubusercontent.com/nodejs/Release/main/schedule.svg?sanitize=true)
+
+Full details regarding Node.js release schedule are available [on GitHub](https://github.com/nodejs/release#release-schedule).
+
+### Looking for latest release of a version branch?
diff --git a/pages/en/about/security-reporting.md b/pages/en/about/security-reporting.md
new file mode 100644
index 0000000000000..1ac5b77800316
--- /dev/null
+++ b/pages/en/about/security-reporting.md
@@ -0,0 +1,74 @@
+---
+title: Security Reporting
+layout: about.hbs
+---
+
+# Security Reporting
+
+For more details on active Security Policies, checkout [this page](https://github.com/nodejs/node/security/policy).
+
+## Reporting a bug in Node.js
+
+Report security bugs in Node.js via [HackerOne](https://hackerone.com/nodejs).
+
+Your report will be acknowledged within 5 days, and you'll receive a more
+detailed response to your report within 10 days indicating the next steps in
+handling your submission.
+
+After the initial reply to your report, the security team will endeavor to keep
+you informed of the progress being made towards a fix and full announcement,
+and may ask for additional information or guidance surrounding the reported
+issue.
+
+### Node.js bug bounty program
+
+The Node.js project engages in an official bug bounty program for security
+researchers and responsible public disclosures. The program is managed through
+the HackerOne platform. See [https://hackerone.com/nodejs](https://hackerone.com/nodejs) for further details.
+
+## Reporting a bug in a third party module
+
+Security bugs in third party modules should be reported to their respective
+maintainers.
+
+## Disclosure policy
+
+Here is the security disclosure policy for Node.js
+
+- The security report is received and is assigned a primary handler. This
+ person will coordinate the fix and release process. The problem is confirmed
+ and a list of all affected versions is determined. Code is audited to find
+ any potential similar problems. Fixes are prepared for all releases which are
+ still under maintenance. These fixes are not committed to the public
+ repository but rather held locally pending the announcement.
+
+- A suggested embargo date for this vulnerability is chosen and a CVE (Common
+ Vulnerabilities and Exposures (CVE®)) is requested for the vulnerability.
+
+- On the embargo date, the Node.js security mailing list is sent a copy of the
+ announcement. The changes are pushed to the public repository and new builds
+ are deployed to nodejs.org. Within 6 hours of the mailing list being
+ notified, a copy of the advisory will be published on the Node.js blog.
+
+- Typically the embargo date will be set 72 hours from the time the CVE is
+ issued. However, this may vary depending on the severity of the bug or
+ difficulty in applying a fix.
+
+- This process can take some time, especially when coordination is required
+ with maintainers of other projects. Every effort will be made to handle the
+ bug in as timely a manner as possible; however, it's important that we follow
+ the release process above to ensure that the disclosure is handled in a
+ consistent manner.
+
+## Receiving security updates
+
+Security notifications will be distributed via the following methods.
+
+- [https://groups.google.com/group/nodejs-sec](https://groups.google.com/group/nodejs-sec)
+- [https://nodejs.org/en/blog/](https://nodejs.org/en/blog/)
+
+## Comments on this policy
+
+If you have suggestions on how this process could be improved please submit a
+[pull request](https://github.com/nodejs/nodejs.org) or
+[file an issue](https://github.com/nodejs/security-wg/issues/new) to discuss.
diff --git a/pages/en/download/releases.md b/pages/en/download/releases.md
deleted file mode 100644
index 72230649bb55b..0000000000000
--- a/pages/en/download/releases.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-layout: download-releases.hbs
-title: Previous Releases
-modules: 'NODE_MODULE_VERSION refers to the ABI (application binary interface) version number of Node.js, used to determine which versions of Node.js compiled C++ add-on binaries can be loaded in to without needing to be re-compiled. It used to be stored as hex value in earlier versions, but is now represented as an integer.'
----
-
-### io.js & Node.js
-
-Releases 1.x through 3.x were called "io.js" as they were part of the io.js fork. As of Node.js 4.0.0 the former release lines of io.js converged with Node.js 0.12.x into unified Node.js releases.
-
-### Looking for latest release of a version branch?
diff --git a/pages/es/404.md b/pages/es/404.md
deleted file mode 100644
index 548d76cfb07ff..0000000000000
--- a/pages/es/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Página no encontrada
-
-### ENOENT: No existe el archivo o el directorio
diff --git a/pages/es/about/governance.md b/pages/es/about/governance.md
deleted file mode 100644
index 49ac7ad856ed5..0000000000000
--- a/pages/es/about/governance.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Dirección del Proyecto
-layout: about.hbs
----
-
-# Dirección del Proyecto
-
-## Proceso de búsqueda de consenso
-
-El proyecto Node.js sigue un modelo de [Búsqueda de Consenso](https://en.wikipedia.org/wiki/Consensus-seeking_decision-making) en la toma de decisiones.
-
-## Colaboradores
-
-El repositorio GitHub del core de [nodejs/node](https://github.com/nodejs/node) es mantenido por Colaboradores, los cuales son añadidos por el Comité Directivo Técnico ([TSC](https://github.com/nodejs/TSC)) de forma continua.
-
-Las personas que hacen contribuciones significativas y valiosas se convierten en Colaboradores y se les otorga permisos de escritura al proyecto. Estas personas son identificadas por el TSC y su nominación se discute con los Colaboradores existentes.
-
-Para ver la lista actual de Colaboradores, consulte el [README.md](https://github.com/nodejs/node/blob/main/README.md#current-project-team-members) del proyecto.
-
-Se mantiene una guía para Colaboradores en [collaborator-guide.md](https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md).
-
-## Comités de nivel superior
-
-El proyecto está dirigido conjuntamente por el [Comité de Dirección Técnica (TSC)](https://github.com/nodejs/TSC/blob/master/TSC-Charter.md), que es responsable de la orientación de alto nivel del proyecto, y el [Comité de la Comunidad (CommComm)](https://github.com/nodejs/community-committee/blob/master/Community-Committee-Charter.md) que es responsable de guiar y ampliar la comunidad Node.js.
diff --git a/pages/es/about/index.md b/pages/es/about/index.md
deleted file mode 100644
index 8c2e6e53ce473..0000000000000
--- a/pages/es/about/index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-layout: about.hbs
-title: Acerca
-trademark: Trademark
----
-
-# Acerca de Node.js®
-
-Ideado como un entorno de ejecución de JavaScript orientado a eventos asíncronos, Node.js está diseñado para crear aplicaciones network escalables. En el siguiente ejemplo de "hola mundo", pueden atenderse muchas conexiones simultáneamente. Por cada conexión, se activa la devolución de llamada o _callback_, pero si no hay trabajo que hacer, Node.js se dormirá.
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hola Mundo');
-});
-
-server.listen(port, hostname, () => {
- console.log(`El servidor se está ejecutando en http://${hostname}:${port}/`);
-});
-```
-
-Esto contrasta con el modelo de concurrencia más común de hoy en día, en el que se emplean hilos del Sistema Operativo. Las redes basadas en hilos son relativamente ineficientes y muy difíciles de usar. Además, los usuarios de Node.js están libres de preocuparse por el bloqueo del proceso, ya que no existe. Casi ninguna función en Node.js realiza I/O directamente, por lo que el proceso nunca se bloquea. Por ello, es muy propicio desarrollar sistemas escalables en Node.js.
-
-Si alguno de estos términos no le es familiar, hay un artículo completo en [Blocking vs. Non-Blocking][].
-
----
-
-Node.js es similar en diseño y está influenciado por sistemas como [Event Machine](https://github.com/eventmachine/eventmachine) de Ruby y [Twisted](https://twistedmatrix.com/trac/) de Python. Pero Node.js lleva el modelo de eventos un poco más allá. Incluye un [bucle de eventos][] como runtime de ejecución en lugar de una biblioteca. En otros sistemas siempre existe una llamada de bloqueo para iniciar el bucle de eventos. Por lo general, el comportamiento se define mediante devoluciones _callbacks_ de llamada al iniciarse un script y al final se inicia un servidor a través de una llamada de bloqueo como `EventMachine::run()`. En Node.js, no existe como tal la llamada de inicio del evento de bucle o _start-the-event-loop_. Node.js simplemente entra en el bucle de eventos después de ejecutar el script de entrada y sale cuando no hay más devoluciones _callbacks_ de llamada para realizar. Se comporta de una forma similar a JavaScript en el navegador - el bucle de eventos está oculto al usuario.
-
-HTTP es un elemento destacado en Node.js, diseñado teniendo en cuenta la transmisión de operaciones con streaming y baja latencia. Esto hace que Node.js sea muy adecuado para la base de una librería o un framework web.
-
-Que Node.js esté diseñado para trabajar sin hilos no significa que no pueda aprovechar múltiples núcleos en su entorno. Se pueden generar subprocesos o procesos hijos utilizando nuestra API [`child_process.fork()`](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options), la cual está diseñada para que la comunicación entre ellos sea fácil mediante su proceso principal. Desarrollada sobre esa misma interfaz está el módulo [`cluster`](https://nodejs.org/api/cluster.html), que le permite compartir sockets entre procesos para permitir el balanceo de carga entre sus múltiples núcleos.
-
-[Blocking vs. Non-Blocking]: /es/docs/guides/blocking-vs-non-blocking/
-[bucle de eventos]: /es/docs/guides/event-loop-timers-and-nexttick/
diff --git a/pages/es/docs/es6.md b/pages/es/docs/es6.md
deleted file mode 100644
index a969dad83df43..0000000000000
--- a/pages/es/docs/es6.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: ECMAScript 2015 (ES6) y más allá
-layout: docs.hbs
----
-
-# ECMAScript 2015 (ES6) y más allá
-
-Node.js está construido en base a versiones modernas de [V8](https://v8.dev/). Al mantenernos actualizados con las últimas versiones de este motor, aseguramos nuevas características del [La Especificación ECMA-262 de JavaScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) que proporciona a los desarrolladores de Node.js, así como mejoras continuas en el rendimiento y la estabilidad.
-
-Todas las características de ECMAScript 2015 (ES6) se dividen en tres grupos **shipping**, **staged** y **in progress**:
-
-- Todas las funcionalidades en **shipping**, que V8 considera estable, se activan **de forma predeterminada en Node.js** y hacen que **NO** se requiera ninguna bandera o flag en tiempo de ejecución.
-- Las funciones en **staged**, que son características casi completas que el equipo V8 no las considera estables, requieren un bandera o flag en tiempo de ejecución: `--harmony`.
-- **In progress**, las características pueden ser activadas individualmente por su respectiva bandera o flag, aunque esto es altamente desaconsejado a menos que sea para propósitos de pruebas. Nota: estos indicadores están expuestos por V8 y potencialmente cambiarán sin previo aviso de desaprobación.
-
-## ¿Cuales de las características se incluyen con cada versión de Node.js por defecto?
-
-El sitio web [node.green](https://node.green/) proporciona una excelente visión general sobre las funciones compatibles de ECMAScript en varias versiones de Node.js, basadas en la tabla de compatibilidad de kangax.
-
-## ¿Cuales de las características están en progreso?
-
-Las nuevas características se agregan constantemente al motor V8. En términos generales, espere que lleguen en su futuro lanzamiento en Node.js, aunque se desconoce el momento.
-
-Puede detallar todas las funciones _in progress_ disponibles en cada versión de Node.js mediante el argumento `--v8-options`. Tenga en cuenta que estas son características incompletas y posiblemente rotas de V8, así que úselas bajo su propio riesgo:
-
-```bash
-node --v8-options | grep "in progress"
-```
-
-## Tengo mi infraestructura configurada para aprovechar la bandera --harmony. ¿Debo eliminarlo?
-
-El comportamiento actual del indicador `--harmony` en Node.js es habilitar solo las funcionalidades en **staged**. Después de todo, ahora es sinónimo de `--es_staging`. Como se mencionó anteriormente, estas son características completas que aún no se han considerado estables. Si desea jugar de forma segura, especialmente en entornos de producción, considere eliminar este indicador de tiempo de ejecución hasta que se envíe de forma predeterminada en V8 y, en consecuencia, en Node.js. Si mantiene esto habilitado, debe estar preparado para futuras actualizaciones de Node.js que puedan romper su código si V8 cambia su semántica para seguir más de cerca el estándar.
-
-## ¿Cómo encuentro qué versión de V8 se envía con una versión de Node.js en particular?
-
-Node.js proporciona una manera simple de enumerar todas las dependencias y versiones que se envían con un binario específico a través del objeto global `process`. En el caso del motor V8, escriba lo siguiente en su terminal para recuperar su versión:
-
-```bash
-node -p process.versions.v8
-```
diff --git a/pages/es/docs/index.mdx b/pages/es/docs/index.mdx
deleted file mode 100644
index f4e110e7e3a15..0000000000000
--- a/pages/es/docs/index.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: Documentación
-layout: docs.hbs
-labels:
- lts: LTS
----
-
-# Sobre la Documentación
-
-Existen diferentes tipos de documentación disponible en esta web:
-
-- Documentación de Referencia de la API
-- Características de ES6
-- Guías
-
-## Documentación de Referencia de la API
-
-La [Documentación de Referencia de la API](https://nodejs.org/api/) proporciona información detallada sobre una función u objeto en Node.js. Esta documentación indica qué argumentos acepta un método, el valor de retorno de ese método y que errores pueden estar relacionados con ese método. También indica qué métodos están disponibles para diferentes versiones de Node.js.
-
-Esta documentación describe los módulos integrados proporcionados por Node.js. No documenta los módulos proporcionados por la comunidad.
-
-
-
-### ¿Buscando la referencia de versiones anteriores de la API?
-
-
-
-[Todas las versiones](https://nodejs.org/docs/)
-
-
-
-## Características de ES6
-
-La [sección ES6](/en/docs/es6/) describe los tres grupos de funciones de ES6 y detalla qué funciones están habilitadas de forma predeterminada en Node.js, junto con enlaces explicativos. También muestra cómo encontrar qué versión de V8 se envió con una versión particular de Node.js.
-
-## Guías
-
-La [sección Guías](/en/docs/guides/) tiene artículos extensos y detallados sobre las características y capacidades técnicas de Node.js.
diff --git a/pages/es/download/current.md b/pages/es/download/current.md
deleted file mode 100644
index 745692c3b3efd..0000000000000
--- a/pages/es/download/current.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download-current.hbs
-title: Descarga
-download: Descarga
-downloads:
- headline: Descargas
- lts: LTS
- current: Actual
- tagline-current: Últimas características
- tagline-lts: Recomendado para la mayoría
- display-hint: Mostrar descargas para
- intro: >
- Descargue el código fuente de Node.js o un instalador pre-compilado para su plataforma, y comience a desarrollar hoy.
- currentVersion: Versión actual
- buildInstructions: Compilando Node.js desde el código fuente en las plataformas soportadas
- WindowsInstaller: Instalador Windows
- WindowsBinary: Binario Windows
- MacOSInstaller: Instalador macOS
- MacOSBinary: Binario macOS
- LinuxBinaries: Binario Linux
- SourceCode: Código Fuente
-additional:
- headline: Plataformas adicionales
- intro: >
- Miembros de la comunidad de Node.js proveén paquetes pre-compilados de forma no oficial para plataformas adicionales no soportadas por el equipo central de Node.js que pueden no estar al mismo nivel de las versiones actuales oficiales de Node.js.
- platform: Plataforma
- provider: Proveedor
- SmartOSBinaries: Binarios SmartOS
- DockerImage: Imagen Docker
- officialDockerImage: Imagen Docker Oficial Node.js
- LinuxPowerSystems: Linux en Power LE Systems
- LinuxSystemZ: Linux en System z
- AIXPowerSystems: AIX en Power Systems
----
diff --git a/pages/es/download/index.md b/pages/es/download/index.md
deleted file mode 100644
index 467a4672789e2..0000000000000
--- a/pages/es/download/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download.hbs
-title: Descarga
-download: Descarga
-downloads:
- headline: Descargas
- lts: LTS
- current: Actual
- tagline-current: Últimas características
- tagline-lts: Recomendado para la mayoría
- display-hint: Mostrar descargas para
- intro: >
- Descargue el código fuente de Node.js o un instalador pre-compilado para su plataforma, y comience a desarrollar hoy.
- currentVersion: Versión actual
- buildInstructions: Compilando Node.js desde el código fuente en las plataformas soportadas
- WindowsInstaller: Instalador Windows
- WindowsBinary: Binario Windows
- MacOSInstaller: Instalador macOS
- MacOSBinary: Binario macOS
- LinuxBinaries: Binario Linux
- SourceCode: Código Fuente
-additional:
- headline: Plataformas adicionales
- intro: >
- Miembros de la comunidad de Node.js proveen paquetes pre-compilados de forma no oficial para plataformas adicionales no soportadas por el equipo central de Node.js que pueden no estar al mismo nivel de las versiones actuales oficiales de Node.js.
- platform: Plataforma
- provider: Proveedor
- SmartOSBinaries: Binarios SmartOS
- DockerImage: Imagen Docker
- officialDockerImage: Imagen Docker Oficial Node.js
- LinuxPowerSystems: Linux en Power LE Systems
- LinuxSystemZ: Linux en System z
- AIXPowerSystems: AIX en Power Systems
----
diff --git a/pages/es/download/package-manager.md b/pages/es/download/package-manager.md
deleted file mode 100644
index 4b18a6da29010..0000000000000
--- a/pages/es/download/package-manager.md
+++ /dev/null
@@ -1,293 +0,0 @@
----
-layout: page.hbs
-title: Instalando Node.js utilizando un gestor de paquetes
----
-
-# Instalando Node.js utilizando un gestor de paquetes
-
-**_Nota:_** Los paquetes de esta página son mantenidos y soportados por sus respectivos responsables, **no** por el equipo central de Node.js. Por favor reporte cualquier problema que usted encuentre al responsable del paquete. Si su problema resulta ser un error en el mismo Node.js, la persona encargada reportará y escalará el error.
-
----
-
-- [Android](#android)
-- [Arch Linux](#arch-linux)
-- [Distribuciones de Linux basadas en Debian y Ubuntu, Enterprise Linux/Fedora y Snap](#debian-and-ubuntu-based-linux-distributions-enterprise-linux-fedora-and-snap-packages)
-- [FreeBSD](#freebsd)
-- [Gentoo](#gentoo)
-- [IBM i](#ibm-i)
-- [NetBSD](#netbsd)
-- [nvm](#nvm)
-- [nvs](#nvs)
-- [OpenBSD](#openbsd)
-- [openSUSE y SLE](#opensuse-and-sle)
-- [macOS](#macos)
-- [SmartOS y illumos](#smartos-and-illumos)
-- [Solus](#solus)
-- [Void Linux](#void-linux)
-- [Windows](#windows-1)
-
----
-
-## Android
-
-El soporte para Android todavía es experimental en Node.js, por lo que los desarrolladores de Node.js aún no proporcionan los binarios precompilados.
-
-Sin embargo, hay algunas soluciones de terceros. Por ejemplo, la comunidad [Termux](https://termux.com/) que proporciona un emulador de terminal y un entorno Linux para Android, así como un administrador de paquetes propio y una [amplia colección](https://github.com/termux/termux-packages) de aplicaciones precompiladas. Este comando en la aplicación Termux instalará la última versión disponible de Node.js:
-
-```bash
-pkg install nodejs
-```
-
-Actualmente, los binarios de Termux Node.js están vinculados contra `system-icu` (dependiendo del paquete `libicu`).
-
-## Arch Linux
-
-Los paquetes para Node.js y npm están disponibles en el repositorio de la Comunidad.
-
-```bash
-pacman -S nodejs npm
-```
-
-## Distribuciones Linux basadas en Debian y Ubuntu, paquetes Enterprise Linux / Fedora y Snap
-
-[Las distribuciones de binarios oficiales de Node.js](https://github.com/nodesource/distributions) son proporcinados por NodeSource.
-
-## FreeBSD
-
-La release más reciente de Node.js está disponible desde el port [www/node](https://www.freshports.org/www/node).
-
-Instale el paquete binario a través de [pkg](https://www.freebsd.org/cgi/man.cgi?pkg):
-
-```bash
-pkg install node
-```
-
-O compílelo usted mismo utilizando [ports](https://www.freebsd.org/cgi/man.cgi?ports):
-
-```bash
-cd /usr/ports/www/node && make install
-```
-
-## Gentoo
-
-Node.js está disponible en portage.
-
-```bash
-emerge nodejs
-```
-
-## IBM i
-
-Las versiones LTS de Node.js están disponibles en IBM, y están disponibles a través de [el administrador de paquetes 'yum'](https://ibm.biz/ibmi-rpms). El nombre del paquete es `nodejs` seguido del número de versión principal (por ejemplo, `nodejs8`, `nodejs10`, `nodejs12`, etc.)
-
-Para instalar Node.js 12.x desde la línea de comandos, ejecute lo siguiente como usuario con autoridad especial \*ALLOBJ:
-
-```bash
-yum install nodejs12
-```
-
-Node.js también se puede instalar con el producto IBM i Access Client Solutions. Consulte [este documento de soporte](http://www-01.ibm.com/support/docview.wss?uid=nas8N1022619) para obtener más detalles.
-
-## NetBSD
-
-Node.js está disponible en pkgsrc:
-
-```bash
-cd /usr/pkgsrc/lang/nodejs && make install
-```
-
-O instale un paquete binario (si está disponible para su plataforma) utilizando pkgin:
-
-```bash
-pkgin -y install nodejs
-```
-
-## nvm
-
-Node Version Manager es un script bash utilizado para administrar múltiples versiones lanzadas de Node.js. Permite realizar operaciones como instalar, desinstalar, cambiar de versión, etc. Para instalar nvm, use este [script de instalación](https://github.com/nvm-sh/nvm#install--update-script).
-
-En los sistemas Unix / OS X, Node.js construido desde la fuente se puede instalar usando [nvm](https://github.com/creationix/nvm) instalándolo en la ubicación que nvm espera:
-
-```bash
-env VERSION=`python tools/getnodeversion.py` make install DESTDIR=`nvm_version_path v$VERSION` PREFIX=""
-```
-
-Después de esto, puede utilizar `nvm` para cambiar entre las versiones publicadas y las versiones creadas desde la fuente. Por ejemplo, si la versión de Node.js es v8.0.0-pre:
-
-```bash
-nvm use 8
-```
-
-Once the official release is out you will want to uninstall the version built from source:
-
-```bash
-nvm uninstall 8
-```
-
-## nvs
-
-#### Windows
-
-The `nvs` version manager is cross-platform and can be used on Windows, macOS, and Unix-like systems
-
-To install `nvs` on Windows go to the [release page](https://github.com/jasongin/nvs/releases) here and download the MSI installer file of the latest release.
-
-You can also use `chocolatey` to install it:
-
-```bash
-choco install nvs
-```
-
-#### macOS,UnixLike
-
-You can find the documentation regarding the installation steps of `nvs` in macOS/Unix-like systems [here](https://github.com/jasongin/nvs/blob/master/doc/SETUP.md#mac-linux)
-
-#### Usage
-
-After this you can use `nvs` to switch between different versions of node.
-
-To add the latest version of node:
-
-```bash
-nvs add latest
-```
-
-Or to add the latest LTS version of node:
-
-```bash
-nvs add lts
-```
-
-Then run the `nvs use` command to add a version of node to your `PATH` for the current shell:
-
-```bash
-$ nvs use lts
-PATH -= %LOCALAPPDATA%\nvs\default
-PATH += %LOCALAPPDATA%\nvs\node\14.17.0\x64
-```
-
-To add it to `PATH` permanently, use `nvs link`:
-
-```bash
-nvs link lts
-```
-
-## OpenBSD
-
-Node.js está disponible a través del sistema de puertos.
-
-```bash
-/usr/ports/lang/node
-```
-
-Utilizando [pkg_add](https://man.openbsd.org/OpenBSD-current/man1/pkg_add.1) en OpenBSD:
-
-```bash
-pkg_add node
-```
-
-## openSUSE and SLE
-
-Node.js está disponible en los repositorios principales en los siguientes paquetes:
-
-- **openSUSE Leap 42.2**: `nodejs4`
-- **openSUSE Leap 42.3**: `nodejs4`, `nodejs6`
-- **openSUSE Tumbleweed**: `nodejs4`, `nodejs6`, `nodejs8`
-- **SUSE Linux Enterprise Server (SLES) 12**: `nodejs4`, `nodejs6` (The "Web and Scripting Module" must be [added before installing](https://www.suse.com/documentation/sles-12/book_sle_deployment/data/sec_add-ons_extensions.html).)
-
-Por ejemplo, para instalar Node.js 4.x en openSUSE Leap 42.2, ejecute lo siguiente como root:
-
-```bash
-zypper install nodejs4
-```
-
-## macOS
-
-Ó compílelo manualmente desde pkgsrc:
-
-_Si quieres descargar el paquete con bash:_
-
-```bash
-curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
-```
-
-### Alternativas
-
-Utilizando **[Homebrew](https://brew.sh/)**:
-
-```bash
-brew install node
-```
-
-Utilizando **[MacPorts](https://www.macports.org/)**:
-
-```bash
-port install nodejs
-
-# Example
-port install nodejs7
-```
-
-Utilizando **[pkgsrc](https://pkgsrc.joyent.com/install-on-osx/)**:
-
-Instale el paquete binario:
-
-```bash
-pkgin -y install nodejs
-```
-
-O compílelo manualmente desde pkgsrc:
-
-```bash
-cd pkgsrc/lang/nodejs && bmake install
-```
-
-## SmartOS y illumos
-
-Las imágenes SmartOS vienen con pkgsrc preinstalado. En otras distribuciones de illumos, primero instale **[pkgsrc](https://pkgsrc.joyent.com/install-on-illumos/)**, y entonces podrá instalar el paquete binario de manera normal:
-
-```bash
-pkgin -y install nodejs
-```
-
-O compílelo manualmente desde pkgsrc:
-
-```bash
-cd pkgsrc/lang/nodejs && bmake install
-```
-
-## Solus
-
-Solus proporciona Node.js en su repositorio principal.
-
-```bash
-sudo eopkg install nodejs
-```
-
-## Void Linux
-
-Void Linux incluye la versión estable de Node.js en el repositorio principal.
-
-```bash
-xbps-install -Sy nodejs
-```
-
-## Windows
-
-Simply download the [Windows Installer](https://nodejs.org/en/#home-downloadhead) directly from the [nodejs.org](https://nodejs.org/) web site.
-
-### Alternativas
-
-Utilizando **[Chocolatey](https://chocolatey.org/)**:
-
-```bash
-cinst nodejs
-# or for full install with npm
-cinst nodejs.install
-```
-
-Utilizando **[Scoop](https://scoop.sh/)**:
-
-```bash
-scoop install nodejs
-```
diff --git a/pages/es/download/releases.md b/pages/es/download/releases.md
deleted file mode 100644
index a864c20b9cdeb..0000000000000
--- a/pages/es/download/releases.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-layout: download-releases.hbs
-title: Versiones Anteriores
-modules: 'NODE_MODULE_VERSION se refiere al número de versión ABI (interfaz binaria de la aplicación) de Node.js, que se utiliza para determinar qué versiones de binarios de complementos C++ compilados por Node.js se pueden cargar sin necesidad de volver a compilarlos. Solía almacenarse como valor hexadecimal en versiones anteriores, pero ahora se representa como un número entero.'
----
-
-### io.js & Node.js
-
-Las versiones de la 1.x a 3.x se llamaron "io.js", ya que formaban parte del fork io.js. A partir de Node.js 4.0.0, las versiones de lanzamiento anteriores de io.js se convergieron con Node.js 0.12.x con lanzamientos unificados de Node.js.
-
-### ¿Buscando las últimas versiones de una rama específica?
diff --git a/pages/es/get-involved/collab-summit.md b/pages/es/get-involved/collab-summit.md
deleted file mode 100644
index d8c8f07256c28..0000000000000
--- a/pages/es/get-involved/collab-summit.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Colabora en el Summit
-layout: contribute.hbs
----
-
-# Colabora en el Summit
-
-El Collaboration Summit es un evento de tipo no-conferencia para atraer actuales y potenciales colaboradores juntos para discutir Node.js con colaboración activa, educación e intercambio de conocimiento. Comités y grupos de trabajo se reúnen dos veces al año para tomar decisiones importantes mientras trabajan en algunos retos interesantes que subirán ellos mismos.
-
-## ¿Quién asiste?
-
-Todos son bienvenidos a asistir al Collab Summit. Durante el summit, los líderes ayudaran a los nuevos colaboradores a embarcarse en los grupos donde ellos deseen ayudar antes de integrarlos en las sesiones de trabajo.
-
-Esta es tu oportunidad de saber lo que está pasando en la comunidad, zambullirte y contribuir con las habilidades que ya tienes y aquellas que quisieras mejorar.
-
-Los grupos de trabajo establecerán un calendario para que la gente pueda familiarizarse antes de que inicie el evento, con discusiones generales de colaboradores, y luego entrar a sesiones de trabajo.
-
-Nos encantaría verte en el Collab Summit! Visita el [Summit repo](https://github.com/nodejs/summit) para saber de futuros y anteriores Collab Summits y echa un vistazo a [issues filed](https://github.com/nodejs/summit/issues) que comparte lo que los grupos de trabajo individuales y comités estan buscando discutir en persona.
diff --git a/pages/es/get-involved/contribute.md b/pages/es/get-involved/contribute.md
deleted file mode 100644
index a1bec5c82659c..0000000000000
--- a/pages/es/get-involved/contribute.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Aportando
-layout: contribute.hbs
----
-
-# Aportando
-
-¡Gracias por su interés en aportar a Node.js! Hay varias formas y lugares en los que puede aportar, y estamos aquí para ayudar y facilitar.
-
-## Ayuda General
-
-Debido al alto nivel de actividad en el repositorio `nodejs/node`, las preguntas o solicitudes de ayuda general con Node.js deben dirigirse al [repositorio de ayuda de Node.js](https://github.com/nodejs/help/issues).
-
-## Reportando una Issue
-
-Si ha encontrado lo que cree que es un problema con Node.js, no dude en publicar un issue en el proyecto GitHub. Cuando publique su issue, asegúrese de expresar el problema con un caso de prueba reproducible, y ese caso de prueba no debe incluir ninguna dependencia externa. Es decir, que el caso de prueba se puede ejecutar sin nada más que Node.js mismo.
-
-Al informar con un issue, también necesitamos tanta información sobre su entorno como pueda incluir. Nunca sabemos qué información será pertinente cuando intentemos reducir el problema. Incluya, al menos ,la siguiente información:
-
-- Versión de Node.js
-- Plataforma en la que está ejecutándose (macOS, SmartOS, Linux, Windows)
-- Arquitectura en la que está funcionando (32bit or 64bit and x86 or ARM)
-
-El proyecto Node.js se gestiona actualmente en varios repositorios de GitHub separados, cada uno con su propia base de datos de problemas. Si es posible, dirija cualquier problema que esté informando al repositorio apropiado, pero no se preocupe si las cosas se ponen en el lugar equivocado, la comunidad de contribuyentes estará más que feliz de ayudarle a orientarse.
-
-- Para informar issues específicos de Node.js, utilice [nodejs/node](https://github.com/nodejs/node)
-- Para informar de issues específicos de este sitio web, utilice [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org/issues)
-
-## Aportaciones de Código
-
-Si desea corregir bugs fix o agregar una nueva funcionalidad a Node.js, asegúrese de consultar las [Pautas de contribución de Node.js](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md/#pull-requests). El proceso de revisión por parte de los colaboradores actuales para todas las aportaciones al proyecto se explica también en ese enlace.
-
-Si se pregunta cómo comenzar, consulte [Node Todo](https://www.nodetodo.org/), puede guiarle con su primera aportación.
-
-## Convertirse en colaborador
-
-Al convertirse en un colaborador, los contribuyentes pueden tener aún más impacto en el proyecto. Pueden ayudar a otros con la revisión de sus aportaciones, cuestiones de clasificación y tomar una parte aún mayor en la organización del proyecto. Las personas identificadas por el TSC que realizan aprotaciones significativas y valiosas en cualquier repositorio de Node.js pueden ser Colaboradores y tener acceso al proyecto. Las actividades tomadas en consideración incluyen (pero no se limitan a) en calidad de:
-
-- código de commits y pull requests
-- documentación de commits y pull requests
-- comentarios en issues y en pull requests
-- contribuciones a la web Node.js
-- asistencia a usuarios finales y contribuyentes novatos
-- participación en los Working Groups
-- otra participación en la Comunidad de Node.js
-
-Si las personas que realizan aportaciones valiosas no creen que se les haya considerado para comprometerse con el proyecto y acceder, pueden [registrar una issue](https://github.com/nodejs/TSC/issues) o [contactar a un miembro del TSC](https://github.com/nodejs/TSC#current-members) directamente.
diff --git a/pages/es/get-involved/index.md b/pages/es/get-involved/index.md
deleted file mode 100644
index 08a7399b5b31b..0000000000000
--- a/pages/es/get-involved/index.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Participe
-layout: contribute.hbs
----
-
-# Participe
-
-## Discusión de la Comunidad
-
-- La [lista de errores](https://github.com/nodejs/node/issues) es el lugar para discutir las características del núcleo de Node.js.
-- La cuenta de Twitter oficial de Node.js es [nodejs](https://twitter.com/nodejs).
-- El [calendario de la Fundación Node.js](https://nodejs.org/calendar) con todas las reuniones del equipo público.
-- [Node Weekly](https://nodeweekly.com/) es una lista de correo que recopila los últimos eventos y noticias alrededor de la comunidad de Node.js.
-- [Node Slackers](https://www.nodeslackers.com/) es una comunidad de Slack enfocada en Node.js.
-
-## Aprendizaje
-
-- La [Documentación oficial de la API](https://nodejs.org/api/) detalla la API de Node.
-- [NodeSchool.io](https://nodeschool.io/) le enseñará conceptos de Node.js de forma interactiva mediante juegos utilizando la línea de comandos.
-- La [etiqueta de Node.js en Stack Overflow](https://stackoverflow.com/questions/tagged/node.js) colecciona nueva información cada día.
-- [La etiqueta DEV Community Node.js](https://dev.to/t/node) es un lugar para compartir proyectos, artículos y tutoriales de Node.js, así como para iniciar debates y pedir información sobre temas relacionados con Node.js. Desarrolladores de todos los niveles son bienvenidos a participar.
-- [Nodeiflux](https://discordapp.com/invite/vUsrbjd) es una comunidad amigable de desarrolladores back-end de Node.js que se apoyan mutuamente en Discord.
-
-## Sitios de comunidades internacionales y proyectos
-
-- [Comunidad China](https://cnodejs.org/)
-- [Comunidad de Hungría (Magyar)](https://nodehun.blogspot.com/)
-- [Comunidad en Facebook de usuarios Israelíes de Node.js](https://www.facebook.com/groups/node.il/)
-- [Grupo de usuarios de Japón](https://nodejs.jp/)
-- [Comunidad en Facebook de Español/Castellano](https://www.facebook.com/groups/node.es/)
-- [Comunidad Vietnamita Node.js](https://www.facebook.com/nodejs.vn/)
-- [Uzbekistan group for Node.js](https://t.me/nodejs_uz)
diff --git a/pages/es/index.md b/pages/es/index.md
deleted file mode 100644
index cf2a14f76b27a..0000000000000
--- a/pages/es/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: Versión Actual
- download: Descarga
- download-for: Descargar para
- other-downloads: Otras Descargas
- current: Actual
- lts: LTS
- tagline-current: Últimas características
- tagline-lts: Recomendado para la mayoría
- changelog: Cambios
- api: Documentación de la API
- version-schedule-prompt: O eche un vistazo al
- version-schedule-prompt-link-text: Programa de soporte a largo plazo (LTS)
----
-
-Node.js® es un entorno de ejecución para JavaScript construido con [V8, motor de JavaScript de Chrome](https://v8.dev/).
diff --git a/pages/fa/404.md b/pages/fa/404.md
deleted file mode 100644
index b2f26c2b12080..0000000000000
--- a/pages/fa/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: صفحه مورد نظر شما یافت نشد.
-
-### ENOENT: فایل یا فولدر مورد نظر یافت نشد.
diff --git a/pages/fa/about/index.md b/pages/fa/about/index.md
deleted file mode 100644
index e679a69abe035..0000000000000
--- a/pages/fa/about/index.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-layout: about.hbs
-title: درباره
-trademark: نشان تجاری
----
-
-# درباره Node.js®
-
-به عنوان یک اجرا کننده رویدادهای ناهماهنگ در جاوا اسکریپت، Node.js به شکلی طراحی شده است که بتوان با آن برنامههای تحت وب توسعه پذیر ساخت. در مثال "hello world" پایین، تعداد خیلی زیادی اتصال به صورت هم زمان انجام گیرد. پس از هر اتصال یه فراخوان (callback) اجرا خواهد شد، اما اگر کاری برای انجام نباشد نود میخوابد.
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hello World');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server running at http://${hostname}:${port}/`);
-});
-```
-
-این در مقایسه با مدل امروزیتر همزمانی است، جایی که Theradهای سیستم عامل به کار گرفته میشوند. شبکه مبتنی بر Thread به نسب ناکارآمد و بسیار سخت کاربرد است. علاوه بر این کاربران Node.js از نگرانی قفل مرگبار فرایندها آسوده هستند. از آن جایی که هیچ قفلی وجود ندارد، تقریبا هیچ فانکشنی در Node.js به صورت مستقیم با I/O انجام نمیدهد بنا بر این هیچ فرایندای فقل نخواهد شد. به همین علت پیاده سازی سیستمهای مقیاسپذیر بر روی Node.js بسیار منطقی است.
-
-اگر با این ادبیات ناآشنا هستید یک مقاله کامل در این رابطه وجود دارد. [Blocking vs Non-Blocking][].
-
----
-
-Node.js در طراحی مشابه و تاثیر گرفته است از سیستمهایی ماننده Ruby's [Event Machine][] یا Python's [Twisted][]. Node.js مدل رویداد را کمی به جلوتر میبرد و [event loop][] را به عنوان یک ساختار زمانبندی به جای یک کتابخانه ارائه میکند.
-
-در سیستمهای دیگر همیشه یک تماس مسدود کننده برای شروع event-loop وجود دارد.
-
-به طور معمول رفتار از طریق callbackها در ابتدای اسکریپت تعریف میشود و در پایان یک سرور را از طریق یک تماس مسدود کننده مانند `EventMachine::run()` اجرا میکند. در Node.js چیزی به عنوان فراخوان برای شروع حلقه رویداد وجود ندارد. Node.js پس از اجرای اسکریپت ورودی به حلقه رویداد وارد میشود. این رفتار ماننده جاوااسکریپت در مرورگر است - حلقه رویداد از کاربر مخفی میماند.
-
-[Blocking vs Non-Blocking]: /en/docs/guides/blocking-vs-non-blocking/
-[event loop]: /en/docs/guides/event-loop-timers-and-nexttick/
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/fa/index.md b/pages/fa/index.md
deleted file mode 100644
index 14acba4eebd37..0000000000000
--- a/pages/fa/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: نگارش کنونی
- download: دانلود
- download-for: دانلود برای
- other-downloads: سایر دانلودها
- current: جاری
- lts: پشتیبانی طولانی مدت
- tagline-current: آخرین ویژگیها
- tagline-lts: پیشنهاد شده برای بیشتر کاربران
- changelog: گزارش تغییرات
- api: مستندات API
- version-schedule-prompt: یا نگاهی بیاندازید به
- version-schedule-prompt-link-text: زمان بندی پشتیبانی طولانی مدت
----
-
-Node.js® چارچوبی است برای اجرای جاوااسکریپت ساخته شده بر روی [موتور جاوااسکریپت کروم](https://v8.dev/).
diff --git a/pages/fr/404.md b/pages/fr/404.md
deleted file mode 100644
index 070b7d6c36f57..0000000000000
--- a/pages/fr/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Page introuvable
-
-### ENOENT: aucun fichier ou répertoire trouvé
diff --git a/pages/fr/about/governance.md b/pages/fr/about/governance.md
deleted file mode 100644
index 7066c875f4384..0000000000000
--- a/pages/fr/about/governance.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Gouvernance du Projet
-layout: about.hbs
----
-
-# Gouvernance du Projet
-
-## Comité de Pilotage Technique
-
-Le projet est co-dirigé par un Comité de Pilotage Technique (Technical Steering Committee - TSC) qui est responsable de la gouvernance de haut-niveau du projet.
-
-## Collaborateurs
-
-Le TSC a toute autorité sur ce projet, y compris:
-
-Les invitations originelles à siéger au TSC ont été proposées à des contributeurs actifs qui avaient une expérience significative avec la gestion du projet. La participation à ce comité est susceptible d'évoluer dans le temps en rapport avec les besoins du projet.
-
-Pour obtenir la liste actuelle des collaborateurs, consultez le [README.md][].
-
-Un guide pour les collaborateurs est disponible à l'adresse [collaborator-guide.md][].
-
-## Comités de haut niveau
-
-Le projet est régi par le [Technical Steering Committee (TSC)][] qui est responsable de l'orientation à haut niveau du projet.
-
-[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
-[README.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
-[Technical Steering Committee (TSC)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
diff --git a/pages/fr/about/index.md b/pages/fr/about/index.md
deleted file mode 100644
index 4239891cdc248..0000000000000
--- a/pages/fr/about/index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: about.hbs
-title: À propos
-trademark: Marque déposée
----
-
-# À propos de Node.js®
-
-En tant que moteur d'exécution JavaScript asynchrone piloté par les événements, Node.js est conçu pour construire des applications réseau évolutives. des applications réseau évolutives. Dans l'exemple suivant, "hello world", de nombreuses peuvent être gérées simultanément. À chaque connexion, le rappel est mais s'il n'y a pas de travail à faire, Node.js se met en veille.
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Bonjour touts le mondes'');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server running at http://${hostname}:${port}/`);
-});
-```
-
-Ceci contraste avec le modèle de concurrence plus commun dans lequel les processus sytème sont utilisés. La gestion réseau basée sur les processus est relativement inefficace et difficile à utiliser. De plus, les utilisateurs de Node.js n'ont pas à se soucier des problèmes d'interblocage des processus puisqu'il n'y a pas de verrouillage. Aucune fonction de Node.js ou presque n'effectue d'entrée/sortie, donc le processus ne se bloque pas. Et comme rien n'est bloquant, développer un système extensible est relativement aisé avec Node.js.
-
-Si une partie des termes utilisés ne vous sont pas familliers, voici un article complet (en anglais) [Bloquant vs Non-Bloquant](/en/docs/guides/blocking-vs-non-blocking/).
-
----
-
-Node.js est conçu de manière similaire et influencé par des librairies comme [Event Machine](https://github.com/eventmachine/eventmachine) (en) pour Ruby et [Twisted](https://twistedmatrix.com/trac/) (en) pour Python. Node.js pousse le modèle événementiel encore plus loin. Il instaure la [boucle événementielle](/en/docs/guides/event-loop-timers-and-nexttick/) (en) en tant que composant élémentaire de l'environnement d'exécution et non comme une librairie. Dans les autres systèmes, il y a toujours un appel bloquant pour démarrer la boucle événementielle. Le comportement est défini habituellement par des fonctions de rappel au début du script, et à la fin un serveur est démarré avec un appel bloquant comme `EventMachine::run()`. Dans Node.js, il n'y a pas d'appel pour démarrer la boucle. Node.js entre simplement dans la boucle après avoir exécuté le script d'entrée. Node.js sort de la boucle événementielle lorsqu'il n'y a plus de fonction de rappel à exécuter. Ce comportement est similaire à celui de JavaScript dans un navigateur - la boucle événementielle est cachée à l'utilisateur.
-
-HTTP a une place prépondérante dans Node.js, qui a été conçu pour le streaming et une faible latence. Ceci fait de Node.js une base toute désignée pour une librairie web ou un framework.
-
-Et si Node.js a été conçu sans processus multiples, vous pouvez tout de même profiter d'un environnement multi-coeur. Vous pouvez générer des processus enfant par le biais de l'API [`child_process.fork()`][] (en), avec lesquels vous pourrez communiquer facilement. Basé sur la même interface, le module [`cluster`][] (en) vous permettra de partager les sockets entre vos processus pour faire de la répartition de charge entre vos coeurs.
diff --git a/pages/fr/docs/es6.md b/pages/fr/docs/es6.md
deleted file mode 100644
index 97f90d96c834f..0000000000000
--- a/pages/fr/docs/es6.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: ECMAScript 2015 (ES6) et au-delà
-layout: docs.hbs
----
-
-# ECMAScript 2015 (ES6) et au-delà
-
-Node.js est construit avec les versions modernes de [V8](https://v8.dev/). En se tenant au courant des dernières versions de ce moteur, nous nous assurons que de nouvelles fonctionnalités de la spécification [JavaScript ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm) sont apportées à Node. , les développeurs en temps opportun, ainsi que des améliorations continues des performances et de la stabilité.
-
-Toutes les fonctionnalités de l'ECMAScript 2015 (ES6) sont divisées en trois groupes pour les fonctionnalités de **livraison**, **mise en scène**et **en cours**:
-
-- Toutes les fonctionnalités **de livraison** que V8 considère comme stables sont activées **par défaut sur Node. s** et **PAS** ne requièrent aucune sorte d'indicateur de temps d'exécution.
-- **Les** fonctionnalités stationnées, qui sont des fonctionnalités presque achevées qui ne sont pas considérées comme stables par l'équipe V8, nécessitent un drapeau d'exécution : `--harmonie`.
-- **En cours** les fonctionnalités peuvent être activées individuellement par leur drapeau d'harmonie respectif, bien que cela soit fortement découragé à moins de procéder à des essais. Note : ces drapeaux sont exposés par V8 et peuvent être modifiés sans avis de dépréciation.
-
-## Quelles fonctionnalités sont fournies avec lesquelles la version de Node.js par défaut ?
-
-Le site web [node.green](https://node.green/) fournit un excellent aperçu des fonctionnalités de l'ECMAScript supportées dans diverses versions de Node.js, basé sur la table compat de kangax.
-
-## Quelles sont les fonctionnalités en cours ?
-
-De nouvelles fonctionnalités sont constamment ajoutées au moteur V8. En général, attendez-vous à ce qu'elles atterrissent sur une future version de Node.js, bien que le timing soit inconnu.
-
-Vous pouvez lister toutes les fonctionnalités de _en cours_ disponibles sur chaque noeud. s en utilisant l'argument `--v8-options` . Veuillez noter que ce sont des fonctionnalités incomplètes et éventuellement cassées de V8, donc utilisez-les à vos propres risques :
-
-```bash
-node --v8-options | grep "in progress"
-```
-
-## J'ai mis en place mon infrastructure pour tirer parti du drapeau --harmonie. Dois-je le retirer ?
-
-Le comportement actuel du drapeau `--harmony` sur Node.js est d'activer les fonctionnalités **staged** uniquement. Après tout, c'est maintenant un synonyme de `--es_staging`. Comme mentionné ci-dessus, ces fonctionnalités sont complétées qui n'ont pas encore été considérées comme stables. Si vous voulez jouer en toute sécurité, en particulier dans les environnements de production, envisagez de supprimer ce drapeau d'exécution jusqu'à ce qu'il soit livré par défaut sur V8 et, par conséquent, sur Node.js. Si vous gardez cette option activée, vous devriez être préparé pour d'autres nœuds. s améliore pour casser votre code si V8 modifie leur sémantique pour suivre plus attentivement le standard.
-
-## Comment trouver quelle version de V8 est fournie avec une version particulière de Node.js ?
-
-Node.js fournit un moyen simple de lister toutes les dépendances et leurs versions respectives qui sont livrées avec un binaire spécifique grâce à l'objet global `process`. Dans le cas du moteur V8, tapez ce qui suit dans votre terminal pour récupérer sa version :
-
-```bash
-node -p process.versions.v8
-```
diff --git a/pages/fr/docs/guides/abi-stability.md b/pages/fr/docs/guides/abi-stability.md
deleted file mode 100644
index 011e30b36bb22..0000000000000
--- a/pages/fr/docs/guides/abi-stability.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: Stabilité de l'ABI
-layout: docs.hbs
----
-
-# Stabilité de l'ABI
-
-## Introduction
-
-Une interface binaire d'application (ABI) permet aux programmes d'appeler des fonctions et d'utiliser des structures de données d'autres programmes compilés. et d'utiliser les structures de données d'autres programmes compilés. Il s'agit de la version compilée d'une interface de programmation d'application (API). En d'autres termes, les fichiers d'en-tête décrivant les classes, les fonctions, les structures de données, les énumérations et les constantes qui permettent à une application d'effectuer une tâche donnée correspondent, par le biais de la compilation, à un ensemble d'adresses et d'informations attendues. compilation à un ensemble d'adresses et de valeurs de paramètres attendues, ainsi qu'à des tailles et à des dispositions de structures de mémoire avec lesquelles l'application peut fonctionner. de taille et de disposition des structures de mémoire avec lesquelles le fournisseur de l'ABI a été compilé.
-
-L'application utilisant l'ABI doit être compilée de telle sorte que les adresses disponibles, les valeurs de paramètre attendues, et les tailles de la structure de mémoire et les mises en page sont d'accord avec celles avec lesquelles le fournisseur ABI a été compilé. Ceci est généralement accompli en compilant les en-têtes fournis par le fournisseur ABI.
-
-En raison de l'utilisation de l'ABI à différents moments avec différentes versions du compilateur, une partie de la responsabilité d'assurer la compatibilité de l'ABI incombe au compilateur. Différentes versions du compilateur, éventuellement fournies par différents vendeurs, doivent toutes produire la même ABI à partir d'un fichier d'en-tête ayant un certain contenu, et doivent produire un code pour l'application utilisant l'ABI qui accède à l'API décrite dans un en-tête donné conformément aux conventions de l'ABI résultant de la description dans l'en-tête. Les compilateurs modernes ont la réputation de ne pas rompre la compatibilité ABI des applications qu'ils compilent.
-
-La responsabilité restante de la compatibilité de l'ABI incombe à l'équipe chargée de la maintenance des fichiers d'en-tête qui fournissent l'API qui aboutit, lors de la compilation, à l'ABI qui doit rester stable. Des modifications peuvent être apportées aux fichiers d'en-tête, mais la nature des changements doit être suivie de près pour garantir que, lors de la compilation, l'ABI ne change pas d'une manière qui rendrait les utilisateurs existants de l'ABI incompatibles avec la nouvelle version.
-
-## Stabilité de l'ABI dans Node.js
-
-Node.js fournit des fichiers d'en-tête gérés par plusieurs équipes indépendantes. Par exemple, les fichiers d'en-tête tels que `node.h` et `node_buffer.h` sont gérés par l'équipe Node.js. `v8.h` est maintenu par l'équipe V8, qui, bien qu'en étroite collaboration avec l'équipe Node.js, est indépendante, et avec son propre calendrier et ses propres priorités. Ainsi, l'équipe Node.js n'a qu'un contrôle partiel sur les modifications introduites dans les en-têtes fournis par le projet. En conséquence, le projet Node.js a adopté la [version sémantique](https://semver.org/). Cela garantit que les API fournies par le projet se traduiront par une ABI stable pour toutes les versions mineures et correctives de Node.js publiées dans une version majeure. En pratique, cela signifie que le projet Node.js s'est engagé à garantir qu'un addon natif Node.js compilé avec une version majeure donnée de Node.js se chargera avec succès lorsqu'il sera chargé par n'importe quelle version mineure ou corrective de Node.js dans la version majeure. version avec laquelle il a été compilé.
-
-## N-API
-
-Il existe une demande pour doter Node.js d'une API qui permette d'obtenir une ABI stable sur plusieurs versions majeures de Node.js. La motivation pour créer une telle API est la suivante :
-
-- Le langage JavaScript est resté compatible avec lui-même depuis ses débuts, alors que l'ABI du moteur qui exécute le code JavaScript change avec chaque version majeure de Node.js. Cela signifie que les applications composées de paquets Node.js écrits entièrement en JavaScript n'ont pas besoin d'être recompilées, réinstallées ou redéployées lorsqu'une nouvelle version majeure de Node.js est introduite dans l'environnement de production dans lequel ces applications s'exécutent. En revanche, si une application dépend d'un paquetage contenant un addon natif, l'application doit être recompilée, réinstallée et redéployée chaque fois qu'une nouvelle version majeure de Node.js est introduite dans l'environnement de production. Cette disparité entre les paquets Node.js contenant des modules d'extension natifs et ceux qui sont entièrement écrits en JavaScript a alourdi la charge de maintenance des systèmes de production qui reposent sur des modules d'extension natifs.
-
-- D'autres projets ont commencé à produire des interfaces JavaScript qui sont essentiellement des implémentations alternatives de Node.js. Étant donné que ces projets reposent généralement sur un moteur JavaScript différent de celui de V8, leurs modules complémentaires natifs ont nécessairement une structure différente et utilisent une API différente. Néanmoins, l'utilisation d'une API unique pour un addon natif à travers différentes implémentations de l'API JavaScript de Node.js permettrait à ces projets de profiter de l'écosystème de paquets JavaScript qui s'est développé autour de Node.js.
-
-- Node.js pourrait contenir un moteur JavaScript différent à l'avenir. Cela signifie qu'extérieurement, toutes les interfaces de Node.js resteraient les mêmes, mais que le fichier d'en-tête V8 serait absent. Une telle mesure perturberait l'écosystème Node.js en général, et celui des modules d'extension natifs en particulier, si une API indépendante du moteur JavaScript n'est pas d'abord fournie par Node.js et adoptée par les modules d'extension natifs.
-
-À ces fins, Node.js a introduit N-API dans la version 8.6.0 et l'a marqué comme un composant stable du projet à partir de Node.js 8.12.0. L'API est définie dans les en-têtes [`node_api. h`][] et [`node_api_types.h`][], et fournit une garantie de compatibilité ascendante qui franchit la frontière de la version majeure de Node.js. La garantie peut être formulée comme suit :
-
-**Une version donnée _n_ de la N-API sera disponible dans la version majeure de Node.js dans laquelle elle a été publiée, ainsi que dans toutes les versions ultérieures de Node.js, y compris les versions majeures ultérieures.**
-
-Un auteur d'addon natif peut profiter de la garantie de compatibilité ascendante N-API en s'assurant que l'addon n'utilise que les API définies dans `node_api.h` et les structures de données et les constantes définies dans `node_api_types.h`. Ce faisant, l'auteur facilite l'adoption de son addon en indiquant aux utilisateurs en production que la charge de maintenance de leur application n'augmentera pas plus par l'ajout de l'addon natif à leur projet qu'elle ne le ferait par l'ajout d'un package écrit uniquement en JavaScript .
-
-La N-API est versionnée parce que de nouvelles API sont ajoutées de temps à autre. Contrairement au versionnement sémantique, le versionnement de la N-API est cumulatif. En d'autres termes, chaque version de la N-API a la même signification qu'une version mineure du système sémantique, ce qui signifie que toutes les modifications apportées à la N-API seront rétrocompatibles. En outre, les nouvelles N-API sont ajoutées sous un drapeau expérimental afin de donner à la communauté la possibilité de les tester dans un environnement de production. Le statut expérimental signifie que, bien que l'on ait veillé à ce que la nouvelle N-API ne doive pas être modifiée de manière incompatible avec l'ABI à l'avenir, elle n'a pas encore été suffisamment éprouvée en production pour être correcte et utile telle qu'elle a été conçue et, en tant que telle, elle peut subir des modifications incompatibles avec l'ABI avant d'être finalement incorporée dans une prochaine version de la N-API. En d'autres termes, une N-API expérimentale n'est pas encore couverte par la garantie de compatibilité future.
-
-[`node_api. h`]: https://github.com/nodejs/node/blob/main/src/node_api.h
diff --git a/pages/fr/docs/index.mdx b/pages/fr/docs/index.mdx
deleted file mode 100644
index d1c3584b8de6c..0000000000000
--- a/pages/fr/docs/index.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: Documentation
-layout: docs.hbs
-labels:
- lts: LTS
----
-
-# Au sujet de la documentation
-
-Plusieurs types de documentation sont disponibles sur ce site web :
-
-- Documentation de référence de l'API
-- Caractéristiques de l'ES6
-- Guides
-
-## Documentation de référence de l'API
-
-La [documentation de référence de l'API] (https://nodejs.org/api/) fournit des informations détaillées sur une fonction ou un objet dans Node.js. Cette documentation indique quels arguments une méthode accepte, la valeur de retour de cette méthode et les erreurs qui peuvent être liées à cette méthode. Elle indique également quelles méthodes sont disponibles pour les différentes versions de Node.js.
-
-Cette documentation décrit les modules intégrés fournis par Node.js. Elle ne documente pas les modules fournis par la communauté.
-
-
-
-### Vous recherchez les documents relatifs aux API des versions précédentes ?
-
-
-
-[All versions](https://nodejs.org/docs/)
-
-
-
-## Caractéristiques ES6
-
-La [section ES6](/fr/docs/es6/) décrit les trois groupes de fonctionnalités ES6 et précise quelles fonctionnalités sont activées par défaut dans Node.js, avec des liens explicatifs. Elle indique également comment trouver la version de V8 livrée avec une version particulière de Node.js.
-
-## Guides
-
-La section [Guides](/fr/docs/guides/) contient des articles détaillés sur les caractéristiques techniques et les capacités de Node.js.
diff --git a/pages/fr/download/current.md b/pages/fr/download/current.md
deleted file mode 100644
index 76e69763b37aa..0000000000000
--- a/pages/fr/download/current.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download-current.hbs
-title: Téléchargements
-download: Télécharger
-downloads:
- headline: Téléchargements
- lts: LTS
- current: Dernière
- tagline-current: Dernières fonctionnalités
- tagline-lts: Recommandé pour la plupart des utilisateurs
- display-hint: Afficher les téléchargements pour Node
- intro: >
- Téléchargez le code source de Node.js pour votre système d'exploitation et commencez à développer dès aujourd'hui.
- currentVersion: Dernière version Actuelle
- buildInstructions: Compiler Node.js à partir du code source sur les systèmes d'exploitation maintenus
- WindowsInstaller: Installateur Windows
- WindowsBinary: Binaire Windows
- MacOSInstaller: Installateur macOS
- MacOSBinary: Binaire macOS
- LinuxBinaries: Binaires Linux
- SourceCode: Code Source
-additional:
- headline: Autres plate-formes
- intro: >
- Les membres de la communauté Node.js maintiennent des installateurs de Node.js pour d'autres plate-formes. Veuillez noter que ces téléchargements ne sont pas maintenus par l'équipe principale de Node.js et n'offrent pas forcément le même niveau de support que les téléchargements officiels.
- platform: Image Docker de Node.js
- provider: Plate-forme
- SmartOSBinaries: Binaires SmartOS
- DockerImage: Image Docker
- officialDockerImage: Image Docker Officielle de Node.js
- LinuxPowerSystems: Linux sur Power LE systems
- LinuxSystemZ: Linux sur System z
- AIXPowerSystems: AIX sur les systèmes de puissance
----
diff --git a/pages/fr/download/index.md b/pages/fr/download/index.md
deleted file mode 100644
index e2ae32df7c52d..0000000000000
--- a/pages/fr/download/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: download.hbs
-title: Téléchargements
-download: Télécharger
-downloads:
- headline: Téléchargements
- lts: LTS
- current: Dernière
- tagline-current: Dernières fonctionnalités
- tagline-lts: Recommandé pour la plupart des utilisateurs
- display-hint: Afficher les téléchargements pour Node
- intro: >
- Téléchargez le code source de Node.js pour votre système d'exploitation et commencez à développer dès aujourd'hui.
- currentVersion: Dernière version LTS
- buildInstructions: Compiler Node.js à partir du code source sur les systèmes d'exploitation maintenus
- WindowsInstaller: Installateur Windows
- WindowsBinary: Binaire Windows
- MacOSInstaller: Installateur macOS
- MacOSBinary: Binaire macOS
- LinuxBinaries: Binaires Linux
- SourceCode: Code Source
-additional:
- headline: Autres plate-formes
- intro: >
- Les membres de la communauté Node.js maintiennent des installateurs de Node.js pour d'autres plate-formes. Veuillez noter que ces téléchargements ne sont pas maintenus par l'équipe principale de Node.js et n'offrent pas forcément le même niveau de support que les téléchargements officiels.
- platform: Image Docker de Node.js
- provider: Plate-forme
- SmartOSBinaries: Fournisseur
- DockerImage: Image Docker
- officialDockerImage: Image Docker officielle de Node.js
- LinuxPowerSystems: Linux sur Power LE Systems
- LinuxSystemZ: Linux sur System z
- AIXPowerSystems: AIX sur les systèmes de puissance
----
diff --git a/pages/fr/download/package-manager.md b/pages/fr/download/package-manager.md
deleted file mode 100644
index 1ffcef1df1b19..0000000000000
--- a/pages/fr/download/package-manager.md
+++ /dev/null
@@ -1,293 +0,0 @@
----
-layout: page.hbs
-title: Installation de Node.js via le gestionnaire de paquets
----
-
-# Installation de Node.js via le gestionnaire de paquets
-
-**_Note:_** Les paquets sur cette page sont maintenus et supportés par leurs mainteneurs respectifs, **non pas** par l'équipe centrale de Node.js. Veuillez signaler tout problème que vous rencontrez au mainteneur du paquet. S'il s'avère que votre problème est un bogue dans Node.js lui-même, le mainteneur signalera le problème en amont.
-
----
-
-- [Android](#android)
-- [Arch Linux](#arch-linux)
-- [Distributions Linux dérivées de Debian et Ubuntu, Linux/Fedora Entreprise, et paquets Snap](#les-distributions-linux-basées-sur-debian-et-ubuntu-enterprise-linuxfedora-et-les-paquets-snap)
-- [FreeBSD](#freebsd)
-- [Gentoo](#gentoo)
-- [IBM i](#ibm-i)
-- [NetBSD](#netbsd)
-- [nvm](#nvm)
-- [nvs](#nvs)
-- [OpenBSD](#openbsd)
-- [openSUSE and SLE](#opensuse-and-sle)
-- [macOS](#macos)
-- [SmartOS and illumos](#smartos-and-illumos)
-- [Solus](#solus)
-- [Void Linux](#void-linux)
-- [Windows](#windows)
-
----
-
-## Android
-
-Le support d'Android est encore expérimental dans Node.js, donc les binaires précompilés ne sont pas encore fournis par les développeurs de Node.js.
-
-Cependant, il existe quelques solutions tierces. Par exemple, la communauté [Termux](https://termux.com/) fournit un émulateur de terminal et un environnement Linux pour Android, ainsi que son propre gestionnaire de paquets et une [vaste collection](https://github.com/termux/termux-packages) de nombreuses applications précompilées. Cette commande dans l'application Termux installera la dernière version disponible de Node.js :
-
-```bash
-pkg install nodejs
-```
-
-Currently, Termux Node.js binaries are linked against `system-icu` (depending on `libicu` package).
-
-## Arch Linux
-
-Node.js and npm packages are available in the Community Repository.
-
-```bash
-pacman -S nodejs npm
-```
-
-## Les distributions Linux basées sur Debian et Ubuntu, Enterprise Linux/Fedora et les paquets Snap
-
-[Les distributions binaires Node.js](https://github.com/nodesource/distributions) sont disponibles sur NodeSource.
-
-## FreeBSD
-
-La version la plus récente de Node.js est disponible via le port [www/node](https://www.freshports.org/www/node).
-
-Installez un paquet binaire via [pkg](https://www.freebsd.org/cgi/man.cgi?pkg) :
-
-```bash
-pkg install node
-```
-
-Ou compilez-le vous-même en utilisant [ports](https://www.freebsd.org/cgi/man.cgi?ports) :
-
-```bash
-cd /usr/ports/www/node && make install
-```
-
-## Gentoo
-
-Node.js est disponible dans l'arbre de portage.
-
-```bash
-emerge nodejs
-```
-
-## IBM i
-
-Les versions LTS de Node.js sont disponibles auprès d'IBM, et sont disponibles via [le gestionnaire de paquets 'yum'] (https://ibm.biz/ibmi-rpms). Le nom du paquet est `nodejs` suivi du numéro de la version majeure (par exemple, `nodejs8`, `nodejs10`, `nodejs12`, etc).
-
-Pour installer Node.js 12.x à partir de la ligne de commande, exécutez la commande suivante en tant qu'utilisateur disposant de l'autorisation spéciale \*ALLOBJ :
-
-```bash
-yum install nodejs12
-```
-
-Node.js peut également être installé avec le produit IBM i Access Client Solutions. Voir [ce document de support] (http://www-01.ibm.com/support/docview.wss?uid=nas8N1022619) pour plus de détails.
-
-## NetBSD
-
-Node.js est disponible dans l'arbre pkgsrc :
-
-```bash
-cd /usr/pkgsrc/lang/nodejs && make install
-```
-
-Ou installez un paquet binaire (si disponible pour votre plateforme) en utilisant pkgin :
-
-```bash
-pkgin -y install nodejs
-```
-
-## nvm
-
-Node Version Manager est un script bash utilisé pour gérer plusieurs versions de Node.js. Il vous permet d'effectuer des opérations comme l'installation, la désinstallation, le changement de version, etc. Pour installer nvm, utilisez ce [script d'installation](https://github.com/nvm-sh/nvm#install--update-script).
-
-Sur les systèmes Unix / OS X, Node.js construit à partir des sources peut être installé en utilisant [nvm](https://github.com/creationix/nvm) en l'installant à l'emplacement attendu par nvm :
-
-```bash
-env VERSION=`python tools/getnodeversion.py` make install DESTDIR=`nvm_version_path v$VERSION` PREFIX=""
-```
-
-Après cela, vous pouvez utiliser `nvm` pour basculer entre les versions publiées et les versions construites à partir des sources. Par exemple, si la version de Node.js est v8.0.0-pre :
-
-```bash
-nvm use 8
-```
-
-Une fois que la version officielle sera sortie, vous voudrez désinstaller la version construite à partir des sources :
-
-```bash
-nvm uninstall 8
-```
-
-## nvs
-
-#### Windows
-
-Le gestionnaire de version `nvs` est multiplateforme et peut être utilisé sur Windows, macOS, et les systèmes Unix.
-
-Pour installer `nvs` sur Windows, allez sur la [release page](https://github.com/jasongin/nvs/releases) ici et téléchargez le fichier d'installation MSI de la dernière version.
-
-Vous pouvez également utiliser `chocolatey` pour l'installer :
-
-```bash
-choco install nvs
-```
-
-#### macOS et tous les systèmes de type Unix
-
-Vous pouvez trouver la documentation concernant les étapes d'installation de `nvs` dans les systèmes macOS/Unix-like [ici](https://github.com/jasongin/nvs/blob/master/doc/SETUP.md#mac-linux)
-
-#### Utilisation
-
-Après cela, vous pouvez utiliser `nvs` pour basculer entre les différentes versions de node.
-
-Pour ajouter la dernière version de node :
-
-```bash
-nvs add latest
-```
-
-Ou pour ajouter la dernière version LTS de node :
-
-```bash
-nvs add lts
-```
-
-Ensuite, lancez la commande `nvs use` pour ajouter une version de node à votre `PATH` pour le shell actuel :
-
-```bash
-$ nvs use lts
-PATH -= %LOCALAPPDATA%\nvs\default
-PATH += %LOCALAPPDATA%\nvs\node\14.17.0\x64
-```
-
-Pour l'ajouter au `PATH` de façon permanente, utilisez `nvs link` :
-
-```bash
-nvs link lts
-```
-
-## OpenBSD
-
-Node.js est disponible via le système de ports.
-
-```bash
-/usr/ports/lang/node
-```
-
-Utilisation de [pkg_add](https://man.openbsd.org/OpenBSD-current/man1/pkg_add.1) sur OpenBSD :
-
-```bash
-pkg_add node
-```
-
-## openSUSE et SLE
-
-Node.js est disponible dans les dépôts principaux sous les paquets suivants :
-
-- **openSUSE Leap 42.2** : `nodejs4`
-- **openSUSE Leap 42.3** : `nodejs4`, `nodejs6`
- **openSUSE Tumbleweed** : `nodejs4`, `nodejs6`, `nodejs8`
- **SUSE Linux Enterprise Server (SLES) 12** : `nodejs4`, `nodejs6` (Le "Web and Scripting Module" doit être [ajouté avant l'installation](https://www.suse.com/documentation/sles-12/book_sle_deployment/data/sec_add-ons_extensions.html).)
-
-Par exemple, pour installer Node.js 4.x sur openSUSE Leap 42.2, exécutez ce qui suit en tant que root :
-
-```bash
-zypper install nodejs4
-```
-
-## macOS
-
-Téléchargez simplement le [macOS Installer](https://nodejs.org/en/#home-downloadhead) directement depuis le site Web [nodejs.org](https://nodejs.org/).
-
-_Si vous voulez télécharger le paquet avec bash:_
-
-```bash
-curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
-```
-
-### Alternatives
-
-Utilisation de **[Homebrew](https://brew.sh/)** :
-
-```bash
-brew install node
-```
-
-Utilisation de **[MacPorts](https://www.macports.org/)**:
-
-```bash
-port install nodejs
-
-# Example
-port install nodejs7
-```
-
-Utilisation de **[pkgsrc](https://pkgsrc.joyent.com/install-on-osx/)**:
-
-Installez le paquet binaire :
-
-```bash
-pkgin -y install nodejs
-```
-
-Ou compiler manuellement à partir de pkgsrc :
-
-```bash
-cd pkgsrc/lang/nodejs && bmake install
-```
-
-## SmartOS et illumos
-
-Les images SmartOS sont livrées avec pkgsrc pré-installé. Sur les autres distributions illumos, installez d'abord **[pkgsrc](https://pkgsrc.joyent.com/install-on-illumos/)**, puis vous pouvez installer le paquet binaire normalement :
-
-```bash
-pkgin -y install nodejs
-```
-
-Ou compiler manuellement à partir de pkgsrc :
-
-```bash
-cd pkgsrc/lang/nodejs && bmake install
-```
-
-## Solus
-
-Solus fournit Node.js dans son dépôt principal.
-
-```bash
-sudo eopkg install nodejs
-```
-
-## Void Linux
-
-Void Linux fournit Node.js stable dans le dépôt principal.
-
-```bash
-xbps-install -Sy nodejs
-```
-
-## Windows
-
-Téléchargez simplement le [Windows Installer](https://nodejs.org/en/#home-downloadhead) directement depuis le site web [nodejs.org](https://nodejs.org/).
-
-### Alternatives
-
-En utilisant **[Chocolatey](https://chocolatey.org/)** :
-
-```bash
-cinst nodejs
-# or for full install with npm
-cinst nodejs.install
-```
-
-En utilisant **[Scoop](https://scoop.sh/)** :
-
-```bash
-scoop install nodejs
-```
diff --git a/pages/fr/download/releases.md b/pages/fr/download/releases.md
deleted file mode 100644
index 13c1738a45570..0000000000000
--- a/pages/fr/download/releases.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-layout: download-releases.hbs
-title: Versions antérieures
-modules: "NODE_MODULE_VERSION désigne le numéro de version ABI (application binary interface) de Node.js, utilisé pour déterminer les versions de Node.js.dans lesquelles les extensions C++ compilées en binaires peuvent être chargées dans devoir être recompilées. Il était stocké sous forme de valeur hexadécimale dans les versions antérieures, mais est désormais représenté sous forme d'un nombre entier."
----
-
-### io.js & Node.js
-
-Les versions 1.x à 3.x étaient appelées "io.js" car elles faisaient partie du fork io.js. À partir de Node.js 4.0.0, les anciennes versions de io.js ont convergé avec Node.js 0.12.x en versions unifiées de Node.js.
-
-### Vous cherchez la dernière version d'une branche de version ?
diff --git a/pages/fr/get-involved/collab-summit.md b/pages/fr/get-involved/collab-summit.md
deleted file mode 100644
index 52c6011ab452f..0000000000000
--- a/pages/fr/get-involved/collab-summit.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Sommet de collaboration
-layout: contribute.hbs
----
-
-# Sommet de collaboration
-
-Le Collaboration Summit est une non-conférence destinée à rassembler les contributeurs actuels et potentiels pour discuter de Node js dans le cadre d'une collaboration animée. contributeurs actuels et potentiels pour discuter de Node.js avec une collaboration animée, l'éducation et le partage des connaissances. Les comités et les groupes de travail se réunissent deux fois par an pour prendre des décisions importantes tout en étant en mesure de travailler sur des efforts passionnants qu'ils veulent faire avancer en personne.
-
-## Qui participe ?
-
-Tout le monde peut participer au Collab Summit. Pendant le sommet, les responsables aideront les nouveaux contributeurs à intégrer les groupes qu'ils aimeraient aider avant de les intégrer dans les sessions de travail.
-
-C'est l'occasion d'apprendre ce qui se passe au sein de la communauté, de participer et de contribuer avec les compétences que vous avez et que vous aimeriez perfectionner.
-
-Les groupes de travail établiront un calendrier afin que les gens puissent se familiariser avant d'arriver sur place, en organisant des discussions générales sur les collaborateurs, et avant de se plonger dans les sessions en petits groupes.
-
-We'd love to see you at Collab Summit! Check out the [Summit repo](https://github.com/nodejs/summit) for upcoming and past Collab Summits and have a look at the [issues filed](https://github.com/nodejs/summit/issues) that share what individual working groups and committees are looking to discuss in-person.
diff --git a/pages/fr/get-involved/contribute.md b/pages/fr/get-involved/contribute.md
deleted file mode 100644
index 7cb9f580d8a66..0000000000000
--- a/pages/fr/get-involved/contribute.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Contribuer
-layout: contribute.hbs
----
-
-# Contribuer
-
-Merci de votre intérêt à contribuer à Node.js ! Il y a plusieurs façons et lieux que vous pouvez contribuer, et nous sommes là pour vous aider à faciliter cela.
-
-## Demander de l'aide générale
-
-Because the level of activity in the `nodejs/node` repository is so high, questions or requests for general help using Node.js should be directed at the [Node.js help repository](https://github.com/nodejs/help/issues).
-
-## Signaler un problème
-
-Si vous avez trouvé ce que vous pensez être un problème avec Node.js, n'hésitez pas à déposer un problème sur le projet GitHub. Lorsque vous déposez votre problème, assurez-vous que vous pouvez exprimer le problème avec un cas de test reproductible, et ce cas de test ne doit pas inclure de dépendances externes. En d'autres termes, le cas de test peut être exécuté sans rien d'autre que Node.js lui-même.
-
-Lorsque vous signalez un problème, nous avons également besoin d'un maximum d'informations sur votre environnement. Nous ne savons jamais quelles informations seront pertinentes lorsque nous essaierons de circonscrire le problème. Veuillez inclure au moins les informations suivantes :
-
-- Version de Node.js
-- Plateforme sur laquelle vous utilisez (macOS, SmartOS, Linux, Windows)
-- Architecture sur laquelle vous utilisez (32bit ou 64bit et x86 ou ARM)
-
-Le projet Node.js est actuellement géré par un certain nombre de dépôts GitHub distincts, chacun ayant sa propre base de données de problèmes. Dans la mesure du possible, veuillez diriger les problèmes que vous signalez vers le dépôt approprié, mais ne vous inquiétez pas si les choses se retrouvent au mauvais endroit, la communauté des contributeurs sera plus qu'heureuse de vous aider à vous orienter dans la bonne direction.
-
-- Pour signaler des problèmes spécifiques à Node.js, veuillez utiliser [nodejs/node](https://github.com/nodejs/node)
-- Pour signaler des problèmes spécifiques à ce site web, veuillez utiliser [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org/issues)
-
-## Contributions au code
-
-Si vous souhaitez corriger des bogues ou ajouter une nouvelle fonctionnalité à Node.js, veuillez consulter les [Conseils de contribution à Node.js](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md/#pull-requests). Le processus de révision par les collaborateurs existants pour toutes les contributions au projet y est également expliqué.
-
-Si vous vous demandez comment commencer, vous pouvez consulter [Node Todo](https://www.nodetodo.org/) qui vous guidera peut-être vers votre première contribution.
-
-## Devenir collaborateur
-
-En devenant collaborateur, les contributeurs peuvent avoir encore plus d'impact sur le projet. Ils peuvent aider d'autres contributeurs en examinant leurs contributions, trier les problèmes et jouer un rôle encore plus important dans l'élaboration de l'avenir du projet. Les personnes identifiées par le TSC comme apportant des contributions significatives et précieuses dans n'importe quel dépôt Node.js peuvent être nommées collaborateurs et se voir accorder un accès au projet. Les activités prises en compte incluent (mais ne sont pas limitées à) la qualité de :
-
-- les modifications de code et les demandes d'autorisation d'accès (pull requests)
-- la documentation des commits et des pull requests
-- les commentaires sur les problèmes et les demandes d'extraction
-- contributions au site web Node.js
-- l'assistance fournie aux utilisateurs finaux et aux contributeurs novices
-- participation in Working Groups
-- d'autres participations à la communauté Node.js au sens large
-
-Si des personnes apportant des contributions précieuses estiment qu'elles n'ont pas été prises en compte pour l'accès au commit, elles peuvent [enregistrer un problème](https://github.com/nodejs/TSC/issues) ou [contacter directement un membre du TSC](https://github.com/nodejs/node#tsc-technical-steering-committee).
diff --git a/pages/fr/get-involved/index.md b/pages/fr/get-involved/index.md
deleted file mode 100644
index 29e222ecbee0d..0000000000000
--- a/pages/fr/get-involved/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Comment s'impliquer ?
-layout: contribute.hbs
----
-
-# Comment s'impliquer ?
-
-## Discussions de la communauté
-
-- La [liste de problèmes GitHub](https://github.com/nodejs/node/issues) est le lieu de discussion des fonctionnalités de base de Node.js.
-- Pour discuter en temps réel du développement de Node.js, utilisez l'une des plateformes suivantes
- - Pour IRC, allez sur `irc.libera.chat` dans le `#node. s` canal avec un client [IRC](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) ou connectez-vous dans votre navigateur web au canal en utilisant [un client web](https://kiwiirc.com/nextclient/)
- - Pour Slack, il y a deux options :
- - The [OpenJSF Slack](https://slack-invite.openjsf.org/) is a Foundation run Slack with several Node.js channels (channels prefixed by `#nodejs-` are related to the project).
- - [Node Slackers](https://www.nodeslackers.com/) est une communauté Slack axée sur Node.js.
-- Le compte officiel de Node.js Twitter est [nodejs](https://twitter.com/nodejs).
-- Le calendrier du projet [Node.js](https://nodejs.org/calendar) avec toutes les réunions publiques de l'équipe.
-
-## Apprentissage
-
-- [Documentation de référence de l'API officielle](https://nodejs.org/api/) détaille l'API Node.js.
-- [NodeSchool.io](https://nodeschool.io/) vous enseignera les concepts Node.js via des jeux interactifs en ligne de commande.
-- [La balise Node.js de pile débordement de pile](https://stackoverflow.com/questions/tagged/node.js) recueille de nouvelles informations chaque jour.
-- [La balise DEV Community Node.js](https://dev.to/t/node) est un endroit où partager un noeud. s projets, articles et tutoriaux ainsi que commencer les discussions et demander des commentaires sur Node. Les développeurs de tous les niveaux de compétences sont les bienvenus pour y participer.
-- [Nodeiflux](https://discordapp.com/invite/vUsrbjd) est une communauté amicale de développeurs de backend Node.js qui se supportent mutuellement sur Discord.
diff --git a/pages/fr/index.md b/pages/fr/index.md
deleted file mode 100644
index 6f63d870d2dc3..0000000000000
--- a/pages/fr/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: Version actuelle
- download: Téléchargements
- download-for: Téléchargements pour
- other-downloads: Autres téléchargements
- current: Actuel
- lts: LTS
- tagline-current: Dernières fonctionnalités
- tagline-lts: Recommandé pour la plupart des utilisateurs
- changelog: Journal des modifications
- api: Documentation API
- version-schedule-prompt: Ou regardez le
- version-schedule-prompt-link-text: Planning LTS
----
-
-Node.js® est un environnement d’exécution JavaScript construit sur le [moteur JavaScript V8 de Chrome](https://v8.dev/).
diff --git a/pages/gl/404.md b/pages/gl/404.md
deleted file mode 100644
index fe41baa82c936..0000000000000
--- a/pages/gl/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Páxina non atopada
-
-### ENOENT: Non existe o arquivo ou directorio
diff --git a/pages/gl/index.md b/pages/gl/index.md
deleted file mode 100644
index 3f580eb4e3733..0000000000000
--- a/pages/gl/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: index.hbs
-labels:
- current-version: Versión Actual
- download: Descargar
- download-for: Descargar para
- other-downloads: Outras Descargas
- current: Actual
- lts: LTS
- tagline-current: Últimas Características
- tagline-lts: Recomendado para a maioría
- changelog: Cambios
- api: Documentación do API
- version-schedule-prompt: Ou revise á
- version-schedule-prompt-link-text: Axenda de LTS
----
-
-Node.js® é un entorno de execución para JavaScript construído co [motor de JavaScript V8 de Chrome](https://v8.dev/).
diff --git a/pages/id/404.md b/pages/id/404.md
deleted file mode 100644
index 185a2f5e98afa..0000000000000
--- a/pages/id/404.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: page.hbs
-permalink: false
-title: 404
----
-
-## 404: Halaman tidak dapat ditemukan
-
-### ENOENT: Tidak ada file atau direktori seperti itu
diff --git a/pages/id/about/governance.md b/pages/id/about/governance.md
deleted file mode 100644
index e0ff5288c4290..0000000000000
--- a/pages/id/about/governance.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Tata Kelola Proyek
-layout: about.hbs
----
-
-# Tata Kelola Proyek
-
-## Proses Pencarian Kesepakatan
-
-Proyek Node.js mengikuti model pengambilan keputusan [Pencarian Kesepakatan][].
-
-## Kolaborator
-
-Repositori GitHub inti [nodejs/node][] dikelola oleh Kolaborator yang ditambahkan oleh Komite Pengarah Teknis ([TSC][]) secara berkesinambungan.
-
-Individu yang memberikan kontribusi signifikan dan berharga dijadikan Kolaborator dan diberikan akses-komit ke proyek. Orang-orang ini diidentifikasi oleh TSC dan nominasi mereka didiskusikan dengan Kolaborator yang ada.
-
-Untuk daftar Kolaborator saat ini, lihat [README.md][] proyek.
-
-Panduan untuk Kolaborator disimpan di [collaborator-guide.md][].
-
-## Komite Pengarah Teknis
-
-Proyek ini diatur oleh [Komite Pengarah Teknis][] dalam bahasa inggris (Technical Steering Committee atau TSC) yang bertanggung jawab untuk bimbingan tingkat tinggi proyek.
-
-[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
-[Pencarian Kesepakatan]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making
-[README.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
-[Komite Pengarah Teknis]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
-[TSC]: https://github.com/nodejs/TSC
-[nodejs/node]: https://github.com/nodejs/node
diff --git a/pages/id/about/index.md b/pages/id/about/index.md
deleted file mode 100644
index dd7af9772db2a..0000000000000
--- a/pages/id/about/index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-layout: about.hbs
-title: Tentang
-trademark: Merek dagang
----
-
-# Tentang Node.js®
-
-Sebagai runtime JavaScript berbasis peristiwa asinkron, Node.js dirancang untuk membangun aplikasi jaringan yang dapat diskalakan. Dalam contoh "HELLO WORLD" berikut, banyak koneksi dapat ditangani secara bersamaan. Pada setiap koneksi, panggilan baliknya adalah dipecat, tetapi jika tidak ada pekerjaan yang harus dilakukan, Node.js akan tidur.
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Hai Dunia');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server berjalan di http://${hostname}:${port}/`);
-});
-```
-
-Ini berbeda dengan model konkurensi yang lebih umum saat ini, di mana utas OS dipekerjakan. Jaringan berbasis thread relatif tidak efisien dan sangat sulit untuk digunakan. Selain itu, pengguna Node.js bebas dari kekhawatiran dead-locking proses, karena tidak ada kunci. Hampir tidak ada fungsi di Node.js langsung melakukan I/O, jadi proses tidak pernah memblokir kecuali saat I/O dilakukan menggunakan metode sinkron dari pustaka standar Node.js. Karena tidak ada yang menghalangi, sistem yang dapat diskalakan sangat masuk akal untuk dikembangkan di Node.js.
-
-Jika beberapa bahasa ini tidak dikenal, ada artikel lengkap di [Pemblokiran vs. Non-Pemblokiran][].
-
----
-
-Node.js mirip dalam desain, dan dipengaruhi oleh, sistem seperti Ruby [Event Machine][] dan [Twisted][] Python. Node.js mengambil model acara sedikit lebih jauh. Ini menyajikan [event loop][] sebagai konstruk runtime alih-alih sebagai perpustakaan. Dalam sistem lain, selalu ada panggilan pemblokiran untuk memulai acara-loop. Biasanya, perilaku didefinisikan melalui panggilan balik di awal skrip, dan pada akhirnya server dimulai melalui panggilan pemblokiran seperti `EventMachine::run()`. Di Node.js, tidak ada panggilan start-the-event-loop seperti itu. Node.js cukup memasuki loop acara setelah menjalankan skrip input. Node.js keluar dari loop acara ketika tidak ada lagi panggilan balik untuk dilakukan. Perilaku ini seperti JavaScript browser — loop acara disembunyikan dari pengguna.
-
-HTTP adalah warga negara kelas satu di Node.js, dirancang dengan streaming dan rendah latensi dalam pikiran. Ini membuat Node.js sangat cocok untuk fondasi web perpustakaan atau kerangka kerja.
-
-Node.js dirancang tanpa utas tidak berarti Anda tidak dapat mengambil keuntungan dari beberapa inti di lingkungan Anda. Proses anak dapat dimunculkan dengan menggunakan API [`child_process.fork()`][] kami, dan dirancang agar mudah berkomunikasi dengan. Dibangun di atas antarmuka yang sama adalah modul [`cluster`][], yang memungkinkan Anda untuk berbagi soket antar proses untuk mengaktifkan penyeimbangan beban atas inti Anda.
-
-[Pemblokiran vs. Non-Pemblokiran]: /id/docs/guides/blocking-vs-non-blocking/
-[`child_process.fork()`]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
-[`cluster`]: https://nodejs.org/api/cluster.html
-[event loop]: /id/docs/guides/event-loop-timers-and-nexttick/
-[Event Machine]: https://github.com/eventmachine/eventmachine
-[Twisted]: https://twistedmatrix.com/trac/
diff --git a/pages/id/docs/es6.md b/pages/id/docs/es6.md
deleted file mode 100644
index 7ae03929ac26f..0000000000000
--- a/pages/id/docs/es6.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: ECMAScript 2015 (ES6) dan seterusnya
-layout: docs.hbs
----
-
-# ECMAScript 2015 (ES6) dan seterusnya
-
-Node.js dibuat dengan versi modern [V8](https://v8.dev/). Dengan terus mengikuti rilis terbaru mesin ini, kami memastikan fitur baru dari [Spesifikasi JavaScript ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm) dibawa ke pengembang Node.js secara tepat waktu, serta peningkatan kinerja dan stabilitas yang berkelanjutan.
-
-Semua fitur ECMAScript 2015 (ES6) dibagi menjadi tiga grup untuk fitur **pengiriman**, **bertahap**, dan **sedang berlangsung**:
-
-- Semua fitur **pengiriman**, yang dianggap stabil oleh V8, diaktifkan **secara default di Node.js** dan **TIDAK** memerlukan tanda waktu proses apa pun.
-- Fitur **Staged**, yang merupakan fitur yang hampir selesai dan tidak dianggap stabil oleh tim V8, memerlukan flag runtime: `--harmony`.
-- **Dalam proses** fitur dapat diaktifkan satu per satu dengan bendera harmoni masing-masing, meskipun hal ini sangat tidak disarankan kecuali untuk tujuan pengujian. Catatan: tanda ini diekspos oleh V8 dan berpotensi berubah tanpa pemberitahuan penghentian.
-
-## Fitur mana yang dikirimkan dengan versi Node.js mana secara default?
-
-Situs web [node.green](https://node.green/) memberikan gambaran yang sangat baik tentang fitur ECMAScript yang didukung di berbagai versi Node.js, berdasarkan tabel kompatibilitas kangax.
-
-## Fitur mana yang sedang berlangsung?
-
-Fitur-fitur baru terus ditambahkan ke mesin V8. Secara umum, perkirakan mereka akan mendarat di rilis Node.js di masa mendatang, meskipun waktunya tidak diketahui.
-
-Anda dapat membuat daftar semua fitur _sedang berlangsung_ yang tersedia pada setiap rilis Node.js dengan memahami argumen `--v8-options`. Harap dicatat bahwa ini adalah fitur V8 yang tidak lengkap dan mungkin rusak, jadi gunakan dengan risiko Anda sendiri:
-
-```bash
-node --v8-options | grep "in progress"
-```
-
-## Saya telah menyiapkan infrastruktur saya untuk memanfaatkan flag --harmony. Haruskah saya menghapusnya?
-
-Perilaku flag `--harmony` saat ini di Node.js adalah untuk mengaktifkan fitur **staged** saja. Lagi pula, sekarang menjadi sinonim dari `--es_staging`. Seperti disebutkan di atas, ini adalah fitur lengkap yang belum dianggap stabil. Jika Anda ingin bermain aman, terutama di lingkungan produksi, pertimbangkan untuk menghapus flag runtime ini hingga dikirimkan secara default pada V8 dan, akibatnya, pada Node.js. Jika Anda tetap mengaktifkan ini, Anda harus siap untuk peningkatan Node.js lebih lanjut untuk memecahkan kode Anda jika V8 mengubah semantiknya untuk lebih mengikuti standar.
-
-## Bagaimana cara menemukan versi V8 mana yang dikirimkan dengan versi Node.js tertentu?
-
-Node.js menyediakan cara sederhana untuk membuat daftar semua dependensi dan versi masing-masing yang dikirimkan dengan biner tertentu melalui objek global `process`. Dalam hal mesin V8, ketik berikut ini di terminal Anda untuk mengambil versinya:
-
-```bash
-node -p process.versions.v8
-```
diff --git a/pages/id/docs/guides/abi-stability.md b/pages/id/docs/guides/abi-stability.md
deleted file mode 100644
index 74a2bc220e836..0000000000000
--- a/pages/id/docs/guides/abi-stability.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: Stabilitas ABI
-layout: docs.hbs
----
-
-# Stabilitas ABI
-
-## Pengantar
-
-Application Binary Interface (ABI) adalah cara bagi program untuk memanggil fungsi dan menggunakan struktur data dari program terkompilasi lainnya. Ini adalah versi yang dikompilasi dari Antarmuka Pemrograman Aplikasi (Inggris: Application Programming Interface disingkat API). Dengan kata lain, file header menggambarkan kelas, fungsi, struktur data, enumerasi, dan konstanta yang memungkinkan aplikasi untuk melakukan tugas yang diinginkan sesuai dengan cara kompilasi ke satu set alamat dan nilai parameter dan memori yang diharapkan ukuran struktur dan tata letak yang dengannya penyedia ABI dikompilasi.
-
-Aplikasi yang menggunakan ABI harus dikompilasi sedemikian rupa sehingga tersedia alamat, nilai parameter yang diharapkan, dan ukuran dan tata letak struktur memori setuju dengan yang dengannya penyedia ABI dikompilasi. Ini biasanya dicapai dengan kompilasi terhadap header yang disediakan oleh penyedia ABI.
-
-Karena penyedia ABI dan pengguna ABI dapat dikompilasi di waktu yang berbeda dengan versi kompiler yang berbeda, sebagian dari tanggung jawab untuk memastikan kompatibilitas ABI terletak pada kompiler. Berbeda versi kompiler, mungkin disediakan oleh vendor yang berbeda, harus semuanya menghasilkan ABI yang sama dari file header dengan konten tertentu, dan harus menghasilkan kode untuk aplikasi yang menggunakan ABI yang mengakses API yang dijelaskan dalam a header yang diberikan sesuai dengan konvensi ABI yang dihasilkan dari deskripsi di header. Kompiler modern memiliki rekam jejak yang cukup baik tentang tidak melanggar kompatibilitas ABI dari aplikasi yang mereka kompilasi.
-
-Tanggung jawab yang tersisa untuk memastikan kompatibilitas ABI terletak pada tim memelihara file header yang menyediakan API yang dihasilkan, setelah kompilasi, di ABI agar tetap stabil. Perubahan pada file header dapat dibuat, tetapi sifat perubahan harus dilacak dengan cermat untuk memastikan bahwa, setelah kompilasi, ABI tidak berubah dengan cara yang akan merender pengguna ABI yang ada tidak kompatibel dengan versi baru.
-
-## Stabilitas ABI di Node.js
-
-Node.js menyediakan file header yang dikelola oleh beberapa tim independen. Untuk contoh, file header seperti `node.h` dan `node_buffer.h` dikelola oleh tim Node.js. `v8.h` dikelola oleh tim V8, yang meskipun berdekatan kerjasama dengan tim Node.js, independen, dan dengan jadwal sendiri dan prioritas. Dengan demikian, tim Node.js hanya memiliki sebagian kendali atas perubahan yang diperkenalkan di header yang disediakan proyek. Hasil dari, proyek Node.js telah mengadopsi [versi semantik](https://semver.org/). Ini memastikan bahwa API yang disediakan oleh proyek akan menghasilkan ABI yang stabil untuk semua versi minor dan patch dari Node.js yang dirilis dalam satu versi mayor. Dalam praktiknya, ini berarti bahwa proyek Node.js telah berkomitmen untuk memastikan bahwa addon asli Node.js dikompilasi terhadap versi utama tertentu dari Node.js akan berhasil dimuat saat dimuat oleh versi minor atau patch Node.js apa pun dalam versi utama yang dikompilasi.
-
-## N-API
-
-Permintaan telah muncul untuk melengkapi Node.js dengan API yang menghasilkan ABI yang tetap stabil di beberapa versi utama Node.js. motivasi untuk membuat API seperti itu adalah sebagai berikut:
-
-- Bahasa JavaScript tetap kompatibel dengan dirinya sendiri sejak sangat hari-hari awal, sedangkan ABI mesin yang mengeksekusi kode JavaScript berubah dengan setiap versi utama Node.js. Ini berarti bahwa aplikasi yang terdiri dari: Paket Node.js yang ditulis seluruhnya dalam JavaScript tidak perlu dikompilasi ulang, diinstal ulang, atau digunakan kembali sebagai versi utama baru dari Node.js dimasukkan ke dalam lingkungan produksi di mana aplikasi tersebut berjalan. Sebaliknya, jika aplikasi tergantung pada paket yang berisi addon asli, aplikasi harus dikompilasi ulang, diinstal ulang, dan digunakan kembali setiap kali versi utama baru dari Node.js diperkenalkan ke dalam lingkungan produksi. Disparitas ini antara paket Node.js yang berisi add-on asli dan yang ditulis sepenuhnya dalam JavaScript telah menambah beban pemeliharaan produksi sistem yang mengandalkan add-on asli.
-
-- Proyek lain sudah mulai menghasilkan antarmuka JavaScript yang pada dasarnya implementasi alternatif dari Node.js. Karena proyek-proyek ini adalah biasanya dibangun di atas mesin JavaScript yang berbeda dari V8, add-on asli mereka tentu mengambil struktur yang berbeda dan menggunakan API yang berbeda. Namun demikian, menggunakan satu API untuk addon asli di berbagai implementasi Node.js JavaScript API akan memungkinkan proyek ini memanfaatkan ekosistem paket JavaScript yang terkumpul di sekitar Node.js.
-
-- Node.js mungkin berisi mesin JavaScript yang berbeda di masa mendatang. Ini berarti bahwa, secara eksternal, semua antarmuka Node.js akan tetap sama, tetapi V8 file header tidak akan ada. Langkah tersebut akan menyebabkan terganggunya Ekosistem Node.js secara umum, dan addon asli pada khususnya, jika API yang agnostik mesin JavaScript tidak pertama kali disediakan oleh Node.js dan diadopsi oleh addon asli.
-
-Untuk tujuan ini Node.js telah memperkenalkan N-API di versi 8.6.0 dan menandainya sebagai komponen proyek yang stabil pada Node.js 8.12.0. API didefinisikan dalam header [`node_api.h`][] dan [`node_api_types.h`][], dan menyediakan forward- jaminan kompatibilitas yang melintasi batas versi utama Node.js. Itu jaminan dapat dinyatakan sebagai berikut:
-
-**Versi tertentu _n_ N-API akan tersedia dalam versi utama Node.js di mana ia diterbitkan, dan di semua versi Node.js berikutnya, termasuk versi utama berikutnya.**
-
-Penulis addon asli dapat memanfaatkan kompatibilitas ke depan N-API jaminan dengan memastikan bahwa addon hanya menggunakan API yang ditentukan dalam `node_api.h` serta struktur data dan konstanta yang didefinisikan dalam `node_api_types.h`. Dengan demikian, penulis memfasilitasi adopsi addon mereka dengan menunjukkan untuk pengguna produksi bahwa beban pemeliharaan untuk aplikasi mereka akan meningkat tidak lebih dengan menambahkan addon asli ke proyek mereka daripada dengan penambahan paket yang ditulis murni dalam JavaScript.
-
-N-API diversi karena API baru ditambahkan dari waktu ke waktu. Tidak seperti versi semantik, versi N-API bersifat kumulatif. Artinya, setiap versi dari N-API menyampaikan arti yang sama dengan versi minor dalam sistem semver, artinya bahwa semua perubahan yang dibuat pada N-API akan kompatibel ke belakang. Selain itu, baru N-API ditambahkan di bawah bendera eksperimental untuk memberi komunitas kesempatan untuk memeriksanya di lingkungan produksi. Status eksperimental berarti bahwa, meskipun perawatan telah diambil untuk memastikan bahwa API baru tidak harus dimodifikasi dengan cara yang tidak kompatibel dengan ABI di masa mendatang, itu belum cukup terbukti dalam produksi untuk menjadi benar dan berguna seperti yang dirancang dan, sebagai seperti itu, dapat mengalami perubahan yang tidak kompatibel dengan ABI sebelum akhirnya dimasukkan menjadi versi N-API yang akan datang. Artinya, N-API eksperimental belum dicakup oleh jaminan kompatibilitas ke depan.
-
-[`node_api.h`]: https://github.com/nodejs/node/blob/main/src/node_api.h
-[`node_api_types.h`]: https://github.com/nodejs/node/blob/main/src/node_api_types.h
diff --git a/pages/id/docs/guides/anatomy-of-an-http-transaction.md b/pages/id/docs/guides/anatomy-of-an-http-transaction.md
deleted file mode 100644
index 793e9abbbc772..0000000000000
--- a/pages/id/docs/guides/anatomy-of-an-http-transaction.md
+++ /dev/null
@@ -1,365 +0,0 @@
----
-title: Anatomi Transaksi HTTP
-layout: docs.hbs
----
-
-# Anatomi Transaksi HTTP
-
-Tujuan dari panduan ini adalah untuk memberikan pemahaman yang kuat tentang proses Penanganan HTTP Node.js. Kami akan berasumsi bahwa Anda tahu, secara umum, bagaimana HTTP permintaan bekerja, terlepas dari bahasa atau lingkungan pemrograman. Kami juga akan mengasumsikan sedikit keakraban dengan Node.js [`EventEmitters`][] dan [`Streams`][]. Jika Anda tidak cukup akrab dengan mereka, ada baiknya membaca cepat dokumen API untuk masing-masingnya.
-
-## Buat Server
-
-Setiap aplikasi server web node pada titik tertentu harus membuat server web obyek. Ini dilakukan dengan menggunakan [`createServer`][].
-
-```javascript
-const http = require('http');
-
-const server = http.createServer((request, response) => {
- // magic happens here!
-});
-```
-
-Fungsi yang diteruskan ke [`createServer`][] dipanggil sekali untuk setiap Permintaan HTTP yang dibuat terhadap server itu, jadi itu disebut permintaan pawang Sebenarnya, objek [`Server`][] yang dikembalikan oleh [`createServer`][] adalah sebuah [`EventEmitter`][], dan apa yang kita miliki di sini hanyalah singkatan untuk membuat objek `server` dan kemudian menambahkan pendengar nanti.
-
-```javascript
-const server = http.createServer();
-server.on('request', (request, response) => {
- // the same kind of magic happens here!
-});
-```
-
-Ketika permintaan HTTP mengenai server, node memanggil fungsi handler permintaan dengan beberapa objek praktis untuk menangani transaksi, `permintaan` dan `tanggapan`. Kami akan segera membahasnya.
-
-Untuk benar-benar melayani permintaan, metode [`listen`][] perlu dipanggil pada objek `server`. Dalam kebanyakan kasus, yang perlu Anda lakukan untuk `mendengarkan` adalah nomor port yang Anda inginkan untuk didengarkan oleh server. Ada beberapa pilihan lain juga, jadi lihat [referensi API][].
-
-## Metode, URL, dan Header
-
-Saat menangani permintaan, hal pertama yang mungkin ingin Anda lakukan adalah melihat metode dan URL, sehingga tindakan yang tepat dapat diambil. Node.js membuat ini relatif tidak menyakitkan dengan meletakkan properti praktis ke objek `permintaan`.
-
-```javascript
-const { method, url } = request;
-```
-
-> Objek `request` adalah turunan dari [`IncomingMessage`][].
-
-`Metode` di sini akan selalu menjadi metode/kata kerja HTTP normal. `url` adalah URL lengkap tanpa server, protokol, atau port. Untuk URL biasa, ini berarti semuanya setelah dan termasuk garis miring ketiga.
-
-Header juga tidak jauh. Mereka berada di objek mereka sendiri pada `permintaan` yang disebut `headers`.
-
-```javascript
-const { headers } = request;
-const userAgent = headers['user-agent'];
-```
-
-Penting untuk dicatat di sini bahwa semua header hanya diwakili dalam huruf kecil, terlepas dari bagaimana klien sebenarnya mengirimnya. Ini menyederhanakan tugas parsing header untuk tujuan apa pun.
-
-Jika beberapa header diulang, maka nilainya akan ditimpa atau digabungkan bersama-sama sebagai string yang dipisahkan koma, tergantung pada header. Dalam beberapa kasus, ini bisa menjadi masalah, jadi [`rawHeaders`][] juga tersedia.
-
-## Badan Permintaan
-
-Saat menerima permintaan `POST` atau `PUT`, badan permintaan mungkin penting untuk aplikasi Anda. Mendapatkan data tubuh sedikit lebih terlibat daripada mengakses header permintaan. Objek `request` yang diteruskan ke handler mengimplementasikan antarmuka [`ReadableStream`][]. Aliran ini dapat didengarkan atau disalurkan ke tempat lain seperti aliran lainnya. Kami dapat mengambil data langsung dari stream dengan mendengarkan event `'data'` dan `'end'` stream.
-
-Potongan yang dipancarkan di setiap kejadian `'data'` adalah [`Buffer`][]. Jika Anda tahu itu akan menjadi data string, hal terbaik yang harus dilakukan adalah mengumpulkan data dalam array, lalu di `'end'`, gabungkan dan rangkum.
-
-```javascript
-let body = [];
-request
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- // at this point, `body` has the entire request body stored in it as a string
- });
-```
-
-> Ini mungkin tampak sedikit membosankan, dan dalam banyak kasus memang demikian. Untunglah, ada modul seperti [`concat-stream`][] dan [`body`][] pada [`npm`][] yang dapat membantu menyembunyikan sebagian dari logika ini. Penting untuk memiliki pemahaman yang baik tentang apa yang terjadi sebelum menempuh jalan itu, dan itulah mengapa Anda ada di sini!
-
-## Hal Singkat Tentang Kesalahan
-
-Karena objek `request` adalah [`ReadableStream`][], itu juga merupakan [`EventEmitter`][] dan berperilaku seperti saat terjadi kesalahan.
-
-Kesalahan dalam aliran `request` muncul dengan memancarkan peristiwa `'error'` di aliran. **Jika Anda tidak memiliki pendengar untuk acara itu, kesalahannya adalah _dilempar_, yang dapat merusak program Node.js Anda.** Oleh karena itu, Anda harus menambahkan pendengar `'error'` pada aliran permintaan Anda, meskipun Anda baru saja mencatatnya dan lanjutkan perjalananmu. (Meskipun mungkin yang terbaik untuk mengirim semacam kesalahan HTTP tanggapan. Lebih lanjut tentang itu nanti.)
-
-```javascript
-request.on('error', err => {
- // This prints the error message and stack trace to `stderr`.
- console.error(err.stack);
-});
-```
-
-Ada cara lain untuk [menangani kesalahan ini][] seperti abstraksi dan alat lain, tetapi selalu waspadai bahwa kesalahan dapat dan memang terjadi, dan Anda harus berurusan dengan mereka.
-
-## Apa yang Kita Miliki Sejauh Ini
-
-Pada titik ini, kita telah membahas pembuatan server, dan mengambil metode, URL, header dan isi dari permintaan. Ketika kita menggabungkan semuanya, itu mungkin terlihat sesuatu seperti ini:
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- const { headers, method, url } = request;
- let body = [];
- request
- .on('error', err => {
- console.error(err);
- })
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- // At this point, we have the headers, method, url and body, and can now
- // do whatever we need to in order to respond to this request.
- });
- })
- .listen(8080); // Activates this server, listening on port 8080.
-```
-
-Jika kita menjalankan contoh ini, kita akan dapat _menerima_ permintaan, tetapi tidak _merespon_ ke mereka. Sebenarnya, jika Anda menekan contoh ini di browser web, permintaan Anda akan waktu habis, karena tidak ada yang dikirim kembali ke klien.
-
-Sejauh ini kita belum menyentuh objek `response` sama sekali, yang merupakan sebuah instance dari [`ServerResponse`][], yang merupakan [`WritableStream`][]. Ini berisi banyak metode yang berguna untuk mengirim data kembali ke klien. Kami akan membahasnya selanjutnya.
-
-## Kode Status HTTP
-
-Jika Anda tidak repot mengaturnya, kode status HTTP pada respons akan selalu menjadi 200. Tentu saja, tidak setiap respons HTTP menjamin hal ini, dan pada titik tertentu Anda pasti ingin mengirim kode status yang berbeda. Untuk melakukan itu, Anda dapat mengatur properti `statusCode`.
-
-```javascript
-response.statusCode = 404; // Tell the client that the resource wasn't found.
-```
-
-Ada beberapa jalan pintas lain untuk ini, seperti yang akan kita lihat segera.
-
-## Mengatur Header Respons
-
-Header diatur melalui metode praktis yang disebut [`setHeader`][].
-
-```javascript
-response.setHeader('Content-Type', 'application/json');
-response.setHeader('X-Powered-By', 'bacon');
-```
-
-Saat menyetel header pada respons, nama mereka tidak peka huruf besar-kecil. Jika Anda mengatur header berulang kali, nilai terakhir yang Anda tetapkan adalah nilai yang didapat terkirim.
-
-## Mengirim Data Header Secara Eksplisit
-
-Metode pengaturan header dan kode status yang telah kita bahas asumsikan bahwa Anda menggunakan "header implisit". Ini berarti Anda mengandalkan simpul untuk mengirim header untuk Anda pada waktu yang tepat sebelum Anda mulai mengirim badan data.
-
-Jika mau, Anda dapat _secara eksplisit_ menulis header ke aliran respons. Untuk melakukan ini, ada metode yang disebut [`writeHead`][], yang menulis status kode dan header ke aliran.
-
-```javascript
-response.writeHead(200, {
- 'Content-Type': 'application/json',
- 'X-Powered-By': 'bacon',
-});
-```
-
-Setelah Anda mengatur header (baik secara implisit atau eksplisit), Anda siap untuk mulai mengirim data respons.
-
-## Mengirim Badan Respon
-
-Karena objek `response` adalah [`WritableStream`][], menulis badan respons keluar ke klien hanya masalah menggunakan metode aliran biasa.
-
-```javascript
-response.write('');
-response.write('');
-response.write('
Hello, World!
');
-response.write('');
-response.write('');
-response.end();
-```
-
-Fungsi `akhir` pada aliran juga dapat mengambil beberapa data opsional untuk dikirim sebagai bit terakhir dari data pada aliran, sehingga kita dapat menyederhanakan contoh di atas sebagai berikut.
-
-```javascript
-response.end('
Hello, World!
');
-```
-
-> Penting untuk mengatur status dan header _sebelum_ Anda mulai menulis potongan data ke badan. Ini masuk akal, karena header datang sebelumnya isi dalam tanggapan HTTP.
-
-## Hal Cepat Lain Tentang Kesalahan
-
-Aliran `response` juga dapat memancarkan peristiwa `'error'`, dan pada titik tertentu Anda akan harus berurusan dengan itu juga. Semua saran untuk aliran `permintaan` kesalahan masih berlaku di sini.
-
-## Satukan Semuanya
-
-Sekarang kita telah belajar tentang membuat tanggapan HTTP, mari kita gabungkan semuanya. Berdasarkan contoh sebelumnya, kita akan membuat server yang mengirim kembali semua data yang dikirimkan kepada kami oleh pengguna. Kami akan memformat data itu sebagai JSON menggunakan `JSON.stringify`.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- const { headers, method, url } = request;
- let body = [];
- request
- .on('error', err => {
- console.error(err);
- })
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- // BEGINNING OF NEW STUFF
-
- response.on('error', err => {
- console.error(err);
- });
-
- response.statusCode = 200;
- response.setHeader('Content-Type', 'application/json');
- // Note: the 2 lines above could be replaced with this next one:
- // response.writeHead(200, {'Content-Type': 'application/json'})
-
- const responseBody = { headers, method, url, body };
-
- response.write(JSON.stringify(responseBody));
- response.end();
- // Note: the 2 lines above could be replaced with this next one:
- // response.end(JSON.stringify(responseBody))
-
- // END OF NEW STUFF
- });
- })
- .listen(8080);
-```
-
-## Contoh Server Echo
-
-Mari kita sederhanakan contoh sebelumnya untuk membuat server echo sederhana, yang hanya mengirimkan data apa pun yang diterima dalam permintaan segera sebagai tanggapan. Semua yang perlu kita lakukan adalah mengambil data dari aliran permintaan dan menulis data itu ke aliran respons, mirip dengan apa yang kami lakukan sebelumnya.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- let body = [];
- request
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- response.end(body);
- });
- })
- .listen(8080);
-```
-
-Sekarang mari kita tweak ini. Kami hanya ingin mengirim echo di bawah ini kondisi:
-
-- Metode permintaan adalah POST.
-- URL-nya adalah `/echo`.
-
-Dalam kasus lain, kami hanya ingin merespons dengan 404.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- if (request.method === 'POST' && request.url === '/echo') {
- let body = [];
- request
- .on('data', chunk => {
- body.push(chunk);
- })
- .on('end', () => {
- body = Buffer.concat(body).toString();
- response.end(body);
- });
- } else {
- response.statusCode = 404;
- response.end();
- }
- })
- .listen(8080);
-```
-
-> Dengan memeriksa URL dengan cara ini, kita sedang melakukan bentuk "perutean". Bentuk perutean lainnya bisa sesederhana pernyataan `switch` atau serumit seluruh kerangka kerja seperti [`express`][]. Jika Anda mencari sesuatu yang bisa perutean dan tidak ada yang lain, coba [`router`][].
-
-Besar! Sekarang mari kita coba menyederhanakan ini. Ingat, objek `permintaan` adalah [`ReadableStream`][] dan objek `response` adalah [`WritableStream`][]. Itu berarti kita bisa menggunakan [`pipe`][] untuk mengarahkan data dari satu ke yang lain. itu persis seperti yang kita inginkan untuk server echo!
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- if (request.method === 'POST' && request.url === '/echo') {
- request.pipe(response);
- } else {
- response.statusCode = 404;
- response.end();
- }
- })
- .listen(8080);
-```
-
-Yay Berjalan!
-
-Kami belum cukup selesai. Seperti disebutkan beberapa kali dalam panduan ini, kesalahan dapat dan memang terjadi, dan kita harus menghadapinya.
-
-Untuk menangani kesalahan pada aliran permintaan, kami akan mencatat kesalahan ke `stderr` dan mengirim kode status 400 untuk menunjukkan `Permintaan Buruk`. Dalam aplikasi dunia nyata, meskipun, kami ingin memeriksa kesalahan untuk mencari tahu apa kode status yang benar dan pesan akan. Seperti biasa dengan kesalahan, Anda harus berkonsultasi dengan [`Dokumentasi kesalahan`][].
-
-Pada respons, kami hanya akan mencatat kesalahan ke `stderr`.
-
-```javascript
-const http = require('http');
-
-http
- .createServer((request, response) => {
- request.on('error', err => {
- console.error(err);
- response.statusCode = 400;
- response.end();
- });
- response.on('error', err => {
- console.error(err);
- });
- if (request.method === 'POST' && request.url === '/echo') {
- request.pipe(response);
- } else {
- response.statusCode = 404;
- response.end();
- }
- })
- .listen(8080);
-```
-
-Kami sekarang telah membahas sebagian besar dasar-dasar penanganan permintaan HTTP. Pada saat ini, kamu harus bisa:
-
-- Instansiasi server HTTP dengan fungsi pengendali permintaan, dan dengarkan di sebuah pelabuhan.
-- Dapatkan data header, URL, metode, dan isi dari objek `permintaan`.
-- Membuat keputusan perutean berdasarkan URL dan/atau data lain di objek `permintaan`.
-- Kirim header, kode status HTTP, dan data isi melalui objek `respons`.
-- Pipa data dari objek `request` dan ke objek `response`.
-- Menangani kesalahan aliran di aliran `permintaan` dan `tanggapan`.
-
-Dari dasar-dasar ini, server HTTP Node.js untuk banyak kasus penggunaan tipikal dapat: dibangun. Ada banyak hal lain yang disediakan oleh API ini, jadi pastikan untuk baca dokumen API untuk [`EventEmitters`][], [`Streams`][], dan [`HTTP`][].
-
-[`EventEmitters`]: https://nodejs.org/api/events.html
-[`Streams`]: https://nodejs.org/api/stream.html
-[`createServer`]: https://nodejs.org/api/http.html#http_http_createserver_requestlistener
-[`Server`]: https://nodejs.org/api/http.html#http_class_http_server
-[`listen`]: https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback
-[referensi API]: https://nodejs.org/api/http.html
-[`IncomingMessage`]: https://nodejs.org/api/http.html#http_class_http_incomingmessage
-[`ReadableStream`]: https://nodejs.org/api/stream.html#stream_class_stream_readable
-[`rawHeaders`]: https://nodejs.org/api/http.html#http_message_rawheaders
-[`Buffer`]: https://nodejs.org/api/buffer.html
-[`concat-stream`]: https://www.npmjs.com/package/concat-stream
-[`body`]: https://www.npmjs.com/package/body
-[`npm`]: https://www.npmjs.com
-[`EventEmitter`]: https://nodejs.org/api/events.html#events_class_eventemitter
-[menangani kesalahan ini]: https://nodejs.org/api/errors.html
-[`ServerResponse`]: https://nodejs.org/api/http.html#http_class_http_serverresponse
-[`setHeader`]: https://nodejs.org/api/http.html#http_response_setheader_name_value
-[`WritableStream`]: https://nodejs.org/api/stream.html#stream_class_stream_writable
-[`writeHead`]: https://nodejs.org/api/http.html#http_response_writehead_statuscode_statusmessage_headers
-[`express`]: https://www.npmjs.com/package/express
-[`router`]: https://www.npmjs.com/package/router
-[`pipe`]: https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
-[`Dokumentasi kesalahan`]: https://nodejs.org/api/errors.html
-[`HTTP`]: https://nodejs.org/api/http.html
diff --git a/pages/id/docs/guides/backpressuring-in-streams.md b/pages/id/docs/guides/backpressuring-in-streams.md
deleted file mode 100644
index ec8f0f78a1901..0000000000000
--- a/pages/id/docs/guides/backpressuring-in-streams.md
+++ /dev/null
@@ -1,512 +0,0 @@
----
-title: Backpressuring in Streams
-layout: docs.hbs
----
-
-# Backpressuring in Streams
-
-Ada masalah umum yang terjadi selama penanganan data yang disebut [`backpressure`][] yang menggambarkan penumpukan data di belakang buffer selama transfer data. Ketika penerima transfer memiliki operasi yang kompleks, atau lebih lambat karena alasan apa pun, ada kecenderungan bagi data dari sumber masuk untuk menumpuk, seperti penyumbatan.
-
-Untuk memecahkan masalah ini, harus ada sistem delegasi yang ada untuk memastikan aliran data yang lancar dari satu sumber ke sumber lain. Komunitas yang berbeda telah menyelesaikan masalah ini dengan cara yang unik untuk program mereka, pipa Unix dan soket TCP adalah contoh yang baik dari ini, dan sering kali disebut sebagai _flow control_. Dalam Node.js, streams telah menjadi solusi yang diadopsi.
-
-Tujuan panduan ini adalah untuk menjelaskan secara lebih rinci apa itu backpressure, dan bagaimana streams menanganinya secara tepat dalam kode sumber Node.js. Bagian kedua dari panduan akan memperkenalkan praktik terbaik yang disarankan untuk memastikan kode aplikasi Anda aman dan dioptimalkan saat mengimplementasikan streams.
-
-Kami berasumsi sedikit pengetahuan tentang definisi umum [`backpressure`][], [`Buffer`][], dan [`EventEmitters`][] dalam Node.js, serta beberapa pengalaman dengan [`Stream`][]. Jika Anda belum membaca dokumen tersebut, tidak ada salahnya untuk melihat dokumentasi API terlebih dahulu, karena ini akan membantu memperluas pemahaman Anda saat membaca panduan ini.
-
-## Masalah Penanganan Data
-
-Dalam sistem komputer, data ditransfer dari satu proses ke proses lain melalui pipa, soket, dan sinyal. Dalam Node.js, kami menemukan mekanisme serupa yang disebut [`Stream`][]. Streams sangat bagus! Mereka melakukan begitu banyak hal untuk Node.js dan hampir setiap bagian dari kode internal memanfaatkan modul tersebut. Sebagai pengembang, Anda lebih dari diharapkan untuk menggunakannya juga!
-
-```javascript
-const readline = require('readline');
-
-// process.stdin and process.stdout are both instances of Streams.
-const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
-});
-
-rl.question('Why should you use streams? ', answer => {
- console.log(`Maybe it's ${answer}, maybe it's because they are awesome! :)`);
-
- rl.close();
-});
-```
-
-Contoh yang bagus tentang mengapa mekanisme backpressure yang diimplementasikan melalui streams adalah sebuah optimasi yang bagus dapat ditunjukkan dengan membandingkan alat sistem internal dari implementasi [`Stream`][] Node.js.
-
-Dalam satu skenario, kami akan mengambil file besar (sekitar \~9gb) dan memampatkannya menggunakan alat yang sudah dikenal [`zip(1)`][].
-
-```
-zip The.Matrix.1080p.mkv
-```
-
-Meskipun itu akan memakan beberapa menit untuk menyelesaikannya, di shell lain kita dapat menjalankan skrip yang menggunakan modul Node.js [`zlib`][], yang membungkus alat kompresi lainnya, [`gzip(1)`][].
-
-```javascript
-const gzip = require('zlib').createGzip();
-const fs = require('fs');
-
-const inp = fs.createReadStream('The.Matrix.1080p.mkv');
-const out = fs.createWriteStream('The.Matrix.1080p.mkv.gz');
-
-inp.pipe(gzip).pipe(out);
-```
-
-Untuk menguji hasilnya, cobalah membuka setiap file yang terkompresi. File yang dikompresi oleh alat [`zip(1)`][] akan memberi tahu Anda bahwa file tersebut rusak, sedangkan kompresi yang selesai dengan menggunakan [`Stream`][] akan didekompresi tanpa kesalahan.
-
-> Dalam contoh ini, kita menggunakan `.pipe()` untuk mendapatkan sumber data dari satu ujung ke ujung yang lain. Namun, perhatikan bahwa tidak ada penangan kesalahan yang benar yang terpasang. Jika sepotong data gagal diterima dengan benar, sumber `Readable` atau stream `gzip` tidak akan dihancurkan. [`pump`][] adalah alat utilitas yang akan menghancurkan semua stream dalam pipeline secara tepat jika salah satunya gagal atau ditutup, dan harus dimiliki dalam kasus ini!
-
-[`pump`][] hanya diperlukan untuk Node.js 8.x atau versi sebelumnya, karena untuk Node.js 10.x atau versi yang lebih baru, [`pipeline`][] diperkenalkan untuk menggantikan [`pump`][]. Ini adalah metode modul untuk mengalirkan antara stream yang meneruskan kesalahan dan membersihkan dengan benar dan memberikan panggilan kembali ketika pipeline selesai.
-
-Berikut adalah contoh penggunaan pipeline:
-
-```javascript
-const { pipeline } = require('stream');
-const fs = require('fs');
-const zlib = require('zlib');
-
-// Gunakan API pipeline untuk dengan mudah mengalirkan serangkaian stream
-// bersama-sama dan mendapatkan pemberitahuan ketika pipa sepenuhnya selesai.
-// Pipa untuk mengompresi file video yang mungkin sangat besar secara efisien menggunakan gzip:
-
-pipeline(
- fs.createReadStream('The.Matrix.1080p.mkv'),
- zlib.createGzip(),
- fs.createWriteStream('The.Matrix.1080p.mkv.gz'),
- err => {
- if (err) {
- console.error('Pipeline failed', err);
- } else {
- console.log('Pipeline succeeded');
- }
- }
-);
-```
-
-Anda juga dapat memanggil [`promisify`][] pada pipeline untuk menggunakannya dengan `async` / `await`:
-
-```javascript
-const stream = require('stream');
-const fs = require('fs');
-const zlib = require('zlib');
-const util = require('util');
-
-const pipeline = util.promisify(stream.pipeline);
-
-async function run() {
- try {
- await pipeline(
- fs.createReadStream('The.Matrix.1080p.mkv'),
- zlib.createGzip(),
- fs.createWriteStream('The.Matrix.1080p.mkv.gz')
- );
- console.log('Pipeline succeeded');
- } catch (err) {
- console.error('Pipeline failed', err);
- }
-}
-```
-
-## Terlalu Banyak Data, Terlalu Cepat
-
-Terlalu Banyak Data, Terlalu Cepat Terkadang sebuah stream [`Readable`][] memberikan data ke stream [`Writable`][] terlalu cepat - jauh lebih banyak daripada konsumen dapat tangani!
-
-Ketika hal itu terjadi, konsumen akan mulai memasukkan semua potongan data ke dalam antrian untuk dikonsumsi nanti. Antrian penulisan akan semakin panjang, dan karena itu lebih banyak data harus disimpan di memori sampai seluruh proses selesai.
-
-Menulis ke disk jauh lebih lambat daripada membaca dari disk, oleh karena itu, ketika kita mencoba mengompres file dan menuliskannya ke hard disk, backpressure akan terjadi karena disk tulis tidak akan mampu mengejar kecepatan dari pembacaan.
-
-```javascript
-// Secara diam-diam, stream sedang mengatakan: "whoa, whoa! tunggu dulu, ini terlalu banyak!"
-// Data akan mulai menumpuk di sisi pembacaan dari buffer data ketika
-// write mencoba mengejar arus data yang masuk.
-inp.pipe(gzip).pipe(outputFile);
-```
-
-Ini sebab mengapa mekanisme backpressure sangat penting. Jika sistem backpressure tidak ada, proses akan menggunakan memori sistem Anda, mengurangi kecepatan proses lain dan memonopoli sebagian besar sistem Anda sampai selesai.
-
-Hal ini mengakibatkan beberapa hal berikut:
-
-- Memperlambat semua proses saat ini
-- Pemulung sampah yang sangat terbebani
-- Kekurangan memori
-
-Pada contoh-contoh berikut kita akan menghapus [return value][] dari fungsi `.write()` dan mengubahnya menjadi `true`, yang secara efektif menonaktifkan dukungan backpressure di inti Node.js. Dalam setiap referensi ke binary yang dimodifikasi, kita berbicara tentang menjalankan binary `node` tanpa baris `return ret;`, dan sebagai gantinya dengan `return true;` yang diganti.
-
-## Beban Berlebih pada Pengumpulan Sampah
-
-Mari kita lihat benchmark singkat. Menggunakan contoh yang sama seperti di atas, kami melakukan beberapa percobaan waktu untuk mendapatkan waktu median untuk kedua binary.
-
-```
- trial (#) | `node` binary (ms) | modified `node` binary (ms)
-=================================================================
- 1 | 56924 | 55011
- 2 | 52686 | 55869
- 3 | 59479 | 54043
- 4 | 54473 | 55229
- 5 | 52933 | 59723
-=================================================================
-average time: | 55299 | 55975
-```
-
-Kedua proses tersebut memakan waktu sekitar satu menit untuk dijalankan, sehingga tidak terlalu banyak perbedaan antara keduanya, tetapi mari kita perhatikan lebih dekat untuk mengonfirmasi apakah kecurigaan kita benar. Kami menggunakan alat Linux [`dtrace`][] untuk mengevaluasi apa yang terjadi dengan pengumpul sampah V8.
-
-Waktu pengukuran GC (pengumpul sampah) menunjukkan interval dari siklus lengkap dari satu kali sapuan yang dilakukan oleh pengumpul sampah:
-
-```
-approx. time (ms) | GC (ms) | modified GC (ms)
-=================================================
- 0 | 0 | 0
- 1 | 0 | 0
- 40 | 0 | 2
- 170 | 3 | 1
- 300 | 3 | 1
-
- * * *
- * * *
- * * *
-
- 39000 | 6 | 26
- 42000 | 6 | 21
- 47000 | 5 | 32
- 50000 | 8 | 28
- 54000 | 6 | 35
-```
-
-Ketika kedua proses dimulai dengan sama dan tampaknya bekerja dengan GC pada tingkat yang sama, menjadi jelas bahwa setelah beberapa detik dengan sistem backpressure yang berfungsi dengan baik, beban GC disebar di selang waktu yang konsisten antara 4-8 milidetik hingga akhir transfer data.
-
-Namun, ketika sistem backpressure tidak ada, pengumpulan sampah V8 mulai menurun. Binary normal memanggil GC sekitar **75** kali dalam satu menit, sedangkan binary yang dimodifikasi hanya memanggil sebanyak **36** kali.
-
-Ini adalah utang yang lambat dan bertahap dari penggunaan memori yang semakin meningkat. Saat data ditransfer, tanpa adanya sistem backpressure, lebih banyak memori digunakan untuk setiap transfer chunk.
-
-Semakin banyak memori yang dialokasikan, semakin banyak GC yang harus diatasi dalam satu sapuan. Semakin besar sapuan, semakin banyak GC yang perlu memutuskan apa yang dapat dibebaskan, dan pemindaian untuk pointer terlepas di ruang memori yang lebih besar akan menghabiskan lebih banyak daya komputasi.
-
-## Kepenuhan Memori
-
-Untuk menentukan konsumsi memori dari setiap binary, kami menggunakan `/usr/bin/time -lp sudo ./node ./backpressure-example/zlib.js` pada masing-masing proses.
-
-Berikut adalah output dari binary normal:
-
-```
-Respecting the return value of .write()
-=============================================
-real 58.88
-user 56.79
-sys 8.79
- 87810048 maximum resident set size
- 0 average shared memory size
- 0 average unshared data size
- 0 average unshared stack size
- 19427 page reclaims
- 3134 page faults
- 0 swaps
- 5 block input operations
- 194 block output operations
- 0 messages sent
- 0 messages received
- 1 signals received
- 12 voluntary context switches
- 666037 involuntary context switches
-```
-
-Ukuran byte maksimum yang ditempati oleh memori virtual ternyata sekitar 87,81 mb.
-
-Dan sekarang dengan mengubah [nilai kembali][] dari fungsi [`.write()`][], kami mendapatkan:
-
-```
-Without respecting the return value of .write():
-==================================================
-real 54.48
-user 53.15
-sys 7.43
-1524965376 maximum resident set size
- 0 average shared memory size
- 0 average unshared data size
- 0 average unshared stack size
- 373617 page reclaims
- 3139 page faults
- 0 swaps
- 18 block input operations
- 199 block output operations
- 0 messages sent
- 0 messages received
- 1 signals received
- 25 voluntary context switches
- 629566 involuntary context switches
-```
-
-Ukuran byte maksimum yang ditempati oleh memori virtual ternyata sekitar 1,52 gb.
-
-Tanpa adanya stream yang menerapkan backpressure, terdapat perbedaan besar pada jumlah ruang memori yang dialokasikan - perbedaan margin yang sangat besar antara dua proses yang sama!
-
-Eksperimen ini menunjukkan betapa mekanisme backpressure Node.js sangat dioptimalkan dan hemat biaya untuk sistem komputasi Anda. Sekarang, mari kita kupas bagaimana mekanisme ini bekerja!
-
-## Bagaimana Backpressure Menyelesaikan Masalah Ini?
-
-Ada berbagai fungsi untuk mentransfer data dari satu proses ke proses lainnya. Di Node.js, ada fungsi bawaan internal yang disebut [`.pipe()`][]. Ada juga [paket lainnya][] yang dapat Anda gunakan! Namun, pada level dasar dari proses ini, kita memiliki dua komponen terpisah: _sumber_ dari data dan _konsumer_.
-
-Ketika [`.pipe()`][] dipanggil dari sumber, ini memberi sinyal ke konsumer bahwa ada data yang harus ditransfer. Fungsi pipe membantu mengatur penutupan backpressure yang sesuai untuk trigger acara.
-
-Dalam Node.js, sumber datanya adalah aliran [`Readable`][] dan penerima datanya adalah aliran [`Writable`][] (keduanya dapat saling ditukar dengan aliran [`Duplex`][] atau aliran [`Transform`][], tetapi hal tersebut di luar cakupan panduan ini).
-
-Waktu terpicunya backpressure dapat diperinci tepat pada nilai kembalian dari fungsi [`.write()`][] pada aliran [`Writable`][]. Tentunya, nilai kembalian ini ditentukan oleh beberapa kondisi.
-
-Dalam setiap skenario di mana buffer data telah melebihi [`highWaterMark`][] atau antrian tulis sedang sibuk, [`.write()`][] akan mengembalikan `false`.
-
-Ketika nilai `false` dikembalikan, sistem backpressure akan berjalan. Ini akan menangguhkan [`readable`][] stream masuk dari mengirimkan data apa pun dan menunggu hingga konsumer siap kembali. Begitu buffer data dikosongkan, sebuah acara [`drain`][] akan dipancarkan dan melanjutkan aliran data yang masuk.
-
-Setelah antrian selesai, backpressure akan memungkinkan data dikirimkan lagi. Ruang di memori yang sedang digunakan akan membebaskan dirinya dan bersiap untuk batch data berikutnya.
-
-Ini efektif memungkinkan jumlah memori yang tetap digunakan pada saat tertentu untuk fungsi [`.pipe()`][]. Tidak akan ada kebocoran memori, buffering tak terbatas, dan garbage collector hanya harus menangani satu area di memori!
-
-Jadi, jika backpressure begitu penting, mengapa Anda (mungkin) belum pernah mendengarnya? Jawabannya sederhana: Node.js melakukan semua ini secara otomatis untuk Anda.
-
-Itu sangat bagus! Tetapi juga tidak begitu bagus ketika kita mencoba memahami cara mengimplementasikan stream kustom kami sendiri.
-
-> Pada kebanyakan mesin, ada ukuran byte yang menentukan kapan buffer penuh (yang akan berbeda-beda di mesin yang berbeda). Node.js memungkinkan Anda untuk menetapkan [`highWaterMark`][] kustom Anda sendiri, tetapi umumnya, nilai default diatur menjadi 16kb (16384, atau 16 untuk objectMode streams). Dalam situasi di mana Anda mungkin ingin menaikkan nilai tersebut, silakan lakukan dengan hati-hati!
-
-## Siklus Hidup `.pipe()`
-
-Untuk mencapai pemahaman yang lebih baik tentang backpressure, berikut adalah diagram alir tentang siklus aliran [`Readable`][] yang di-[pipe][] ke dalam aliran [`Writable`][]:
-
-```
- +===================+
- x--> Piping functions +--> src.pipe(dest) |
- x are set up during |===================|
- x the .pipe method. | Event callbacks |
- +===============+ x |-------------------|
- | Your Data | x They exist outside | .on('close', cb) |
- +=======+=======+ x the data flow, but | .on('data', cb) |
- | x importantly attach | .on('drain', cb) |
- | x events, and their | .on('unpipe', cb) |
-+---------v---------+ x respective callbacks. | .on('error', cb) |
-| Readable Stream +----+ | .on('finish', cb) |
-+-^-------^-------^-+ | | .on('end', cb) |
- ^ | ^ | +-------------------+
- | | | |
- | ^ | |
- ^ ^ ^ | +-------------------+ +=================+
- ^ | ^ +----> Writable Stream +---------> .write(chunk) |
- | | | +-------------------+ +=======+=========+
- | | | |
- | ^ | +------------------v---------+
- ^ | +-> if (!chunk) | Is this chunk too big? |
- ^ | | emit .end(); | Is the queue busy? |
- | | +-> else +-------+----------------+---+
- | ^ | emit .write(); | |
- | ^ ^ +--v---+ +---v---+
- | | ^-----------------------------------< No | | Yes |
- ^ | +------+ +---v---+
- ^ | |
- | ^ emit .pause(); +=================+ |
- | ^---------------^-----------------------+ return false; <-----+---+
- | +=================+ |
- | |
- ^ when queue is empty +============+ |
- ^------------^-----------------------< Buffering | |
- | |============| |
- +> emit .drain(); | ^Buffer^ | |
- +> emit .resume(); +------------+ |
- | ^Buffer^ | |
- +------------+ add chunk to queue |
- | <---^---------------------<
- +============+
-```
-
-> Jika Anda mengatur pipeline untuk menggabungkan beberapa stream untuk memanipulasi data Anda, kemungkinan besar Anda akan mengimplementasikan [`Transform`][] stream.
-
-Dalam hal ini, keluaran dari \[`Readable'][] stream akan masuk ke dalam [`Transform`][] stream dan akan dipipa ke dalam [`Writable\`]\[] stream.
-
-```javascript
-Readable.pipe(Transformable).pipe(Writable);
-```
-
-Tekanan balik akan diterapkan secara otomatis, tetapi perlu diingat bahwa `highWaterMark` masuk dan keluar dari aliran [`Transform`][] dapat dimanipulasi dan akan mempengaruhi sistem tekanan balik.
-
-## Pedoman Tekanan Balik
-
-Sejak [Node.js v0.10][], kelas [`Stream`][] telah menawarkan kemampuan untuk memodifikasi perilaku [`.read()`][] atau [`.write()`][] dengan menggunakan versi garis bawah dari fungsi masing-masing ([`._read()`][] dan [`._write()`][]).
-
-Ada panduan yang terdokumentasi untuk [mengimplementasikan aliran Readable][] dan [mengimplementasikan aliran Writable][]. Kami akan mengasumsikan bahwa Anda telah membacanya, dan bagian selanjutnya akan membahas lebih dalam sedikit.
-
-## Aturan yang Harus Dipatuhi Saat Menerapkan Aliran Khusus
-
-Aturan emas dari aliran adalah **selalu menghormati tekanan balik**. Apa yang dianggap sebagai praktik terbaik adalah praktik non-inkonsisten. Selama Anda berhati-hati untuk menghindari perilaku yang bertentangan dengan dukungan tekanan balik internal, Anda dapat yakin bahwa Anda mengikuti praktik yang baik.
-
-Secara umum,
-
-1. Jangan pernah melakukan `.push()` jika Anda tidak diminta.
-2. Jangan pernah memanggil `.write()` setelah mengembalikan nilai false tetapi tunggu 'drain' sebagai gantinya.
-3. Aliran berubah antara versi Node.js yang berbeda, dan pustaka yang Anda gunakan. Berhati-hatilah dan uji segala sesuatu.
-
-> Dalam hal poin 3, paket yang sangat berguna untuk membangun aliran browser adalah [`readable-stream`][]. Rodd Vagg telah menulis [blog post yang bagus][] yang menjelaskan kegunaan pustaka ini. Singkatnya, ini menyediakan jenis penurunan tingkat yang terautomatisasi untuk aliran [`Readable`][] stream, dan mendukung versi browser dan Node.js yang lebih lama.
-
-## Aturan yang Khusus untuk Aliran Writable
-
-Sejauh ini, kita telah melihat bagaimana [`.write()`][] mempengaruhi backpressure dan telah berfokus pada stream [`Writable`][]. Karena fungsionalitas Node.js, secara teknis data mengalir dari hulu [`Readable`][] ke hilir [`Writable`][]. Namun, seperti yang dapat kita amati pada setiap transmisi data, materi, atau energi, sumber sama pentingnya dengan tujuan akhir dan stream [`Readable`][] sangat penting dalam bagaimana backpressure diatasi.
-
-Kedua proses ini saling bergantung untuk berkomunikasi dengan efektif. Jika stream [`Readable`][] mengabaikan permintaan stream [`Writable`][] untuk berhenti mengirimkan data, hal tersebut sama sulitnya dengan ketika nilai kembalian dari [`.write()`][] tidak benar.
-
-Oleh karena itu, selain menghormati nilai kembalian dari [`.write()`][], kita juga harus menghormati nilai kembalian dari [`.push()`][] yang digunakan dalam metode [`._read()`][]. Jika [`.push()`][] mengembalikan nilai `false`, maka stream akan berhenti membaca dari sumber. Jika tidak, stream akan berlanjut tanpa jeda.
-
-Selain itu, dari luar aliran kustom, ada risiko mengabaikan backpressure. Dalam contoh kebalikannya dari praktik baik, kode aplikasi memaksa data masuk setiap kali tersedia (ditandai oleh \['data' event]\[]):
-
-```javascript
-// Ini masalah besar karena sepenuhnya mengabaikan nilai kembalian dari push
-// yang mungkin menjadi sinyal backpressure dari aliran tujuan!
-class MyReadable extends Readable {
- _read(size) {
- let chunk;
- while (null !== (chunk = getNextChunk())) {
- this.push(chunk);
- }
- }
-}
-```
-
-Selain itu, dari luar aliran kustom, ada kesalahan dalam mengabaikan backpressure. Dalam contoh kontraposisi dari praktik yang baik, kode aplikasi memaksa data untuk dilewatkan setiap kali tersedia (diisyaratkan oleh peristiwa [`'data'`][]:
-
-```javascript
-// Ini mengabaikan mekanisme backpressure yang telah ditetapkan oleh Node.js,
-// dan tanpa syarat mendorong data, terlepas apakah
-// aliran tujuan siap atau tidak.
-readable.on('data', data => writable.write(data));
-```
-
-Berikut adalah contoh penggunaan [`.push()`][] dengan sebuah Readable stream.
-
-```javascript
-const { Readable } = require('stream');
-
-// Membuat Readable stream kustom
-const myReadableStream = new Readable({
- objectMode: true,
- read(size) {
- // Memasukkan beberapa data ke dalam stream
- this.push({ message: 'Hello, world!' });
- this.push(null); // Menandai akhir dari stream
- },
-});
-
-// Mengkonsumsi stream
-myReadableStream.on('data', chunk => {
- console.log(chunk);
-});
-
-// Output:
-// { message: 'Hello, world!' }
-```
-
-Dalam contoh ini, kita membuat sebuah Readable stream kustom yang memasukkan sebuah objek tunggal ke dalam stream menggunakan [`.push()`][]. Metode [`._read()`][] dipanggil ketika stream siap untuk mengkonsumsi data, dan dalam hal ini, kita langsung memasukkan beberapa data ke dalam stream dan menandai akhir dari stream dengan memasukkan null.
-
-Kami kemudian mengkonsumsi aliran dengan mendengarkan acara 'data' dan mencatat setiap potongan data yang didorong ke aliran. Dalam hal ini, kami hanya mendorong satu bagian data ke aliran, jadi kami hanya melihat satu pesan log.
-
-## Aturan khusus untuk Aliran yang Dapat Ditulis
-
-Ingatlah bahwa [`.write()`][] dapat mengembalikan nilai true atau false tergantung pada beberapa kondisi. Untungnya bagi kita, ketika membangun aliran [`Writable`][] sendiri, [`mesin keadaan aliran`][] akan menangani panggilan balik kita dan menentukan kapan harus menangani backpressure dan mengoptimalkan aliran data untuk kita.
-
-Namun, ketika kita ingin menggunakan sebuah [`Writable`][] secara langsung, kita harus menghormati nilai kembalian [`.write()`][] dan memperhatikan kondisi-kondisi ini dengan cermat:
-
-- Jika antrian tulis sedang sibuk, [`.write()`][] akan mengembalikan false.
-- Jika potongan data terlalu besar, [`.write()`][] akan mengembalikan false (batasnya ditandai oleh variabel [`highWaterMark`][]).
-
-
-
-```javascript
-// This writable is invalid because of the async nature of JavaScript callbacks.
-// Without a return statement for each callback prior to the last,
-// there is a great chance multiple callbacks will be called.
-class MyWritable extends Writable {
- _write(chunk, encoding, callback) {
- if (chunk.toString().indexOf('a') >= 0) callback();
- else if (chunk.toString().indexOf('b') >= 0) callback();
- callback();
- }
-}
-
-// The proper way to write this would be:
-if (chunk.contains('a')) return callback();
-if (chunk.contains('b')) return callback();
-callback();
-```
-
-Ada juga beberapa hal yang perlu diperhatikan saat mengimplementasikan [`._writev()`][]. Fungsi ini terkait dengan [`.cork()`][], tetapi ada kesalahan umum saat menulis:
-
-```javascript
-// Menggunakan .uncork() dua kali di sini membuat dua panggilan pada lapisan C++,
-// sehingga teknik cork/uncork menjadi tidak berguna.
-ws.cork();
-ws.write('hello ');
-ws.write('world ');
-ws.uncork();
-
-ws.cork();
-ws.write('from ');
-ws.write('Matteo');
-ws.uncork();
-
-// Cara yang benar untuk menulisnya adalah dengan menggunakan process.nextTick(),
-// yang akan dipanggil pada event loop berikutnya.
-ws.cork();
-ws.write('hello ');
-ws.write('world ');
-process.nextTick(doUncork, ws);
-
-ws.cork();
-ws.write('from ');
-ws.write('Matteo');
-process.nextTick(doUncork, ws);
-
-// Sebagai fungsi global.
-function doUncork(stream) {
- stream.uncork();
-}
-```
-
-[`.cork()`][] dapat dipanggil sebanyak yang kita inginkan, kita hanya perlu berhati-hati untuk memanggil [`.uncork()`][] sebanyak jumlah yang sama untuk membuatnya mengalir kembali.
-
-## Kesimpulan
-
-Stream adalah modul yang sering digunakan di Node.js. Mereka penting untuk struktur internal, dan bagi pengembang, untuk memperluas dan menghubungkan antar ekosistem modul Node.js.
-
-Semoga sekarang Anda dapat menyelesaikan masalah, mengkodekan dengan aman aliran [`Writable`][] dan [`Readable`][] dengan memperhatikan tekanan balik, dan membagikan pengetahuan Anda dengan rekan kerja dan teman-teman.
-
-Pastikan untuk membaca lebih lanjut tentang [`Stream`][] untuk fungsi API lainnya yang dapat membantu meningkatkan kemampuan streaming Anda saat membangun aplikasi dengan Node.js.
-
-[`Stream`]: https://nodejs.org/api/stream.html
-[`Buffer`]: https://nodejs.org/api/buffer.html
-[`EventEmitters`]: https://nodejs.org/api/events.html
-[`Writable`]: https://nodejs.org/api/stream.html#stream_writable_streams
-[`Readable`]: https://nodejs.org/api/stream.html#stream_readable_streams
-[`Duplex`]: https://nodejs.org/api/stream.html#stream_duplex_and_transform_streams
-[`Transform`]: https://nodejs.org/api/stream.html#stream_duplex_and_transform_streams
-[`zlib`]: https://nodejs.org/api/zlib.html
-[`drain`]: https://nodejs.org/api/stream.html#stream_event_drain
-[`'data'`]: https://nodejs.org/api/stream.html#stream_event_data
-[`.read()`]: https://nodejs.org/docs/latest/api/stream.html#stream_readable_read_size
-[`.write()`]: https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback
-[`._read()`]: https://nodejs.org/docs/latest/api/stream.html#stream_readable_read_size_1
-[`._write()`]: https://nodejs.org/docs/latest/api/stream.html#stream_writable_write_chunk_encoding_callback_1
-[`._writev()`]: https://nodejs.org/api/stream.html#stream_writable_writev_chunks_callback
-[`.cork()`]: https://nodejs.org/api/stream.html#stream_writable_cork
-[`.uncork()`]: https://nodejs.org/api/stream.html#stream_writable_uncork
-[`.push()`]: https://nodejs.org/docs/latest/api/stream.html#stream_readable_push_chunk_encoding
-[mengimplementasikan aliran Writable]: https://nodejs.org/docs/latest/api/stream.html#stream_implementing_a_writable_stream
-[mengimplementasikan aliran Readable]: https://nodejs.org/docs/latest/api/stream.html#stream_implementing_a_readable_stream
-[paket lainnya]: https://github.com/sindresorhus/awesome-nodejs#streams
-[`backpressure`]: https://en.wikipedia.org/wiki/Backpressure_routing
-[Node.js v0.10]: https://nodejs.org/docs/v0.10.0/
-[`highWaterMark`]: https://nodejs.org/api/stream.html#stream_buffering
-[return value]: https://github.com/nodejs/node/blob/55c42bc6e5602e5a47fb774009cfe9289cb88e71/lib/_stream_writable.js#L239
-[nilai kembali]: https://github.com/nodejs/node/blob/55c42bc6e5602e5a47fb774009cfe9289cb88e71/lib/_stream_writable.js#L239
-[`readable-stream`]: https://github.com/nodejs/readable-stream
-[blog post yang bagus]: https://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html
-[`dtrace`]: http://dtrace.org/blogs/about/
-[`zip(1)`]: https://linux.die.net/man/1/zip
-[`gzip(1)`]: https://linux.die.net/man/1/gzip
-[`mesin keadaan aliran`]: https://en.wikipedia.org/wiki/Finite-state_machine
-[`.pipe()`]: https://nodejs.org/docs/latest/api/stream.html#stream_readable_pipe_destination_options
-[pipe]: https://nodejs.org/docs/latest/api/stream.html#stream_readable_pipe_destination_options
-[`pump`]: https://github.com/mafintosh/pump
-[`pipeline`]: https://nodejs.org/api/stream.html#stream_stream_pipeline_streams_callback
-[`promisify`]: https://nodejs.org/api/util.html#util_util_promisify_original
diff --git a/pages/id/docs/guides/blocking-vs-non-blocking.md b/pages/id/docs/guides/blocking-vs-non-blocking.md
deleted file mode 100644
index 9cf7d2f00a1d3..0000000000000
--- a/pages/id/docs/guides/blocking-vs-non-blocking.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-title: Pratinjau Pemblokiran vs Non-Pemblokiran
-layout: docs.hbs
----
-
-# Ikhtisar Pemblokiran vs Non-Pemblokiran
-
-Ikhtisar ini mencakup perbedaan antara **pemblokiran** dan **non-pemblokiran** panggilan di Node.js. Ikhtisar ini akan merujuk ke loop acara dan libuv tetapi tidak pengetahuan sebelumnya tentang topik-topik tersebut diperlukan. Pembaca diasumsikan memiliki pemahaman dasar tentang bahasa JavaScript dan Node.js [pola panggilan balik](/id/knowledge/getting-started/control-flow/what-are-callbacks/).
-
-> "I/O" terutama mengacu pada interaksi dengan disk sistem dan jaringan yang didukung oleh [libuv](https://libuv.org/).
-
-## Memblokir
-
-**Blocking** adalah saat eksekusi JavaScript tambahan di Node.js proses harus menunggu hingga operasi non-JavaScript selesai. Ini terjadi karena loop acara tidak dapat melanjutkan menjalankan JavaScript saat a Operasi **pemblokiran** sedang terjadi.
-
-Di Node.js, JavaScript yang menunjukkan kinerja buruk karena CPU intensif daripada menunggu operasi non-JavaScript, seperti I/O, biasanya tidak disebut sebagai **pemblokiran**. Metode sinkron di pustaka standar Node.js yang menggunakan libuv adalah operasi **pemblokiran** yang paling umum digunakan. Warga asli modul mungkin juga memiliki metode **pemblokiran**.
-
-Semua metode I/O di pustaka standar Node.js menyediakan asinkron versi, yang **non-blocking**, dan menerima fungsi callback. Beberapa metode juga memiliki rekanan **pemblokiran**, yang memiliki nama yang diakhiri dengan `Sinkron`.
-
-## Membandingkan Kode
-
-Metode **Blocking** mengeksekusi metode **synchronously** dan **non-blocking** jalankan **secara tidak sinkron**.
-
-Menggunakan modul Sistem File sebagai contoh, ini adalah file **sinkron** yang dibaca:
-
-```js
-const fs = require('fs');
-const data = fs.readFileSync('/file.md'); // blocks here until file is read
-```
-
-Dan berikut ini adalah contoh **asynchronous** yang setara:
-
-```js
-const fs = require('fs');
-fs.readFile('/file.md', (err, data) => {
- if (err) throw err;
-});
-```
-
-Contoh pertama tampak lebih sederhana daripada yang kedua tetapi memiliki kelemahan: baris kedua **memblokir** eksekusi JavaScript tambahan apa pun hingga seluruh file dibaca. Perhatikan bahwa dalam versi sinkron jika terjadi kesalahan dilempar itu perlu ditangkap atau prosesnya akan macet. Dalam asinkron versi, terserah penulis untuk memutuskan apakah kesalahan harus dilemparkan sebagai ditampilkan.
-
-Mari kita sedikit memperluas contoh kita:
-
-```js
-const fs = require('fs');
-const data = fs.readFileSync('/file.md'); // blocks here until file is read
-console.log(data);
-moreWork(); // will run after console.log
-```
-
-Dan ini adalah contoh asinkron yang serupa, tetapi tidak setara:
-
-```js
-const fs = require('fs');
-fs.readFile('/file.md', (err, data) => {
- if (err) throw err;
- console.log(data);
-});
-moreWork(); // will run before console.log
-```
-
-Pada contoh pertama di atas, `console.log` akan dipanggil sebelum `moreWork()`. Di contoh kedua `fs.readFile()` adalah **non-blocking** jadi eksekusi JavaScript dapat melanjutkan dan `moreWork()` akan dipanggil terlebih dahulu. Kemampuan untuk berlari `moreWork()` tanpa menunggu file selesai dibaca adalah desain utama pilihan yang memungkinkan untuk throughput yang lebih tinggi.
-
-## Konkurensi dan Throughput
-
-Eksekusi JavaScript di Node.js adalah utas tunggal, jadi konkurensi mengacu pada kapasitas loop acara untuk menjalankan fungsi panggilan balik JavaScript setelah selesai pekerjaan lain. Kode apa pun yang diharapkan berjalan secara bersamaan harus mengizinkan loop acara untuk terus berjalan sebagai operasi non-JavaScript, seperti I/O, adalah terjadi.
-
-Sebagai contoh, mari kita pertimbangkan kasus di mana setiap permintaan ke server web mengambil 50ms untuk diselesaikan dan 45ms dari 50ms itu adalah database I/O yang dapat dilakukan secara tidak sinkron. Memilih **non-blocking** operasi asinkron membebaskan itu 45ms per permintaan untuk menangani permintaan lainnya. Ini adalah perbedaan yang signifikan dalam kapasitas hanya dengan memilih untuk menggunakan metode **non-blocking** daripada **memblokir** metode.
-
-Loop acara berbeda dari model dalam banyak bahasa lain di mana tambahan utas dapat dibuat untuk menangani pekerjaan bersamaan.
-
-## Bahaya Mencampur Blocking dan Non-Blocking Code
-
-Ada beberapa pola yang harus dihindari ketika berhadapan dengan I/O. Mari lihat pada contoh:
-
-```js
-const fs = require('fs');
-fs.readFile('/file.md', (err, data) => {
- if (err) throw err;
- console.log(data);
-});
-fs.unlinkSync('/file.md');
-```
-
-Dalam contoh di atas, `fs.unlinkSync()` kemungkinan akan dijalankan sebelumnya `fs.readFile()`, yang akan menghapus `file.md` sebelum benar-benar dibaca. SEBUAH cara yang lebih baik untuk menulis ini, yang sepenuhnya **non-blocking** dan dijamin mengeksekusi dalam urutan yang benar adalah:
-
-```js
-const fs = require('fs');
-fs.readFile('/file.md', (readFileErr, data) => {
- if (readFileErr) throw readFileErr;
- console.log(data);
- fs.unlink('/file.md', unlinkErr => {
- if (unlinkErr) throw unlinkErr;
- });
-});
-```
-
-Di atas menempatkan panggilan **non-blocking** ke `fs.unlink()` dalam callback dari `fs.readFile()` yang menjamin urutan operasi yang benar.
-
-## Sumber daya tambahan
-
-- [libuv](https://libuv.org/)
diff --git a/pages/id/docs/guides/buffer-constructor-deprecation.md b/pages/id/docs/guides/buffer-constructor-deprecation.md
deleted file mode 100644
index 369db061dc185..0000000000000
--- a/pages/id/docs/guides/buffer-constructor-deprecation.md
+++ /dev/null
@@ -1,214 +0,0 @@
----
-title: Porting ke API Buffer.from() / Buffer.alloc()
-layout: docs.hbs
----
-
-# Porting ke `Buffer.from()`/`Buffer.alloc()` API
-
-## Pratinjau
-
-Panduan ini menjelaskan cara bermigrasi ke metode konstruktor `Buffer` yang aman. Migrasi memperbaiki peringatan penghentian berikut:
-
-> Konstruktor Buffer() dan new Buffer() tidak direkomendasikan untuk digunakan karena masalah keamanan dan penggunaan. Mohon gunakan metode konstruksi Buffer.alloc(), Buffer.allocUnsafe(), atau Buffer.from() yang baru.
-
-- [Varian 1: Hilangkan dukungan untuk Node.js 4.4.x dan 5.0.0 — 5.9.x](#varian-1) (_direkomendasikan_)
-- [Varian 2: Gunakan polyfill](#variant-2)
-- [Varian 3: Deteksi manual, dengan pengaman](#variant-3)
-
-### Menemukan bit kode yang bermasalah menggunakan `grep`
-
-Jalankan saja `grep -nrE '[^a-zA-Z](Lambat)?Buffer\s*\(' --exclude-dir node_modules`.
-
-Ini akan menemukan semua tempat yang berpotensi tidak aman dalam kode Anda sendiri (dengan beberapa yang sangat tidak mungkin pengecualian).
-
-### Menemukan bit kode yang bermasalah menggunakan Node.js 8
-
-Jika Anda menggunakan Node.js 8.0.0 (yang direkomendasikan), Node.js memperlihatkan beberapa opsi yang membantu menemukan potongan kode yang relevan:
-
-- `--trace-warnings` akan membuat Node.js menampilkan jejak tumpukan untuk peringatan ini dan peringatan lain yang dicetak oleh Node.js.
-- `--trace-deprecation` melakukan hal yang sama, tetapi hanya untuk peringatan penghentian.
-- `--pending-deprecation` akan menampilkan lebih banyak jenis peringatan penghentian. Secara khusus, ini akan menampilkan peringatan penghentian `Buffer()`, bahkan pada Node.js 8.
-
-Anda dapat mengatur flag ini menggunakan variabel lingkungan:
-
-```bash
-$ export NODE_OPTIONS='--trace-warnings --pending-deprecation'
-$ cat example.js
-'use strict';
-const foo = new Buffer('foo');
-$ node example.js
-(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead.
- at showFlaggedDeprecation (buffer.js:127:13)
- at new Buffer (buffer.js:148:3)
- at Object. (/path/to/example.js:2:13)
- [... more stack trace lines ...]
-```
-
-### Menemukan bit kode yang bermasalah menggunakan linter
-
-Aturan ESLint [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) atau [node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) juga menemukan panggilan ke `Buffer()` API yang tidak digunakan lagi. Aturan-aturan itu termasuk dalam beberapa preset.
-
-Namun, ada kekurangannya, itu tidak selalu [bekerja dengan benar](https://github.com/chalker/safer-buffer#why-not-safe-buffer) saat `Buffer` ditimpa misalnya dengan polyfill, jadi disarankan adalah kombinasi dari ini dan beberapa metode lainnya dijelaskan di atas.
-
-## Varian 1: Hilangkan dukungan untuk Node.js 4.4.x dan 5.0.0 — 5.9.x
-
-Ini adalah solusi yang direkomendasikan saat ini yang hanya menyiratkan overhead minimal.
-
-Jalur rilis Node.js 5.x tidak didukung sejak Juli 2016, dan jalur rilis Node.js 4.x mencapai Akhir Masa Pakainya pada April 2018 (→ [Jadwal](https://github.com/nodejs/Release#Release_schedule)). Ini berarti bahwa versi Node.js ini _tidak_ akan menerima pembaruan apa pun, bahkan jika ada masalah keamanan, jadi penggunaan jalur rilis ini harus dihindari, jika memungkinkan.
-
-Apa yang akan Anda lakukan dalam kasus ini adalah mengonversi semua panggilan `New Buffer()` atau `Buffer()` untuk menggunakan `Buffer.alloc()` atau `Buffer.from()`, dengan cara berikut:
-
-- Untuk `Buffer(number) baru`, ganti dengan `Buffer.alloc(number)`.
-- Untuk `New Buffer(string)` (atau `new Buffer(string, encoding)`), ganti dengan `Buffer.from(string)` (atau `Buffer.from(string, encoding)`).
-- Untuk semua kombinasi argumen lainnya (ini jauh lebih jarang), ganti juga `new Buffer(...arguments)` dengan `Buffer.from(...arguments)`.
-
-Perhatikan bahwa `Buffer.alloc()` juga _lebih cepat_ pada versi Node.js saat ini daripada `new Buffer(size).fill(0)`, yang seharusnya Anda perlukan untuk memastikan zero-filling.
-
-Mengaktifkan aturan ESLint [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) atau [node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) direkomendasikan untuk menghindari penggunaan `Buffer` API yang tidak aman secara tidak sengaja.
-
-Ada juga [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005) untuk memigrasikan konstruktor `Buffer` secara otomatis ke `Buffer.alloc()` atau `Buffer.from()`. Perhatikan bahwa saat ini hanya berfungsi dengan kasus di mana argumennya literal atau di mana konstruktor dipanggil dengan dua argumen.
-
-_Jika saat ini Anda mendukung versi Node.js yang lebih lama dan menghentikan dukungan untuk mereka tidak mungkin, atau jika Anda mendukung cabang paket Anda yang lebih lama, pertimbangkan untuk menggunakan [Varian 2](#varian-2) atau [Varian 3](#varian-3) di cabang lama, jadi orang yang menggunakan cabang lama itu juga akan menerima perbaikan. Dengan begitu, Anda akan menghilangkan potensi masalah yang disebabkan oleh penggunaan `Buffer` API yang tidak dijaga dan pengguna Anda tidak akan melihat peringatan penghentian runtime saat menjalankan kode Anda di Node.js 10._
-
-## Variant 2: Gunakan polyfill
-
-Ada tiga polyfill berbeda yang tersedia:
-
-- **[safer-buffer](https://www.npmjs.com/package/safer-buffer)** adalah pengganti drop-in untuk seluruh `Buffer` API, yang akan _dilempar_ saat menggunakan `new Buffer()`.
-
- Anda akan mengambil langkah yang sama persis seperti pada [Varian 1](#varian-1), tetapi dengan polyfill `const Buffer = require('safer-buffer').Buffer` di semua file tempat Anda menggunakan `Buffer` API baru.
-
- Jangan gunakan API `new Buffer()` yang lama. Dalam file apa pun di mana baris di atas ditambahkan, menggunakan `new Buffer()` API lama akan _throw_.
-
-- **[buffer-from](https://www.npmjs.com/package/buffer-from) dan/atau [buffer-alloc](https://www.npmjs.com/package/buffer-alloc)** adalah [ponyfills](https://ponyfill.com/) untuk masing-masing bagian dari `Buffer` API. Anda hanya perlu untuk menambahkan paket yang sesuai dengan API yang Anda gunakan.
-
- Anda akan mengimpor modul yang diperlukan dengan nama yang sesuai, mis. `const bufferFrom = require('buffer-from')` lalu gunakan itu sebagai ganti panggilan ke `Buffer baru()`, mis. `new Buffer('test')` menjadi `bufferFrom('test')`.
-
- Kelemahan dengan pendekatan ini adalah sedikit lebih banyak perubahan kode untuk dimigrasikan (seperti yang akan Anda lakukan menggunakan misalnya `Buffer.from()` dengan nama yang berbeda).
-
-- **[safe-buffer](https://www.npmjs.com/package/safe-buffer)** juga merupakan pengganti drop-in untuk seluruh `Buffer` API, tetapi menggunakan `new Buffer()` akan tetap berfungsi seperti sebelumnya.
-
- Kelemahan dari pendekatan ini adalah Anda juga dapat menggunakan `new Buffer()` API . yang lebih lama dalam kode Anda, yang bermasalah karena dapat menyebabkan masalah dalam kode Anda, dan akan mulai memancarkan peringatan penghentian runtime dimulai dengan Node.js 10 ([baca selengkapnya di sini](https://github.com/chalker/safer-buffer#why-not-safe-buffer)).
-
-Perhatikan bahwa dalam kedua kasus tersebut, Anda juga harus menghapus semua panggilan ke `Buffer` . yang lama API secara manual — hanya memasukkan `safe-buffer` tidak memperbaiki masalah dengan sendirinya, itu hanya menyediakan polyfill untuk API baru. Saya telah melihat orang-orang melakukan kesalahan itu.
-
-Mengaktifkan aturan ESLint [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) atau [node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) direkomendasikan.
-
-_Jangan lupa untuk menghentikan penggunaan polyfill setelah Anda menghentikan dukungan untuk Node.js <4.5.0._
-
-## Varian 3 — Deteksi manual, dengan pengaman
-
-Ini berguna jika Anda membuat instance `Buffer` hanya di beberapa tempat (mis. pembungkus di sekitar mereka.
-
-### `Buffer(0)`
-
-Kasus khusus untuk membuat buffer kosong ini dapat diganti dengan aman dengan `Buffer.concat([])`, yang mengembalikan hasil yang sama hingga ke Node.js 0.8.x.
-
-### `Buffer(bukanNumber)`
-
-Sebelum:
-
-```js
-const buf = new Buffer(notNumber, encoding);
-```
-
-Sesudah:
-
-```js
-let buf;
-if (Buffer.from && Buffer.from !== Uint8Array.from) {
- buf = Buffer.from(notNumber, encoding);
-} else {
- if (typeof notNumber === 'number') {
- throw new Error('The "size" argument must be not of type number.');
- }
- buf = new Buffer(notNumber, encoding);
-}
-```
-
-`encoding` adalah opsional.
-
-Perhatikan bahwa `typeof notNumber` sebelum `new Buffer()` diperlukan (untuk kasus ketika argumen `notNumber` tidak hard-coded) dan _tidak disebabkan oleh penghentian konstruktor `Buffer`_ — justru _why_ the Konstruktor `Buffer` tidak digunakan lagi. Paket ekosistem yang tidak memiliki jenis pemeriksaan ini menyebabkan banyak masalah keamanan — situasi ketika input pengguna yang tidak bersih dapat berakhir di `Buffer(arg)` create masalah mulai dari DoS hingga membocorkan informasi sensitif ke penyerang dari memori proses.
-
-Ketika argumen `notNumber` di-hardcode (misalnya literal `"abc"` atau `[0,1,2]`), pemeriksaan `typeof` dapat dihilangkan.
-
-Juga, perhatikan bahwa menggunakan TypeScript tidak memperbaiki masalah ini untuk Anda — ketika libs ditulis dalam `TypeScript` digunakan dari JS, atau ketika input pengguna berakhir di sana — ia berperilaku persis seperti JS murni, seperti semua jenis pemeriksaan hanya waktu terjemahan dan tidak ada dalam kode JS aktual yang TS mengkompilasi ke.
-
-### `Buffer(number)`
-
-Untuk dukungan Node.js 0.10.x (dan di bawah):
-
-```js
-let buf;
-if (Buffer.alloc) {
- buf = Buffer.alloc(number);
-} else {
- buf = new Buffer(number);
- buf.fill(0);
-}
-```
-
-Jika tidak (Node.js 0.12.x):
-
-```js
-const buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0);
-```
-
-## Tentang `Buffer.allocUnsafe()`
-
-Berhati-hatilah saat menggunakan `Buffer.allocUnsafe()`:
-
-- Jangan gunakan jika Anda tidak memiliki alasan yang baik untuk
- - misalnya Anda mungkin tidak akan pernah melihat perbedaan kinerja untuk buffer kecil, pada kenyataannya, itu mungkin lebih cepat dengan `Buffer.alloc()`,
- - jika kode Anda tidak berada di jalur kode panas — Anda mungkin juga tidak akan melihat perbedaan,
- - perlu diingat bahwa pengisian nol meminimalkan potensi risiko.
-- Jika Anda menggunakannya, pastikan Anda tidak pernah mengembalikan buffer dalam keadaan terisi sebagian,
- - jika Anda menulisnya secara berurutan — selalu potong ke panjang tulisan yang sebenarnya
-
-Kesalahan dalam menangani buffer yang dialokasikan dengan `Buffer.allocUnsafe()` dapat mengakibatkan berbagai masalah, berkisar dari perilaku kode Anda yang tidak terdefinisi hingga data sensitif (input pengguna, kata sandi, sertifikat) bocor ke penyerang jarak jauh.
-
-_Perhatikan bahwa hal yang sama berlaku untuk penggunaan `new Buffer()` tanpa pengisian nol, tergantung pada Node.js versi (dan kurangnya pemeriksaan tipe juga menambahkan DoS ke daftar potensi masalah)._
-
-## Pertanyaan Umum (FAQ)
-
-### Apa yang salah dengan konstruktor `Buffer`?
-
-Konstruktor `Buffer` dapat digunakan untuk membuat buffer dengan berbagai cara:
-
-- `New Buffer(42)` membuat `Buffer` sebesar 42 byte. Sebelum Node.js 8, buffer ini berisi _memori sewenang-wenang_ untuk alasan kinerja, yang dapat mencakup apa saja mulai dari kode sumber program untuk kata sandi dan kunci enkripsi.
-- `new Buffer('abc')` membuat `Buffer` yang berisi versi UTF-8-encoded string '`'abc'`. Argumen kedua dapat menentukan pengkodean lain: misalnya,`new Buffer(string, 'base64')` dapat digunakan untuk mengonversi string Base64 menjadi yang asli urutan byte yang diwakilinya.
-- Ada beberapa kombinasi argumen lainnya.
-
-Ini berarti bahwa dalam kode seperti `var buffer = new Buffer(foo);`, _tidak mungkin untuk mengetahuinya apa sebenarnya isi buffer yang dihasilkan_ tanpa mengetahui jenis `foo`.
-
-Terkadang, nilai `foo` berasal dari sumber eksternal. Misalnya, fungsi ini dapat diekspos sebagai layanan di server web, mengubah string UTF-8 menjadi bentuk Base64:
-
-```js
-function stringToBase64(req, res) {
- // The request body should have the format of `{ string: 'foobar' }`.
- const rawBytes = new Buffer(req.body.string);
- const encoded = rawBytes.toString('base64');
- res.end({ encoded });
-}
-```
-
-Perhatikan bahwa kode ini _tidak_ memvalidasi jenis `req.body.string`:
-
-- `req.body.string` diharapkan berupa string. Jika ini masalahnya, semuanya berjalan dengan baik.
-- `req.body.string` dikendalikan oleh klien yang mengirimkan permintaan.
-- Jika `req.body.string` adalah _number_ `50`, `rawBytes` akan menjadi `50` byte:
- - Sebelum Node.js 8, konten tidak akan diinisialisasi
- - Setelah Node.js 8, konten akan menjadi `50` byte dengan nilai `0`
-
-Karena pemeriksaan tipe yang hilang, penyerang dapat dengan sengaja mengirim nomor sebagai bagian dari permintaan. Dengan menggunakan ini, mereka dapat:
-
-- Baca memori yang tidak diinisialisasi. Ini **akan** membocorkan kata sandi, kunci enkripsi, dan lainnya jenis informasi sensitif. (Kebocoran informasi)
-- Memaksa program untuk mengalokasikan sejumlah besar memori. Misalnya, saat menentukan `500000000` sebagai nilai input, setiap permintaan akan mengalokasikan 500MB memori. Ini dapat digunakan untuk menghabiskan memori yang tersedia dari suatu program sepenuhnya dan membuatnya crash, atau memperlambatnya secara signifikan. (Kegagalan layanan)
-
-Kedua skenario ini dianggap sebagai masalah keamanan yang serius di dunia nyata konteks server web.
-
-Saat menggunakan `Buffer.from(req.body.string)` sebagai gantinya, melewatkan nomor akan selalu melempar pengecualian sebagai gantinya, memberikan perilaku terkontrol yang selalu bisa ditangani oleh program.
-
-### Konstruktor `Buffer()` telah ditinggalkan untuk sementara waktu. Apakah ini benar-benar masalah?
-
-Survei kode di ekosistem `npm` telah menunjukkan bahwa konstruktor `Buffer()` masih banyak digunakan. Ini termasuk kode baru, dan penggunaan keseluruhan kode tersebut sebenarnya telah _increasing_.
diff --git a/pages/id/docs/guides/debugging-getting-started.md b/pages/id/docs/guides/debugging-getting-started.md
deleted file mode 100644
index 163ecf81470e4..0000000000000
--- a/pages/id/docs/guides/debugging-getting-started.md
+++ /dev/null
@@ -1,187 +0,0 @@
----
-title: Memecahkan Masalah - Memulai
-layout: docs.hbs
----
-
-# Panduan Memecahkan Masalah
-
-Panduan ini akan membantu Anda memulai debugging aplikasi dan skrip Node.js Anda.
-
-## Aktifkan Inspektur
-
-Saat dimulai dengan sakelar `--inspect`, proses Node.js mendengarkan a klien debug. Secara default, ia akan mendengarkan di host dan port 127.0.0.1:9229. Setiap proses juga diberi [UUID][] yang unik.
-
-Klien pemeriksa harus mengetahui dan menentukan alamat host, port, dan UUID untuk terhubung. URL lengkap akan terlihat seperti `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
-
-Node.js juga akan mulai mendengarkan pesan debug jika menerima a Sinyal `SIGUSR1`. (`SIGUSR1` tidak tersedia di Windows.) Di Node.js 7 dan sebelumnya, ini mengaktifkan API Debugger lawas. Di Node.js 8 dan yang lebih baru, itu akan aktifkan API Inspektur.
-
----
-
-## Implikasi Keamanan
-
-Karena debugger memiliki akses penuh ke lingkungan eksekusi Node.js, a aktor jahat yang dapat terhubung ke port ini mungkin dapat mengeksekusi secara sewenang-wenang kode atas nama proses Node.js. Penting untuk memahami keamanan implikasi mengekspos port debugger pada jaringan publik dan pribadi.
-
-### Mengekspos port debug secara publik tidak aman
-
-Jika debugger terikat ke alamat IP publik, atau ke 0.0.0.0, setiap klien yang dapat mencapai alamat IP Anda akan dapat terhubung ke debugger tanpa pembatasan dan akan dapat menjalankan kode arbitrer.
-
-Secara default `node --inspect` mengikat ke 127.0.0.1. Anda secara eksplisit perlu memberikan alamat IP publik atau 0.0.0.0, dll., jika Anda ingin mengizinkan koneksi eksternal ke debuggernya. Melakukannya dapat membuat Anda terkena keamanan yang berpotensi signifikan ancaman. Kami menyarankan Anda memastikan firewall yang sesuai dan kontrol akses di tempat untuk mencegah paparan keamanan.
-
-Lihat bagian '[Mengaktifkan skenario debugging jarak jauh](#enabling-remote-debugging-scenarios)' pada beberapa saran tentang cara untuk memungkinkan klien debugger jarak jauh terhubung dengan aman.
-
-### Aplikasi lokal memiliki akses penuh ke inspektur
-
-Bahkan jika Anda mengikat port inspektur ke 127.0.0.1 (default), aplikasi apa pun berjalan secara lokal di mesin Anda akan memiliki akses tak terbatas. Ini adalah dengan desain untuk memungkinkan debugger lokal dapat melampirkan dengan nyaman.
-
-### Browser, WebSockets, dan kebijakan asal yang sama
-
-Situs web yang dibuka di browser web dapat membuat permintaan WebSocket dan HTTP di bawah model keamanan peramban. Koneksi HTTP awal diperlukan untuk mendapatkan id sesi debugger unik. Kebijakan asal yang sama mencegah situs web menjadi dapat membuat koneksi HTTP ini. Untuk keamanan tambahan terhadap [Serangan rebinding DNS](https://en.wikipedia.org/wiki/DNS_rebinding), Node.js memverifikasi bahwa tajuk 'Host' untuk koneksi juga tentukan alamat IP atau `localhost6` dengan tepat.
-
-Kebijakan keamanan ini melarang koneksi ke server debug jarak jauh dengan: menentukan nama host. Anda dapat mengatasi batasan ini dengan menentukan baik alamat IP atau dengan menggunakan terowongan ssh seperti yang dijelaskan di bawah ini.
-
-## Klien Inspektur
-
-Debugger CLI minimal tersedia dengan `node inspect myscript.js`. Beberapa alat komersial dan sumber terbuka juga dapat terhubung ke Inspektur Node.js.
-
-### [Chrome DevTools](https://github.com/ChromeDevTools/devtools-frontend) 55+, [Microsoft Edge](https://www.microsoftedgeinsider.com)
-
-- **Opsi 1**: Buka `chrome://inspect` dalam berbasis Chromium browser atau `edge://inspect` di Edge. Klik tombol Konfigurasi dan pastikan host dan port target Anda terdaftar.
-- **Opsi 2**: Salin `devtoolsFrontendUrl` dari output `/json/list` (lihat di atas) atau teks petunjuk --inspect dan tempel ke Chrome.
-
-> Perhatikan bahwa Node.js dan Chrome harus dijalankan pada platform yang sama.
-
-### [Visual Studio code](https://github.com/microsoft/vscode) 1.10+
-
-- Di panel Debug, klik ikon pengaturan untuk membuka `.vscode/launch.json`. Pilih "Node.js" untuk pengaturan awal.
-
-### [Visual Studio](https://github.com/Microsoft/nodejstools) 2017+
-
-- Pilih "Debug > Start Debugging" dari menu atau tekan F5.
-- [Petunjuk terperinci](https://github.com/Microsoft/nodejstools/wiki/Debugging).
-
-### [JetBrains WebStorm](https://www.jetbrains.com/webstorm/) dan IDE JetBrains lainnya
-
-- Buat konfigurasi debug Node.js baru dan tekan Debug. `--inspect` akan digunakan secara default untuk Node.js 7+. Untuk menonaktifkan hapus centang `js.debugger.node.use.inspect` di Registri IDE. Untuk mempelajari lebih lanjut tentang menjalankan dan men-debug Node.js di WebStorm dan IDE JetBrains lainnya, lihat [bantuan online WebStorm](https://www.jetbrains.com/help/webstorm/running-and-debugging-node-js.html).
-
-### [chrome-remote-interface](https://github.com/cyrus-and/chrome-remote-interface)
-
-- Perpustakaan untuk memudahkan koneksi ke [Protokol Inspektur][] titik akhir.
-
-### [Gitpod](https://www.gitpod.io)
-
-- Mulai konfigurasi debug Node.js dari tampilan `Debug` atau tekan `F5`. [Petunjuk terperinci](https://medium.com/gitpod/debugging-node-js-applications-in-theia-76c94c76f0a1)
-
-### [Eclipse IDE](https://Eclipse.org/Eclipseide) dengan ekstensi Pengembang Web Liar Eclipse
-
-- Dari file .js, pilih "Debug As... > Node program", atau
-- Buat Konfigurasi Debug untuk melampirkan debugger ke aplikasi Node.js yang sedang berjalan (sudah dimulai dengan `--inspect`).
-
----
-
-## Opsi baris perintah
-
-Tabel berikut mencantumkan dampak dari berbagai flag runtime pada debugging:
-
-
-
Penanda
Arti
-
-
--inspect
-
-
-
Mengaktifkan agen inspeksi
-
Mendengarkan di alamat dan port default (127.0.0.1:9229)
-
-
-
-
-
--inspect=[host:port]
-
-
-
Mengaktifkan agen inspeksi
-
Mengikat ke alamat atau nama host host (default: 127.0.0.1)
-
Mendengarkan pada port port (default: 9229)
-
-
-
-
-
--inspect-brk
-
-
-
Mengaktifkan agen inspeksi
-
Mendengarkan di alamat dan port default (127.0.0.1:9229)
-
Berhenti sebelum kode pengguna dimulai
-
-
-
-
-
--inspect-brk=[host:port]
-
-
-
Mengaktifkan agen inspeksi
-
Mengikat ke alamat atau nama host host (default: 127.0.0.1)
-
Mendengarkan pada port port (default: 9229)
-
Berhenti sebelum kode pengguna dimulai
-
-
-
-
-
node inspect script.js
-
-
-
Menjalankan proses anak untuk menjalankan skrip pengguna dengan flag --inspect; dan menggunakan proses utama untuk menjalankan debugger CLI.
-
-
-
-
-
node inspect --port=xxxx script.js
-
-
-
Menjalankan proses anak untuk menjalankan skrip pengguna dengan flag --inspect; dan menggunakan proses utama untuk menjalankan debugger CLI.
-
Mendengarkan pada port port (default: 9229)
-
-
-
-
-
----
-
-## Mengaktifkan skenario debugging jarak jauh
-
-Kami menyarankan Anda tidak pernah mendengarkan debugger pada alamat IP publik. Jika Anda perlu mengizinkan koneksi debugging jarak jauh, kami merekomendasikan penggunaan ssh terowongan sebagai gantinya. Kami memberikan contoh berikut untuk tujuan ilustrasi saja. Harap pahami risiko keamanan dari mengizinkan akses jarak jauh ke hak istimewa layanan sebelum melanjutkan.
-
-Katakanlah Anda menjalankan Node.js pada mesin jarak jauh, remote.example.com, yang Anda ingin dapat men-debug. Di mesin itu, Anda harus memulai proses simpul dengan inspektur hanya mendengarkan localhost (default).
-
-```bash
-node --inspect server.js
-```
-
-Sekarang, di mesin lokal Anda dari mana Anda ingin memulai klien debug koneksi, Anda dapat mengatur terowongan ssh:
-
-```bash
-ssh -L 9221:localhost:9229 user@remote.example.com
-```
-
-Ini memulai sesi terowongan ssh di mana koneksi ke port 9221 di lokal Anda mesin akan diteruskan ke port 9229 di remote.example.com. Anda sekarang dapat melampirkan debugger seperti Chrome DevTools atau Visual Studio Code ke localhost:9221, yang seharusnya dapat melakukan debug seolah-olah aplikasi Node.js berjalan secara lokal.
-
----
-
-## Debugger Lama
-
-**Debugger lama tidak digunakan lagi sejak Node.js 7.7.0. Mohon gunakan `--inspect` dan Inspector sebagai gantinya.**
-
-Saat dimulai dengan sakelar **--debug** atau **--debug-brk** di versi 7 dan sebelumnya, Node.js mendengarkan perintah debugging yang ditentukan oleh yang dihentikan Protokol Debugging V8 pada port TCP, secara default `5858`. Setiap klien debugger yang berbicara bahwa protokol ini dapat terhubung dan men-debug proses yang sedang berjalan; sebuah pasangan yang populer tercantum di bawah ini.
-
-Protokol Debugging V8 tidak lagi dipertahankan atau didokumentasikan.
-
-### [Debugger Bawaan](https://nodejs.org/dist/latest/docs/api/debugger.html)
-
-Mulai `node debug script_name.js` untuk memulai skrip Anda di bawah bawaan debugger baris perintah. Skrip Anda dimulai dalam proses Node.js lain yang dimulai dengan opsi `--debug-brk`, dan proses Node.js awal menjalankan `_debugger.js` script dan menghubungkan ke target Anda.
-
-### [node-inspector](https://github.com/node-inspector/node-inspector)
-
-Debug aplikasi Node.js Anda dengan Chrome DevTools menggunakan proses perantara yang menerjemahkan [Protokol Inspektur][] yang digunakan di Chromium ke V8 Debugger protokol yang digunakan di Node.js.
-
-
-
-[Protokol Inspektur]: https://chromedevtools.github.io/debugger-protocol-viewer/v8/
-[UUID]: https://tools.ietf.org/html/rfc4122
diff --git a/pages/id/docs/guides/diagnostics-flamegraph.md b/pages/id/docs/guides/diagnostics-flamegraph.md
deleted file mode 100644
index e15026b74a233..0000000000000
--- a/pages/id/docs/guides/diagnostics-flamegraph.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-title: Diagnostik - Flame Graph
-layout: docs.hbs
----
-
-# Flame Graph
-
-## Apa kegunaan flame graph?
-
-Flame graph adalah cara memvisualisasikan waktu CPU yang dihabiskan dalam fungsi. Mereka dapat membantu Anda menentukan di mana Anda menghabiskan terlalu banyak waktu untuk melakukan operasi sinkron.
-
-## Cara membuat flame graph
-
-Anda mungkin pernah mendengar membuat flame graph untuk Node.js itu sulit, tapi itu tidak benar (lagi). Solaris vms tidak lagi diperlukan untuk grafik nyala!
-
-Grafik nyala dihasilkan dari keluaran `perf`, yang bukan merupakan alat khusus simpul. Meskipun ini adalah cara paling ampuh untuk memvisualisasikan waktu CPU yang dihabiskan, ini mungkin memiliki masalah dengan bagaimana kode JavaScript dioptimalkan di Node.js 8 dan di atasnya. Lihat bagian [perf output issues](#perf-output-issues) di bawah ini.
-
-### Gunakan alat yang sudah dikemas sebelumnya
-
-Jika Anda menginginkan satu langkah yang menghasilkan grafik nyala secara lokal, coba [0x](https://www.npmjs.com/package/0x)
-
-Untuk mendiagnosis penerapan produksi, baca catatan berikut: [0x server produksi](https://github.com/davidmarkclements/0x/blob/master/docs/production-servers.md).
-
-### Buat grafik nyala dengan alat kinerja sistem
-
-Tujuan dari panduan ini adalah untuk menunjukkan langkah-langkah yang terlibat dalam membuat flame graph dan membuat Anda tetap mengendalikan setiap langkah.
-
-Jika Anda ingin memahami setiap langkah dengan lebih baik, lihat bagian berikut di mana kita akan membahas lebih detail.
-
-Sekarang mari kita mulai bekerja.
-
-1. Instal `perf` (biasanya tersedia melalui paket linux-tools-common jika belum diinstal)
-2. coba jalankan `perf` - mungkin mengeluh tentang modul kernel yang hilang, instal juga
-3. jalankan node dengan perf diaktifkan (lihat [masalah output perf](#perf-output-issues) untuk tips khusus untuk versi Node.js)
-
- ```bash
- perf record -e cycles:u -g -- node --perf-basic-prof app.js
- ```
-
-4. mengabaikan peringatan kecuali mereka mengatakan Anda tidak dapat menjalankan perf karena paket yang hilang; Anda mungkin mendapatkan beberapa peringatan tentang tidak dapat mengakses sampel modul kernel yang sebenarnya tidak Anda cari.
-5. Jalankan `perf script > perfs.out` untuk menghasilkan file data yang akan Anda visualisasikan dalam sekejap. Berguna untuk [menerapkan beberapa pembersihan](#filtering-out-node-js-internal-functions) untuk grafik yang lebih mudah dibaca
-6. instal stackvis jika belum terinstal `npm i -g stackvis`
-7. jalankan `stackvis perf < perfs.out > flamegraph.htm`
-
-Sekarang buka file flame graph di browser favorit Anda dan lihat itu terbakar. Ini diberi kode warna sehingga Anda dapat fokus pada batang oranye yang paling jenuh terlebih dahulu. Mereka cenderung mewakili fungsi berat CPU.
-
-Perlu disebutkan - jika Anda mengklik elemen flame graph, zoom-in dari sekelilingnya akan ditampilkan di atas grafik.
-
-### Menggunakan `perf` untuk mengambil sampel proses yang sedang berjalan
-
-Ini bagus untuk merekam data grafik nyala dari proses yang sudah berjalan yang tidak ingin Anda hentikan. Bayangkan sebuah proses produksi dengan masalah yang sulit untuk direproduksi.
-
-```bash
-perf record -F99 -p `pgrep -n node` -g -- sleep 3
-```
-
-Tunggu, untuk apa `tidur 3` itu? Itu ada untuk menjaga kinerja tetap berjalan - meskipun opsi `-p` menunjuk ke pid yang berbeda, perintah harus dieksekusi pada suatu proses dan diakhiri dengan itu. perf berjalan selama masa perintah yang Anda berikan padanya, terlepas dari apakah Anda benar-benar membuat profil perintah itu atau tidak. `sleep 3` memastikan kinerja berjalan selama 3 detik.
-
-Mengapa `-F` (frekuensi profil) diatur ke 99? Ini adalah default yang masuk akal. Anda dapat menyesuaikan jika Anda mau. `-F99` memberi tahu perf untuk mengambil 99 sampel per detik, untuk lebih presisi, tingkatkan nilainya. Nilai yang lebih rendah seharusnya menghasilkan keluaran yang lebih sedikit dengan hasil yang kurang tepat. Presisi yang Anda butuhkan tergantung pada berapa lama fungsi intensif CPU Anda benar-benar berjalan. Jika Anda mencari alasan perlambatan yang nyata, 99 frame per detik seharusnya sudah lebih dari cukup.
-
-Setelah Anda mendapatkan catatan perf 3 detik itu, lanjutkan dengan membuat grafik nyala dengan dua langkah terakhir dari atas.
-
-### Memfilter fungsi internal Node.js
-
-Biasanya Anda hanya ingin melihat kinerja panggilan Anda sendiri, jadi memfilter fungsi internal Node.js dan V8 dapat membuat grafik lebih mudah dibaca. Anda dapat membersihkan file perf Anda dengan:
-
-```bash
-sed -i \
- -e "/( __libc_start| LazyCompile | v8::internal::| Builtin:| Stub:| LoadIC:|\[unknown\]| LoadPolymorphicIC:)/d" \
- -e 's/ LazyCompile:[*~]\?/ /' \
- perfs.out
-```
-
-Jika Anda membaca grafik nyala Anda dan tampak aneh, seolah-olah ada sesuatu yang hilang dalam fungsi kunci yang memakan waktu paling lama, coba buat grafik nyala Anda tanpa filter - mungkin Anda mendapat kasus yang jarang terjadi tentang masalah dengan Node.js itu sendiri.
-
-### Opsi pembuatan profil Node.js
-
-`--perf-basic-prof-only-functions` dan `--perf-basic-prof` adalah dua yang berguna untuk men-debug kode JavaScript Anda. Opsi lain digunakan untuk membuat profil Node.js itu sendiri, yang berada di luar cakupan panduan ini.
-
-`--perf-basic-prof-only-functions` menghasilkan lebih sedikit output, jadi ini adalah opsi dengan overhead paling sedikit.
-
-### Mengapa saya membutuhkannya sama sekali?
-
-Nah, tanpa opsi ini Anda masih akan mendapatkan grafik nyala, tetapi dengan sebagian besar batang berlabel `v8::Function::Call`.
-
-## Masalah keluaran `perf`
-
-### Perubahan pipeline Node.js 8.x V8
-
-Node.js 8.x dan yang lebih baru dikirimkan dengan optimasi baru ke pipa kompilasi JavaScript di mesin V8 yang terkadang membuat nama/referensi fungsi tidak dapat dijangkau untuk perf kadang-kadang. (Ini disebut Turbofan)
-
-Hasilnya adalah Anda mungkin tidak mendapatkan nama fungsi Anda tepat di grafik nyala.
-
-Anda akan melihat `ByteCodeHandler:` di mana Anda mengharapkan nama fungsi.
-
-[0x](https://www.npmjs.com/package/0x) memiliki beberapa mitigasi untuk itu.
-
-Untuk detail lihat:
-
-- https://github.com/nodejs/benchmarking/issues/168
-- https://github.com/nodejs/diagnostics/issues/148#issuecomment-369348961
-
-### Node.js 10+
-
-Node.js 10.x mengatasi masalah dengan Turbofan menggunakan flag `--interpreted-frames-native-stack`.
-
-Jalankan `node --interpreted-frames-native-stack --perf-basic-prof-only-functions` untuk mendapatkan nama fungsi dalam grafik nyala terlepas dari pipa V8 mana yang digunakan untuk mengompilasi JavaScript Anda.
-
-### Label rusak di flame graph
-
-Jika Anda melihat label seperti ini
-
-```
-node`_ZN2v88internal11interpreter17BytecodeGenerator15VisitStatementsEPNS0_8ZoneListIPNS0_9StatementEEE
-```
-
-itu berarti kinerja Linux yang Anda gunakan tidak dikompilasi dengan dukungan demangle, lihat https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1396654 misalnya
-
-## Contoh
-
-Berlatih menangkap flame graph sendiri dengan [latihan flame graph](https://github.com/naugtur/node-example-flamegraph)!
diff --git a/pages/id/docs/guides/diagnostics/index.md b/pages/id/docs/guides/diagnostics/index.md
deleted file mode 100644
index 1ba72691f07ed..0000000000000
--- a/pages/id/docs/guides/diagnostics/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Panduan Diagnostik
-layout: docs.hbs
----
-
-# Panduan Diagnostik
-
-Panduan ini dibuat oleh [Kelompok Kerja Diagnostik][] dengan tujuan memberikan panduan saat mendiagnosis masalah pada aplikasi pengguna.
-
-Proyek dokumentasi ini diorganisir berdasarkan perjalanan pengguna. Perjalanan tersebut adalah serangkaian prosedur langkah-demi-langkah yang koheren yang dapat diikuti pengguna untuk menemukan akar masalah.
-
-Berikut ini adalah kumpulan panduan diagnostik yang tersedia:
-
-- [Memori](/en/docs/guides/diagnostics/memory)
-- [Debug Langsung](/en/docs/guides/diagnostics/live-debugging)
-- [Kinerja Buruk](/en/docs/guides/diagnostics/poor-performance)
-
-[Kelompok Kerja Diagnostik]: https://github.com/nodejs/diagnostics
diff --git a/pages/id/docs/guides/diagnostics/live-debugging/index.md b/pages/id/docs/guides/diagnostics/live-debugging/index.md
deleted file mode 100644
index 5a3936b387b79..0000000000000
--- a/pages/id/docs/guides/diagnostics/live-debugging/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Pemecahan Masalah Langsung
-layout: docs.hbs
----
-
-# Pemecahan Masalah Langsung
-
-- [Pemecahan Masalah Langsung](#live-debugging)
- - [Aplikasi saya tidak berjalan seperti yang diharapkan](#my-application-doesnt-behave-as-expected)
- - [Gejala](#symptoms)
- - [Pemecahan Masalah](#debugging)
-
-Dalam dokumen ini, Anda dapat belajar tentang cara melakukan debug langsung pada proses Node.js.
-
-## Aplikasi saya tidak berjalan seperti yang diharapkan
-
-### Gejala
-
-Pengguna mungkin memperhatikan bahwa aplikasi tidak memberikan output yang diharapkan untuk beberapa input tertentu, misalnya, server HTTP mengembalikan respons JSON di mana beberapa field kosong. Berbagai hal dapat salah dalam proses tersebut, tetapi dalam kasus penggunaan ini, kami terutama fokus pada logika aplikasi dan kebenarannya.
-
-### Pemecahan Masalah
-
-Dalam kasus penggunaan ini, pengguna ingin memahami jalur kode yang dieksekusi oleh aplikasi kita untuk trigger tertentu seperti permintaan HTTP yang masuk. Mereka juga mungkin ingin melangkah melalui kode dan mengontrol eksekusi serta memeriksa nilai-nilai variabel yang ada di dalam memori.
-
-- [Menggunakan Inspeksi](/en/docs/guides/diagnostics/live-debugging/using-inspector)
diff --git a/pages/id/docs/guides/diagnostics/live-debugging/using-inspector.md b/pages/id/docs/guides/diagnostics/live-debugging/using-inspector.md
deleted file mode 100644
index eed54baddf9e8..0000000000000
--- a/pages/id/docs/guides/diagnostics/live-debugging/using-inspector.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Menggunakan Inspeksi
-layout: docs.hbs
----
-
-# Menggunakan Inspeksi
-
-Pada lingkungan lokal, biasanya kita berbicara tentang pemecahan masalah langsung di mana kita menempelkan debugger ke aplikasi kita dan menambahkan breakpoint untuk menghentikan eksekusi program. Kemudian kita melangkah melalui jalur kode dan memeriksa heap kita selama langkah-langkah yang berbeda. Menggunakan pemecah masalah langsung di produksi biasanya bukan pilihan karena kami memiliki akses terbatas ke mesin dan kami tidak dapat menghentikan eksekusi aplikasi karena menangani beban kerja yang kritis untuk bisnis.
-
-## Bagaimana Caranya
-
-https://nodejs.org/en/docs/guides/debugging-getting-started/
diff --git a/pages/id/docs/guides/diagnostics/memory/index.md b/pages/id/docs/guides/diagnostics/memory/index.md
deleted file mode 100644
index 1cfc692be621b..0000000000000
--- a/pages/id/docs/guides/diagnostics/memory/index.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Diagnostik Memori
-layout: docs.hbs
----
-
-# Memori
-
-Dalam dokumen ini, Anda dapat belajar tentang cara memecahkan masalah yang berkaitan dengan memori.
-
-- [Memori](#memory)
- - [Proses saya kehabisan memori](#my-process-runs-out-of-memory)
- - [Gejala](#symptoms)
- - [Efek Samping](#side-effects)
- - [Proses saya menggunakan memori secara tidak efisien](#my-process-utilizes-memory-inefficiently)
- - [Gejala](#symptoms-1)
- - [Efek Samping](#side-effects-1)
- - [Pemecahan Masalah](#debugging)
-
-## Proses saya kehabisan memori
-
-Node.js _(JavaScript)_ adalah bahasa yang dikumpulkan sampah, sehingga kebocoran memori mungkin terjadi melalui retainer. Karena aplikasi Node.js biasanya multi-penyewa, kritis untuk bisnis, dan berjalan lama, menyediakan cara yang mudah diakses dan efisien untuk menemukan kebocoran memori sangat penting.
-
-### Gejala
-
-Pengguna memperhatikan penggunaan memori yang terus meningkat _(dapat cepat atau lambat, selama beberapa hari atau bahkan minggu)_ kemudian melihat proses crash dan restart oleh manajer proses. Proses mungkin berjalan lebih lambat dari sebelumnya dan restart menyebabkan beberapa permintaan gagal _(load balancer merespons dengan 502)_.
-
-### Efek Samping
-
-- Restart proses karena kehabisan memori dan permintaan ditolakRestart proses karena kehabisan memori dan permintaan ditolak
-- Aktivitas GC yang meningkat menyebabkan penggunaan CPU yang lebih tinggi dan waktu respons yang lebih lambat
- - GC menghalangi Event Loop menyebabkan lambat
-- Peningkatan swapping memori memperlambat proses (aktivitas GC)
-- Mungkin tidak memiliki cukup memori yang tersedia untuk mendapatkan Heap Snapshot
-
-## Proses saya memanfaatkan memori secara tidak efisien
-
-### Gejala
-
-Aplikasi menggunakan jumlah memori yang tidak terduga dan / atau kami mengamati aktivitas kolektor sampah yang meningkat.
-
-### Efek Samping
-
-- Jumlah page fault yang tinggi
-- Aktivitas GC yang lebih tinggi dan penggunaan CPU
-
-## Pemecahan Masalah
-
-Sebagian besar masalah memori dapat diatasi dengan menentukan berapa banyak ruang yang digunakan oleh objek tipe khusus kita dan variabel apa yang mencegah mereka dari dikumpulkan oleh sampah. Juga membantu untuk mengetahui pola alokasi program kita dari waktu ke waktu.
-
-- [Menggunakan Heap Profiler](/en/docs/guides/diagnostics/memory/using-heap-profiler/)
-- [Menggunakan Heap Snapshot](/en/docs/guides/diagnostics/memory/using-heap-snapshot/)
-- [GC Traces](/en/docs/guides/diagnostics/memory/using-gc-traces)
diff --git a/pages/id/docs/guides/diagnostics/memory/using-gc-traces.md b/pages/id/docs/guides/diagnostics/memory/using-gc-traces.md
deleted file mode 100644
index 6dfb470c73310..0000000000000
--- a/pages/id/docs/guides/diagnostics/memory/using-gc-traces.md
+++ /dev/null
@@ -1,366 +0,0 @@
----
-title: Diagnostik Memori - Menggunakan Jejak GC
-layout: docs.hbs
----
-
-# Melacak pengumpulan sampah
-
-Panduan ini akan melalui dasar-dasar jejak pengumpulan sampah.
-
-Di akhir panduan ini, Anda akan dapat:
-
-- Aktifkan pelacakan di aplikasi Node.js Anda
-- Menginterpretasikan jejak
-- Identifikasi potensi masalah memori di aplikasi Node.js Anda
-
-Banyak hal yang perlu dipelajari tentang bagaimana garbage collector bekerja, tetapi jika Anda mempelajari satu hal saja, itu adalah bahwa saat GC berjalan, kode Anda tidak berjalan.
-
-Anda mungkin ingin mengetahui seberapa sering dan lama garbage collection berjalan, dan apa hasilnya.
-
-## Penyiapan
-
-Untuk proposal panduan ini, kita akan menggunakan skrip ini:
-
-```js
-// script.mjs
-
-import os from 'os';
-
-let len = 1_000_000;
-const entries = new Set();
-
-function addEntry() {
- const entry = {
- timestamp: Date.now(),
- memory: os.freemem(),
- totalMemory: os.totalmem(),
- uptime: os.uptime(),
- };
-
- entries.add(entry);
-}
-
-function summary() {
- console.log(`Total: ${entries.size} entries`);
-}
-
-// eksekusi
-(() => {
- while (len > 0) {
- addEntry();
- process.stdout.write(`~~> ${len} entries to record\r`);
- len--;
- }
-
- summary();
-})();
-```
-
-> Meskipun kebocoran terlihat jelas di sini, menemukan sumber kebocoran dapat menjadi merepotkan dalam konteks aplikasi dunia nyata.
-
-## Menjalankan dengan jejak garbage collection
-
-Anda dapat melihat jejak garbage collection pada keluaran konsol dari proses Anda dengan menggunakan flag `--trace-gc`.
-
-```console
-$ node --trace-gc script.mjs
-```
-
-> Catatan: Anda dapat menemukan kode sumber dari [latihan][] ini di repositori Node.js Diagnostics.
-
-Ini akan menghasilkan output seperti ini:
-
-```bash
-[39067:0x158008000] 2297 ms: Scavenge 117.5 (135.8) -> 102.2 (135.8) MB, 0.8 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-[39067:0x158008000] 2375 ms: Scavenge 120.0 (138.3) -> 104.7 (138.3) MB, 0.9 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-[39067:0x158008000] 2453 ms: Scavenge 122.4 (140.8) -> 107.1 (140.8) MB, 0.7 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-[39067:0x158008000] 2531 ms: Scavenge 124.9 (143.3) -> 109.6 (143.3) MB, 0.7 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-[39067:0x158008000] 2610 ms: Scavenge 127.1 (145.5) -> 111.8 (145.5) MB, 0.7 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-[39067:0x158008000] 2688 ms: Scavenge 129.6 (148.0) -> 114.2 (148.0) MB, 0.8 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-[39067:0x158008000] 2766 ms: Scavenge 132.0 (150.5) -> 116.7 (150.5) MB, 1.1 / 0.0 ms (average mu = 0.994, current mu = 0.994) allocation failure
-Total: 1000000 entries
-```
-
-Sulit untuk dibaca? Mungkin kita sebaiknya me-review beberapa konsep dan menjelaskan keluaran dari flag `--trace-gc`.
-
-### Memeriksa jejak dengan `--trace-gc`
-
-Flag `--trace-gc` (atau `--trace_gc`, keduanya sama saja) menghasilkan semua peristiwa garbage collection pada konsol. Komposisi setiap baris dapat dijelaskan sebagai berikut:
-
-```bash
-[13973:0x110008000] 44 ms: Scavenge 2.4 (3.2) -> 2.0 (4.2) MB, 0.5 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
-```
-
-| Token value | Interpretasi |
-| ----------------------------------------------------- | --------------------------------------------------- |
-| 13973 | PID (Process ID) dari proses yang sedang berjalan |
-| 0x110008000 | Isolate (instance heap JS) |
-| 44 ms | Waktu sejak proses dimulai dalam milidetik (ms) |
-| Scavenge | Tipe / Fase dari GC |
-| 2.4 | Heap yang digunakan sebelum GC dalam MB |
-| (3.2) | Total heap sebelum GC dalam MB |
-| 2.0 | Heap yang digunakan sesudah GC dalam MB |
-| (4.2) | Total heap sesudah GC dalam MB |
-| 0.5 / 0.0 ms (average mu = 1.000, current mu = 1.000) | Waktu yang dihabiskan dalam GC dalam milidetik (ms) |
-| allocation failure | Alasan untuk GC |
-
-Kami hanya akan fokus pada dua peristiwa di sini:
-
-- Scavenge
-- Mark-sweep
-
-Heap dibagi menjadi _ruang_. Di antara ini, ada ruang yang disebut "ruang baru" dan yang lain disebut "ruang lama".
-
-> 👉 Sebenarnya, struktur heap sedikit berbeda, tetapi kita akan tetap menggunakan versi yang lebih sederhana untuk artikel ini. Jika Anda ingin informasi lebih detail, kami mendorong Anda untuk melihat [presentasi Peter Marshall][] tentang Orinoco.
-
-### Scavenge
-
-Scavenge adalah nama algoritma yang akan melakukan pengumpulan sampah pada ruang baru. Ruang baru adalah tempat objek dibuat. Ruang baru dirancang untuk menjadi kecil dan cepat untuk pengumpulan sampah.
-
-Mari bayangkan sebuah skenario Scavenge:
-
-- we allocated `A`, `B`, `C` & `D`.
- ```bash
- | A | B | C | D | |
- ```
-- kita ingin mengalokasikan `E`
-- tidak cukup ruang, memori habis
-- kemudian, koleksi (sampah) akan dipicu
-- objek mati dikumpulkan
-- objek yang hidup akan tetap
-- dalam asumsi bahwa `B` dan `D` sudah mati
- ```bash
- | A | C | |
- ```
-- sekarang kita dapat mengalokasikan `E`
- ```bash
- | A | C | E | |
- ```
-
-saat dua operasi Scavenge selesai, V8 akan memindahkan objek yang tidak dihapus ke old space.
-
-> 👉 Skenario Scavenge lengkap dapat ditemukan di [sini][]
-
-### Mark-sweep
-
-Mark-sweep digunakan untuk mengumpulkan objek dari old space. Old space adalah tempat objek yang selamat dari new space tinggal.
-
-Algoritma Mark-sweep terdiri dari dua fase:
-
-- **Mark**: Akan menandai objek yang masih hidup sebagai hitam dan objek lain sebagai putih.
-- **Sweep**: Memindai objek-objek yang berwarna putih dan mengubahnya menjadi ruang yang kosong.
-
-> 👉 Sebenarnya langkah-langkah Mark dan Sweep sedikit lebih rumit. Silakan baca [dokumen][] ini untuk lebih detail.
-
-
-
-## `--trace-gc` dalam aksi
-
-### Memory leak / Kebocoran memori
-
-Sekarang, jika Anda kembali ke jendela terminal sebelumnya: Anda akan melihat banyak peristiwa `Mark-sweep` di konsol. Kami juga melihat bahwa jumlah memori yang dikumpulkan setelah peristiwa tersebut tidak signifikan.
-
-Sekarang bahwa kita ahli dalam pengumpulan sampah! Apa yang bisa kita simpulkan?
-
-Kemungkinan kita memiliki kebocoran memori! Tapi bagaimana kita bisa yakin tentang hal itu? (Pengingat: Ini cukup jelas dalam contoh ini, tetapi bagaimana dengan aplikasi dunia nyata?)
-
-Tapi bagaimana kita bisa menemukan konteksnya?
-
-### Cara mendapatkan konteks alokasi buruk
-
-1. Anggaplah kita mengamati bahwa ruang tua terus meningkat.
-2. Kurangi [`--max-old-space-size`][] sehingga total heap lebih dekat ke batas
-3. Jalankan program sampai Anda mencapai out of memory.
-4. Log yang dihasilkan menunjukkan konteks gagal.
-5. Jika terjadi OOM, tingkatkan ukuran heap sekitar 10% dan ulangi beberapa kali. Jika pola yang sama diamati, itu menunjukkan kebocoran memori.
-6. Jika tidak ada OOM, maka tetapkan ukuran heap menjadi nilai tersebut - Heap yang terkemas mengurangi jejak memori dan laten komputasi.
-
-Misalnya, cobalah jalankan `script.mjs` dengan perintah berikut:
-
-```bash
-node --trace-gc --max-old-space-size=50 script.mjs
-```
-
-Anda seharusnya mengalami OOM:
-
-```bash
-[...]
-<--- Terakhir GCs yang dilakukan (dalam bentuk log) --->
-[40928:0x148008000] 509 ms: Mark-sweep 46.8 (65.8) -> 40.6 (77.3) MB, 6.4 / 0.0 ms (+ 1.4 ms in 11 steps since start of marking, biggest step 0.2 ms, walltime since start of marking 24 ms) (average mu = 0.977, current mu = 0.977) finalize incrementa[40928:0x148008000] 768 ms: Mark-sweep 56.3 (77.3) -> 47.1 (83.0) MB, 35.9 / 0.0 ms (average mu = 0.927, current mu = 0.861) allocation failure scavenge might not succeed
-<--- Jejak tumpukan (stack trace) dalam JavaScript --->
-FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory [...]
-```
-
-Sekarang, coba jalankan perintah tersebut dengan ukuran 100mb:
-
-```bash
-node --trace-gc --max-old-space-size=100 script.mjs
-```
-
-Anda seharusnya mengalami sesuatu yang serupa, satu-satunya perbedaan adalah jejak GC terakhir akan berisi ukuran heap yang lebih besar.
-
-```bash
-<--- Last few GCs --->
-[40977:0x128008000] 2066 ms: Mark-sweep (reduce) 99.6 (102.5) -> 99.6 (102.5) MB, 46.7 / 0.0 ms (+ 0.0 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 47 ms) (average mu = 0.154, current mu = 0.155) allocati[40977:0x128008000] 2123 ms: Mark-sweep (reduce) 99.6 (102.5) -> 99.6 (102.5) MB, 47.7 / 0.0 ms (+ 0.0 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 48 ms) (average mu = 0.165, current mu = 0.175) allocati
-```
-
-> Catatan: Dalam konteks aplikasi yang sebenarnya, mungkin sulit untuk menemukan objek yang bocor di kode. Heap snapshot dapat membantu Anda menemukannya. Kunjungi [panduan yang didedikasikan untuk heap snapshot][]
-
-### Kelambatan
-
-Bagaimana cara memastikan apakah terlalu banyak koleksi sampah (garbage collections) terjadi atau menyebabkan overhead?
-
-1. Tinjau data jejak (trace data), khususnya waktu antara koleksi yang berurutan.
-2. Tinjau data jejak, terutama sekitar waktu yang dihabiskan dalam GC.
-3. Jika waktu antara dua GC lebih kecil dari waktu yang dihabiskan untuk GC, maka aplikasi tersebut mengalami kelaparan yang serius.
-4. Jika waktu antara dua GC dan waktu yang dihabiskan dalam GC sangat tinggi, kemungkinan aplikasi dapat menggunakan heap yang lebih kecil.
-5. Jika waktu antara dua GC jauh lebih besar dari waktu yang dihabiskan di dalam GC, maka aplikasi tersebut relatif sehat.
-
-## Perbaiki kebocoran
-
-Sekarang mari kita perbaiki kebocorannya. Alih-alih menggunakan objek untuk menyimpan entri kami, kami bisa menggunakan file.
-
-Mari kita ubah sedikit skrip kita:
-
-```js
-// script-fix.mjs
-import os from 'os';
-import fs from 'fs/promises';
-
-let len = 1_000_000;
-const fileName = `entries-${Date.now()}`;
-
-async function addEntry() {
- const entry = {
- timestamp: Date.now(),
- memory: os.freemem(),
- totalMemory: os.totalmem(),
- uptime: os.uptime(),
- };
- await fs.appendFile(fileName, JSON.stringify(entry) + '\n');
-}
-
-async function summary() {
- const stats = await fs.lstat(fileName);
- console.log(`File size ${stats.size} bytes`);
-}
-
-// execution
-(async () => {
- await fs.writeFile(fileName, '----START---\n');
- while (len > 0) {
- await addEntry();
- process.stdout.write(`~~> ${len} entries to record\r`);
- len--;
- }
-
- await summary();
-})();
-```
-
-Menggunakan `Set` untuk menyimpan data bukanlah praktik yang buruk sama sekali; Anda hanya perlu memperhatikan jejak memori program Anda.
-
-> Catatan: Anda dapat menemukan kode sumber dari [latihan][] ini di repositori Diagnostik Node.js.
-
-Sekarang, mari kita jalankan skrip ini.
-
-```
-node --trace-gc script-fix.mjs
-```
-
-Anda harus mengamati dua hal:
-
-- Peristiwa mark-sweep lebih jarang muncul
-- jejak memori tidak melebihi 25MB versus lebih dari 130MB dengan skrip pertama.
-
-Ini sangat masuk akal karena versi baru tidak terlalu menekan memori dari yang pertama.
-
-**Hasil**: Apa pendapat Anda tentang peningkatan skrip ini? Anda mungkin melihat bahwa versi skrip yang baru lambat. Bagaimana jika kita menggunakan `Set` lagi dan menulis isinya ke dalam a file hanya ketika memori mencapai ukuran tertentu?
-
-> [`getheapstatistics`][] API bisa membantu Anda.
-
-## Bonus: Lacak pengumpulan sampah secara terprogram
-
-### Menggunakan modul `v8`
-
-Anda mungkin ingin menghindari jejak dari seumur hidup proses Anda. Dalam hal ini, atur flag dari dalam proses. Modul `v8` memaparkan API untuk memasang flag dengan cepat.
-
-```js
-import v8 from 'v8';
-
-// mengaktifkan trace-gc
-v8.setFlagsFromString('--trace-gc');
-
-// menonaktifkan trace-gc
-v8.setFlagsFromString('--notrace-gc');
-```
-
-### Menggunakan kait kinerja
-
-Di Node.js, Anda dapat menggunakan [kait kinerja][] untuk melacak pengumpulan sampah.
-
-```js
-const { PerformanceObserver } = require('perf_hooks');
-
-// Buat pengamat kinerja
-const obs = new PerformanceObserver(list => {
- const entry = list.getEntries()[0];
- /*
- Entri tersebut adalah turunan dari PerformanceEntry yang berisi
- metrik dari satu peristiwa pengumpulan sampah.
- Misalnya:
- PerformanceEntry {
- name: 'gc',
- entryType: 'gc',
- startTime: 2820.567669,
- duration: 1.315709,
- kind: 1
- }
- */
-});
-
-// Berlangganan notifikasi GC
-obs.observe({ entryTypes: ['gc'] });
-
-// Berhenti berlangganan
-obs.disconnect();
-```
-
-### Memeriksa jejak dengan kait kinerja
-
-Anda bisa mendapatkan statistik GC sebagai [PerformanceEntry][] dari callback di [PerformanceObserver][].
-
-Misalnya:
-
-```ts
-PerformanceEntry {
- name: 'gc',
- entryType: 'gc',
- startTime: 2820.567669,
- duration: 1.315709,
- kind: 1
-}
-```
-
-| Properti | Interpretasi |
-| --------- | ----------------------------------------------------------------------------------- |
-| nama | Nama entri pertunjukan. |
-| entryType | Jenis entri kinerja. |
-| startTime | Stempel waktu milidetik beresolusi tinggi menandai waktu dimulainya Entri Performa. |
-| duration | Jumlah total milidetik yang berlalu untuk entri ini. |
-| kind | Jenis operasi pengumpulan sampah yang terjadi. |
-| flags | Informasi tambahan tentang GC. |
-
-Untuk informasi lebih lanjut, Anda dapat merujuk ke [dokumentasi tentang performance hooks][performance hooks].
-
-[PerformanceEntry]: https://nodejs.org/api/perf_hooks.html#perf_hooks_class_performanceentry
-[PerformanceObserver]: https://nodejs.org/api/perf_hooks.html#perf_hooks_class_performanceobserver
-[`--max-old-space-size`]: https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-megabytes
-[kait kinerja]: https://nodejs.org/api/perf_hooks.html
-[performance hooks]: https://nodejs.org/api/perf_hooks.html
-[latihan]: https://github.com/nodejs/diagnostics/tree/main/documentation/memory/step3/exercise
-[panduan yang didedikasikan untuk heap snapshot]: https://github.com/nodejs/nodejs.org/blob/main/locale/en/docs/guides/diagnostics/memory/using-heap-snapshot.md#how-to-find-a-memory-leak-with-heap-snapshots
-[dokumen]: https://github.com/thlorenz/v8-perf/blob/master/gc.md#marking-state
-[sini]: https://github.com/thlorenz/v8-perf/blob/master/gc.md#sample-scavenge-scenario
-[presentasi Peter Marshall]: https://v8.dev/blog/trash-talk
-[`getheapstatistics`]: https://nodejs.org/dist/latest-v16.x/docs/api/v8.html#v8getheapstatistics
diff --git a/pages/id/docs/guides/diagnostics/memory/using-heap-profiler.md b/pages/id/docs/guides/diagnostics/memory/using-heap-profiler.md
deleted file mode 100644
index 9f064c2566794..0000000000000
--- a/pages/id/docs/guides/diagnostics/memory/using-heap-profiler.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Diagnostik Memori - Menggunakan Heap Profiler
-layout: docs.hbs
----
-
-# Menggunakan Heap Profiler
-
-Heap profiler berfungsi di atas V8 untuk menangkap alokasi seiring waktu. Dalam dokumen ini, kita akan membahas profil memori menggunakan:
-
-1. Timeline Alokasi
-2. Sampling Heap Profiler
-
-Berbeda dengan heap dumps yang dibahas dalam panduan [Using Heap Snapshot][] ide menggunakan profil real-time adalah untuk memahami alokasi selama periode waktu tertentu.
-
-## Heap Profiler - Timeline Alokasi
-
-Heap Profiler mirip dengan Sampling Heap Profiler, kecuali ia akan melacak setiap alokasi. Ini memiliki overhead yang lebih tinggi daripada Sampling Heap Profiler sehingga tidak disarankan untuk digunakan di produksi.
-
-> Anda dapat menggunakan [@mmarchini/observe][] untuk memulai dan menghentikan profiler secara programatik.
-
-### Cara Menggunakan
-
-Memulai aplikasi:
-
-```console
-node --inspect index.js
-```
-
-> `--inspect-brk` adalah pilihan yang lebih baik untuk skrip.
-
-Hubungkan ke instance dev-tools di Chrome dan kemudian:
-
-- Pilih tab `Memory`.
-- Pilih `Allocation instrumentation timeline`.
-- Mulai memprofil.
-
-![tutorial profiler heap langkah 1][3]
-
-Setelah profil heap berjalan, sangat disarankan untuk menjalankan sampel untuk mengidentifikasi masalah memori. Misalnya, jika kami melakukan profil heap pada aplikasi web, kami dapat menggunakan `Apache Benchmark` untuk memproduksi beban:
-
-```console
-$ ab -n 1000 -c 5 http://localhost:3000
-```
-
-Kemudian, tekan tombol stop saat beban selesai:
-
-![tutorial profiler heap langkah 2][4]
-
-Terakhir, lihat data snapshot:
-
-![tutorial profiler heap langkah 3][5]
-
-Periksa bagian [useful links](#useful-links) untuk informasi lebih lanjut tentang terminologi memori.
-
-## Sampling Heap Profiler
-
-Sampling Heap Profiler melacak pola alokasi memori dan ruang yang dipesan seiring waktu. Karena ini berbasis sampling, overheadnya cukup rendah untuk digunakan dalam sistem produksi.
-
-> Anda dapat menggunakan modul [`heap-profiler`][] untuk memulai dan menghentikan heap profiler secara programatik.
-
-### Cara Menggunakan
-
-Memuali aplikasi:
-
-```console
-$ node --inspect index.js
-```
-
-> `--inspect-brk`adalah pilihan yang lebih baik untuk skrip.
-
-Hubungkan ke instance dev-tools dan kemudian:
-
-1. Pilih tab `Memory`.
-2. Pilih `Allocation sampling`.
-3. Mulai memprofil.
-
-![tutorial profiler heap 4][7]
-
-Buat beberapa beban dan hentikan profiler. Ini akan menghasilkan ringkasan dengan alokasi berdasarkan stacktrace mereka. Anda dapat fokus pada fungsi dengan alokasi heap yang lebih banyak, lihat contoh di bawah:
-
-![tutorial profiler heap 5][8]
-
-## Link Berguna
-
-- https://developer.chrome.com/docs/devtools/memory-problems/memory-101/
-- https://github.com/v8/sampling-heap-profiler
-- https://developer.chrome.com/docs/devtools/memory-problems/allocation-profiler/
-
-[Using Heap Snapshot]: /en/docs/guides/diagnostics/memory/using-heap-snapshot/
-[@mmarchini/observe]: https://www.npmjs.com/package/@mmarchini/observe
-[3]: /static/images/docs/guides/diagnostics/heap-profiler-tutorial-1.png
-[4]: /static/images/docs/guides/diagnostics/heap-profiler-tutorial-2.png
-[5]: /static/images/docs/guides/diagnostics/heap-profiler-tutorial-3.png
-[`heap-profiler`]: https://www.npmjs.com/package/heap-profile
-[7]: /static/images/docs/guides/diagnostics/heap-profiler-tutorial-4.png
-[8]: /static/images/docs/guides/diagnostics/heap-profiler-tutorial-5.png
diff --git a/pages/id/docs/guides/diagnostics/memory/using-heap-snapshot.md b/pages/id/docs/guides/diagnostics/memory/using-heap-snapshot.md
deleted file mode 100644
index cb68892ce0923..0000000000000
--- a/pages/id/docs/guides/diagnostics/memory/using-heap-snapshot.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title: Diagnostik Memori - Menggunakan Snapshot Heap
-layout: docs.hbs
----
-
-# Menggunakan Snapshot Heap
-
-Anda dapat mengambil Snapshot Heap dari aplikasi yang sedang berjalan dan memuatnya ke [Chrome Developer Tools][] untuk memeriksa variabel tertentu atau memeriksa ukuran retainer. Anda juga dapat membandingkan beberapa snapshot untuk melihat perbedaan dari waktu ke waktu.
-
-## Peringatan
-
-Ketika membuat snapshot, semua pekerjaan lain dalam thread utama Anda akan dihentikan. Bergantung pada isi heap, ini bahkan bisa memakan waktu lebih dari satu menit. Snapshot dibangun di dalam memori, sehingga dapat menggandakan ukuran heap, sehingga mengisi seluruh memori dan kemudian menonaktifkan aplikasi.
-
-Jika Anda akan mengambil snapshot heap pada produksi, pastikan bahwa proses yang Anda ambil tidak akan berdampak pada ketersediaan aplikasi Anda.
-
-## Cara Melakukan
-
-### Dapatkan Snapshot Heap
-
-Ada beberapa cara untuk memperoleh snapshot heap:
-
-1. melalui inspector,
-2. melalui sinyal eksternal dan flag baris perintah,
-3. melalui panggilan `writeHeapSnapshot` dalam proses,
-4. melalui protokol inspector.
-
-#### 1. Gunakan profil memori dalam inspector
-
-> Berfungsi di semua versi Node.js yang aktif dipelihara
-
-Jalankan node dengan flag`--inspect` dan buka inspector. ![buka inspector][2]
-
-Cara paling sederhana untuk mendapatkan Snapshot Heap adalah menghubungkan inspector ke proses Anda yang berjalan secara lokal. Kemudian pergi ke tab Memori dan ambil snapshot heap.
-
-![ambil snapshot memori heap][3]
-
-#### 2. Gunakan flag `--heapsnapshot-signal`
-
-> Berfungsi di v12.0.0 atau versi yang lebih baru
-
-Anda dapat memulai node dengan flag baris perintah yang memungkinkan bereaksi terhadap sinyal untuk membuat snapshot heap.
-
-```
-$ node --heapsnapshot-signal=SIGUSR2 index.js
-```
-
-```
-$ ps aux
-USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-node 1 5.5 6.1 787252 247004 ? Ssl 16:43 0:02 node --heapsnapshot-signal=SIGUSR2 index.js
-$ kill -USR2 1
-$ ls
-Heap.20190718.133405.15554.0.001.heapsnapshot
-```
-
-Untuk detailnya, lihat dokumentasi terbaru dari [flag heapsnapshot-signal][].
-
-#### 3. Gunakan fungsi `writeHeapSnapshot`
-
-> Berfungsi di v11.13.0 atau versi yang lebih baru, dapat bekerja pada versi yang lebih lama dengan paket [heapdump][]
-
-Jika Anda membutuhkan snapshot dari proses yang sedang berjalan, seperti aplikasi yang berjalan pada server, Anda dapat mengimplementasikannya menggunakan:
-
-```js
-require('v8').writeHeapSnapshot();
-```
-
-Periksa [dokumen `writeHeapSnapshot`][] untuk opsi nama file.
-
-Anda perlu memiliki cara untuk memanggilnya tanpa menghentikan proses, jadi disarankan untuk memanggilnya dalam HTTP handler atau sebagai reaksi terhadap sinyal dari sistem operasi. Hati-hati untuk tidak mengekspos titik akhir HTTP yang memicu snapshot. Tidak boleh memungkinkan siapa pun untuk mengaksesnya.
-
-Untuk versi Node.js sebelum v11.13.0, Anda dapat menggunakan paket [heapdump][].
-
-#### 4. Picu Heap Snapshot menggunakan protokol inspektor
-
-Protokol inspektor dapat digunakan untuk memicu Heap Snapshot dari luar proses.
-
-Tidak perlu menjalankan inspektor aktual dari Chromium untuk menggunakan API.
-
-Berikut contoh pemicu snapshot pada bash, menggunakan `websocat` dan `jq`:
-
-```bash
-#!/bin/bash
-set -e
-
-kill -USR1 "$1"
-rm -f fifo out
-mkfifo ./fifo
-websocat -B 10000000000 "$(curl -s http://localhost:9229/json | jq -r '.[0].webSocketDebuggerUrl')" < ./fifo > ./out &
-exec 3>./fifo
-echo '{"method": "HeapProfiler.enable", "id": 1}' > ./fifo
-echo '{"method": "HeapProfiler.takeHeapSnapshot", "id": 2}' > ./fifo
-while jq -e "[.id != 2, .result != {}] | all" < <(tail -n 1 ./out); do
- sleep 1s
- echo "Capturing Heap Snapshot..."
-done
-
-echo -n "" > ./out.heapsnapshot
-while read -r line; do
- f="$(echo "$line" | jq -r '.params.chunk')"
- echo -n "$f" >> out.heapsnapshot
- i=$((i+1))
-done < <(cat out | tail -n +2 | head -n -1)
-
-exec 3>&-
-```
-
-Berikut adalah daftar alat profil memori yang dapat digunakan dengan protokol inspector:
-
-- [OpenProfiling untuk Node.js][openprofiling]
-
-## Cara menemukan kebocoran memori dengan Heap Snapshots
-
-Anda dapat menemukan kebocoran memori dengan membandingkan dua snapshot heap. Penting untuk memastikan bahwa perbedaan snapshot tidak mengandung informasi yang tidak perlu. Langkah-langkah berikut harus menghasilkan perbedaan yang bersih antara snapshot.
-
-1. Biarkan proses memuat semua sumber dan selesai bootstrapping. Ini seharusnya hanya memakan waktu beberapa detik.
-2. Mulai menggunakan fungsionalitas yang Anda curigai bocor memori. Kemungkinan besar ini membuat beberapa alokasi awal yang bukan bocoran.
-3. Ambil satu snapshot heap.
-4. Lanjutkan menggunakan fungsionalitas untuk sementara waktu, lebih baik tanpa menjalankan apa pun di antara.
-5. Ambil snapshot heap lainnya. Perbedaan antara keduanya seharusnya sebagian besar berisi apa yang bocor.
-6. Buka alat pengembang Chromium/Chrome dan pergi ke tab _Memory_
-7. Muat file snapshot lama terlebih dahulu, dan yang lebih baru satu detik. ![Muat tombol di alat][8]
-8. Pilih snapshot yang lebih baru dan alihkan mode di dropdown di bagian atas dari _Ringkasan_ dengan _Perbandingan_. ![Comparison dropdown][9]
-9. Cari delta positif besar dan jelajahi referensi yang menyebabkannya di panel bawah.
-
-Anda dapat berlatih menangkap snapshot heap dan menemukan kebocoran memori dengan [latihan snapshot heap ini][heapsnapshot exercise].
-
-[Chrome Developer Tools]: https://developer.chrome.com/docs/devtools/
-[2]: /static/images/docs/guides/diagnostics/tools.png
-[3]: /static/images/docs/guides/diagnostics/snapshot.png
-[flag heapsnapshot-signal]: https://nodejs.org/api/cli.html#--heapsnapshot-signalsignal
-[heapdump]: https://www.npmjs.com/package/heapdump
-[dokumen `writeHeapSnapshot`]: https://nodejs.org/api/v8.html#v8_v8_writeheapsnapshot_filename
-[openprofiling]: https://github.com/vmarchaud/openprofiling-node
-[8]: /static/images/docs/guides/diagnostics/load-snapshot.png
-[9]: /static/images/docs/guides/diagnostics/compare.png
-[heapsnapshot exercise]: https://github.com/naugtur/node-example-heapdump
diff --git a/pages/id/docs/guides/diagnostics/poor-performance/index.md b/pages/id/docs/guides/diagnostics/poor-performance/index.md
deleted file mode 100644
index 7193506202bac..0000000000000
--- a/pages/id/docs/guides/diagnostics/poor-performance/index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Kinerja Buruk - Diagnostik
-layout: docs.hbs
----
-
-# Kinerja Buruk
-
-Dalam dokumen ini Anda dapat mempelajari tentang cara memprofil proses Node.js.
-
-- [Kinerja Buruk](#poor-performance)
- - [Aplikasi saya memiliki kinerja buruk](#my-application-has-a-poor-performance)
- - [Gejala](#symptoms)
- - [Debug](#debugging)
-
-## Aplikasi saya memiliki kinerja buruk
-
-### Gejala
-
-Latensi aplikasi saya tinggi dan saya sudah mengonfirmasi bahwa bottleneck bukanlah ketergantungan saya seperti database dan layanan downstream. Jadi saya curiga bahwa aplikasi saya menghabiskan waktu yang signifikan untuk menjalankan kode atau memproses informasi.
-
-Anda puas dengan kinerja aplikasi Anda secara umum tetapi ingin memahami bagian mana dari aplikasi Anda yang dapat ditingkatkan untuk berjalan lebih cepat atau lebih efisien. Ini dapat berguna ketika kita ingin meningkatkan pengalaman pengguna atau menghemat biaya komputasi.
-
-### Debug
-
-Dalam kasus penggunaan ini, kita tertarik dengan potongan kode yang menggunakan lebih banyak siklus CPU dari yang lain. Ketika kita melakukannya secara lokal, biasanya kita mencoba mengoptimalkan kode kita.
-
-Dokumen ini menyediakan dua cara sederhana untuk memprofil aplikasi Node.js:
-
-- [Menggunakan Profiler Sampling V8](https://nodejs.org/en/docs/guides/simple-profiling/)
-- [Menggunakan Linux Perf](/en/docs/guides/diagnostics/poor-performance/using-linux-perf)
diff --git a/pages/id/docs/guides/diagnostics/poor-performance/using-linux-perf.md b/pages/id/docs/guides/diagnostics/poor-performance/using-linux-perf.md
deleted file mode 100644
index fc26484eeed8c..0000000000000
--- a/pages/id/docs/guides/diagnostics/poor-performance/using-linux-perf.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: Kinerja Buruk - Menggunakan Linux Perf
-layout: docs.hbs
----
-
-# Menggunakan Linux Perf
-
-[Linux Perf](https://perf.wiki.kernel.org/index.php/Main_Page) menyediakan profil CPU level rendah dengan frame JavaScript, native, dan OS level.
-
-**Penting**: tutorial ini hanya tersedia di Linux.
-
-## Bagaimana Caranya
-
-Linux Perf biasanya tersedia melalui paket `linux-tools-common`. Melalui opsi `--perf-basic-prof` atau `--perf-basic-prof-only-functions` kita dapat memulai aplikasi Node.js dengan mendukung _perf_events_.
-
-`--perf-basic-prof` selalu akan menulis ke file (/tmp/perf-PID.map), yang dapat menyebabkan pertumbuhan disk yang tak terbatas. Jika itu menjadi masalah, gunakan modul: [linux-perf](https://www.npmjs.com/package/linux-perf) atau `--perf-basic-prof-only-functions`.
-
-Perbedaan utama antara keduanya adalah bahwa `--perf-basic-prof-only-functions` menghasilkan keluaran yang lebih sedikit, itu adalah opsi yang layak untuk profil produksi.
-
-```console
-# Jalankan aplikasi dan dapatkan PID-nya
-$ node --perf-basic-prof-only-functions index.js &
-[1] 3870
-```
-
-Kemudian record event berdasarkan frekuensi yang diinginkan:
-
-```console
-$ sudo perf record -F 99 -p 3870 -g
-```
-
-Dalam fase ini, Anda mungkin ingin menggunakan tes beban pada aplikasi untuk menghasilkan lebih banyak rekaman untuk analisis yang dapat diandalkan. Ketika pekerjaan selesai, tutup proses perf dengan mengirimkan SIGINT (Ctrl-C) ke perintah.
-
-`perf` akan menghasilkan file di dalam folder `/tmp`, biasanya disebut `/tmp/perf-PID.map` (dalam contoh di atas: `/tmp/perf-3870.map`) yang berisi jejak untuk setiap fungsi yang dipanggil.
-
-Untuk menggabungkan hasil tersebut dalam file tertentu, jalankan:
-
-```console
-$ sudo perf script > perfs.out
-```
-
-```console
-$ cat ./perfs.out
-node 3870 25147.878454: 1 cycles:
- ffffffffb5878b06 native_write_msr+0x6 ([kernel.kallsyms])
- ffffffffb580d9d5 intel_tfa_pmu_enable_all+0x35 ([kernel.kallsyms])
- ffffffffb5807ac8 x86_pmu_enable+0x118 ([kernel.kallsyms])
- ffffffffb5a0a93d perf_pmu_enable.part.0+0xd ([kernel.kallsyms])
- ffffffffb5a10c06 __perf_event_task_sched_in+0x186 ([kernel.kallsyms])
- ffffffffb58d3e1d finish_task_switch+0xfd ([kernel.kallsyms])
- ffffffffb62d46fb __sched_text_start+0x2eb ([kernel.kallsyms])
- ffffffffb62d4b92 schedule+0x42 ([kernel.kallsyms])
- ffffffffb62d87a9 schedule_hrtimeout_range_clock+0xf9 ([kernel.kallsyms])
- ffffffffb62d87d3 schedule_hrtimeout_range+0x13 ([kernel.kallsyms])
- ffffffffb5b35980 ep_poll+0x400 ([kernel.kallsyms])
- ffffffffb5b35a88 do_epoll_wait+0xb8 ([kernel.kallsyms])
- ffffffffb5b35abe __x64_sys_epoll_wait+0x1e ([kernel.kallsyms])
- ffffffffb58044c7 do_syscall_64+0x57 ([kernel.kallsyms])
- ffffffffb640008c entry_SYSCALL_64_after_hwframe+0x44 ([kernel.kallsyms])
-....
-```
-
-Output mentah dari perf mungkin agak sulit dipahami sehingga biasanya file mentah ini digunakan untuk menghasilkan flamegraph untuk visualisasi yang lebih baik.
-
-![Contoh nodejs grafik flame](https://user-images.githubusercontent.com/26234614/129488674-8fc80fd5-549e-4a80-8ce2-2ba6be20f8e8.png)
-
-Untuk menghasilkan flamegraph dari hasil ini, ikuti [tutorial ini](https://nodejs.org/en/docs/guides/diagnostics-flamegraph/#create-a-flame-graph-with-system-perf-tools) from step 6.
-
-Karena output dari `perf` bukan merupakan alat yang khusus untuk Node.js, maka mungkin ada masalah dengan cara kode JavaScript dioptimalkan di Node.js. Lihat [masalah output perf](https://nodejs.org/en/docs/guides/diagnostics-flamegraph/#perf-output-issues) untuk referensi lebih lanjut.
-
-## Tautan Berguna
-
-- https://nodejs.org/en/docs/guides/diagnostics-flamegraph/
-- https://www.brendangregg.com/blog/2014-09-17/node-flame-graphs-on-linux.html
-- https://perf.wiki.kernel.org/index.php/Main_Page
-- https://blog.rafaelgss.com.br/node-cpu-profiler
diff --git a/pages/id/docs/guides/domain-postmortem.md b/pages/id/docs/guides/domain-postmortem.md
deleted file mode 100644
index 6dbfdf32b7bf4..0000000000000
--- a/pages/id/docs/guides/domain-postmortem.md
+++ /dev/null
@@ -1,365 +0,0 @@
----
-title: Postmortem Modul Domain
-layout: docs.hbs
----
-
-# Postmortem Modul Domain
-
-## Masalah Kegunaan
-
-### Perilaku Tersirat
-
-Mungkin bagi pengembang untuk membuat domain baru dan kemudian menjalankannya `domain.enter()`. Yang kemudian bertindak sebagai penangkap semua untuk pengecualian apa pun di masa depan yang tidak bisa diamati oleh pelempar. Mengizinkan penulis modul untuk mencegat pengecualian kode yang tidak terkait dalam modul yang berbeda. Mencegah pencetus kode dari mengetahui tentang pengecualiannya sendiri.
-
-Berikut adalah contoh bagaimana satu modul yang ditautkan secara tidak langsung dapat memengaruhi modul lainnya:
-
-```js
-// module a.js
-const b = require('./b');
-const c = require('./c');
-
-// module b.js
-const d = require('domain').create();
-d.on('error', () => {
- /* silence everything */
-});
-d.enter();
-
-// module c.js
-const dep = require('some-dep');
-dep.method(); // Uh-oh! This method doesn't actually exist.
-```
-
-Karena modul `b` memasuki domain tetapi tidak pernah keluar, pengecualian yang tidak tertangkap akan ditelan. Meninggalkan modul `c` dalam kegelapan mengapa modul itu tidak berjalan secara keseluruhan naskah. Meninggalkan `module.exports` yang berpotensi terisi sebagian. Melakukan ini tidak sama dengan mendengarkan `'uncaughtException'`. Seperti yang terakhir adalah secara eksplisit dimaksudkan untuk menangkap kesalahan secara global. Masalah lainnya adalah bahwa domain adalah diproses sebelum penangan `'uncaughtException'`, dan mencegahnya dari berlari.
-
-Masalah lainnya adalah domain merutekan kesalahan secara otomatis jika tidak ada `'error'` handler diatur pada emitor acara. Tidak ada mekanisme keikutsertaan untuk ini, dan secara otomatis menyebar ke seluruh rantai asinkron. Ini mungkin tampak berguna pada awalnya, tetapi sekali panggilan asinkron adalah dua atau lebih modul yang dalam dan salah satunya tidak menyertakan penangan kesalahan yang akan dibuat oleh pembuat domain tiba-tiba menangkap pengecualian yang tidak terduga, dan pengecualian pelempar akan pergi tidak disadari oleh penulis.
-
-Berikut ini adalah contoh sederhana tentang bagaimana handler `'error'` yang hilang memungkinkan domain aktif untuk membajak kesalahan:
-
-```js
-const domain = require('domain');
-const net = require('net');
-const d = domain.create();
-d.on('error', err => console.error(err.message));
-
-d.run(() =>
- net
- .createServer(c => {
- c.end();
- c.write('bye');
- })
- .listen(8000)
-);
-```
-
-Bahkan menghapus koneksi secara manual melalui `d.remove(c)` tidak mencegah kesalahan koneksi agar tidak disadap secara otomatis.
-
-Kegagalan yang mengganggu baik perutean kesalahan dan penanganan pengecualian adalah: inkonsistensi dalam bagaimana kesalahan digelembungkan. Berikut ini adalah contoh caranya domain bersarang akan dan tidak akan menggelembungkan pengecualian berdasarkan waktu terjadinya:
-
-```js
-const domain = require('domain');
-const net = require('net');
-const d = domain.create();
-d.on('error', () => console.error('d intercepted an error'));
-
-d.run(() => {
- const server = net
- .createServer(c => {
- const e = domain.create(); // No 'error' handler being set.
- e.run(() => {
- // This will not be caught by d's error handler.
- setImmediate(() => {
- throw new Error('thrown from setImmediate');
- });
- // Though this one will bubble to d's error handler.
- throw new Error('immediately thrown');
- });
- })
- .listen(8080);
-});
-```
-
-Mungkin diharapkan bahwa domain bersarang selalu tetap bersarang, dan akan selalu menyebarkan pengecualian ke tumpukan domain. Atau pengecualian itu tidak akan pernah gelembung secara otomatis. Sayangnya kedua situasi ini terjadi, yang mengarah ke perilaku yang berpotensi membingungkan yang bahkan cenderung sulit untuk di-debug konflik waktu.
-
-### Kesenjangan API
-
-Sementara API berdasarkan penggunaan `EventEmitter` dapat menggunakan `bind()` dan gaya errback callback dapat menggunakan `intercept()`, API alternatif yang secara implisit mengikat ke domain aktif harus dieksekusi di dalam `run()`. Artinya jika penulis modul ingin mendukung domain menggunakan mekanisme alternatif dari yang disebutkan mereka harus secara manual mengimplementasikan dukungan domain itu sendiri. Alih-alih bisa memanfaatkan mekanisme implisit yang sudah ada.
-
-### Propagasi Kesalahan
-
-Menyebarkan kesalahan di seluruh domain bersarang tidak langsung, jika bahkan mungkin. Dokumentasi yang ada menunjukkan contoh sederhana tentang cara `close()` dan `http` server jika ada kesalahan pada handler permintaan. Apa yang tidak jelaskan adalah cara menutup server jika penangan permintaan membuat yang lain contoh domain untuk permintaan asinkron lainnya. Menggunakan yang berikut ini sebagai sederhana contoh kegagalan propagasi kesalahan:
-
-```js
-const d1 = domain.create();
-d1.foo = true; // custom member to make more visible in console
-d1.on('error', er => {
- /* handle error */
-});
-
-d1.run(() =>
- setTimeout(() => {
- const d2 = domain.create();
- d2.bar = 43;
- d2.on('error', er => console.error(er.message, domain._stack));
- d2.run(() => {
- setTimeout(() => {
- setTimeout(() => {
- throw new Error('outer');
- });
- throw new Error('inner');
- });
- });
- })
-);
-```
-
-Bahkan jika instance domain digunakan untuk penyimpanan lokal, jadi akses ke sumber daya tersedia, masih tidak ada cara untuk mengizinkan kesalahan untuk melanjutkan propagasi dari `d2` kembali ke `d1`. Inspeksi cepat dapat memberi tahu kami yang hanya melempar dari domain `d2`'s handler `'error'` akan memungkinkan `d1` untuk kemudian tangkap pengecualian dan jalankan penangan kesalahannya sendiri. Padahal itu bukan kasus. Setelah memeriksa `domain._stack` Anda akan melihat bahwa hanya tumpukan berisi `d2`.
-
-Ini mungkin dianggap sebagai kegagalan API, tetapi meskipun itu beroperasi dalam hal ini cara masih ada masalah transmisi fakta bahwa cabang di eksekusi asinkron telah gagal, dan bahwa semua operasi lebih lanjut di dalamnya cabang harus dihentikan. Dalam contoh penangan permintaan http, jika kita mematikan beberapa permintaan asinkron dan masing-masing kemudian data `write()` kembali ke klien lebih banyak kesalahan akan muncul dari mencoba `write()` ke closed menangani. Lebih lanjut tentang ini di _Resource Cleanup on Exception_.
-
-### Pembersihan Sumber Daya pada Pengecualian
-
-Skrip berikut berisi contoh yang lebih kompleks dari pembersihan yang benar di pohon ketergantungan sumber daya kecil dalam kasus pengecualian terjadi di a koneksi yang diberikan atau salah satu dependensinya. Memecah skrip menjadi operasi dasar:
-
-```js
-'use strict';
-
-const domain = require('domain');
-const EE = require('events');
-const fs = require('fs');
-const net = require('net');
-const util = require('util');
-const print = process._rawDebug;
-
-const pipeList = [];
-const FILENAME = '/tmp/tmp.tmp';
-const PIPENAME = '/tmp/node-domain-example-';
-const FILESIZE = 1024;
-let uid = 0;
-
-// Setting up temporary resources
-const buf = Buffer.alloc(FILESIZE);
-for (let i = 0; i < buf.length; i++) buf[i] = ((Math.random() * 1e3) % 78) + 48; // Basic ASCII
-fs.writeFileSync(FILENAME, buf);
-
-function ConnectionResource(c) {
- EE.call(this);
- this._connection = c;
- this._alive = true;
- this._domain = domain.create();
- this._id = Math.random().toString(32).substr(2).substr(0, 8) + ++uid;
-
- this._domain.add(c);
- this._domain.on('error', () => {
- this._alive = false;
- });
-}
-util.inherits(ConnectionResource, EE);
-
-ConnectionResource.prototype.end = function end(chunk) {
- this._alive = false;
- this._connection.end(chunk);
- this.emit('end');
-};
-
-ConnectionResource.prototype.isAlive = function isAlive() {
- return this._alive;
-};
-
-ConnectionResource.prototype.id = function id() {
- return this._id;
-};
-
-ConnectionResource.prototype.write = function write(chunk) {
- this.emit('data', chunk);
- return this._connection.write(chunk);
-};
-
-// Example begin
-net
- .createServer(c => {
- const cr = new ConnectionResource(c);
-
- const d1 = domain.create();
- fs.open(
- FILENAME,
- 'r',
- d1.intercept(fd => {
- streamInParts(fd, cr, 0);
- })
- );
-
- pipeData(cr);
-
- c.on('close', () => cr.end());
- })
- .listen(8080);
-
-function streamInParts(fd, cr, pos) {
- const d2 = domain.create();
- const alive = true;
- d2.on('error', er => {
- print('d2 error:', er.message);
- cr.end();
- });
- fs.read(
- fd,
- Buffer.alloc(10),
- 0,
- 10,
- pos,
- d2.intercept((bRead, buf) => {
- if (!cr.isAlive()) {
- return fs.close(fd);
- }
- if (cr._connection.bytesWritten < FILESIZE) {
- // Documentation says callback is optional, but doesn't mention that if
- // the write fails an exception will be thrown.
- const goodtogo = cr.write(buf);
- if (goodtogo) {
- setTimeout(() => streamInParts(fd, cr, pos + bRead), 1000);
- } else {
- cr._connection.once('drain', () =>
- streamInParts(fd, cr, pos + bRead)
- );
- }
- return;
- }
- cr.end(buf);
- fs.close(fd);
- })
- );
-}
-
-function pipeData(cr) {
- const pname = PIPENAME + cr.id();
- const ps = net.createServer();
- const d3 = domain.create();
- const connectionList = [];
- d3.on('error', er => {
- print('d3 error:', er.message);
- cr.end();
- });
- d3.add(ps);
- ps.on('connection', conn => {
- connectionList.push(conn);
- conn.on('data', () => {}); // don't care about incoming data.
- conn.on('close', () => {
- connectionList.splice(connectionList.indexOf(conn), 1);
- });
- });
- cr.on('data', chunk => {
- for (let i = 0; i < connectionList.length; i++) {
- connectionList[i].write(chunk);
- }
- });
- cr.on('end', () => {
- for (let i = 0; i < connectionList.length; i++) {
- connectionList[i].end();
- }
- ps.close();
- });
- pipeList.push(pname);
- ps.listen(pname);
-}
-
-process.on('SIGINT', () => process.exit());
-process.on('exit', () => {
- try {
- for (let i = 0; i < pipeList.length; i++) {
- fs.unlinkSync(pipeList[i]);
- }
- fs.unlinkSync(FILENAME);
- } catch (e) {}
-});
-```
-
-- Ketika koneksi baru terjadi, secara bersamaan:
- - Buka file di sistem file
- - Buka Pipa ke soket unik
-- Baca sepotong file secara tidak sinkron
-- Tulis potongan ke koneksi TCP dan soket pendengar apa pun
-- Jika salah satu dari sumber daya ini error, beri tahu semua sumber daya terlampir lainnya bahwa mereka perlu membersihkan dan mematikan
-
-Seperti yang dapat kita lihat dari contoh ini, lebih banyak yang harus dilakukan untuk membersihkan dengan benar sumber daya ketika sesuatu gagal daripada apa yang dapat dilakukan secara ketat melalui API domain. Semua yang ditawarkan domain adalah mekanisme agregasi pengecualian. Bahkan kemampuan yang berpotensi berguna untuk menyebarkan data dengan domain dengan mudah dilawan, dalam contoh ini, dengan melewatkan sumber daya yang dibutuhkan sebagai fungsi argumen.
-
-Satu domain masalah yang diabadikan adalah kesederhanaan yang seharusnya bisa melanjutkan eksekusi, bertentangan dengan apa yang dinyatakan dokumentasi, dari aplikasi meskipun pengecualian tak terduga. Contoh ini menunjukkan kekeliruan di balik gagasan itu.
-
-Mencoba pembersihan sumber daya yang tepat pada pengecualian tak terduga menjadi lebih kompleks sebagai aplikasi itu sendiri tumbuh dalam kompleksitas. Contoh ini hanya memiliki 3 dasar sumber daya dalam permainan, dan semuanya dengan jalur ketergantungan yang jelas. Jika aplikasi menggunakan sesuatu seperti sumber daya bersama atau sumber daya menggunakan kembali kemampuan untuk membersihkan, dan menguji dengan benar bahwa pembersihan telah dilakukan, tumbuh pesat.
-
-Pada akhirnya, dalam hal penanganan kesalahan, domain tidak lebih dari pengendali `'uncaughtException'` yang dimuliakan. Kecuali dengan lebih implisit dan perilaku yang tidak dapat diamati oleh pihak ketiga.
-
-### Propagasi Sumber Daya
-
-Kasus penggunaan lain untuk domain adalah menggunakannya untuk menyebarkan data di sepanjang asinkron jalur data. Satu hal yang bermasalah adalah ambiguitas kapan harus mengharapkan domain yang benar ketika ada beberapa di tumpukan (yang harus diasumsikan jika tumpukan async berfungsi dengan modul lain). Juga konflik antara makhluk dapat bergantung pada domain untuk penanganan kesalahan sementara juga tersedia untuk mengambil data yang diperlukan.
-
-Berikut ini adalah contoh yang terlibat yang menunjukkan kegagalan menggunakan domain untuk: menyebarkan data di sepanjang tumpukan asinkron:
-
-```js
-const domain = require('domain');
-const net = require('net');
-
-const server = net
- .createServer(c => {
- // Use a domain to propagate data across events within the
- // connection so that we don't have to pass arguments
- // everywhere.
- const d = domain.create();
- d.data = { connection: c };
- d.add(c);
- // Mock class that does some useless async data transformation
- // for demonstration purposes.
- const ds = new DataStream(dataTransformed);
- c.on('data', chunk => ds.data(chunk));
- })
- .listen(8080, () => console.log('listening on 8080'));
-
-function dataTransformed(chunk) {
- // FAIL! Because the DataStream instance also created a
- // domain we have now lost the active domain we had
- // hoped to use.
- domain.active.data.connection.write(chunk);
-}
-
-function DataStream(cb) {
- this.cb = cb;
- // DataStream wants to use domains for data propagation too!
- // Unfortunately this will conflict with any domain that
- // already exists.
- this.domain = domain.create();
- this.domain.data = { inst: this };
-}
-
-DataStream.prototype.data = function data(chunk) {
- // This code is self contained, but pretend it's a complex
- // operation that crosses at least one other module. So
- // passing along "this", etc., is not easy.
- this.domain.run(() => {
- // Simulate an async operation that does the data transform.
- setImmediate(() => {
- for (let i = 0; i < chunk.length; i++)
- chunk[i] = ((chunk[i] + Math.random() * 100) % 96) + 33;
- // Grab the instance from the active domain and use that
- // to call the user's callback.
- const self = domain.active.data.inst;
- self.cb(chunk);
- });
- });
-};
-```
-
-Di atas menunjukkan bahwa sulit untuk memiliki lebih dari satu API asinkron mencoba menggunakan domain untuk menyebarkan data. Contoh ini mungkin bisa diperbaiki dengan menetapkan `parent: domain.active` di konstruktor `DataStream`. Kemudian memulihkannya melalui `domain.active = domain.active.data.parent` tepat sebelum panggilan balik pengguna dipanggil. Juga instantiasi `DataStream` di `'connection'` callback harus dijalankan di dalam `d.run()`, bukan hanya menggunakan `d.add(c)`, jika tidak, tidak akan ada domain aktif.
-
-Singkatnya, untuk memiliki doa penggunaan kesempatan ini harus benar-benar mematuhi seperangkat pedoman yang akan sulit untuk ditegakkan atau diuji.
-
-## Masalah perfoma
-
-Penghalang yang signifikan dari penggunaan domain adalah overhead. Menggunakan node's benchmark http bawaan, `http_simple.js`, tanpa domain yang dapat ditanganinya 22.000 permintaan/detik. Sedangkan jika dijalankan dengan `NODE_USE_DOMAINS=1` itu jumlahnya turun menjadi di bawah 17.000 permintaan/detik. Dalam hal ini hanya ada satu domain global. Jika kita mengedit benchmark maka http request callback membuat performa instans domain baru turun lebih jauh ke 15.000 permintaan/detik.
-
-Meskipun ini mungkin tidak akan memengaruhi server yang hanya melayani beberapa ratus atau bahkan seribu permintaan per detik, jumlah overhead berbanding lurus dengan jumlah permintaan asinkron yang dibuat. Jadi jika satu koneksi perlu terhubung ke beberapa layanan lain, semuanya akan berkontribusi pada keseluruhan latensi pengiriman produk akhir ke klien.
-
-Menggunakan `AsyncWrap` dan melacak berapa kali `init`/`pre`/`post`/`destroy` dipanggil dalam benchmark yang kami temukan bahwa jumlah semua peristiwa yang disebut lebih dari 170.000 kali per detik. Ini berarti bahkan menambahkan overhead 1 mikrodetik per panggilan untuk semua jenis pengaturan atau pembongkaran akan mengakibatkan hilangnya kinerja 17%. Memang, ini untuk yang dioptimalkan skenario tolok ukur, tetapi saya yakin ini menunjukkan perlunya a mekanisme seperti domain menjadi semurah mungkin untuk dijalankan.
-
-## Melihat ke depan
-
-Modul domain telah tidak digunakan lagi sejak Desember 2014, tetapi belum dihapus karena node tidak menawarkan fungsionalitas alternatif saat ini. Mulai dari tulisan ini ada pekerjaan yang sedang berlangsung membangun `AsyncWrap` API dan a proposal untuk Zona yang sedang disiapkan untuk TC39. Pada saat seperti itu ada yang cocok fungsi untuk menggantikan domain itu akan menjalani siklus penghentian penuh dan akhirnya akan dihapus dari inti.
diff --git a/pages/id/docs/guides/dont-block-the-event-loop.md b/pages/id/docs/guides/dont-block-the-event-loop.md
deleted file mode 100644
index 0e264f9cee239..0000000000000
--- a/pages/id/docs/guides/dont-block-the-event-loop.md
+++ /dev/null
@@ -1,414 +0,0 @@
----
-title: Jangan Blokir Event Loop (atau Worker Pool)
-layout: docs.hbs
----
-
-# Jangan Blokir Event Loop (atau Worker Pool)
-
-## Haruskah Anda membaca panduan ini?
-
-Jika Anda menulis sesuatu yang lebih rumit daripada skrip baris perintah singkat, membaca ini akan membantu Anda menulis aplikasi dengan kinerja lebih tinggi dan lebih aman.
-
-Dokumen ini ditulis dengan mempertimbangkan server Node.js, tetapi konsepnya juga berlaku untuk aplikasi Node.js yang kompleks. Di mana detail spesifik OS bervariasi, dokumen ini berpusat pada Linux.
-
-## Ringkasan
-
-Node.js menjalankan kode JavaScript di Event Loop (inisialisasi dan callback), dan menawarkan Worker Pool untuk menangani tugas-tugas mahal seperti file I/O. Skala Node.js baik, terkadang lebih baik daripada pendekatan kelas berat seperti Apache. Rahasia skalabilitas Node.js adalah ia menggunakan sejumlah kecil utas untuk menangani banyak klien. Jika Node.js dapat bekerja dengan lebih sedikit utas, maka Node.js dapat menghabiskan lebih banyak waktu dan memori sistem Anda untuk bekerja pada klien daripada membayar overhead ruang dan waktu untuk utas (memori, pengalihan konteks). Tetapi karena Node.js hanya memiliki beberapa utas, Anda harus menyusun aplikasi Anda untuk menggunakannya dengan bijak.
-
-Berikut adalah aturan praktis yang baik untuk menjaga kecepatan server Node.js Anda: _Node.js cepat ketika pekerjaan yang terkait dengan setiap klien pada waktu tertentu adalah "kecil"_.
-
-Ini berlaku untuk callback di Event Loop dan tugas di Worker Pool.
-
-## Mengapa saya harus menghindari pemblokiran Event Loop dan Worker Pool?
-
-Node.js menggunakan sejumlah kecil utas untuk menangani banyak klien. Di Node.js ada dua jenis utas: satu Loop Peristiwa (alias loop utama, utas utama, utas acara, dll.), dan kumpulan `k` Pekerja di Kumpulan Pekerja (alias threadpool).
-
-Jika utas membutuhkan waktu lama untuk menjalankan panggilan balik (Loop Peristiwa) atau tugas (Pekerja), kami menyebutnya "diblokir". Sementara utas diblokir bekerja atas nama satu klien, itu tidak dapat menangani permintaan dari klien lain. Ini memberikan dua motivasi untuk memblokir baik Event Loop maupun Worker Pool:
-
-1. Kinerja: Jika Anda secara teratur melakukan aktivitas kelas berat pada kedua jenis utas, _throughput_ (permintaan/detik) server Anda akan terganggu.
-2. Keamanan: Jika mungkin untuk input tertentu salah satu utas Anda mungkin diblokir, klien jahat dapat mengirimkan "masukan jahat" ini, membuat utas Anda diblokir, dan mencegahnya bekerja pada klien lain. Ini akan menjadi serangan [Denial of Service](https://en.wikipedia.org/wiki/Denial-of-service_attack).
-
-## Ulasan singkat tentang Node
-
-Node.js menggunakan Event-Driven Architecture: ia memiliki Event Loop untuk orkestrasi dan Worker Pool untuk tugas-tugas mahal.
-
-### Kode apa yang berjalan di Event Loop?
-
-Saat dimulai, aplikasi Node.js pertama-tama menyelesaikan fase inisialisasi, `memerlukan` modul dan mendaftarkan callback untuk event. Aplikasi Node.js kemudian masuk ke Event Loop, menanggapi permintaan klien yang masuk dengan mengeksekusi callback yang sesuai. Callback ini dijalankan secara sinkron, dan dapat mendaftarkan permintaan asinkron untuk melanjutkan pemrosesan setelah selesai. Callback untuk permintaan asinkron ini juga akan dijalankan di Event Loop.
-
-Loop Peristiwa juga akan memenuhi permintaan asinkron non-pemblokiran yang dibuat oleh panggilan baliknya, mis., I/O jaringan.
-
-Singkatnya, Event Loop mengeksekusi callback JavaScript yang terdaftar untuk event, dan juga bertanggung jawab untuk memenuhi permintaan asinkron yang tidak memblokir seperti I/O jaringan.
-
-### Kode apa yang berjalan di Worker Pool?
-
-Kumpulan Pekerja Node.js diimplementasikan di libuv ([docs](http://docs.libuv.org/en/v1.x/threadpool.html)), yang memperlihatkan API pengiriman tugas umum.
-
-Node.js menggunakan Worker Pool untuk menangani tugas-tugas "mahal". Ini termasuk I/O yang sistem operasinya tidak menyediakan versi non-pemblokiran, serta tugas-tugas yang secara khusus menggunakan CPU.
-
-Ini adalah API modul Node.js yang menggunakan Worker Pool ini:
-
-1. I/O-intensif
- 1. [DNS](https://nodejs.org/api/dns.html): `dns.lookup()`, `dns.lookupService()`.
- 2. [Sistem File](https://nodejs.org/api/fs.html#fs_threadpool_usage): Semua API sistem file kecuali `fs.FSWatcher()` dan yang secara eksplisit sinkron menggunakan threadpool libuv.
-2. CPU-intensif
- 1. [Crypto](https://nodejs.org/api/crypto.html): `crypto.pbkdf2()`, `crypto.scrypt()`, `crypto.randomBytes()`, `crypto.randomFill( )`, `crypto.generateKeyPair()`.
- 2. [Zlib](https://nodejs.org/api/zlib.html#zlib_threadpool_usage): Semua zlib API kecuali yang secara eksplisit sinkron menggunakan threadpool libuv.
-
-Di banyak aplikasi Node.js, API ini adalah satu-satunya sumber tugas untuk Worker Pool. Aplikasi dan modul yang menggunakan [add-on C++](https://nodejs.org/api/addons.html) dapat mengirimkan tugas lain ke Worker Pool.
-
-Demi kelengkapan, kami mencatat bahwa ketika Anda memanggil salah satu API ini dari callback di Event Loop, Event Loop membayar beberapa biaya penyiapan kecil saat memasuki binding C++ Node.js untuk API tersebut dan mengirimkan tugas ke kolam pekerja. Biaya ini dapat diabaikan dibandingkan dengan biaya keseluruhan tugas, itulah sebabnya Event Loop membongkarnya. Saat mengirimkan salah satu tugas ini ke Worker Pool, Node.js memberikan pointer ke fungsi C++ yang sesuai di binding C++ Node.js.
-
-### Bagaimana Node.js memutuskan kode apa yang akan dijalankan selanjutnya?
-
-Secara abstrak, Event Loop dan Worker Pool masing-masing mempertahankan antrian untuk event yang tertunda dan tugas yang tertunda.
-
-Sebenarnya, Event Loop tidak benar-benar mempertahankan antrian. Sebaliknya, ia memiliki kumpulan deskriptor file yang meminta sistem operasi untuk memantau, menggunakan mekanisme seperti [epoll](http://man7.org/linux/man-pages/man7/epoll.7.html) (Linux ), [kqueue](https://developer.apple.com/library/content/documentation/Darwin/Conceptual/FSEvents_ProgGuide/KernelQueues/KernelQueues.html) (OSX), port peristiwa (Solaris), atau [IOCP](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365198.aspx) (Windows). Deskriptor file ini sesuai dengan soket jaringan, file apa pun yang ditontonnya, dan sebagainya. Ketika sistem operasi mengatakan bahwa salah satu deskriptor file ini sudah siap, Loop Peristiwa menerjemahkannya ke peristiwa yang sesuai dan memanggil panggilan balik yang terkait dengan peristiwa itu. Anda dapat mempelajari lebih lanjut tentang proses ini [di sini](https://www.youtube.com/watch?v=P9csgxBgaZ8).
-
-Sebaliknya, Worker Pool menggunakan antrian nyata yang entrinya adalah tugas untuk diproses. Worker mengeluarkan tugas dari antrian ini dan mengerjakannya, dan ketika selesai Worker memunculkan acara "Setidaknya satu tugas selesai" untuk Event Loop.
-
-### Apa artinya ini bagi desain aplikasi?
-
-Dalam sistem satu utas per klien seperti Apache, setiap klien yang tertunda diberi utasnya sendiri. Jika utas menangani satu blok klien, sistem operasi akan menginterupsinya dan memberi klien lain giliran. Sistem operasi dengan demikian memastikan bahwa klien yang membutuhkan sedikit pekerjaan tidak dikenakan sanksi oleh klien yang membutuhkan lebih banyak pekerjaan.
-
-Karena Node.js menangani banyak klien dengan sedikit utas, jika utas memblokir menangani satu permintaan klien, maka permintaan klien yang tertunda mungkin tidak mendapat giliran sampai utas menyelesaikan panggilan balik atau tugasnya. _Perlakuan yang adil terhadap klien adalah tanggung jawab aplikasi Anda_. Ini berarti Anda tidak boleh melakukan terlalu banyak pekerjaan untuk klien mana pun dalam satu panggilan balik atau tugas.
-
-Ini adalah bagian dari mengapa Node.js dapat menskalakan dengan baik, tetapi ini juga berarti bahwa Anda bertanggung jawab untuk memastikan penjadwalan yang adil. Bagian selanjutnya berbicara tentang cara memastikan penjadwalan yang adil untuk Loop Peristiwa dan untuk Kelompok Pekerja.
-
-## Jangan blokir Event Loop
-
-Loop Peristiwa memperhatikan setiap koneksi klien baru dan mengatur pembuatan respons. Semua permintaan masuk dan tanggapan keluar melewati Event Loop. Ini berarti bahwa jika Loop Peristiwa menghabiskan waktu terlalu lama di titik mana pun, semua klien saat ini dan klien baru tidak akan mendapat giliran.
-
-Anda harus memastikan bahwa Anda tidak pernah memblokir Event Loop. Dengan kata lain, setiap callback JavaScript Anda harus selesai dengan cepat. Ini tentu saja juga berlaku untuk `await` Anda, `Promise.then` Anda, dan seterusnya.
-
-Cara yang baik untuk memastikan ini adalah dengan mempertimbangkan ["kompleksitas komputasi"](https://en.wikipedia.org/wiki/Time_complexity) dari panggilan balik Anda. Jika panggilan balik Anda mengambil jumlah langkah yang konstan, apa pun argumennya, maka Anda akan selalu memberikan giliran yang adil kepada setiap klien yang menunggu keputusan. Jika panggilan balik Anda mengambil jumlah langkah yang berbeda tergantung pada argumennya, maka Anda harus memikirkan berapa lama argumennya.
-
-Contoh 1: Panggilan balik waktu konstan.
-
-```javascript
-app.get('/constant-time', (req, res) => {
- res.sendStatus(200);
-});
-```
-
-Contoh 2: Panggilan balik `O(n)`. Callback ini akan berjalan cepat untuk `n` kecil dan lebih lambat untuk `n` besar.
-
-```javascript
-app.get('/countToN', (req, res) => {
- let n = req.query.n;
-
- // n iterations before giving someone else a turn
- for (let i = 0; i < n; i++) {
- console.log(`Iter ${i}`);
- }
-
- res.sendStatus(200);
-});
-```
-
-Contoh 3: Panggilan balik `O(n^2)`. Callback ini akan tetap berjalan dengan cepat untuk `n` kecil, tetapi untuk `n` besar akan berjalan jauh lebih lambat daripada contoh `O(n)` sebelumnya.
-
-```javascript
-app.get('/countToN2', (req, res) => {
- let n = req.query.n;
-
- // n^2 iterations before giving someone else a turn
- for (let i = 0; i < n; i++) {
- for (let j = 0; j < n; j++) {
- console.log(`Iter ${i}.${j}`);
- }
- }
-
- res.sendStatus(200);
-});
-```
-
-### Seberapa hati-hati Anda seharusnya?
-
-Node.js menggunakan mesin Google V8 untuk JavaScript, yang cukup cepat untuk banyak operasi umum. Pengecualian untuk aturan ini adalah operasi regexps dan JSON, yang dibahas di bawah ini.
-
-Namun, untuk tugas yang kompleks, Anda harus mempertimbangkan untuk membatasi input dan menolak input yang terlalu panjang. Dengan begitu, bahkan jika panggilan balik Anda memiliki kompleksitas yang besar, dengan membatasi input, Anda memastikan bahwa panggilan balik tidak dapat memakan waktu lebih dari waktu terburuk pada input terlama yang dapat diterima. Anda kemudian dapat mengevaluasi biaya kasus terburuk dari panggilan balik ini dan menentukan apakah waktu berjalannya dapat diterima dalam konteks Anda.
-
-### Memblokir Loop Acara: REDOS
-
-Salah satu cara umum untuk memblokir Loop Peristiwa secara fatal adalah dengan menggunakan [ekspresi reguler](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) yang "rentan".
-
-#### Menghindari ekspresi reguler yang rentan
-
-Ekspresi reguler (regexp) mencocokkan string input dengan pola. Kami biasanya menganggap kecocokan regexp membutuhkan satu lintasan melalui string input --- `O(n)` waktu di mana `n` adalah panjang string input. Dalam banyak kasus, satu pass memang diperlukan. Sayangnya, dalam beberapa kasus, pencocokan regexp mungkin memerlukan jumlah perjalanan eksponensial melalui string input --- waktu `O(2^n)`. Jumlah perjalanan eksponensial berarti bahwa jika mesin memerlukan perjalanan `x` untuk menentukan kecocokan, itu akan membutuhkan perjalanan `2*x` jika kita menambahkan hanya satu karakter lagi ke string input. Karena jumlah perjalanan berbanding lurus dengan waktu yang dibutuhkan, efek dari evaluasi ini adalah memblokir Loop Peristiwa.
-
-_Ekspresi reguler yang rentan_ adalah ekspresi yang mungkin memerlukan waktu eksponensial untuk mesin ekspresi reguler Anda, yang memaparkan Anda ke [REDOS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS) pada "input jahat". Apakah pola ekspresi reguler Anda rentan atau tidak (yaitu mesin regexp mungkin membutuhkan waktu eksponensial) sebenarnya adalah pertanyaan yang sulit untuk dijawab, dan bervariasi tergantung pada apakah Anda menggunakan Perl, Python, Ruby, Java, JavaScript, dll., tetapi berikut adalah beberapa aturan praktis yang berlaku di semua bahasa ini:
-
-1. Hindari quantifier bersarang seperti `(a+)*`. Mesin regexp V8 dapat menangani beberapa di antaranya dengan cepat, tetapi yang lain rentan.
-2. Hindari OR dengan klausa yang tumpang tindih, seperti `(a|a)*`. Sekali lagi, ini terkadang-cepat.
-3. Hindari menggunakan referensi balik, seperti `(a.*) \1`. Tidak ada mesin regexp yang dapat menjamin evaluasi ini dalam waktu linier.
-4. Jika Anda melakukan pencocokan string sederhana, gunakan `indexOf` atau yang setara dengan lokal. Ini akan lebih murah dan tidak akan pernah memakan waktu lebih dari `O(n)`.
-
-Jika Anda tidak yakin apakah ekspresi reguler Anda rentan, ingatlah bahwa Node.js umumnya tidak mengalami kesulitan untuk melaporkan _kecocokan_ bahkan untuk regexp yang rentan dan string input yang panjang. Perilaku eksponensial dipicu ketika ada ketidakcocokan tetapi Node.js tidak dapat memastikannya sampai mencoba banyak jalur melalui string input.
-
-#### Contoh REDOS
-
-Berikut adalah contoh regexp yang rentan mengekspos servernya ke REDOS:
-
-```javascript
-app.get('/redos-me', (req, res) => {
- let filePath = req.query.filePath;
-
- // REDOS
- if (filePath.match(/(\/.+)+$/)) {
- console.log('valid path');
- } else {
- console.log('invalid path');
- }
-
- res.sendStatus(200);
-});
-```
-
-Regexp yang rentan dalam contoh ini adalah cara (buruk!) untuk memeriksa jalur yang valid di Linux. Ini cocok dengan string yang merupakan urutan nama yang dibatasi "/", seperti "/a/b/c". Ini berbahaya karena melanggar aturan 1: ia memiliki quantifier bersarang ganda.
-
-Jika klien bertanya dengan filePath `///.../\n` (100 / diikuti oleh karakter baris baru yang "." regexp tidak akan cocok), maka Loop Peristiwa akan berlangsung selamanya, memblokir Putaran Acara. Serangan REDOS klien ini menyebabkan semua klien lain tidak mendapatkan giliran sampai pencocokan regexp selesai.
-
-Untuk alasan ini, Anda harus waspada menggunakan ekspresi reguler yang kompleks untuk memvalidasi input pengguna.
-
-#### Sumber Daya Anti-REDOS
-
-Ada beberapa alat untuk memeriksa regexps Anda untuk keamanan, seperti
-
-- [safe-regex](https://github.com/davisjam/safe-regex)
-- [rxxr2](http://www.cs.bham.ac.uk/~hxt/research/rxxr2/). Namun, tak satu pun dari ini akan menangkap semua regexps yang rentan.
-
-Pendekatan lain adalah dengan menggunakan mesin regexp yang berbeda. Anda dapat menggunakan modul [node-re2](https://github.com/uhop/node-re2), yang menggunakan mesin regexp [RE2](https://github.com/google/re2) yang sangat cepat dari Google. Namun berhati-hatilah, RE2 tidak 100% kompatibel dengan regexps V8, jadi periksa regresi jika Anda menukar modul node-re2 untuk menangani regexps Anda. Dan regexp yang sangat rumit tidak didukung oleh node-re2.
-
-Jika Anda mencoba mencocokkan sesuatu yang "jelas", seperti URL atau jalur file, temukan contoh di [perpustakaan regexp](http://www.regexlib.com) atau gunakan modul npm, mis. [ip-regex](https://www.npmjs.com/package/ip-regex).
-
-### Memblokir Loop Peristiwa: Modul inti Node.js
-
-Beberapa modul inti Node.js memiliki API mahal yang sinkron, termasuk:
-
-- [Enkripsi](https://nodejs.org/api/crypto.html)
-- [Kompresi](https://nodejs.org/api/zlib.html)
-- [Sistem file](https://nodejs.org/api/fs.html)
-- [Proses turunan](https://nodejs.org/api/child_process.html)
-
-API ini mahal, karena melibatkan komputasi yang signifikan (enkripsi, kompresi), memerlukan I/O (file I/O), atau berpotensi keduanya (Child Process). API ini dimaksudkan untuk kenyamanan skrip, tetapi tidak dimaksudkan untuk digunakan dalam konteks server. Jika Anda menjalankannya di Event Loop, mereka akan membutuhkan waktu lebih lama untuk diselesaikan daripada instruksi JavaScript biasa, memblokir Event Loop.
-
-Di server, _Anda tidak boleh menggunakan API sinkron berikut dari modul ini_:
-
-- Enkripsi:
- - `crypto.randomBytes` (versi sinkron)
- - `crypto.randomFillSync`
- - `crypto.pbkdf2Sync`
- - Anda juga harus berhati-hati dalam memberikan masukan besar ke rutinitas enkripsi dan dekripsi.
-- Kompresi:
- - `zlib.inflateSync`
- - `zlib.deflateSync`
-- Berkas sistem:
- - Jangan gunakan API sistem file sinkron. Misalnya, jika file yang Anda akses berada dalam [sistem file terdistribusi](https://en.wikipedia.org/wiki/Clustered_file_system#Distributed_file_systems) seperti [NFS](https://en.wikipedia.org/wiki/Network_File_System), waktu akses dapat sangat bervariasi.
-- Child Process:
- - `child_process.spawnSync`
- - `child_process.execSync`
- - `child_process.execFileSync`
-
-Daftar ini cukup lengkap pada Node.js v9.
-
-### Memblokir Loop Peristiwa: JSON DOS
-
-`JSON.parse` dan `JSON.stringify` adalah operasi lain yang berpotensi mahal. Meskipun ini adalah `O(n)` dalam panjang input, untuk `n` besar mereka bisa memakan waktu sangat lama.
-
-Jika server Anda memanipulasi objek JSON, terutama objek dari klien, Anda harus berhati-hati dengan ukuran objek atau string yang Anda gunakan di Event Loop.
-
-Contoh: pemblokiran JSON. Kami membuat objek `obj` dengan ukuran 2^21 dan `JSON.stringify`, menjalankan `indexOf` pada string, lalu JSON.parse. String `JSON.stringify`'d berukuran 50MB. Dibutuhkan 0,7 detik untuk merangkai objek, 0,03 detik untuk indexOf pada string 50MB, dan 1,3 detik untuk mengurai string.
-
-```javascript
-var obj = { a: 1 };
-var niter = 20;
-
-var before, str, pos, res, took;
-
-for (var i = 0; i < niter; i++) {
- obj = { obj1: obj, obj2: obj }; // Doubles in size each iter
-}
-
-before = process.hrtime();
-str = JSON.stringify(obj);
-took = process.hrtime(before);
-console.log('JSON.stringify took ' + took);
-
-before = process.hrtime();
-pos = str.indexOf('nomatch');
-took = process.hrtime(before);
-console.log('Pure indexof took ' + took);
-
-before = process.hrtime();
-res = JSON.parse(str);
-took = process.hrtime(before);
-console.log('JSON.parse took ' + took);
-```
-
-Ada modul npm yang menawarkan API JSON asinkron. Lihat misalnya:
-
-- [JSONStream](https://www.npmjs.com/package/JSONStream), yang memiliki API streaming.
-- [JSON Ramah Besar](https://www.npmjs.com/package/bfj), yang memiliki API aliran serta versi asinkron dari API JSON standar menggunakan paradigma partisi-on-the-Event-Loop yang diuraikan di bawah.
-
-### Perhitungan rumit tanpa memblokir Event Loop
-
-Misalkan Anda ingin melakukan perhitungan kompleks dalam JavaScript tanpa memblokir Event Loop. Anda memiliki dua opsi: mempartisi atau membongkar.
-
-#### Partisi
-
-Anda dapat _mempartisi_ perhitungan Anda sehingga masing-masing berjalan pada Loop Peristiwa tetapi secara teratur menghasilkan (memberikan giliran ke) peristiwa tertunda lainnya. Dalam JavaScript, mudah untuk menyimpan status tugas yang sedang berlangsung dalam penutupan, seperti yang ditunjukkan pada contoh 2 di bawah ini.
-
-Sebagai contoh sederhana, misalkan Anda ingin menghitung rata-rata angka `1` hingga `n`.
-
-Contoh 1: Rata-rata yang tidak dipartisi, biaya `O(n)`
-
-```javascript
-for (let i = 0; i < n; i++) sum += i;
-let avg = sum / n;
-console.log('avg: ' + avg);
-```
-
-Contoh 2: Rata-rata yang dipartisi, setiap langkah asinkron `n` berharga `O(1)`.
-
-```javascript
-function asyncAvg(n, avgCB) {
- // Save ongoing sum in JS closure.
- var sum = 0;
- function help(i, cb) {
- sum += i;
- if (i == n) {
- cb(sum);
- return;
- }
-
- // "Asynchronous recursion".
- // Schedule next operation asynchronously.
- setImmediate(help.bind(null, i + 1, cb));
- }
-
- // Start the helper, with CB to call avgCB.
- help(1, function (sum) {
- var avg = sum / n;
- avgCB(avg);
- });
-}
-
-asyncAvg(n, function (avg) {
- console.log('avg of 1-n: ' + avg);
-});
-```
-
-Anda dapat menerapkan prinsip ini pada iterasi array dan sebagainya.
-
-#### Menurunkan
-
-Jika Anda perlu melakukan sesuatu yang lebih kompleks, mempartisi bukanlah pilihan yang baik. Ini karena mempartisi hanya menggunakan Event Loop, dan Anda tidak akan mendapat manfaat dari banyak inti yang hampir pasti tersedia di mesin Anda. _Ingat, Event Loop harus mengatur permintaan klien, bukan memenuhinya sendiri._ Untuk tugas yang rumit, pindahkan pekerjaan dari Event Loop ke Worker Pool.
-
-##### Cara membongkar
-
-Anda memiliki dua opsi untuk Worker Pool tujuan yang akan digunakan untuk membongkar pekerjaan.
-
-1. Anda dapat menggunakan Node.js Worker Pool bawaan dengan mengembangkan [addon C++](https://nodejs.org/api/addons.html). Pada Node versi lama, buat addon C++ Anda menggunakan [NAN](https://github.com/nodejs/nan), dan pada versi yang lebih baru gunakan [N-API](https://nodejs.org/api/n-api.html). [node-webworker-threads](https://www.npmjs.com/package/webworker-threads) menawarkan cara khusus JavaScript untuk mengakses Kumpulan Pekerja Node.js.
-2. Anda dapat membuat dan mengelola Worker Pool Anda sendiri yang didedikasikan untuk komputasi daripada Worker Pool bertema I/O Node.js. Cara paling mudah untuk melakukannya adalah menggunakan [Child Process](https://nodejs.org/api/child_process.html) atau [Cluster](https://nodejs.org/api/cluster.html).
-
-Anda seharusnya _tidak_ hanya membuat [Child Process](https://nodejs.org/api/child_process.html) untuk setiap klien. Anda dapat menerima permintaan klien lebih cepat daripada membuat dan mengelola turunan, dan server Anda mungkin menjadi [bom garpu](https://en.wikipedia.org/wiki/Fork_bomb).
-
-##### Kelemahan dari pembongkaran
-
-Kelemahan dari pendekatan pembongkaran adalah menimbulkan biaya overhead dalam bentuk _biaya komunikasi_. Hanya Event Loop yang diizinkan untuk melihat "namespace" (status JavaScript) aplikasi Anda. Dari Worker, Anda tidak bisa memanipulasi objek JavaScript di namespace Event Loop. Sebagai gantinya, Anda harus membuat serial dan deserialize objek apa pun yang ingin Anda bagikan. Kemudian Worker dapat mengoperasikan salinannya sendiri dari objek-objek ini dan mengembalikan objek yang dimodifikasi (atau "patch") ke Event Loop.
-
-Untuk masalah serialisasi, lihat bagian tentang JSON DOS.
-
-##### Beberapa saran untuk pembongkaran
-
-Anda mungkin ingin membedakan antara tugas-tugas CPU-intensif dan I/O-intensif karena mereka memiliki karakteristik yang sangat berbeda.
-
-Tugas intensif CPU hanya membuat kemajuan saat Worker-nya dijadwalkan, dan Worker harus dijadwalkan ke salah satu [logical core](https://nodejs.org/api/os.html#os_os_cpus) mesin Anda. Jika Anda memiliki 4 inti logis dan 5 Pekerja, salah satu Pekerja ini tidak dapat membuat kemajuan. Akibatnya, Anda membayar overhead (biaya memori dan penjadwalan) untuk Pekerja ini dan tidak mendapatkan pengembalian untuk itu.
-
-Tugas intensif I/O melibatkan permintaan dari penyedia layanan eksternal (DNS, sistem file, dll.) dan menunggu tanggapannya. Sementara seorang Pekerja dengan tugas intensif I/O sedang menunggu tanggapannya, tidak ada hal lain yang harus dilakukan dan dapat dibatalkan jadwalnya oleh sistem operasi, memberikan Pekerja lain kesempatan untuk mengajukan permintaan mereka. Dengan demikian, _tugas intensif I/O akan membuat kemajuan meskipun utas terkait tidak berjalan_. Penyedia layanan eksternal seperti database dan sistem file telah sangat dioptimalkan untuk menangani banyak permintaan yang tertunda secara bersamaan. Misalnya, sistem file akan memeriksa sekumpulan besar permintaan tulis dan baca yang tertunda untuk menggabungkan pembaruan yang bertentangan dan untuk mengambil file dalam urutan yang optimal (mis. lihat [slide ini](http://researcher.ibm.com/researcher/files/il-AVISHAY/01-block_io-v1.3.pdf)).
-
-Jika Anda hanya mengandalkan satu Kelompok Pekerja, mis. Node.js Worker Pool, maka karakteristik yang berbeda dari pekerjaan yang terikat CPU dan yang terikat I/O dapat membahayakan kinerja aplikasi Anda.
-
-Untuk alasan ini, Anda mungkin ingin mempertahankan Kumpulan Pekerja Komputasi yang terpisah.
-
-#### Membongkar: kesimpulan
-
-Untuk tugas-tugas sederhana, seperti mengulangi elemen-elemen array yang panjangnya sewenang-wenang, mempartisi mungkin merupakan pilihan yang baik. Jika komputasi Anda lebih kompleks, pembongkaran adalah pendekatan yang lebih baik: biaya komunikasi, yaitu overhead melewatkan objek serial antara Event Loop dan Worker Pool, diimbangi dengan manfaat menggunakan banyak inti.
-
-Namun, jika server Anda sangat bergantung pada perhitungan yang rumit, Anda harus memikirkan apakah Node.js benar-benar cocok. Node.js unggul untuk pekerjaan terikat I/O, tetapi untuk komputasi yang mahal, ini mungkin bukan pilihan terbaik.
-
-Jika Anda mengambil pendekatan pembongkaran, lihat bagian tentang tidak memblokir Kumpulan Pekerja.
-
-## Jangan blokir Kelompok Pekerja
-
-Node.js memiliki Worker Pool yang terdiri dari `k` Workers. Jika Anda menggunakan paradigma Pembongkaran yang dibahas di atas, Anda mungkin memiliki Kumpulan Pekerja Komputasi terpisah, yang menerapkan prinsip yang sama. Dalam kedua kasus tersebut, mari kita asumsikan bahwa `k` jauh lebih kecil daripada jumlah klien yang mungkin Anda tangani secara bersamaan. Ini sesuai dengan filosofi "satu utas untuk banyak klien" dari Node.js, rahasia skalabilitasnya.
-
-Seperti dibahas di atas, setiap Pekerja menyelesaikan Tugasnya saat ini sebelum melanjutkan ke yang berikutnya di antrian Kumpulan Pekerja.
-
-Sekarang, akan ada variasi dalam biaya Tugas yang diperlukan untuk menangani permintaan klien Anda. Beberapa Tugas dapat diselesaikan dengan cepat (misalnya membaca file pendek atau yang di-cache, atau menghasilkan sejumlah kecil byte acak), dan yang lain akan memakan waktu lebih lama (misalnya membaca file yang lebih besar atau tidak di-cache, atau menghasilkan lebih banyak byte acak). Tujuan Anda adalah untuk _meminimalkan variasi dalam waktu Tugas_, dan Anda harus menggunakan _Pembagian tugas_ untuk mencapainya.
-
-### Meminimalkan variasi waktu Tugas
-
-Jika Tugas Pekerja saat ini jauh lebih mahal daripada Tugas lainnya, maka tugas tersebut tidak akan tersedia untuk mengerjakan Tugas lain yang tertunda. Dengan kata lain, _setiap Tugas yang relatif panjang secara efektif mengurangi ukuran Kelompok Pekerja sebanyak satu hingga selesai_. Ini tidak diinginkan karena, sampai titik tertentu, semakin banyak Pekerja di Kumpulan Pekerja, semakin besar throughput Kumpulan Pekerja (tugas/detik) dan dengan demikian semakin besar throughput server (permintaan klien/detik). Satu klien dengan Tugas yang relatif mahal akan menurunkan throughput Worker Pool, yang pada gilirannya menurunkan throughput server.
-
-Untuk menghindari hal ini, Anda harus mencoba meminimalkan variasi panjang Tugas yang Anda kirimkan ke Kelompok Pekerja. Meskipun tepat untuk memperlakukan sistem eksternal yang diakses oleh permintaan I/O Anda (DB, FS, dll.) sebagai kotak hitam, Anda harus mengetahui biaya relatif dari permintaan I/O ini, dan harus menghindari pengiriman permintaan yang dapat Anda lakukan. berharap untuk menjadi sangat panjang.
-
-Dua contoh harus menggambarkan kemungkinan variasi dalam waktu tugas.
-
-#### Contoh variasi: Sistem file yang berjalan lama membaca
-
-Misalkan server Anda harus membaca file untuk menangani beberapa permintaan klien. Setelah berkonsultasi dengan API Node.js [File system](https://nodejs.org/api/fs.html), Anda memilih untuk menggunakan `fs.readFile()` untuk kesederhanaan. Namun, `fs.readFile()` adalah ([saat ini](https://github.com/nodejs/node/pull/17054)) tidak dipartisi: ia mengirimkan satu Tugas `fs.read()` yang mencakup seluruh mengajukan. Jika Anda membaca file yang lebih pendek untuk beberapa pengguna dan file yang lebih panjang untuk yang lain, `fs.readFile()` dapat menyebabkan variasi yang signifikan dalam panjang Tugas, sehingga merugikan throughput Kumpulan Pekerja.
-
-Untuk skenario terburuk, misalkan penyerang dapat meyakinkan server Anda untuk membaca file _arbitrary_ (ini adalah [kerentanan traversal direktori](https://www.owasp.org/index.php/Path_Traversal)). Jika server Anda menjalankan Linux, penyerang dapat memberi nama file yang sangat lambat: [`/dev/random`](http://man7.org/linux/man-pages/man4/random.4.html). Untuk semua tujuan praktis, `/dev/random` sangat lambat, dan setiap Pekerja yang diminta untuk membaca dari `/dev/random` tidak akan pernah menyelesaikan Tugas itu. Penyerang kemudian mengirimkan permintaan `k`, satu untuk setiap Pekerja, dan tidak ada permintaan klien lain yang menggunakan Kumpulan Pekerja yang akan membuat kemajuan.
-
-#### Contoh variasi: Operasi kripto yang berjalan lama
-
-Misalkan server Anda menghasilkan byte acak yang aman secara kriptografis menggunakan [`crypto.randomBytes()`](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback). `crypto.randomBytes()` tidak dipartisi: ia membuat satu Tugas `randomBytes()` untuk menghasilkan byte sebanyak yang Anda minta. Jika Anda membuat lebih sedikit byte untuk beberapa pengguna dan lebih banyak byte untuk yang lain, `crypto.randomBytes()` adalah sumber variasi lain dalam panjang Tugas.
-
-### Pembagian tugas
-
-Tugas dengan biaya waktu variabel dapat merusak throughput Worker Pool. Untuk meminimalkan variasi dalam waktu Tugas, sejauh mungkin Anda harus _mempartisi_ setiap Tugas menjadi sub-Tugas dengan biaya yang sebanding. Ketika setiap sub-Tugas selesai, ia harus menyerahkan sub-Tugas berikutnya, dan ketika sub-Tugas terakhir selesai, ia harus memberi tahu pengirim.
-
-Untuk melanjutkan contoh `fs.readFile()`, Anda sebaiknya menggunakan `fs.read()` (partisi manual) atau `ReadStream` (dipartisi secara otomatis).
-
-Prinsip yang sama berlaku untuk tugas terikat CPU; contoh `asyncAvg` mungkin tidak sesuai untuk Loop Peristiwa, tetapi sangat cocok untuk Kumpulan Pekerja.
-
-Saat Anda mempartisi Tugas menjadi sub-Tugas, Tugas yang lebih pendek diperluas menjadi sejumlah kecil sub-Tugas, dan Tugas yang lebih panjang diperluas menjadi lebih banyak sub-Tugas. Di antara setiap sub-Tugas dari Tugas yang lebih panjang, Pekerja yang ditugaskan dapat mengerjakan sub-Tugas dari Tugas lain yang lebih pendek, sehingga meningkatkan keseluruhan throughput Tugas dari Kumpulan Pekerja.
-
-Perhatikan bahwa jumlah sub-Tugas yang diselesaikan bukanlah metrik yang berguna untuk throughput Worker Pool. Alih-alih, perhatikan jumlah _Tugas_ yang diselesaikan.
-
-### Menghindari pembagian tugas
-
-Ingatlah bahwa tujuan dari pembagian Tugas adalah untuk meminimalkan variasi dalam waktu Tugas. Jika Anda dapat membedakan antara Tugas yang lebih pendek dan Tugas yang lebih panjang (mis. menjumlahkan larik vs. mengurutkan larik), Anda dapat membuat satu Kumpulan Pekerja untuk setiap kelas Tugas. Merutekan Tugas yang lebih pendek dan Tugas yang lebih panjang untuk memisahkan Kumpulan Pekerja adalah cara lain untuk meminimalkan variasi waktu Tugas.
-
-Mendukung pendekatan ini, mempartisi Tugas menimbulkan overhead (biaya untuk membuat representasi Tugas Kumpulan Pekerja dan memanipulasi antrian Kumpulan Pekerja), dan menghindari pemartisian menghemat biaya perjalanan tambahan ke Kumpulan Pekerja. Ini juga mencegah Anda membuat kesalahan dalam mempartisi Tugas Anda.
-
-Kelemahan dari pendekatan ini adalah bahwa Pekerja di semua Kumpulan Pekerja ini akan dikenakan overhead ruang dan waktu dan akan bersaing satu sama lain untuk waktu CPU. Ingatlah bahwa setiap Tugas yang terikat CPU membuat kemajuan hanya saat dijadwalkan. Akibatnya, Anda hanya harus mempertimbangkan pendekatan ini setelah analisis yang cermat.
-
-### Kelompok Pekerja: kesimpulan
-
-Baik Anda hanya menggunakan Kumpulan Pekerja Node.js atau memelihara Kumpulan Pekerja yang terpisah, Anda harus mengoptimalkan throughput Tugas dari Kumpulan Anda.
-
-Untuk melakukannya, minimalkan variasi waktu tugas dengan menggunakan partisi tugas.
-
-## Risiko modul npm
-
-Sementara modul inti Node.js menawarkan blok bangunan untuk berbagai macam aplikasi, terkadang sesuatu yang lebih dibutuhkan. Pengembang Node.js sangat diuntungkan dari [ekosistem npm](https://www.npmjs.com/), dengan ratusan ribu modul yang menawarkan fungsionalitas untuk mempercepat proses pengembangan Anda.
-
-Namun, ingat bahwa sebagian besar modul ini ditulis oleh pengembang pihak ketiga dan umumnya dirilis hanya dengan jaminan upaya terbaik. Pengembang yang menggunakan modul npm harus memperhatikan dua hal, meskipun yang terakhir sering dilupakan.
-
-1. Apakah itu menghormati API-nya?
-2. Mungkinkah API-nya memblokir Event Loop atau Worker? Banyak modul tidak berusaha menunjukkan biaya API mereka, sehingga merugikan komunitas.
-
-Untuk API sederhana, Anda dapat memperkirakan biaya API; biaya manipulasi string tidak sulit untuk dipahami. Namun dalam banyak kasus, tidak jelas berapa biaya API.
-
-_Jika Anda memanggil API yang mungkin melakukan sesuatu yang mahal, periksa kembali biayanya. Minta pengembang untuk mendokumentasikannya, atau periksa sendiri kode sumbernya (dan kirimkan PR yang mendokumentasikan biayanya)._
-
-Ingat, meskipun API tidak sinkron, Anda tidak tahu berapa banyak waktu yang mungkin dihabiskan untuk Worker atau Event Loop di setiap partisinya. Misalnya, dalam contoh `asyncAvg` yang diberikan di atas, setiap panggilan ke fungsi helper dijumlahkan _setengah_ dari angka, bukan salah satunya. Maka fungsi ini akan tetap asinkron, tetapi biaya setiap partisi adalah `O(n)`, bukan `O(1)`, sehingga kurang aman digunakan untuk nilai `n` yang berubah-ubah.
-
-## Kesimpulan
-
-Node.js memiliki dua jenis utas: satu Loop Peristiwa dan Pekerja `k`. Event Loop bertanggung jawab atas callback JavaScript dan I/O non-pemblokiran, dan Worker menjalankan tugas yang terkait dengan kode C++ yang menyelesaikan permintaan asinkron, termasuk memblokir I/O dan pekerjaan intensif CPU. Kedua jenis utas bekerja pada tidak lebih dari satu aktivitas pada satu waktu. Jika ada panggilan balik atau tugas yang membutuhkan waktu lama, utas yang menjalankannya menjadi _diblokir_. Jika aplikasi Anda membuat panggilan balik atau tugas pemblokiran, ini dapat menyebabkan penurunan throughput (klien/detik) paling baik, dan penolakan layanan total paling buruk.
-
-Untuk menulis server web dengan throughput tinggi dan lebih tahan DoS, Anda harus memastikan bahwa pada input jinak dan berbahaya, Event Loop maupun Pekerja Anda tidak akan memblokir.
diff --git a/pages/id/docs/guides/event-loop-timers-and-nexttick.md b/pages/id/docs/guides/event-loop-timers-and-nexttick.md
deleted file mode 100644
index e4f7070ba4883..0000000000000
--- a/pages/id/docs/guides/event-loop-timers-and-nexttick.md
+++ /dev/null
@@ -1,343 +0,0 @@
----
-title: Loop Peristiwa Node.js, Pengatur Waktu, dan process.nextTick()
-layout: docs.hbs
----
-
-# Loop Peristiwa Node.js, Timer, dan `process.nextTick()`
-
-## Apa itu Loop Peristiwa?
-
-Loop peristiwa inilah yang memungkinkan Node.js melakukan I/O non-pemblokiran operasi — terlepas dari kenyataan bahwa JavaScript adalah single-threaded — oleh operasi pembongkaran ke kernel sistem bila memungkinkan.
-
-Karena kebanyakan kernel modern adalah multi-threaded, mereka dapat menangani multiple operasi yang dijalankan di latar belakang. Ketika salah satu dari operasi ini selesai, kernel memberi tahu Node.js sehingga panggilan balik yang sesuai dapat ditambahkan ke antrean **poll** untuk akhirnya dieksekusi. Kami akan menjelaskan ini secara lebih rinci nanti dalam topik ini.
-
-## Loop Peristiwa Dijelaskan
-
-Ketika Node.js dimulai, itu menginisialisasi loop acara, memproses skrip input yang disediakan (atau masuk ke [REPL][], yang tidak tercakup dalam dokumen ini) yang dapat membuat panggilan API asinkron, pengatur waktu jadwal, atau panggilan `process.nextTick()`, lalu mulai memproses loop peristiwa.
-
-Diagram berikut menunjukkan ikhtisar yang disederhanakan dari loop acara urutan operasi.
-
-```
- ┌───────────────────────────┐
-┌─>│ timers │
-│ └─────────────┬─────────────┘
-│ ┌─────────────┴─────────────┐
-│ │ pending callbacks │
-│ └─────────────┬─────────────┘
-│ ┌─────────────┴─────────────┐
-│ │ idle, prepare │
-│ └─────────────┬─────────────┘ ┌───────────────┐
-│ ┌─────────────┴─────────────┐ │ incoming: │
-│ │ poll │<─────┤ connections, │
-│ └─────────────┬─────────────┘ │ data, etc. │
-│ ┌─────────────┴─────────────┐ └───────────────┘
-│ │ check │
-│ └─────────────┬─────────────┘
-│ ┌─────────────┴─────────────┐
-└──┤ close callbacks │
- └───────────────────────────┘
-```
-
-> Setiap kotak akan disebut sebagai "fase" dari loop peristiwa.
-
-Setiap fase memiliki antrian panggilan balik FIFO untuk dieksekusi. Sedangkan setiap fase adalah khusus dengan caranya sendiri, umumnya, ketika loop acara memasuki yang diberikan fase, itu akan melakukan operasi apa pun yang spesifik untuk fase itu, lalu jalankan panggilan balik dalam antrian fase itu sampai antrian selesai habis atau jumlah maksimum panggilan balik telah dieksekusi. Ketika antrian telah habis atau batas panggilan balik tercapai, acara loop akan pindah ke fase berikutnya, dan seterusnya.
-
-Karena salah satu dari operasi ini dapat dijadwalkan _lebih_ operasi dan baru peristiwa yang diproses dalam fase **poll** diantrekan oleh kernel, poll acara dapat diantrekan saat acara pemungutan suara sedang diproses. Sebagai hasilnya, panggilan balik yang berjalan lama dapat memungkinkan fase polling berjalan banyak lebih lama dari ambang timer. Lihat [**timers**](#timers) dan [**poll**](#poll) untuk detail selengkapnya.
-
-> Ada sedikit perbedaan antara Windows dan Implementasi Unix/Linux, tapi itu tidak penting untuk ini demonstrasi. Bagian terpenting ada di sini. Sebenarnya ada tujuh atau delapan langkah, tapi yang kami pedulikan — yang Node.js sebenarnya menggunakan - apakah yang di atas.
-
-## Ikhtisar Fase
-
-- **timer**: fase ini mengeksekusi callback yang dijadwalkan oleh `setTimeout()` dan `setInterval()`.
-- **panggilan balik yang tertunda**: mengeksekusi panggilan balik I/O yang ditangguhkan ke loop berikutnya pengulangan.
-- **idle, prepare**: hanya digunakan secara internal.
-- **jajak pendapat**: mengambil peristiwa I/O baru; jalankan panggilan balik terkait I/O (hampir) semua dengan pengecualian close callback, yang dijadwalkan oleh timer, dan `setImmediate()`); node akan memblokir di sini bila perlu.
-- **check**: callback `setImmediate()` dipanggil di sini.
-- **close callback**: beberapa close callback, mis. `socket.on('tutup', ...)`.
-
-Di antara setiap putaran acara, Node.js memeriksa apakah itu menunggu setiap I/O atau penghitung waktu asinkron dan mati dengan bersih jika tidak ada setiap.
-
-## Fase secara Detail
-
-### pengatur waktu
-
-Timer menentukan **threshold** _setelah itu_ callback yang disediakan _mungkin dieksekusi_ daripada **waktu yang tepat** yang _diinginkan seseorang dieksekusi_. Panggilan balik pengatur waktu akan berjalan sedini mungkin dijadwalkan setelah jumlah waktu yang ditentukan telah berlalu; namun, Penjadwalan Sistem Operasi atau menjalankan panggilan balik lainnya mungkin tertunda mereka.
-
-> Secara teknis, [**poll** phase](#poll) mengontrol kapan timer dijalankan.
-
-Misalnya, Anda menjadwalkan waktu tunggu untuk dieksekusi setelah 100 ms ambang batas, maka skrip Anda mulai membaca file secara tidak sinkron yang membutuhkan waktu 95 ms:
-
-```js
-const fs = require('fs');
-
-function someAsyncOperation(callback) {
- // Assume this takes 95ms to complete
- fs.readFile('/path/to/file', callback);
-}
-
-const timeoutScheduled = Date.now();
-
-setTimeout(() => {
- const delay = Date.now() - timeoutScheduled;
-
- console.log(`${delay}ms have passed since I was scheduled`);
-}, 100);
-
-// do someAsyncOperation which takes 95 ms to complete
-someAsyncOperation(() => {
- const startCallback = Date.now();
-
- // do something that will take 10ms...
- while (Date.now() - startCallback < 10) {
- // do nothing
- }
-});
-```
-
-Saat loop peristiwa memasuki fase **poll**, antriannya kosong (`fs.readFile()` belum selesai), sehingga akan menunggu jumlah ms tersisa sampai ambang timer tercepat tercapai. Sementara itu menunggu 95 ms berlalu, `fs.readFile()` selesai membaca file dan nya panggilan balik yang membutuhkan waktu 10 md untuk diselesaikan ditambahkan ke antrean **jajak pendapat** dan dieksekusi. Saat panggilan balik selesai, tidak ada lagi panggilan balik di antrian, sehingga loop acara akan melihat bahwa ambang batas paling cepat timer telah tercapai lalu bungkus kembali ke fase **timers** untuk dieksekusi panggilan balik pengatur waktu. Dalam contoh ini, Anda akan melihat bahwa penundaan total antara pengatur waktu yang dijadwalkan dan panggilan baliknya yang dieksekusi akan menjadi 105ms.
-
-> Untuk mencegah fase **poll** kelaparan loop acara, [libuv][] (library C yang mengimplementasikan Node.js loop acara dan semua perilaku asinkron platform) juga memiliki hard maximum (tergantung sistem) sebelum berhenti polling untuk lebih banyak acara.
-
-### panggilan balik tertunda
-
-Fase ini mengeksekusi panggilan balik untuk beberapa operasi sistem seperti tipe dari kesalahan TCP. Misalnya jika soket TCP menerima `ECONNREFUSED` ketika mencoba menyambung, beberapa sistem \*nix ingin menunggu untuk melaporkan kesalahan. Ini akan diantrekan untuk dieksekusi dalam fase **panggilan balik tertunda**.
-
-### polling
-
-Fase **jajak pendapat** memiliki dua fungsi utama:
-
-1. Menghitung berapa lama harus memblokir dan polling untuk I/O, lalu
-2. Memproses peristiwa dalam antrean **jajak pendapat**.
-
-Saat loop peristiwa memasuki fase **poll** _dan tidak ada timer dijadwalkan_, salah satu dari dua hal akan terjadi:
-
-- _Jika antrean **poll** **tidak kosong**_, loop peristiwa akan berulang melalui antrian panggilan baliknya yang mengeksekusinya secara sinkron sampai baik antrian telah habis, atau batas keras yang bergantung pada sistem tercapai.
-
-- _Jika antrean **jajak pendapat** **kosong**_, salah satu dari dua hal lagi akan terjadi:
-
- - Jika skrip telah dijadwalkan oleh `setImmediate()`, loop acara akan mengakhiri fase **poll** dan melanjutkan ke fase **check** ke jalankan skrip terjadwal tersebut.
-
- - Jika skrip **belum** dijadwalkan oleh `setImmediate()`, maka loop acara akan menunggu panggilan balik ditambahkan ke antrian, lalu mengeksekusi mereka segera.
-
-Setelah antrean **poll** kosong, loop acara akan memeriksa timer _yang batas waktunya telah tercapai_. Jika satu atau lebih pengatur waktu adalah siap, loop acara akan kembali ke fase **timers** untuk dieksekusi callback pengatur waktu itu.
-
-### memeriksa
-
-Fase ini memungkinkan seseorang untuk mengeksekusi panggilan balik segera setelah fase **jajak pendapat** telah selesai. Jika fase **jajak pendapat** menjadi tidak aktif dan skrip telah diantrekan dengan `setImmediate()`, loop acara mungkin lanjutkan ke fase **periksa** daripada menunggu.
-
-`setImmediate()` sebenarnya adalah timer khusus yang berjalan secara terpisah fase loop acara. Ini menggunakan API libuv yang menjadwalkan panggilan balik ke jalankan setelah fase **jajak pendapat** selesai.
-
-Umumnya, saat kode dieksekusi, loop acara pada akhirnya akan mengenai fase **jajak pendapat** di mana ia akan menunggu koneksi masuk, permintaan, dll. Namun, jika panggilan balik telah dijadwalkan dengan `setImmediate()` dan fase **poll** menjadi idle, akan berakhir dan berlanjut ke **periksa** fase daripada menunggu acara **jajak pendapat**.
-
-### tutup panggilan balik
-
-Jika soket atau pegangan ditutup tiba-tiba (misalnya `socket.destroy()`), Acara `'close'` akan dipancarkan dalam fase ini. Kalau tidak, itu akan menjadi dipancarkan melalui `process.nextTick()`.
-
-## `setImmediate()` vs `setTimeout()`
-
-`setImmediate()` dan `setTimeout()` serupa, tetapi berperilaku berbeda cara tergantung pada saat mereka dipanggil.
-
-- `setImmediate()` dirancang untuk mengeksekusi skrip setelah fase **jajak pendapat** saat ini selesai.
-- `setTimeout()` menjadwalkan skrip untuk dijalankan setelah ambang batas minimum di ms telah berlalu.
-
-Urutan di mana penghitung waktu dijalankan akan bervariasi tergantung pada konteks di mana mereka dipanggil. Jika keduanya dipanggil dari dalam modul utama, maka waktu akan terikat oleh kinerja proses (yang dapat dipengaruhi oleh aplikasi lain yang berjalan di mesin).
-
-Misalnya, jika kita menjalankan skrip berikut yang tidak berada dalam I/O siklus (yaitu modul utama), urutan di mana dua timer adalah dieksekusi adalah non-deterministik, karena terikat oleh kinerja proses:
-
-```js
-// timeout_vs_immediate.js
-setTimeout(() => {
- console.log('timeout');
-}, 0);
-
-setImmediate(() => {
- console.log('immediate');
-});
-```
-
-```
-$ node timeout_vs_immediate.js
-timeout
-immediate
-
-$ node timeout_vs_immediate.js
-immediate
-timeout
-```
-
-Namun, jika Anda memindahkan dua panggilan tersebut dalam siklus I/O, panggilan balik segera selalu dieksekusi terlebih dahulu:
-
-```js
-// timeout_vs_immediate.js
-const fs = require('fs');
-
-fs.readFile(__filename, () => {
- setTimeout(() => {
- console.log('timeout');
- }, 0);
- setImmediate(() => {
- console.log('immediate');
- });
-});
-```
-
-```
-$ node timeout_vs_immediate.js
-immediate
-timeout
-
-$ node timeout_vs_immediate.js
-immediate
-timeout
-```
-
-Keuntungan utama menggunakan `setImmediate()` daripada `setTimeout()` adalah `setImmediate()` akan selalu dieksekusi sebelum timer apa pun jika dijadwalkan dalam siklus I/O, terlepas dari berapa banyak timer yang ada.
-
-## `process.nextTick()`
-
-### Memahami `process.nextTick()`
-
-Anda mungkin telah memperhatikan bahwa `process.nextTick()` tidak ditampilkan di diagram, meskipun itu adalah bagian dari API asinkron. Hal ini karena `process.nextTick()` secara teknis bukan bagian dari loop peristiwa. Alih-alih, `nextTickQueue` akan diproses setelah operasi saat ini selesai, terlepas dari fase loop acara saat ini. Di Sini, sebuah _operasi_ didefinisikan sebagai transisi dari penangan C/C++ yang mendasarinya, dan penanganan JavaScript yang perlu dieksekusi.
-
-Melihat kembali diagram kita, setiap kali Anda memanggil `process.nextTick()` dalam sebuah fase tertentu, semua panggilan balik yang diteruskan ke `process.nextTick()` akan menjadi diselesaikan sebelum loop acara berlanjut. Ini bisa membuat beberapa hal buruk situasi karena ** memungkinkan Anda untuk "melaparkan" I/O Anda dengan membuat panggilan `process.nextTick()` rekursif\*** yang mencegah loop peristiwa dari mencapai fase **jajak pendapat**.
-
-### Mengapa itu diizinkan?
-
-Mengapa sesuatu seperti ini dimasukkan dalam Node.js? Sebagiannya adalah filosofi desain di mana API harus selalu asinkron bahkan di mana pun itu tidak harus. Ambil cuplikan kode ini misalnya:
-
-```js
-function apiCall(arg, callback) {
- if (typeof arg !== 'string')
- return process.nextTick(
- callback,
- new TypeError('argument should be string')
- );
-}
-```
-
-Cuplikan melakukan pemeriksaan argumen dan jika tidak benar, itu akan lolos kesalahan pada panggilan balik. API diperbarui cukup baru untuk memungkinkan meneruskan argumen ke `process.nextTick()` yang memungkinkannya mengambil apa pun argumen yang diteruskan setelah panggilan balik untuk disebarkan sebagai argumen untuk panggilan balik sehingga Anda tidak perlu menumpuk fungsi.
-
-Apa yang kami lakukan adalah meneruskan kesalahan kembali ke pengguna tetapi hanya _setelah_ kami telah mengizinkan sisa kode pengguna untuk dieksekusi. Dengan menggunakan `process.nextTick()` kami menjamin bahwa `apiCall()` selalu berjalan panggilan balik _setelah_ sisa kode pengguna dan _sebelum_ loop acara diperbolehkan untuk dilanjutkan. Untuk mencapai ini, tumpukan panggilan JS diizinkan untuk bersantai kemudian segera jalankan panggilan balik yang disediakan yang memungkinkan a orang untuk membuat panggilan rekursif ke `process.nextTick()` tanpa mencapai a `RangeError: Ukuran tumpukan panggilan maksimum terlampaui dari v8`.
-
-Filosofi ini dapat menyebabkan beberapa situasi yang berpotensi bermasalah. Ambil cuplikan ini misalnya:
-
-```js
-let bar;
-
-// this has an asynchronous signature, but calls callback synchronously
-function someAsyncApiCall(callback) {
- callback();
-}
-
-// the callback is called before `someAsyncApiCall` completes.
-someAsyncApiCall(() => {
- // since someAsyncApiCall hasn't completed, bar hasn't been assigned any value
- console.log('bar', bar); // undefined
-});
-
-bar = 1;
-```
-
-Pengguna mendefinisikan `someAsyncApiCall()` untuk memiliki tanda tangan asinkron, tetapi sebenarnya beroperasi secara sinkron. Saat dipanggil, panggilan balik disediakan untuk `someAsyncApiCall()` dipanggil dalam fase yang sama dari loop acara karena `someAsyncApiCall()` sebenarnya tidak melakukan apa-apa secara tidak sinkron. Akibatnya, callback mencoba mereferensikan `bar` even meskipun mungkin belum memiliki variabel itu dalam cakupannya, karena skripnya belum dapat berjalan sampai selesai.
-
-Dengan menempatkan callback dalam `process.nextTick()`, skrip masih memiliki kemampuan untuk menjalankan sampai selesai, memungkinkan semua variabel, fungsi, dll., untuk diinisialisasi sebelum panggilan balik dipanggil. Ini juga memiliki keuntungan dari tidak membiarkan loop acara berlanjut. Itu mungkin berguna bagi pengguna untuk diperingatkan akan kesalahan sebelum loop acara diperbolehkan untuk melanjutkan. Berikut adalah contoh sebelumnya menggunakan `process.nextTick()`:
-
-```js
-let bar;
-
-function someAsyncApiCall(callback) {
- process.nextTick(callback);
-}
-
-someAsyncApiCall(() => {
- console.log('bar', bar); // 1
-});
-
-bar = 1;
-```
-
-Berikut contoh dunia nyata lainnya:
-
-```js
-const server = net.createServer(() => {}).listen(8080);
-
-server.on('listening', () => {});
-```
-
-Ketika hanya sebuah port yang dilewati, port tersebut langsung terikat. Sehingga `'mendengarkan'` panggilan balik dapat segera dipanggil. Masalahnya adalah bahwa `.on('listening')` panggilan balik tidak akan disetel pada saat itu.
-
-Untuk menyiasatinya, acara `'listening'` diantrekan di `nextTick()` untuk memungkinkan skrip berjalan hingga selesai. Ini memungkinkan pengguna untuk mengatur event handler yang mereka inginkan.
-
-## `process.nextTick()` vs `setImmediate()`
-
-Kami memiliki dua panggilan yang serupa sejauh menyangkut pengguna, tapi nama mereka membingungkan.
-
-- `process.nextTick()` langsung aktif pada fase yang sama
-- `setImmediate()` diaktifkan pada iterasi berikut atau 'centang' dari lingkaran acara
-
-Intinya, nama harus ditukar. `process.nextTick()` mengaktifkan lebih banyak langsung dari `setImmediate()`, tetapi ini adalah artefak dari masa lalu yang tidak mungkin berubah. Membuat sakelar ini akan merusak banyak persentase paket di npm. Setiap hari lebih banyak modul baru sedang tambah, yang berarti setiap hari kita menunggu, lebih banyak potensi kerusakan terjadi. Meskipun membingungkan, namanya sendiri tidak akan berubah.
-
-> Kami menyarankan pengembang menggunakan `setImmediate()` dalam semua kasus karena ini lebih mudah untuk dipikirkan.
-
-## Mengapa menggunakan `process.nextTick()`?
-
-Ada dua alasan utama:
-
-1. Izinkan pengguna untuk menangani kesalahan, membersihkan sumber daya yang tidak diperlukan, atau mungkin coba permintaan lagi sebelum loop acara berlanjut.
-
-2. Kadang-kadang perlu untuk mengizinkan panggilan balik berjalan setelah panggilan stack telah dibatalkan tetapi sebelum loop acara berlanjut.
-
-Salah satu contohnya adalah agar sesuai dengan harapan pengguna. Contoh sederhana:
-
-```js
-const server = net.createServer();
-server.on('connection', conn => {});
-
-server.listen(8080);
-server.on('listening', () => {});
-```
-
-Katakan bahwa `listen()` dijalankan di awal loop acara, tetapi mendengarkan panggilan balik ditempatkan di `setImmediate()`. Kecuali a nama host dilewatkan, pengikatan ke port akan segera terjadi. Untuk loop acara untuk melanjutkan, itu harus mencapai fase **jajak pendapat**, yang berarti ada kemungkinan bukan nol bahwa koneksi dapat diterima memungkinkan acara koneksi dipecat sebelum acara mendengarkan.
-
-Contoh lain adalah mewarisi dari `EventEmitter` dan memancarkan acara dari dalam konstruktor:
-
-```js
-const EventEmitter = require('events');
-
-class MyEmitter extends EventEmitter {
- constructor() {
- super();
- this.emit('event');
- }
-}
-
-const myEmitter = new MyEmitter();
-myEmitter.on('event', () => {
- console.log('an event occurred!');
-});
-```
-
-Anda tidak dapat langsung memancarkan acara dari konstruktor karena skrip tidak akan diproses ke titik di mana pengguna memberikan panggilan balik ke acara itu. Jadi, di dalam konstruktor itu sendiri, Anda dapat menggunakan `process.nextTick()` untuk menyetel panggilan balik untuk memancarkan acara setelah konstruktor selesai, yang memberikan hasil yang diharapkan:
-
-```js
-const EventEmitter = require('events');
-
-class MyEmitter extends EventEmitter {
- constructor() {
- super();
-
- // use nextTick to emit the event once a handler is assigned
- process.nextTick(() => {
- this.emit('event');
- });
- }
-}
-
-const myEmitter = new MyEmitter();
-myEmitter.on('event', () => {
- console.log('an event occurred!');
-});
-```
-
-[libuv]: https://libuv.org/
-[REPL]: https://nodejs.org/api/repl.html#repl_repl
diff --git a/pages/id/docs/guides/getting-started-guide.md b/pages/id/docs/guides/getting-started-guide.md
deleted file mode 100644
index 69f0f40476cb9..0000000000000
--- a/pages/id/docs/guides/getting-started-guide.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Panduan Memulai
-layout: docs.hbs
----
-
-# Bagaimana cara memulai dengan Node.js setelah saya menginstalnya?
-
-Setelah kita menginstal Node.js, mari kita buat server web pertama kita. Buat file bernama `app.js` yang berisi konten berikut:
-
-```javascript
-const http = require('http');
-
-const hostname = '127.0.0.1';
-const port = 3000;
-
-const server = http.createServer((req, res) => {
- res.statusCode = 200;
- res.setHeader('Content-Type', 'text/plain');
- res.end('Halo Dunia');
-});
-
-server.listen(port, hostname, () => {
- console.log(`Server berjalan di http://${hostname}:${port}/`);
-});
-```
-
-Sekarang, jalankan server web Anda menggunakan `node app.js`. Kunjungi `http://localhost:3000` dan Anda akan melihat pesan yang mengatakan "Halo Dunia".
-
-Lihat [Pengantar Node.js](https://nodejs.dev/learn) untuk informasi lebih lanjut panduan komprehensif untuk memulai dengan Node.js.
diff --git a/pages/id/docs/guides/index.md b/pages/id/docs/guides/index.md
deleted file mode 100644
index 4d24b2867e3f6..0000000000000
--- a/pages/id/docs/guides/index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Panduan
-layout: docs.hbs
----
-
-# Panduan
-
-## Umum
-
-- [Panduan Memulai](/en/docs/guides/getting-started-guide/)
-- [Debugging - Memulai](/en/docs/guides/debugging-getting-started/)
-- [Pembuatan profil mudah untuk Aplikasi Node.js](/en/docs/guides/simple-profiling/)
-- [Diagnostik - Grafik Api](/en/docs/guides/diagnostics-flamegraph/)
-- [Meng-docker aplikasi web Node.js](/en/docs/guides/nodejs-docker-webapp/)
-- [Bermigrasi ke konstruktor Buffer yang aman](/en/docs/guides/buffer-constructor-deprecation/)
-- [Diagnostika - Jurnal Pengguna](/en/docs/guides/diagnostics/)
-- [Praktik Keamanan Terbaik](/en/docs/guides/security/)
-
-## Konsep inti Node.js
-
-- [Pengantar Node.js](https://nodejs.dev/en/learn/)
-- [Ringkasan Pemblokiran vs Non-Pemblokiran](/en/docs/guides/blocking-vs-non-blocking/)
-- [Loop Peristiwa Node.js, Timer, dan `process.nextTick()`](/en/docs/guides/event-loop-timers-and-nexttick/)
-- [Jangan Blokir Event Loop (atau Worker Pool)](/en/docs/guides/dont-block-the-event-loop/)
-- [Pengatur waktu di Node.js](/en/docs/guides/timers-in-node/)
-
-## Panduan terkait modul
-
-- [Anatomi Transaksi HTTP](/en/docs/guides/anatomy-of-an-http-transaction/)
-- [Bekerja dengan Sistem File Berbeda](/en/docs/guides/working-with-different-filesystems/)
-- [Tekanan Balik dalam Aliran](/en/docs/guides/backpressuring-in-streams/)
-- [Postmortem Modul Domain](/en/docs/guides/domain-postmortem/)
-- [Cara mempublikasikan paket N-API](/en/docs/guides/publishing-napi-modules/)
-- [Stabilitas ABI](/en/docs/guides/abi-stability/)
diff --git a/pages/id/docs/guides/nodejs-docker-webapp.md b/pages/id/docs/guides/nodejs-docker-webapp.md
deleted file mode 100644
index 9f590416c2dc5..0000000000000
--- a/pages/id/docs/guides/nodejs-docker-webapp.md
+++ /dev/null
@@ -1,251 +0,0 @@
----
-title: Meng-docker aplikasi web Node.js
-layout: docs.hbs
----
-
-# Meng-docker aplikasi web Node.js
-
-Tujuan dari contoh ini adalah untuk menunjukkan kepada Anda cara memasukkan aplikasi Node.js ke dalam Docker Container. Panduan ini ditujukan untuk pengembangan, dan _bukan_ untuk penerapan produksi. Panduan ini juga mengasumsikan Anda memiliki Panduan ini juga mengasumsikan Anda memiliki [Instalasi Docker](https://docs.docker.com/engine/installation/) yang berfungsi dan dasar pemahaman tentang bagaimana aplikasi Node.js terstruktur.
-
-Di bagian pertama panduan ini kita akan membuat aplikasi web sederhana di Node.js, lalu kita akan membangun image Docker untuk aplikasi itu, dan terakhir kita akan membuat instance container dari image itu.
-
-Docker memungkinkan Anda untuk mengemas aplikasi dengan lingkungannya dan semua dependensinya ke dalam "kotak", yang disebut container. Biasanya, container terdiri dari aplikasi yang berjalan dalam versi sistem operasi Linux yang dilucuti ke dasar. Image adalah cetak biru untuk container, container adalah instance image yang sedang berjalan.
-
-## Buat aplikasi Node.js
-
-Pertama, buat direktori baru tempat semua file akan hidup. Di direktori ini buat file `package.json` yang menjelaskan aplikasi Anda dan dependensinya:
-
-```json
-{
- "name": "docker_web_app",
- "version": "1.0.0",
- "description": "Node.js on Docker",
- "author": "First Last ",
- "main": "server.js",
- "scripts": {
- "start": "node server.js"
- },
- "dependencies": {
- "express": "^4.18.2"
- }
-}
-```
-
-Dengan file `package.json` baru Anda, jalankan `npm install`. Jika Anda menggunakan `npm` versi 5 atau lebih baru, ini akan menghasilkan file `package-lock.json` yang akan disalin ke image Docker Anda.
-
-Kemudian, buat file `server.js` yang mendefinisikan aplikasi web menggunakan Kerangka kerja [Express.js](https://expressjs.com/):
-
-```javascript
-'use strict';
-
-const express = require('express');
-
-// Constants
-const PORT = 8080;
-const HOST = '0.0.0.0';
-
-// App
-const app = express();
-app.get('/', (req, res) => {
- res.send('Hello World');
-});
-
-app.listen(PORT, HOST);
-console.log(`Running on http://${HOST}:${PORT}`);
-```
-
-Pada langkah selanjutnya, kita akan melihat bagaimana Anda dapat menjalankan aplikasi ini di dalam Docker container menggunakan image Docker resmi. Pertama, Anda harus membangun Docker image pada aplikasi Anda.
-
-## Membuat Dockerfile
-
-Buat file kosong bernama `Dockerfile`:
-
-```markup
-touch Dockerfile
-```
-
-Buka `Dockerfile` di editor teks favorit Anda
-
-Hal pertama yang perlu kita lakukan adalah menentukan dari gambar apa kita ingin membangun. Di sini kita akan menggunakan versi terbaru LTS (dukungan jangka panjang) `18` dari `node` tersedia dari [Docker Hub](https://hub.docker.com/_/node):
-
-```docker
-FROM node:18
-```
-
-Selanjutnya kita membuat direktori untuk menyimpan kode aplikasi di dalam image, ini akan menjadi direktori kerja untuk aplikasi Anda:
-
-```docker
-# Create app directory
-WORKDIR /usr/src/app
-```
-
-Image ini dilengkapi dengan Node.js dan NPM yang sudah terpasang, jadi hal berikutnya yang kami lakukan yang perlu dilakukan adalah menginstal dependensi aplikasi Anda menggunakan biner `npm`. Silahkan perhatikan bahwa jika Anda menggunakan `npm` versi 4 atau sebelumnya, `package-lock.json` file _tidak_ akan dihasilkan.
-
-```docker
-# Menginstal dependensi aplikasi
-# Wildcard digunakan untuk memastikan package.json DAN package-lock.json disalin
-# jika tersedia (npm@5+)
-COPY package*.json ./
-
-RUN npm install
-# Jika Anda membangun kode untuk produksi
-# Jalankan npm ci --omit=dev
-```
-
-Perhatikan bahwa, daripada menyalin seluruh direktori kerja, kami hanya menyalin berkas `package.json`. Ini memungkinkan kami untuk memanfaatkan Docker yang di-cache lapisan. bitJudo memiliki penjelasan yang bagus tentang ini [di sini](http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/). Selanjutnya, perintah `npm ci`, yang ditentukan dalam komentar, membantu menyediakan build yang lebih cepat, andal, dan dapat direproduksi untuk lingkungan produksi. Anda dapat membaca lebih lanjut tentang ini [di sini](https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable).
-
-Untuk menggabungkan kode sumber aplikasi Anda di dalam Docker image, gunakan `COPY` petunjuk:
-
-```docker
-# Bundle app source
-COPY . .
-```
-
-Aplikasi Anda mengikat ke port `8080` sehingga Anda akan menggunakan instruksi `EXPOSE` untuk memetakannya oleh daemon `docker`:
-
-```docker
-EXPOSE 8080
-```
-
-Terakhir, tetapi tidak kalah penting, tentukan perintah untuk menjalankan aplikasi Anda menggunakan `CMD` yang mendefinisikan runtime Anda. Di sini kita akan menggunakan `node server.js` untuk memulai server Anda:
-
-```docker
-CMD [ "node", "server.js" ]
-```
-
-`Dockerfile` Anda sekarang akan terlihat seperti ini:
-
-```docker
-FROM node:18
-
-# Buat direktori aplikasi
-WORKDIR /usr/src/app
-
-# Instal dependensi aplikasi
-# Wildcard digunakan untuk memastikan package.json DAN package-lock.json disalin
-# jika tersedia (npm@5+)
-COPY package*.json ./
-
-RUN npm install
-# Jika Anda membangun kode untuk produksi
-# RUN npm ci --omit=dev
-
-# Bundle app source
-COPY . .
-
-EXPOSE 8080
-CMD [ "node", "server.js" ]
-```
-
-## .dockerignore file
-
-Buat file `.dockerignore` di direktori yang sama dengan `Dockerfile` Anda dengan konten berikut:
-
-```
-node_modules
-npm-debug.log
-```
-
-Ini akan mencegah modul lokal dan log debug Anda disalin ke Image Docker dan mungkin menimpa modul yang dipasang di dalam image Anda.
-
-## Membangun citra Anda
-
-Buka direktori yang memiliki `Dockerfile` Anda dan jalankan perintah berikut untuk membangun Docker image. Penanda `-t` memungkinkan Anda menandai image Anda sehingga lebih mudah untuk temukan nanti menggunakan perintah `docker images` berikut:
-
-```bash
-docker build . -t /node-web-app
-```
-
-Image Anda sekarang akan terdaftar oleh Docker:
-
-```bash
-$ docker images
-
-# Example
-REPOSITORY TAG ID CREATED
-node 18 78b037dbb659 2 weeks ago
-/node-web-app latest d64d3505b0d2 1 minute ago
-```
-
-## Jalankan image
-
-Menjalankan image Anda dengan `-d` akan menjalankan container dalam mode terpisah, meninggalkan container berjalan di latar belakang. Penanda`-p` mengalihkan port publik ke port pribadi di dalam container. Jalankan image yang Anda buat sebelumnya:
-
-```bash
-docker run -p 49160:8080 -d /node-web-app
-```
-
-Hasil output aplikasi Anda:
-
-```bash
-# Get container ID
-$ docker ps
-
-# Print app output
-$ docker logs
-
-# Example
-Running on http://localhost:8080
-```
-
-Jika Anda perlu masuk ke dalam container, Anda dapat menggunakan perintah `exec`:
-
-```bash
-# Enter the container
-$ docker exec -it /bin/bash
-```
-
-## Uji
-
-Untuk menguji aplikasi Anda, dapatkan port aplikasi Anda yang dipetakan oleh Docker:
-
-```bash
-$ docker ps
-
-# Example
-ID IMAGE COMMAND ... PORTS
-ecce33b30ebf /node-web-app:latest npm start ... 49160->8080
-```
-
-Pada contoh di atas, Docker memetakan port `8080` di dalam container untuk port `49160` pada mesin Anda.
-
-Sekarang Anda dapat memanggil aplikasi Anda menggunakan `curl` (install diperlukan melalui: `sudo apt-get
-install curl`):
-
-```bash
-$ curl -i localhost:49160
-
-HTTP/1.1 200 OK
-X-Powered-By: Express
-Content-Type: text/html; charset=utf-8
-Content-Length: 12
-ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
-Date: Mon, 13 Nov 2017 20:53:59 GMT
-Connection: keep-alive
-
-Hello world
-```
-
-## Matikan image
-
-Untuk mematikan aplikasi yang kami mulai, kami menjalankan perintah `kill`. Ini memerlukan ID container, sebagai contoh kami mendapatkan ID container:`ecce33b30ebf`.
-
-```bash
-# Kill our running container
-$ docker kill
-
-
-# Confirm that the app has stopped
-$ curl -i localhost:49160
-curl: (7) Failed to connect to localhost port 49160: Connection refused
-```
-
-Kami harap tutorial ini membantu Anda membuat dan menjalankan aplikasi Node.js sederhana di Docker.
-
-Anda dapat menemukan informasi lebih lanjut tentang Docker dan Node.js di Docker di tempat-tempat berikut:
-
-- [Docker image Node.js Resmi](https://hub.docker.com/_/node/)
-- [Panduan Praktik Terbaik Docker Node.js](https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md)
-- [Dokumentasi Docker Resmi](https://docs.docker.com/get-started/nodejs/build-images/)
-- [Tag Docker di Stack Overflow](https://stackoverflow.com/questions/tagged/docker)
-- [Subreddit Docker](https://reddit.com/r/docker)
diff --git a/pages/id/docs/guides/publishing-napi-modules.md b/pages/id/docs/guides/publishing-napi-modules.md
deleted file mode 100644
index a5bc665ef8ac1..0000000000000
--- a/pages/id/docs/guides/publishing-napi-modules.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Cara mempublikasikan paket N-API
-layout: docs.hbs
----
-
-# Untuk mempublikasikan versi N-API dari sebuah paket bersama dengan versi non-N-API
-
-Langkah-langkah berikut diilustrasikan menggunakan paket `iotivity-node`:
-
-- Pertama, publikasikan versi non-N-API:
- - Perbarui versi di `package.json`. Untuk `iotivity-node`, versi menjadi `1.2.0-2`.
- - Periksa daftar periksa rilis (pastikan tes/demo/dokumen baik-baik saja)
- - `npm publish`
-- Kemudian, publikasikan versi N-API:
- - Perbarui versi di `package.json`. Dalam kasus `iotivity-node`, versi menjadi `1.2.0-3`. Untuk versi, kami sarankan mengikuti skema versi pra-rilis seperti yang dijelaskan oleh [semver.org](https://semver.org/#spec-item-9) mis. `1.2.0-napi`.
- - Periksa daftar periksa rilis (pastikan tes/demo/dokumen baik-baik saja)
- - `npm publish --tag n-api`
-
-Dalam contoh ini, menandai rilis dengan `n-api` telah memastikan bahwa, meskipun versi 1.2.0-3 lebih lambat dari versi yang diterbitkan non-N-API (1.2.0-2), itu tidak akan diinstal jika seseorang memilih untuk menginstal `iotivity-node` hanya dengan menjalankan `npm install iotivity-node`. Ini akan menginstal versi non-N-API secara default. Pengguna harus menjalankan `npm install iotivity-node@n-api` untuk menerima versi N-API. Untuk informasi lebih lanjut tentang penggunaan tag dengan npm, periksa out ["Menggunakan dist-tags"][].
-
-## Untuk memperkenalkan ketergantungan pada versi N-API dari sebuah paket
-
-Untuk menambahkan versi N-API dari `iotivity-node` sebagai dependensi, Maka `package.json` akan terlihat seperti ini:
-
-```json
-"dependencies": {
- "iotivity-node": "n-api"
-}
-```
-
-> Seperti yang dijelaskan dalam ["Menggunakan dist-tags"][], tidak seperti versi biasa, versi yang diberi tag tidak boleh ditangani oleh rentang versi seperti `"^2.0.0"` di dalam `package.json`. Itu alasannya adalah karena tag merujuk ke satu versi. Jadi, jika pengelola paket memilih untuk menandai versi paket yang lebih baru menggunakan tag yang sama, `npm update` akan menerima versi yang lebih baru. Ini harus diterima mengingat sifat eksperimental N-API saat ini. Untuk bergantung pada N-API-enabled versi selain yang terbaru diterbitkan, ketergantungan `package.json` akan harus merujuk ke versi persis seperti berikut:
-
-```json
-"dependencies": {
- "iotivity-node": "1.2.0-3"
-}
-```
-
-["Menggunakan dist-tags"]: https://docs.npmjs.com/getting-started/using-tags
diff --git a/pages/id/docs/guides/security/index.md b/pages/id/docs/guides/security/index.md
deleted file mode 100644
index e54c456030933..0000000000000
--- a/pages/id/docs/guides/security/index.md
+++ /dev/null
@@ -1,322 +0,0 @@
----
-title: Praktik Terbaik Keamanan Node.js
-layout: docs.hbs
----
-
-# Praktik Terbaik Keamanan Node.js
-
-## Maksud
-
-Dokumen ini bermaksud untuk memperluas [model ancaman][] saat ini dan memberikan pedoman yang ekstensif tentang cara mengamankan aplikasi Node.js.
-
-## Isi Dokumen
-
-- Praktik terbaik: Cara ringkas dan mudah untuk melihat praktik terbaik. Kami dapat menggunakan [masalah ini][security guidance issue] atau [panduan ini][nodejs guideline] sebagai titik awal. Penting untuk dicatat bahwa dokumen ini khusus untuk Node.js, jika Anda mencari sesuatu yang luas, pertimbangkan [Praktik Terbaik OSSF][].
-- Enjelasan serangan: Menjelaskan dan mendokumentasikan dengan bahasa yang jelas dan contoh kode (jika memungkinkan) serangan yang disebutkan dalam model ancaman.
-- Pustaka Pihak Ketiga: Mendefinisikan ancaman (serangan typo-squatting, paket berbahaya...) dan praktik terbaik sehubungan dengan dependensi modul node, dll...
-
-## Daftar Ancaman
-
-### Denial of Service dari server HTTP (CWE-400)
-
-Ini adalah serangan di mana aplikasi menjadi tidak tersedia untuk tujuan yang dirancang karena cara memproses permintaan HTTP yang masuk. Permintaan ini tidak perlu sengaja dibuat oleh pelaku jahat: klien yang dikonfigurasi atau bermasalah juga dapat mengirim pola permintaan ke server yang mengakibatkan penolakan layanan.
-
-Permintaan HTTP diterima oleh server HTTP Node.js dan diserahkan ke kode aplikasi melalui handler permintaan yang terdaftar. Server tidak mem-parsing isi dari badan permintaan. Oleh karena itu, setiap DoS yang disebabkan oleh isi dari badan permintaan setelah diserahkan ke handler permintaan bukanlah kerentanan dalam Node.js itu sendiri, karena tanggung jawab kode aplikasi untuk menanganinya dengan benar.
-
-Pastikan bahwa WebServer menangani kesalahan soket dengan benar, misalnya, ketika server dibuat tanpa penanganan kesalahan, maka akan rentan terhadap DoS
-
-```js
-const net = require('net');
-
-const server = net.createServer(function (socket) {
- // socket.on('error', console.error) // ini mencegah server menjadi crash
- socket.write('Echo server\r\n');
- socket.pipe(socket);
-});
-
-server.listen(5000, '0.0.0.0');
-```
-
-Jika _permintaan buruk_ dilakukan, server dapat menjadi crash.
-
-Contoh serangan DoS yang tidak disebabkan oleh isi permintaan adalah [Slowloris][]. Pada serangan ini, permintaan HTTP dikirim secara perlahan-lahan dan terfragmentasi, satu fragmen pada satu waktu. Sampai permintaan lengkap diterima, server akan menahan sumber daya yang diperuntukkan untuk permintaan tersebut. Jika cukup banyak permintaan seperti ini dikirim pada waktu yang sama, jumlah koneksi simultan akan segera mencapai maksimumnya sehingga mengakibatkan serangan DoS. Inilah sebabnya mengapa serangan ini tidak bergantung pada isi permintaan, tetapi pada waktu dan pola permintaan yang dikirim ke server.
-
-**Pengendalian**
-
-- Gunakan reverse proxy untuk menerima dan meneruskan permintaan ke aplikasi Node.js. Reverse proxies dapat menyediakan caching, load balancing, IP blacklisting, dan sebagainya, yang mengurangi kemungkinan serangan DoS menjadi efektif.
-- Konfigurasikan server timeouts dengan benar sehingga koneksi yang idle atau permintaan yang datang terlalu lambat dapat dijatuhkan. Lihat timeout yang berbeda pada [`http.Server`][], terutama `headersTimeout`, `requestTimeout`, `timeout`, dan `keepAliveTimeout`.
-- Batasi jumlah soket terbuka per host dan secara keseluruhan. Lihat [dokumentasi http][], terutama `agent.maxSockets`, `agent.maxTotalSockets`, `agent.maxFreeSockets`, dan `server.maxRequestsPerSocket`.
-
-### Pengikatan Ulang DNS (CWE-346)
-
-Ini adalah serangan yang dapat menargetkan aplikasi Node.js yang dijalankan dengan inspektor debugging diaktifkan menggunakan [--inspect switch][].
-
-Karena situs web yang dibuka di browser web dapat membuat permintaan WebSocket dan HTTP, mereka dapat menargetkan inspektor debugging yang berjalan secara lokal. Hal ini biasanya dicegah oleh [same-origin policy][] yang diterapkan oleh browser modern, yang melarang skrip dari mencapai sumber daya dari asal yang berbeda (yang berarti situs web jahat tidak dapat membaca data yang diminta dari alamat IP lokal).
-
-Namun, melalui DNS rebinding, penyerang dapat sementara mengendalikan asal untuk permintaan mereka sehingga mereka tampak berasal dari alamat IP lokal. Ini dilakukan dengan mengendalikan baik situs web maupun server DNS yang digunakan untuk menyelesaikan alamat IP-nya. Lihat [DNS Rebinding wiki][] untuk lebih detail.
-
-**Pengurangan Risiko**
-
-- Matikan inspektor pada sinyal _SIGUSR1_ dengan melekatkan pendengar `process.on('SIGUSR1',...)` kepadanya.
-- Jangan jalankan protokol inspektor di produksi.
-
-### Pemaparan Informasi Sensitif kepada Pelaku yang Tidak Sah (CWE-552)
-
-Semua file dan folder yang terdapat pada direktori saat ini dimasukkan ke dalam registri npm selama publikasi paket.
-
-Terdapat beberapa mekanisme untuk mengontrol perilaku ini dengan menentukan daftar blokir dengan `.npmignore` dan `.gitignore` atau dengan menentukan daftar izin dalam `package.json`
-
-**Pengurangan Risiko**
-
-- Menggunakan `npm publish --dry-run` untuk melihat semua file yang akan dipublikasikan. Pastikan untuk meninjau kontennya sebelum menerbitkan paket.
-- Juga penting untuk membuat dan menjaga file-file yang diabaikan seperti `.gitignore` dan `.npmignore`. Dalam file-file ini, Anda dapat menentukan file/folder mana yang tidak boleh dipublikasikan. [Properti file][] dalam `package.json` memungkinkan operasi sebaliknya -- allowed list.
-- Jika terjadi pemaparan, pastikan untuk [membatalkan publikasi paket][].
-
-### Pemalsuan Permintaan HTTP (CWE-444)
-
-Ini adalah serangan yang melibatkan dua server HTTP (biasanya proxy dan aplikasi Node.js). Klien mengirimkan permintaan HTTP yang pertama-tama melewati server front-end (proxy) dan kemudian diarahkan ke server back-end (aplikasi). Ketika front-end dan back-end menafsirkan permintaan HTTP yang ambigu dengan cara yang berbeda, maka ada potensi bagi penyerang untuk mengirimkan pesan berbahaya yang tidak akan terlihat oleh front-end tetapi akan terlihat oleh back-end, efektif "menyelundupkannya" melewati server proxy.
-
-Lihat [CWE-444][] untuk deskripsi yang lebih terperinci dan contoh-contohnya.
-
-Karena serangan ini tergantung pada Node.js menafsirkan permintaan HTTP secara berbeda dari server HTTP (acak) lainnya, serangan yang berhasil dapat disebabkan oleh kerentanan di Node.js, server front-end, atau keduanya. Jika cara permintaan diinterpretasikan oleh Node.js konsisten dengan spesifikasi HTTP (lihat [RFC7230][]), maka tidak dianggap sebagai kerentanan di Node.js.
-
-**Pengurangan Risiko**
-
-- Jangan gunakan opsi `insecureHTTPParser` saat membuat Server HTTP.
-- Konfigurasikan server front-end untuk menormalkan permintaan yang ambigu.
-- Terus memantau kerentanan penyelundupan permintaan HTTP baru di Node.js dan server front-end pilihan.
-- Gunakan HTTP/2 ujung ke ujung dan nonaktifkan penurunan versi HTTP jika memungkinkan.
-
-### Paparan Informasi melalui Timing Attacks (CWE-208)
-
-Ini adalah serangan yang memungkinkan penyerang mempelajari informasi yang berpotensi sensitif dengan, misalnya, mengukur berapa lama waktu yang dibutuhkan aplikasi untuk merespons permintaan. Serangan ini tidak spesifik untuk Node.js dan dapat menargetkan hampir semua runtime.
-
-Serangan itu dimungkinkan setiap kali aplikasi menggunakan rahasia dalam operasi sensitif waktu (mis., Cabang). Pertimbangkan untuk menangani autentikasi dalam aplikasi tipikal. Di sini, metode autentikasi dasar menyertakan email dan kata sandi sebagai kredensial. Informasi pengguna diambil dari input yang disediakan pengguna dari DBMS idealnya. Setelah mengambil informasi pengguna, kata sandi dibandingkan dengan informasi pengguna yang diambil dari database. Menggunakan perbandingan string bawaan membutuhkan waktu lebih lama untuk nilai panjang yang sama. Perbandingan ini, ketika dijalankan untuk jumlah yang dapat diterima, dengan enggan meningkatkan waktu respons permintaan. Dengan membandingkan waktu respons permintaan, penyerang dapat menebak panjang dan nilai kata sandi dalam permintaan dalam jumlah besar.
-
-**Mitigasi**
-
-- Crypto API memperlihatkan fungsi `timingSafeEqual` untuk membandingkan nilai sensitif aktual dan yang diharapkan menggunakan algoritme waktu konstan.
-- Untuk perbandingan kata sandi, Anda dapat menggunakan [scrypt][] yang tersedia juga di modul crypto asli.
-
-- Lebih umum, hindari penggunaan rahasia dalam operasi waktu variabel. Ini termasuk percabangan rahasia dan, ketika penyerang dapat ditempatkan bersama di infrastruktur yang sama (misalnya, mesin cloud yang sama), menggunakan rahasia sebagai indeks ke dalam memori. Menulis kode waktu konstan dalam JavaScript itu sulit (sebagian karena JIT). Untuk aplikasi kripto, gunakan API kripto atau WebAssembly bawaan (untuk algoritme yang tidak diterapkan secara asli).
-
-### Modul Pihak Ketiga Berbahaya (CWE-1357)
-
-Saat ini, di Node.js, paket apa pun dapat mengakses sumber daya yang kuat seperti akses jaringan. Selain itu, karena mereka juga memiliki akses ke sistem file, mereka dapat mengirimkan data apa saja ke mana saja.
-
-Semua kode yang berjalan ke proses node memiliki kemampuan untuk memuat dan menjalankan kode arbitrer tambahan dengan menggunakan `eval()`(atau yang setara). Semua kode dengan akses tulis sistem file dapat mencapai hal yang sama dengan menulis ke file baru atau yang sudah ada yang dimuat.
-
-Node.js memiliki [¹][experimental-features] [mekanisme kebijakan][] eksperimental untuk mendeklarasikan sumber daya yang dimuat sebagai tidak tepercaya atau tepercaya. Namun, kebijakan ini tidak diaktifkan secara default. Pastikan untuk menyematkan versi ketergantungan dan menjalankan pemeriksaan otomatis untuk kerentanan menggunakan alur kerja umum atau skrip npm. Sebelum menginstal paket, pastikan paket ini dipertahankan dan menyertakan semua konten yang Anda harapkan. Hati-hati, kode sumber Github tidak selalu sama dengan yang dipublikasikan, validasi di _node_modules_.
-
-#### Serangan rantai pasokan
-
-Serangan rantai suplai pada aplikasi Node.js terjadi ketika salah satu ketergantungannya (baik langsung atau transitif) terganggu. Hal ini dapat terjadi karena aplikasi terlalu lemah dalam spesifikasi dependensi (memungkinkan pembaruan yang tidak diinginkan) dan/atau kesalahan ketik umum dalam spesifikasi (rentan terhadap [typosquatting][]).
-
-Penyerang yang mengendalikan paket upstream dapat menerbitkan versi baru dengan kode berbahaya di dalamnya. Jika aplikasi Node.js bergantung pada paket itu tanpa ketat pada versi mana yang aman untuk digunakan, paket tersebut dapat diperbarui secara otomatis ke versi jahat terbaru, membahayakan aplikasi.
-
-Ketergantungan yang ditentukan dalam file `package.json` dapat memiliki nomor versi atau rentang yang tepat. Namun, saat menyematkan dependensi ke versi yang tepat, dependensi transitifnya tidak disematkan sendiri. Ini masih membuat aplikasi rentan terhadap pembaruan yang tidak diinginkan / tidak terduga.
-
-Vektor serangan yang mungkin terjadi:
-
-- Serangan salah ketik
-- Keracunan Lockfile
-- Pengelola yang dikompromikan
-- Paket Berbahaya
-- Kebingungan Ketergantungan
-
-**Mitigasi**
-
-- Cegah npm mengeksekusi skrip arbitrer dengan `--ignore-scripts`
- - Selain itu, Anda dapat menonaktifkannya secara global dengan `npm config set quit-scripts true`
-- Sematkan versi dependensi ke versi tetap tertentu, bukan versi yang merupakan rentang atau dari sumber yang dapat diubah.
-- Gunakan lockfiles, yang menyematkan setiap ketergantungan (langsung dan transitif).
- - Gunakan [Mitigasi untuk kerusakan lockfile][].
-- Otomatiskan pemeriksaan kerentanan baru menggunakan CI, dengan alat seperti [`npm-audit`][].
- - Alat seperti [`Socket`][] dapat digunakan untuk menganalisis paket dengan analisis statis untuk menemukan perilaku berisiko seperti akses jaringan atau sistem file.
-- Gunakan [`npm ci`][] alih-alih ` instal npm`. Ini memaksa file kunci sehingga ketidakkonsistenan antara itu dan File _package.json_ menyebabkan kesalahan (alih-alih mengabaikan file kunci mendukung _package.json_).
-- Periksa file _package.json_ dengan hati-hati untuk kesalahan/salah ketik pada nama dependencies.
-
-### Pelanggaran Akses Memori (CWE-284)
-
-Serangan berbasis memori atau berbasis tumpukan bergantung pada kombinasi kesalahan manajemen memori dan pengalokasi memori yang dapat dieksploitasi. Seperti semua runtime, Node.js rentan terhadap serangan ini jika proyek Anda berjalan di mesin bersama. Menggunakan heap yang aman berguna untuk mencegah kebocoran informasi sensitif karena pointer overruns dan underruns.
-
-Sayangnya, secure heap tidak tersedia di Windows. Informasi lebih lanjut dapat ditemukan di Node.js [dokumentasi secure-heap][].
-
-**Mitigasi**
-
-- Gunakan `--secure-heap=n` bergantung pada aplikasi Anda di mana _n_ dialokasikan ukuran byte maksimum.
-- Jangan menjalankan aplikasi produksi Anda di mesin bersama.
-
-### Penambalan Monyet (CWE-349)
-
-Penambalan monyet mengacu pada modifikasi properti dalam waktu proses yang bertujuan untuk mengubah perilaku yang ada. Contoh:
-
-```js
-// eslint-disable-next-line no-extend-native
-Array.prototype.push = function (item) {
- // overriding the global [].push
-};
-```
-
-**Mitigasi**
-
-Bendera `--frozen-intrinsics` mengaktifkan intrinsik beku eksperimental[¹][experimental-features], yang berarti semua objek dan fungsi JavaScript bawaan dibekukan secara rekursif. Oleh karena itu, cuplikan berikut **tidak akan** menggantikan perilaku default `Array.prototype.push`
-
-```js
-// eslint-disable-next-line no-extend-native
-Array.prototype.push = function (item) {
- // overriding the global [].push
-};
-
-// Uncaught:
-// TypeError