فهرست محتوا
بهطورکلی برنامهنویسی خصوصا برنامهنویسی در وب یکی از مهمترین حوزهها بهحساب میآید که خود آن به بخشهای مختلفی تقسیم میشود. در صورتی که بخواهیم بگوییم اصلیترین تقسیمبندی در این حوزه برنامهنویسی کدام است میتوانیم برنامهنویسی فرانتاند و بکاند را برای این منظور معرفی کنیم. در بخش بکاند ما با تمامی قابلیتهای برنامهنویسی پردازشی پشتصحنه یک سایت کار داریم. اما در فرانتاند هر چیزی که از آن سایت قابل رویت است قرار دارد. در مورد فریمورکهای بکاند میتوان به فریمورکهایی مانند لاراول و اکسپرس جی اس اشاره کرد، و در مورد فرانتاند هم فریمورکها و کتابخانههای زیادی وجود دارند که میتوانند یک سایت را بسازند. در این مقاله قصد داریم در مورد اینکه Next.js چیست صحبت کنیم و یکی از همین فریمورکهای فرانتاند را که رزومهای قوی دارد را به شما معرفی کنیم.
در رابطه با اینکه Next.js چیست باید گفت همانطور که از JS نوشته شده آن پیدا است با یکی از چندین فریمورک جاوا اسکریپتی طرفیم که البته با دیگر فریمورکهای رنگارنگی که برای این زبان وجود دارد و در خیلی از مواقع مانند قارچ از زمین میروید تفاوتهای زیادی دارد. در واقع باید گفت این فریمورک به استفادههای خاصی محدود شده است که هر چند این محدودیت آزادی عمل را از آن گرفته است اما کاربردهای اصلی آن را شامل میشود. در ادامه مقاله قبل از اینکه به بررسی این موضوع که Next.js چیست بپردازیم لازم است که در مورد JSها و همینطور کتابخانههای مستقلی که دارند مانند React صحبت کنیم.
برنامهنویسی با جاوا اسکریپت و ریکت
جاوا اسکریپت را میتوان یکی از زبانهای برنامهنویسی قدرتمند قدیمی دانست که در چند سال گذشته در وب غوغایی به پا کرده است و باید از این نظر گفت که در جایگاه اول زبانهای برنامهنویسی قرار گرفته است. این زبان برنامهنویسی در ابتدا صرفا برای طراحی ماژولهای متحرک در صفحات وب مورد استفاده قرار میگرفت و کاربردهای چندان زیادی را نداشت. با حرکت وب به سمت تعاملی شدن و تغییر وضعیت کلی اینترنت از سایتهای استاتیک به سمت سایتهای تعاملی و پویا که اصطلاحا به آن وب 2 (WEB 2) گفته میشود، جاوا اسکریپت هم جایگاه خود را بالاتر برد و به یکی از محبوبترین زبانهای برنامهنویسی تبدیل شد. شاید بتوان موثرترین زبان در ایجاد WEB 2 را همین جاوا اسکریپت معرفی کرد.
بعد از مدتی جاوا اسکریپت توانست با یکی از ابتکارات گوگل یعنی موتور V8 که روی مرورگر کروم قرار داشت ادغام شود. این موتور توانست یک هسته پردازشی فوقالعاده قوی را از JS ایجاد کند که در واقع کار زبانهای برنامهنویسی بکاند را هم انجام میداد و میتوانست با سرعت بالایی درخواستهای وارد شده به سرور را هم مدیریت کنید. این پدیده جدید نود جی اس نام گرفت که در مقاله Node JS چیست بهصورت کامل در مورد آن صحبت کردیم.
این محیط برنامهنویسی جدید بعد از مدتی به یکی از غولهای توسعه برنامههای وب در دنیا تبدیل شد و خیلی از برنامههای بزرگ با استفاده از آن ساخته شدهاند. همین موضوع باعث شد که یکپارچه شدن سایتها پیش بیاید و خیلی از سایتها بهصورت کامل از زبان برنامهنویسی جاوا اسکریپت برای خود استفاده کنند. اینجا نقطهای بود که رویش فریمورک های جاوا اسکریپت از زمین شروع شد و ادامه پیدا کرد. در صورتی که بخواهیم روراست باشیم باید گفت که هیچ زبانی به اندازه JS فریمورکهای متعدد و بعضا بهدردنخور ندارد. البته باید گفت که هیچ زبانی همسطح کاربردی که این زبان دارد را ندارد و در بین این خیل عظیم فریمورکها گزینههای طلاییای که توانستهاند بهترین رتبهبندیهای جهان را به خود اختصاص دهند وجود ندارد. در صورتی که نگاهی به مقاله بهترین فریم ورک طراحی سایت بیندازید متوجه خواهید شد که در سال 2021 بهترینها همه از جاوا اسکریپت بودهاند.
یکی از مهمترین فریمورکها و یا کتابخانههایی که در JS خود را نمایان کرد و به یکی از کاربردیترین المانها در این خصوص تبدیل شد، کتابخانههای ریکت هستند. ریکت یا همان React JS مجموعهای از کتابخانههای کاربردی و حرفهای است که برای خیلی از کاربردهای طراحی فرانتاند در اختیار طراحان قرار گرفته است و بهکارگیری ماژولهای قابل استفاده مجدد یا Reusable را برای پیادهسازی ماژولهای سایت بهصورت پیشرفته در اختیار برنامهنویسان قرار میدهد. روان بودن و همینطور کارایی بالایی که این ماژولها در اختیار برنامهنویسان قرار میدادند باعث شد که این فریمورک بتواند به مقام اولین فریمورک در لیست بهترین فریمورکهای طراحی سایت در سال 2021 دست پیدا کند.
قابلیتهای مختلفی در مورد ریکت وجود دارد که از مهمترین آنها میتوان بهسادگی در استفاده و همینطور نیتو (Native) بودن آن اشاره کرد. در واقع کدهای ریکت در زمان اجرا بهصورت کامل به مرورگر کاربر رفته و در آنجا رندر میشوند این مساله میتواند به ریکت کمک کند که صفحات خود را سریعتر لود کرده و منابع کمتری از سرور را استفاده کند. در صورتی که به اطلاعات کاملتری در مورد این کتابخانهها و ویژگیهایی که دارند نیاز دارید میتوانید بهسراغ مقاله ریکت چیست بروید.
البته باید خاطر نشان کرد که خود ریکت یک فریمورک نیست و مجموعهای از کتابخانهها است ولی فریمورکهای مختلف زیادی برای کار کردن با آن ارائه شده است و شما میتوانید از آن به تنهایی در کنار سایر فریمورکها استفاده کرده و یا با فریمورکهای ریکت کار طراحی سایت را انجام دهید. در مورد اینکه Next.js چیست باید گفت که با یکی از همین فریمورکهای ریکت طرف هستیم که برای ما ویژگیهای ریکت را با کمی تغییرات و کاربردهای متفاوت در اختیار میگذارد.
فریمورک Next.js چیست؟
Next.js یک فریمورک رایگان و اوپنسورس است که میتواند امکانات خوبی را برای کار کردن با کتابخانههای ریکت به زبان جاوا اسکریپت در اختیار ما قرار دهد، البته با این تفاوت که بعد از استفاده از ریکت و ایجاد صفحات وب نیتیو، این فریمورک کاری میکند که پردازشها در سمت سرور انجام شود و صفحات به صورت استاتیک منتقل شوند. این کار میتواند باعث افزایش سرعت شود و در واقع اگر بخواهیم بگوییم وظیفه اصلی Next.js چیست باید گفت که صفحات را با کتابخانههای ریکت و با استفاده از امکانات Server-Side Rendering طراحی و ایجاد میکند.
خود این فریمورک با استفاده از نود جی اس ساخته شده است و از یک هسته قوی برای رندر کردنهای سمت سرور خود استفاده میکند. البته باید گفت که این رندر کردن و هسته نود جی اس با وجود اینکه روی سرور کار میکند اما در اختیار فرانت بوده و بکاند ممکن است حتی از زبان دیگری استفاده کند. در واقع اگر بخواهیم بگوییم که از نقطه نظر تکنیکی و جنبههای تخصصی ماجرا کار اصلی Next.js چیست باید گفت که یک نیروی پردازشی مجزا را با نود جی اس برای فرانت راهاندازی میکند که مستقل از بکاند سرعت رندر شدن صفحات را بالا برده و یکی از گزینههای مورد استفاده و محبوب توسط برنامهنویسان حرفه یا برای بهبود اوضاع سئو روی سایتهای بزرگ است.
این فریمورک برای اولین بار توسط Guillermo Rauch ارائه شد و در حدود 6 سال پیش در سال 2016 بهعنوان یک پروژه متنباز روی گیت هاب عرضه شد و بعد از آن کلیه امتیازات طراحی و توسعه آن، و به نوعی حق کپی رایت آن در اختیار کمپانی Vercel قرار گرفته است. اکنون توسعه این فریمروک بر عهده این کمپانی و همینطور جامعه کاربری آن میباشد که کارهای اصلی آن را انجام میدهند و باید گفت که بهخوبی هم از پس آن بر آمدهاند.
از زمان انتشار تا الان این فریمورک کار خود را با قدرت انجام داده است و توسعه خوبی را داشته است که در این رابطه باید گفت کمتر فریمورکی را میتوان تا این اندازه پویا و سریع دید. در ادامه بهصورت کامل در مورد ورژنهای مختلف این فریمورک و روندی که برای رسیدن به این نقطه طی کرده است صحبت خواهیم کرد.
روند توسعه Next.js چیست؟
در مورد اینکه روند توسعه Next.js چیست و تاکنون به چه جایی رسیده است باید گفت که Next.js 12 که در تاریخ 26 اکتبر 2021 منتشر شده است آخرین ورژن ارائه شده برای این فیمورک است که در زمان نگارش این مقاله در ابتدای سال 2022 وجود دارد. در مورد اولین نسخه از این فریمورک باید گفت که این فریمورک بر اساس یک مجموعه اصول بنیادی ارائه شد که عبارتند از:
- استفاده از جاوا اسکریپت در همه جا (Javascript Everywhere)
- استفاده آسان یا به اصطلاح out-of-the box functionality (بعد از خارج شدن از جعبه قابل استفاده باشد)
- عدم نیاز به تنظیمات
- رندر کردن صفحات در سمت سرور و همینطور code-splitting
- پیشبینی درخواستها و واکشی داده بهصورت قابل تنظیم
در واقع اینها اساسنامهای بود که فریمورک Next.js بر اساس آنها بنا شد و بهصورت گسترده و عمومی مورد استفاده قرار گرفت. اما ارائهکنندگان، جامعه کاربری و همینطور شرکت Vercel متوجه شدند که این موارد به تنهایی نتوانسته است انتظارات را برآورده کند و ظاهرا باید تغییراتی را در اصل فریمورکی که ارائه دادهاند ایجاد کنند تا بتوانند آن بازدهی و کیفیتی که انتظار آن را داشتند را برای این فریمورک محقق کنند در واقع به نظر میرسید که این فریمورک با شرایط فعلی خود از پس کاری که برای آن ارائه شده بود بر نمیآید و باید این تغییرات هر چه سریعتر روی آن اعمال شود.
یکی از مهمترین مواردی که در مورد Next.js میتوانست دردسرساز شود این بود که نمیتوانستند آن را برای سایتهای کوچک مورد استفاده قرار دهند و استفاده از آن موثر نبود. این اولین موردی بود که روی ورژن دومی که برای این فریمورک ارائه شده بود اصلاح شد و یک سال بعد از انتشار، یعنی در سال 2017 ورژن دوم ارائه شد. سال 2017 Next.js آپدیتهای زیادی را داشت که باید گفت بهنوعی برای یک فریمورک غیرطبیعی به نظر میرسید. در سال 2018 ورژن هفتم از این فریمورک منتشر شد که میتوان آن را یک نسخه پایدار و خوب از این فریمورک دانست که با تغییرات بهخوبی کنار آمده بود و کاربردهای خوبی را در هندل کردن ارورها و کار با APIهای ریکت ارائه میکرد.
بعد از تمامی این داستانها و مشکلاتی که فریمورک Next.js پشت سر گذاشت باید گفت که به یک پایداری نسبی رسیده است و میتوان از آن در خیلی از موارد استفاده بهینه کرد. اما در کل راجع به وضعیت توسعه این فریمورک نمیتوان خیلی خوشبینانه نظر داد. شاید بتوان گفت که این فریمورک توسعه خوب و قویای داشته است، اما میتوان این موضوع را هم ادعا کرد که 12 ورژن در طی 4 سال، تازه بدون در نظر گرفتن ورژنها و نسخههای فرعی، برای یک فریمورک برنامهنویسی به معنای یک فاجعه است که هنوز شکل اصلی خود را پیدا نکرده است و نتوانسته قالب کاری که میخواهد انجام دهد را پیدا کند.
این موضوع میتواند روی کار برنامهنویسانی که بهسراغ آن میروند تاثیرات زیادی را بگذارد. فرض کنید که شما در مدت یک سال برای هر کدام از پروژههای خود با یک ورژن از Next.js طرف بودهاید و هر بار باید بهسراغ داکیومنتها رفته و موارد جدید را بررسی کنید، یک سال کاری با این فریمورک به این منوال میتواند کاری کند که هر برنامهنویس صبوری این فریمورک را به زبالهدان تاریخ بیندازد ولی در مورد اینکه وضعیت Next.js چیست باید گفت که ظاهرا این فریمورک از موارد اینچنینی بهخوبی فرار کرده است و هنوز طرفداران خود را دارد.
ویژگیهای Next.JS چیست؟
در صورتی که دقت کرده باشید این فریمورک خود یکی از فریمورکهایی است که برای کتابخانههای دیگری ساخته شده است و در نگاه اول ممکن است قضیه کمی مشکوک به نظر برسد، یک فریمورک برای کار با یک کتابخانه که خود جدا از فریمورکهای دیگر در حال کار است! البته باید گفت در پس این رفتار تفکر بزرگی در جریان بوده است. در واقع این فریمورک قرار است با استفاده از امکاناتی که کتابخانههای ریکت میتوانند داشته باشند، امکانات بسیار خوب دیگری را برای ما ایجاد کنند. در رابطه با این که هدف از ایجاد Next.JS چیست باید گفت که ویژگیهای این فریمورک بسیار خاصتر از چیزی است که به نظر میرسد و باید گفت جداسازیهایی که روی فرانتاند و بکاند یک سایت انجام میدهد و ایجاد یک هسته پردازشی مجزا برای فرانت از اصلیترین مواردی است که میتوان به آنها اشاره کرد.
در مورد ویژگیهای Next.JS باید گفت که این فریمورک قرار است امکانات پیشرفتهای را در شرایط بهکارگیری از کتابخانههای قدرتمند ریکت به خدمت بگیرد و نتیجه آن بالاتر بردن بازدهی سایت طراحی شده میباشد و کار به گونهای دنبال خواهد شد که پرترافیکترین سایتها هم بتوانند با استفاده از این فریمورک و ویژگیهایی که دارد، به یک سایت سریع تبدیل شوند.
اگر بخواهیم بگوییم که مهمترین و برجستهترین ویژگیهای Next.JS چیست میتوانیم به این موارد اشاره کنیم:
استقلال فرانت از بک
یکی از مهمترین کارهایی که Next.JS برای ما انجام میدهد و تا اینجای مقاله هم به این موضوع اشاره کردیم این است که یک استقلال کلی را بین دو بخش فرانتاند سایت و بکاند آن ایجاد میکند که در آن بدون توجه به اینکه بکاند سایت چه بوده است، فرانت عملکردهای خود را پیادهسازی کرده و جالب اینجاست که این کار را هم با استفاده از یکی از قدرتمندترین تکنیکهای مورد استفاده در بکاند یعنی استفاده از محیط برنامهنویسی نود جی اس انجام میدهد.
در مورد اینکه واقعا این بخش از فریمورک Next.JS چیست باید گفت که در اینجا سایت شما دو بکاند خواهد داشت. یک بکاند که در اختیار کاربری سایت بوده و اطلاعات را از پایگاه داده بیرون میآورد و کار اصلی سایت را انجام میدهد، و یک بکاند که مسئول رندرینگ نتایجی است که از بکاند اصلی به آن میرسد و در واقع بکاند فرانتاند خواهد بود.
در مورد این دو بخش باید گفت که با استفاده از Next.JS میتوان مطمئن بود که هر کدام از این قسمتها کاملا مستقل کار خود را انجام داده و اصلا نیازی نیست که بهسراغ برنامهنویسی یکپارچه برای این کار برویم. هر کدام از تیمهای برنامهنویسی پروژه میتوانند بهصورت مستقل روی این موضوع کار کنند و باید گفت که این جداسازی یکی از بهترین ویژگیهایی است که برای Next.JS پیادهسازی شده است. در مورد این ویژگی باید گفت که با استفاده از این ویژگی شما میتوانید از دو زبان مختلف برای سایت خود استفاده کرده و این موضوع باعث شده است که برای استفاده از نود جی اس به یک بکاند که با جاوا اسکریپت پیادهسازی شده است نیازی نداشته باشیم.
پشتیبانی کامل از CSS
یکی دیگر از مواردی که برای فریمورکهای فرانتاند ضروری بهحساب میآید این است که بتوانند سازگاری کاملی را با زبانهایی که میتوان از آنها برای رنگ و لعاب دادن به سایت استفاده کرد داشته باشند که باید گفت در این میان محبوبترین زبانی است که میتواند استایل سایت شما را تغییر داده و در اصطلاح به کمک آن میتوانید گنجشک را به جای قناری رنگ کنید و بهفروش برسانید. در مورد اینکه وضعیت سازگاری این زبانها و Next.JS چیست باید بگوییم که Next.JS ارتباط خوبی را با استفاده از این موارد دارد و میتواند یک پشتیبانی کامل از CSS ،ScSS و Sass را داشته باشد.
علاوه بر موارد فوق از آنجا که Next.JS یک فریمورک فرانت با JS است لازم است که با CSS-in-JS هم سازگاری خوبی داشته باشد و این فریمورک توانسته است بهخوبی این کار را بکند. درکل میشود گفت که استفاده از Next.JS هیچ منافاتی با CSS و استایلهای خاص آن ندارد و میتواند این کار را بهراحتی انجام دهد.
سازگاری با TypeScript
یکی دیگر از ویژگیهای مهمی که در Next.JS باید به آن هم بپردازیم این است که ورژنهای نهایی این فریمورک با استفاده از TypeScript پیادهسازی شده است و شما میتوانید از این زبان نیز در داخل پروژه خود استفاده کرده و مشکلی در پیادهسازی اسکریپتهای این زبان ندارد. در مورد زبان TypeScript باید گفت که یکی از زبانهای برنامهنویسی اوپنسورس است که مایکروسافت از توسعه جاوا اسکریپت آن را ایجاد کرد. این زبان قابلیتهای بسیار ایدهآلی را پیادهسازی میکند و از نظر سادگی استفاده باید گفت که از جاوا اسکریپت سریعتر و راحتتر است.
تیم توسعهدهنده این زبان مجموعهای از حرفهایترین توسعهدهندگان زبانهای برنامهنویسی #C و JS هستند که امید زیادی به آینده برنامهنویسی در این زبان است و خیلی از فریمورکهای برنامهنویسی موفق در حال سازگار کردن خود با این زبان هستند. در واقع این سازگاری برای یک فریمورک میتواند یک برتری استراتژیک و تضمینی برای آینده یک فریمورک باشد.
استفاده از Babel Transpiler
Babel یک ترنسپالیر قدرتمند برای تبدیل کدهای کامپایل شده به اسکریپتهای قابل نمایش در مرورگر است که میتواند روی این فریمورک کار کند و تمامی نتایج رندر شدهای که در سمت سرور برای کاربران نمایش داده میشود را بهصورت قابل درک برای مرورگر تبدیل و به سمت کاربران ارسال کند. از این نظر باید گفت که استفاده از این انتقالدهندههای کامپایل در رندرهای سمت سرور میتواند سازگاری خوبی را برای نمایش در مرورگر و سیستم کاربران ایجاد کرده و از این طریق هم سرعت سایت و هم تجربه کاربری بالاتر میرود.
در خیلی از فریمورکهای مشابه که از موارد دیگری استفاده میشود و یا راهحلهای دیگری را به جای استفاده از ترنسپایلرها استفاده میکنند، نتایج با تداخلهایی در نتیجه نهایی و روی ماژولهای خاص برای مرورگرهای خاص همراه است که Next.JS از آنها به دور است. ترنسپایلر بابل یک برنامه اوپنسورس است که از سال 2015 در حال توسعه بوده و میتوان آن را یکی از مهمترین گزینههایی دانست که کار را بدون ایراد و با سازگاری کامل انجام میدهد.
قابلیت کش شدن صفحات با یک بار لود
در مورد اینکه این ویژگی از فریمورک Next.JS چیست باید گفت که در این فریمورک صفحاتی که برای آنها درخواست داده میشود و البته درخواستهای زیادی هم دارند، وقتی که یک بار در سمت سرور رندر میشوند و کدهای آنها برای کاربران نمایش داده میشود، برای بار دوم دیگر لازم به رندر شدن نیست و این کدهای آماده بهنوعی کش شده و در اختیار کاربران بعدی قرار میگیرند. این ویژگی میتواند سرعت سایت را بسیار بالاتر برده و کار پردازشی موردنیاز برای هسته نود جی اس را به حداقل برساند.
در واقع این موضوع که این هسته از نود جی اس و این بکاند مربوط به فرانت تا چه اندازه به نیروی پردازشی نیاز دارد و آیا این پیادهسازی رندرینگ سمت سرور سایت ما را بدتر کند نمیکند و نیاز به فضای پردازشی و هاست را بالاتر نمیبرد، مسالهای است که مطمئنا از ابتدای مقاله ذهن شما را به خود درگیر کرده است. این ویژگی از Next.JS میتواند ما را از تمامی این موارد نجات داده و کاری که این هسته پردازشی انجام میدهد را به حداقل میرساند. در واقع باید گفت که این کش یک کش مدیریت شده سیستمی است و به این صورت نیست که لازم باشد تنظیمات خاصی برای آن اعمال شود. در تمامی صفحاتی که دادههای ایستا را نمایش میدهند این موضوع میتواند بهصورت خودکار روی سایت پیادهسازی شده و کار بزرگی را برای ما انجام دهد.
ویژگی Hot Reloading
ریلودینگ بهصورت داغ یکی دیگر از ویژگیهایی است که میتواند کشی که در مرحله قبلی آن را معرفی کردیم را کامل کند. در واقع این ویژگی به صفحاتی که نیاز دارند بخشی از آنها مجددا لود شده و به رندرینگ جدیدی نیاز داشته باشند کمک میکند که کار خود را انجام داده و باید گفت که میتواند این کار را بهصورت بهینه انجام داده و نیازی به بخشهای دیگر آن نیست.
در واقع کاری که این ویژگی انجام میدهد این است که در خصوص صفحاتی ک نیاز به رندر داشته باشند دوباره وارد عمل شده و کار لودینگ را با استفاده از هسته پردازشی انجام میدهد و صفحه را بدون اینکه خیلی از موارد دیگر درگیر شوند بهصورت اصلاح شده برای کاربر ارسال میکند.
نتیجه گیری
در این مقاله به بررسی این سوال که فریمورک Next.js چیست و برای ما چه کارهایی را انجام میدهد پرداختیم و دیدیم که این فریمورک در چه حوزهای از برنامهنویسی وب فعالیت دارد. در مورد ماهیت این فریمورک باید گفت که یک فریمورک رایگان و اوپنسورس است که برای کار کردن با ریکت ارائه شده است و با استفاده از این فریمورک میتوان از کتابخانههای ریکت برای طراحی یک فرانتاند قوی برای سایت استفاده کرد. همینطور این فریمورک میتواند قابلیتهای ریکت نیتیو که از سیستم کاربران برای نمایش صفحات استفاده میکرد را بهصورت رندرینگ سمت سرور بازگرداند و صفحات را ایستا تحویل کاربر دهد. این موضوع میتواند در سرعت لود شدن صفحات و امتیازی که برای سئو دارد تاثیر زیادی بگذارد. همینطور یک جداسازی کامل را برای فرانت از بکاند ارائه میکند که میتواند در کارکرد آن تاثیرگذار باشد.
البته باید گفت در کنار مزایای خوبی که این فریمورک دارد، معایب آن نیز کم نیستند. در صورتی که بخواهیم بگوییم مهمترین معایب Next.js چیست باید گفت که عدم وجود نسخه پایدار و آپدیتهای پیدرپی که باعث عدم ثبات در برنامهنویسی با این فریمورک شده است و همینطور بار بالا روی سرور به خاطر رندرینگ سمت سرور اشاره کرد. البته استفاده از هستههای پردازشی نود جی اس بهصورت مستقل برای رندر فرانتاند توانسته است این موضوع را تا حدودی پوشش داده و فریمورک Next.js را از مخمصهای که در آن گرفتار شده است نجات دهد.