# نكست جي إس

نيكست جي أس (بالإنجليزية: Next.js) هو إطار عمل لتطوير الويب مفتوح المصدر مبني فوق Node.js لتمكين تطبيقات الويب التي تستخدم مكتبة رياكت بإجراء بعض المميزات مثل العرض من جانب الخادم (SSR) وإنشاء مواقع الويب الثابتة (SSG). نيكست جي أس مذكور ضمن وثائق رياكت في قسم «الأدوات التطوير الموصى بها» وتنصح وثائق رياكت المطورين بذلك كحل عند «إنشاء موقع ويب مقدم من الخادم باستخدام Node.js». حيث تقوم تطبيقات رياكت التقليدية بعرض محتواها في متصفح على جانب العميل، بينما يقوم Next.js بتوسيع هذه الوظيفة لتشمل تطبيقات الويب المعروضة على جانب الخادم.
حقوق الطبع والنشر والعلامات التجارية الخاصة بـ Next.js مملوكة لشركة Vercel ، المعروفة سابقًا باسم ZEIT، والتي تقود عملية تطوير المصادر المفتوحة وتدعمها.

## نظرة عامة

Next.js هو إطار عمل React يمكّن العديد من الميزات الإضافية، بما في ذلك العرض من جانب الخادم (SSR) وإنشاء مواقع ويب ثابتة (SSG). React هي مكتبة JavaScript تُستخدم تقليديًا لإنشاء تطبيقات الويب المعروضة في متصفح العميل باستخدام JavaScript. يواجه المطورون العديد من المشكلات المتعلقة بهذه الإستراتيجية، مثل عدم تلبية احتياجات المستخدمين الذين ليس لديهم إمكانية الوصول إلى JavaScript أو قاموا بتعطيلها، ومشكلات الأمان المحتملة، وقت تحميل الصفحة، ويمكن أن يضر ذلك بالتحسين محركات البحث الخاصة بالموقع. يُمكن لأطر العمل مثل Next.js تتجنب هذه المشكلات عن طريق السماح بعرض بعض أو كل موقع الويب على جانب الخادم قبل إرسالها إلى العميل. يُعد Next.js أحد أكثر الأطر شيوعًا في React. إنها واحدة من العديد من «أدوات التطوير» الموصى بها والمتاحة عند بدء تطبيق جديد، وكلها توفر طبقة من التجريد للمساعدة في المهام المشتركة. يتطلب نكست جي اس وجود Node.js ويمكن تهيئة نكست جي اس باستخدام مدير حزم نود جي اس (NPM).
ساهمت Google في مشروع Next.js ، بـ 43 Pull Request في عام 2019، التي ساعدت في تقليم JavaScript غير المستخدم، وتقليل وقت التحميل، وإضافة مقاييس محسّنة. اعتبارًا من مارس 2020، يتم استخدام الإطار بواسطة العديد من مواقع الويب الكبيرة، بما في ذلك Netflix وGitHub وUber وTicketmaster وStarbucks . في أوائل عام 2020، أُعلن أن Vercel قد حصل على واحد وعشرين مليون دولار في تمويل السلسلة A لدعم التحسينات على البرنامج. المؤلف الأصلي للإطار، Guillermo Rauch، هو حاليًا الرئيس التنفيذي لشركة Vercel ، والمطور الرئيسي للمشروع هو Tim Neutkens.

## تاريخ التطوير

تم إصدار Next.js لأول مرة كمشروع مفتوح المصدر على GitHub في 25 أكتوبر 2016؛ منذ 8 سنين (2016-10-25) . تم تطويره في الأصل استنادًا إلى ستة مبادئ: وظيفة خارج الصندوق لا تتطلب أي إعداد، وجافا سكريبت في كل مكان، وجميع الوظائف مكتوبة بلغة جافا سكريبت، وتقسيم الكود التلقائي والعرض من جانب الخادم الخادم، وجلب البيانات القابل للتكوين، وتوقع الطلبات، وتبسيط عملية التطوير. تم الإعلان عن Next.js 2.0 في مارس 2017 بما في ذلك العديد من التحسينات التي سهلت العمل مع مواقع الويب الصغيرة. كما أنها زادت من كفاءة البناء وحسنت قابلية التوسع في ميزة تحديث الوحدات السريع. تم إصدار الإصدار 7.0 في سبتمبر 2018 مع تحسين معالجة الأخطاء ودعم React context API لتحسين معالجة المسار الديناميكي. كان هذا أيضًا الإصدار الأول للترقية إلى الإصدار الرابع من ويب باك. تم إصدار الإصدار 8.0 في فبراير 2019 وكان أول إصدار يقدم نشرًا بدون خادم للتطبيقات، حيث يتم تقسيم الكود إلى وظائف lambda يتم تشغيلها عند الطلب. قلل الإصدار أيضًا من الوقت والموارد المطلوبة لعمليات التصدير الثابتة وتحسين أداء الجلب المسبق. تضمن الإصدار 9.3، الذي تم الإعلان عنه في مارس 2020، تحسينات متنوعة ودعمًا عالميًا لوحدة Sass و CSS. في 27 يوليو 2020، تم الإعلان عن الإصدار 9.5 من Next.js ، مضيفًا إمكانات جديدة بما في ذلك التجديد الثابت المتزايد وإعادة الكتابة وإعادة التوجيه. في 15 يونيو 2021، تم إطلاق الإصدار 11 من Next.js ، والذي قدم من بين أمور أخرى: دعم ويب باك 5، إمكانية المعاينة للبرمجة تعاونية في الوقت الفعلي "Next.js Live"، والوظيفة التجريبية للتحويل التلقائي من إنشاء تطبيق React إلى Next.js نموذج متوافق "Create React App Migration". في 26 أكتوبر 2021، تم إصدار Next.js 12، بإضافة مجمع ومُترجم مكتوب بلغة Rust ، مما يجعل التجميع أسرع، ودعم AVIF ، ووظائف الحافة والبرمجيات الوسيطة، واستيراد وحدات ESM ودعم إسترداد الوحدات من خلال الورابط URL.

