توسعه دهندگان کدهای خود را با زبانهایی مینویسند که این زبانها بیشتر مورد پسند آنهاست یا به عبارت دیگر Developer-Friendly هستند، مانند JSX، TypeScript و نسخه مدرن جاوا اسکریپت. این زبانهای برنامهنویسی علاوه بر ایجاد اعتماد در برنامهنویسان، کدهای آن ها را نیز کاربردیتر و موثرتر میکنند. اما باید به گونهای از جاوا اسکریپت تبدیل شوند که برای مرورگرها قابل فهم باشند. اینجاست که مفهوم کامپایل به میان میآید.
کامپایل به فرآیند گرفتن کد در یک زبان و تبدیل آن به زبان دیگر یا نسخه دیگری از همان زبان گفته میشود.
در Next.js، کامپایل در مرحله توسعه و همزمان با کدنویسی و به عنوان بخشی از مرحله ساخت(Build) در جهت آماده سازی کد برای تولید انجام میگیرد.
توسعه دهندگان کدی را مینویسند که برای فهم و خوانایی(Readability) انسان مناسب باشد. این کد ممکن است حاوی اطلاعات اضافی نیز باشد که برای اجرای کد ضروری نیستند؛ مانند: کامنتها، فاصلهها، خطوط متعدد(Multiple lines) و... .
کمینهسازی یا Minifying فرآیند حذف قالب بندی(Format) کد و کامنتهای غیرضروری بدون تغییر عملکرد کد است و هدف از آن بهبود سرعت عملکرد برنامه از طریق کاهش حجم فایل برنامه است.
باندلینگ یا Bundling فرآیندی است برای حل کردن وب وابستگیها(Web of dependencies) و ادغام(یا پکیج کردن) فایلها(یا ماژولها) در بسته(Bundle)های بهینهسازی شده برای مرورگر با هدف کاهش تعداد درخواست(Request)ها برای فایلها هنگام بازدید کاربر از یک صفحه وب.
نکست جی اس دارای پشتیبانی داخلی برای تقسیم کد است. هر فایل داخل دایرکتوری pages/ شما، به طور خودکار، در مرحله ساخت، به باندل جاوا اسکریپت خود تقسیم میشود.
۱) هر کدی که بین صفحات به اشتراک گذاشته میشود نیز به باندل های دیگری تقسیم میشود تا از دانلود مجدد همان کد در نَویگِیشِن(Navigation) بیشتر جلوگیری شود.
۲) بعد از Load اولیه صفحه، Next.js میتواند شروع کند به پیش بارگذاری(Pre-loading) کد صفحات دیگری که کاربران احتمالاً به آن ها نیز مراجعه خواهند کرد.
۳) ایمپورت پویا(Dynamic Import) روش دیگری برای تقسیم بندی دستی(Manual) کدهایی است که در ابتدا بارگذاری شدهاند.
زمان ساخت(یا مرحله ساخت) نامی است که به یکسری مراحل داده میشود و در این مراحل، کد برنامه برای تولید آمادهسازی میشود.
زمانی که برنامه خود را میسازید، Next.js کد شما را به فایلهای بهینهسازی شده تولید یا Production-Optimized تبدیل میکند که آماده قرار گرفتن و استقرار در سرورها و استفاده کاربران هستند. این فایلها عبارتند از:
۱) فایلهای HTML برای صفحات ایجاد شده به صورت استاتیک یا ایستا
۲) کدهای جاوا اسکریپتی برای رندر شدن صفحات در سرور
۳) کدهای جاوا اسکریپتی برای ساخت صفحات تعاملی در قسمت مشتریان(Client)
۴) فایلهای CSS
زمان اجرا (یا زمان درخواست) به مدت زمانی اشاره دارد که برنامه شما در پاسخ به درخواست کاربر اجرا میشود(پس از اینکه برنامه شما ساخته و اجرا میشود).
تا اینجا با مفاهیم و ویژگیهای Next.js آشنا شدید. حال در ادامه بیایید با هم در مورد Client، Server و Rendering بیشتر صحبت کنیم.
سرور: به رایانهای در یک مرکز داده(Data Centre) اشاره دارد که کد برنامه شما را ذخیره میکند، درخواستهای مشتری را دریافت میکند، مقداری محاسبات را انجام میدهد و پاسخ مناسب را ارسال میکند.
در مقابل، Next.js به طور پیشفرض هر صفحه را پیش رندر میکند. پیش رندر به این معناست که: به جای اینکه همه کارها توسط جاوا اسکریپت در کامپیوتر کاربر انجام شود، HTML از پیش بر روی سرور ساخته و تولید یا بهتر است بگوییم Generate میشود. در عمل این بدان معناست که برای یک برنامه کاملاً رندر شده توسط مشتری(منظور این است که اگر برنامهای به صورت کامل توسط Client رندر شود)، کاربر یک صفحه خالی را در حین انجام رندر میبیند. در مقایسه با یک برنامه از پیش رندر شده که در آن کاربر HTML ساختهشده را میبیند:
حال بیایید در مورد دو نوع مختلف پیش رندر با هم صحبت کنیم:
دانستن اینکه کد شما در کجا ذخیره شده و پس از استقرار قرار است در شبکه اجرا شود، به نوبه خود حائز اهمیت است. میتوان شبکه را اینگونه تعریف کرد: رایانههای(یا سرورهای) متصل به یکدیگر که قادر به اشتراکگذاری منابع هستند. در مورد یک برنامه Next.js، کد برنامه شما میتواند در سرورهای مبدأ، شبکههای تحویل محتوا یا همان CDN و Edge توزیع شود. حال بیایید باهم ببینیم هر یک از آنها چیستند:
همانطور که قبلاً گفتیم، سرور به رایانه اصلی اطلاق میشود که نسخه اصلی کد برنامه شما بر روی آن ذخیره و اجرا میشود. از عبارت مبدأ یا Origin به این دلیل برای این سرورها استفاده میشود که آن را از مکانهای دیگری که میتوان کد برنامه را بر روی آنها ذخیره نمود(مانند سرورهای CDN و Edge)، متمایز کرد. هنگامی که یک سرور مبدأ درخواستی را دریافت میکند، قبل از ارسال پاسخ، قسمتی از محاسبات را انجام میدهد. نتیجه این کار محاسباتی را میتوان به CDN منتقل کرد.
سرورهای CDN، محتوای ثابت(مانند HTML و فایل های تصویری) را در مکانهای مختلف در سرتاسر جهان ذخیره میکنند و بین کلاینت و سرور اصلی قرار میگیرند. هنگامی که یک درخواست جدید وارد میشود، نزدیکترین مکان CDN به کاربر میتواند با نتیجه ذخیره شده(Cached result) پاسخ(Respond) دهد.
این باعث کاهش بار روی سرور مبدأ میشود زیرا دیگر نیازی نیست که محاسبات در هر درخواست انجام شوند. همچنین این کار را برای کاربر سریع تر میکند؛ زیرا پاسخ از موقعیت جغرافیایی نزدیک تر به آنها میآید.
در Next.js، از آنجایی که میتوان پیش رندر را زودتر از موعد انجام داد، CDNها برای ذخیره نتیجه استاتیک(Static result) کار مناسب هستند؛ به زبان سادهتر، فرآیند تحویل محتوا را سریعتر میکند.
عبارت The Edge، یک مفهوم تعمیمیافته برای حاشیه(Fringe) یا همان لبه شبکه است که نزدیکترین بخش به کاربر است. CDNها را میتوان بخشی از Edge در نظر گرفت؛ زیرا محتوای ثابت را در حاشیه(لبه) شبکه ذخیره میکند. همانند CDNها، سرورهای Edge نیز در چندین مکان در سراسر جهان توزیع میشوند. اما بر خلاف CDNها که محتوای ثابت(محتوای استاتیک) را ذخیره میکنند، برخی از سرورهای Edge میتوانند قسمتهای کوچکی از کد را اجرا کنند. این بدان معناست که هم Cache کردن و هم اجرای کد را میتوان در Edgeای که نزدیک به کاربر است انجام داد. با انتقال برخی از فرآیندها و محاسباتی که پیشتر در سمت سرور یا کلاینت انجام میشد به Edge، میتوانید برنامه خود را کارآمدتر کنید؛ زیرا مقدار کد ارسالی به کلاینت را کاهش میدهد و نیازی نیست که بخشی از درخواست کاربر دیگر نیاز نیست که به سرور مبدأ جهت انجام محاسبات بازگردانده شود؛ بنابراین میتوانیم شاهد کاهش چشمگیر تأخیر در پاسخگویی باشیم.
در Next.js میتوانید کد را با کمک یک میان افزار یا Middleware(میان افزار، نرم افزار و سرویسهای ابری است که خدمات و قابلیتهای مشترکی را به برنامهها ارائه میکند و به توسعهدهندگان و اپراتورها کمک میکند تا برنامهها را با کارایی بیشتری بسازند و بکارگیری کنند. بطورکلی میان افزار مانند یک چنل ارتباطی میان برنامهها، دادهها و کاربران عمل میکند) در Edge و بزودی با React Server Component اجرا کنید.
ما مفتخریم که در پیشگامان لوتوس با تیمی مجرب خدمات خود را در زمینههای طراحی وبسایت، اپلیکیشن، واقعیت افزوده و... با جدیدترین تکنولوژیهای روز دنیا از جمله React، Next.js،React Native و... ارائه میدهیم.
اگر میخواهید وبسایتی منحصربهفرد، متناسب با نیازهای خاص خودتان داشته باشید، یا اگر گمان میکنید داشتن یک اپلیکیشن موبایلی اهداف کسبوکارتان را محقق میکند، یا اگر هنوز نمیدانید چه محصولی برای پیادهسازی ایدهتان به کار میآید، با ما تماس بگیرید. شرکت نرمافزاری پیشگامان لوتوس با مشاوره و طراحی محصول ایدهآل، شما را در مسیر رشد کسبوکارتان همراهی میکند.