## التصميم والمميزات

يدعم Next.js التصميم باستخدام CSS بالإضافة إلى Scss وSass المترجمة مسبقًا و CSS-in-JS و JSX المُنسق. بالإضافة إلى ذلك، تم تصميمه بدعم TypeScript والتجميع الذكي. يتم استخدام مترجم Babel مفتوح المصدر لتحويل وترجمة التعليمات البرمجية إلى JavaScript يمكن للمتصفح فهمها من خلال مجمع الحزم ويب باك، وهي أداة أخرى مفتوحة المصدر، يتم استخدام كل هذه الأدوات مع إن بي إم في الطرفية.
الميزة الرئيسية لـ Next.js هي استخدامه للتقديم الصفحات من جانب الخادم لتقليل العبء على متصفحات الويب وتوفير أمان محسن. يمكن القيام بذلك لأي جزء من التطبيق أو المشروع بأكمله، مما يسمح بتخصيص الصفحات الغنية بالمحتوى لعرضها من جانب الخادم. يمكن أيضًا القيام بذلك فقط للزائرين لأول مرة، لتقليل العبء على متصفحات الويب التي لم تقم بعد بتنزيل أي من أصول الموقع. تكتشف ميزة «إعادة التحميل السريع» التغييرات أثناء إجرائها وتعيد عرض الصفحات المناسبة بحيث يتجنب الخادم الحاجة إلى إعادة التشغيل. يسمح هذا بالتغييرات التي تم إجراؤها على رمز التطبيق لتنعكس على الفور في متصفح الويب، على الرغم من أن بعض المتصفحات تتطلب تحديث الصفحة. يستخدم البرنامج التوجيه-عبر-الملفات من أجل الصفحات ويسهل على المطورين ويتضمن نكست جي اس دعمًا للتوجيه الديناميكي. تشمل الميزات الأخرى استبدال الوحدات السريع بحيث يمكن استبدال الوحدات النمطية مباشر، وتقسيم الكود التلقائي، والذي يتضمن فقط الكود الضروري لتحميل الصفحة، والجلب المسبق للصفحة لتقليل وقت التحميل.
يدعم Next.js أيضًا التجديد الثابت المتزايد (ISR) وإنشاء الموقع الثابت (SSG) - عادةً ما يتم إنشاء نسخة مجمعة من موقع الويب أثناء وقت الإنشاء وحفظها كمجلد التالي. عندما يقوم المستخدم بتقديم طلب، يتم تخزين النسخة المبنية مسبقًا والتي هي عبارة عن صفحات HTML ثابتة مؤقتًا وإرسالها إليهم. هذا يجعل وقت التحميل سريعًا جدًا، ولكنه ليس مناسبًا لكل موقع ويب لأن المواقع التفاعلية التي تتغير كثيرًا وتستخدم الكثير من مدخلات المستخدم لن تكون مناسبة.

## انظر أيضا

* لامب
* رياكت (مكتبة جافا سكريبت)
* Vue.js
* إطار عمل جافا سكريبت

## مراجع

* ↑ April 21, Matt Asay in Developer on; 2020; Pst, 9:51 Am (21 Apr 2020). "How Next.js aims to simplify front-end development". تيك روبيبليك (بالإنجليزية). Archived from the original on 2022-05-23. Retrieved 2020-10-20. {{استشهاد ويب}}: الوسيط |مؤلف2-الأخير= يحوي أسماء رقمية (help)صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* ↑ "vercel/next.js". GitHub. مؤرشف من الأصل في 2019-03-16. اطلع عليه بتاريخ 2019-03-17.
* ↑ "Next.js First Release". GitHub. 14 مارس 2019. مؤرشف من الأصل في 2020-10-10. اطلع عليه بتاريخ 2019-03-17.
* ↑ "Recommended Toolchains". React documentation. مؤرشف من الأصل في 2022-05-17. اطلع عليه بتاريخ 2021-07-10.
* ↑ ZEIT is now Vercel، 21 أبريل 2020، مؤرشف من الأصل في 2021-12-15
* ↑ "Develop. Preview. Ship. For the best frontend teams – Vercel". vercel.com. مؤرشف من الأصل في 2021-10-06. اطلع عليه بتاريخ 2020-09-22.
* ↑ "Differences Between Static Generated Sites And Server-Side Rendered Apps". Smashing Magazine (بالإنجليزية). 2 Jul 2020. Archived from the original on 2022-05-21. Retrieved 2020-10-19.
* 1 2 3 4 5 6 7 Thakkar, Mohit (2020), Thakkar (ed.), "Next.js", Building React Apps with Server-Side Rendering: Use React, Redux, and Next to Build Full Server-Side Rendering Applications (بالإنجليزية), Berkeley, CA: Apress, pp. 93–137, DOI:10.1007/978-1-4842-5869-9_3, ISBN:978-1-4842-5869-9, Archived from the original on 2022-06-06, Retrieved 2020-10-20
* 1 2 Thakkar, Mohit (2020), Thakkar (ed.), "Adding Server-Side Rendering to Your React Application", Building React Apps with Server-Side Rendering: Use React, Redux, and Next to Build Full Server-Side Rendering Applications (بالإنجليزية), Berkeley, CA: Apress, pp. 139–152, DOI:10.1007/978-1-4842-5869-9_4, ISBN:978-1-4842-5869-9, Archived from the original on 2020-10-26, Retrieved 2020-10-20
* ↑ December 2, Matt Asay in Developer on; 2019; Pst, 11:58 Am (2 Dec 2019). "Why front-end development may be the new frontier". تيك روبيبليك (بالإنجليزية). Archived from the original on 2022-03-25. Retrieved 2020-10-20. {{استشهاد ويب}}: الوسيط |مؤلف2-الأخير= يحوي أسماء رقمية (help)صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* ↑ "Comparing Styling Methods In Next.js". Smashing Magazine (بالإنجليزية). 17 Sep 2020. Archived from the original on 2022-03-19. Retrieved 2020-10-20.
* ↑ January 31, Matt Asay in Developer on; 2020; Pst, 6:33 Pm (Feb 2020). "An insider's look at Google's web framework contributions to Next.js and more". تيك روبيبليك (بالإنجليزية). Archived from the original on 2022-05-21. Retrieved 2020-10-19. {{استشهاد ويب}}: الوسيط |مؤلف2-الأخير= يحوي أسماء رقمية (help)صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* ↑ "Static site generation with single page app functionality? That's what's coming Next(.js)". Stack Overflow Blog (بالإنجليزية الأمريكية). 7 Oct 2020. Archived from the original on 2022-03-25. Retrieved 2020-10-20.
* ↑ Krill, Paul (31 Oct 2016). "Next step after Node.js: Framework for 'universal' JavaScript apps". InfoWorld (بالإنجليزية). Archived from the original on 2022-05-21. Retrieved 2020-10-20.
* ↑ Krill, Paul (28 Mar 2017). "Next.js 2.0 plays better with React and JavaScript". InfoWorld (بالإنجليزية). Archived from the original on 2022-03-18. Retrieved 2020-10-20.
* ↑ Krill, Paul (21 Sep 2018). "Next.js 7 framework compiles faster, supports WebAssembly". InfoWorld (بالإنجليزية). Archived from the original on 2022-05-21. Retrieved 2020-10-20.
* ↑ Krill, Paul (14 Feb 2019). "Next.js 8 now supports serverless apps". InfoWorld (بالإنجليزية). Archived from the original on 2022-05-21. Retrieved 2020-10-20.
* ↑ Krill, Paul (12 Mar 2020). "Next.js upgrade emphasizes static site generation". InfoWorld (بالإنجليزية). Archived from the original on 2022-05-21. Retrieved 2020-10-20.
* ↑ Krill، Paul (27 يوليو 2020). "Next.js adds incremental static pages regeneration". InfoWorld. مؤرشف من الأصل في 2020-10-02. اطلع عليه بتاريخ 2020-09-22.
* ↑ "Next.js 11". مؤرشف من الأصل في 2022-05-07. اطلع عليه بتاريخ 2021-07-10.
* ↑ "Next.js 12". nextjs.org (بالإنجليزية). Archived from the original on 2022-06-02. Retrieved 2021-10-27.
* ↑ "Comparing Styling Methods In Next.js". Smashing Magazine (بالإنجليزية). 17 Sep 2020. Archived from the original on 2022-03-19. Retrieved 2020-10-20.
* ↑ Krill، Paul (14 فبراير 2019). "Next.js 8 now supports serverless apps". InfoWorld. مؤرشف من الأصل في 2020-10-02. اطلع عليه بتاريخ 2020-09-22.
* ↑ January 31, Matt Asay in Developer on; 2020; Pst, 6:33 Pm (Feb 2020). "An insider's look at Google's web framework contributions to Next.js and more". تيك روبيبليك (بالإنجليزية). Archived from the original on 2022-06-08. Retrieved 2020-10-19. {{استشهاد ويب}}: الوسيط |مؤلف2-الأخير= يحوي أسماء رقمية (help)صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* ↑ "Incremental Static Regeneration with Next.js". Vercel (بالإنجليزية). Archived from the original on 2022-04-10. Retrieved 2022-03-06.