فروش ویژه سرور اختصاصی
ماکرونت : مقایسه دو فریمورک جنگو و لاراول
- خرداد 29, 1401
- 0
- ملیحه ایزی
فریمورک جنگو
Django یک فریمورک متن باز برای توسعه ی وب است که با زبان برنامه نویسی Python نوشته شده است . در Django الگوی طراحی بر اساس MVT که مخفف Model View Template است پیاده سازی شده است .
جنگو چگونه کار می کند؟
جنگو از یک سری کامپوننت تشکیل شده که به آن کمک می کند تا درخواست های کاربران را دریافت و به آنها پاسخ دهد. حال مروری سریع بر نحوه کار جنگو داشته باشیم، گفتیم که جنگو بر اساس معماری MVT طراحی شده است پس برای آشنایی با نحوه کار جنگو نیاز است تا بدانیم معماری MVT چگونه کار می کند.
مولفه های MTV
MODEL: تعریف این مولفه دقیقا مانند MODEL در الگو MVC است. این بخش مربوط به هر چیزی است که با دسترسی به داده ها و اعتبارسنجی داده ها (Data Validation) ارتباط داشته باشد.
VIEW: این بخش در واقع متناظر با CONTROLLER در MVC می باشد و نباید به هیچ عنوان با VIEW در MVC اشتباه گرفته شود. این بخش به عنوان پلی ارتباطی بین MODEL و TEMPLATE ایفای نقش می کند که تمام منطق پروژه در این بخش جای گرفته است.این لایه شامل فانکشنها و متدهایی میشود که موجب دریافت و پردازش درخواست کاربر و ارسال نتیجه معتبر برای کاربر میشود. این لایه داده را از Model دریافت میکند و به هر کدام از template ها دسترسی به داده خاصی را میدهد.
TEMPLATE: این بخش نیز متناظر با VEIW در MVC می باشد. این بخش اساسا با آنچه که قرار است برای کاربر به نمایش گذاشته شود و چگونگی این به نمایش درآمدن سر و کار دارد.
- مطابق تصویر بالا کاربر یک درخواست خود را از طریق url ارسال میکند وقتی این درخواست به یک وب سرویس مثلا انجینکس ارسال می شود ابتدا به برنامه جنگویی ارسال می شود.
- جنگو به دنبال یک url معتبر در خود میگردد. از طریق فایل urls.py
- اگر url به view خاصی متصل باشد آنگاه آن view صدا زده خواهد شد.
- در صورت نیاز view به model متصل شده و اطلاعات مناسبی را از دیتابیس دریافت خواهد کرد.
- در آخر view یک بخش از templates، همراه با اطلاعات دریافتی از model را به کاربر نمایش میدهد.
مسیر دقیق ارسال ریکوست و دریافت پاسخ در جنگو
Browser(user) ->web server -> manage.py -> settings.py ->urls.py ->views.py -> Template
فایل manage.py : خط فرمان تعاملی جنگو
فریمورک لاراول
Laravel یک فریمورک متن باز برای توسعه ی وب است که با زبان برنامه نویسی PHP نوشته شده است . الگوی طراحی بر اساس MVC که مخفف Model View Controller است پیاده سازی شده است .
لاراول چگونه کار می کند؟
از آنجایی که لاراول بر اساس معماری mvc کار می کند پس به بررسی این معماری میپردازیم:
مولفه های MVC
Controller: کنترلر درخواستهای ورودی را مدیریت میکند. در یک فریمورک وب، این کار میتواند به صورت تعریف آدرسهای اینترنتی یا همان URLهای خاصی باشد که درخواست کاربر را به یک قابلیت مشخص نگاشت میکند.
MODEL: این بخش مربوط به هر چیزی است که با دسترسی به داده ها و اعتبارسنجی داده ها (Data Validation) ارتباط داشته باشد.
VIEW: همان قالب HTML است که پس از رسیدگی به درخواست کاربر بازگردانده میشود.
- مطابق تصویر بالا کاربر یک درخواست خود را از طریق url ارسال میکند وقتی این درخواست به یک وب سرویس مثلا انجینکس ارسال می شود ابتدا به برنامه لاراولی ارسال می شود.
- درخواستها یا Requestهای کاربران، ابتدا به بخش Router برنامه فرستاده میشوند، سپس با توجه به Route تعریف شده به مسیر کنترلر مربوطه هدایت می شوند.
- کنترلر با مدل در ارتباط است و اطلاعات موردنیاز را از دیتابیس دریافت می کند.
- سپس مجدد کنترلر این اطلاعات دریافتی از مدل را از طریق ویو به کاربر نمایش می دهد.
ابتدا هر درخواستی که به سمت سرور ارسال میشود توسط وب سرور شما پردازش شده و به فایل public/index.php میرسد سپس فایل autoloader لود میشود. این فایل Composer Autoloader که کارش لوکردن فایل های کلاس ها است را بارگزاری میکند. پس از این فایل، فایل bootstrap/app.php برای راه اندازی اولیه فریمورک لود میشود و شی app$ نیز ساخته می شود. سپس سیستم تصمیم میگیرد که ریکوئستی که به سمت سرور آمده است از چه نوعی است. اگر از نوع Console بود، app/Console/Kernel.php لود و اگر از نوع HTTP بود فایل app/Http/Kernel.php لود میشود.
مقایسه جنگو و لاراول
1-سهم بازار توسط وبسایت های برتر
لاراول یک فریمورک نسبتا جدید است. اگر دادههای 2017-2018 را بررسی کنیم، ممکن است اطلاعاتی مانند: قابل اعتماد نبودن، جامعه آماری مناسبی نداشتن و عدم محبوب برسیم، ولی با رسیدن به سالهای 2021 به بعد و طبق گفته های وبسایت trends.builtwith، ما در حال حاضر 678 هزار وب سایت داریم که با لاراول نوشته شده اند.
بر اساس مقایسه های انجام شده توسط وبسایت similartech میبینیم که لاراول سهم بیشتری از وبسایت های موجود در بازار را به خود اختصاص داده و جنگو در این مورد عقب مانده است.
2-دسته بندی وبسایت ها
لاراول در بیشتر شاخه ها محبوبیت بیشتری برای استفاده داشته است به جز شاخه علمی و تحقیقات که بیشتر وبسایت ها از جنگو استفاده کرده اند.
3-موقعیت جغرافیایی
لاراول در اکثر کشورها از جمله برزیل، چین، ژاپن، هند و 139 کشور دیگر پیشرو است و جنگو در ایالات متحده، روسیه، آلمان، اسپانیا و 13 کشور دیگر پیشتاز است.
در مجموع به لحاظ محبوبیت و سهم بازار لاراول نسبت به جنگو جلوتر است.
4- معماری
جنگو دارای معماری MVT (مدل نمای الگو) است. این مدل نه تنها برای استفاده منعطف است، بلکه دارای بخش های زیادی برای توسعه است. در مقابل لاراول از MVC (Model View Controller) استفاده می کند که ثبات، رشد و سهولت کلیدهای اصلی آن هستند.
تفاوت اصلی بین MVC و MVT این است که در یک الگوی Model View Controller ، ما باید تمام کد های خاص کنترل را بنویسیم. اما در MVT ، قسمت کنترل کننده توسط خود فریم ورک مراقبت می شود.
الگوی کلاسیک MVC با مدیریت وضعیت یک برنامه کار می کند. وقتی کاربر عملیاتی را انجام می دهد یا درخواستی را ارائه می دهد ، عملی در Controller فراخوانی می شود. سپس Controller یا به Model می گوید که تغییرات را انجام دهد و View را به روز کند یا View را بر اساس Model برمی گرداند. از این رو می توان گفت که View توسط Controller و Model کنترل می شود.
با این حال، MVT رویکرد کمی متفاوتی دارد. هنگامی که کاربر درخواست HTTP را انجام می دهد، نمای مربوطه یک پرس و جو در مورد Model انجام می دهد و مجموعه نتیجه را از Model جمع می کند. سپس View نتیجه را در یک الگو پر کرده و برای کاربر ارسال می کند.
بر خلاف MVC ، نما با یک مدل همراه نیست. این باعث می شود MVT به آرامی جفت شود و به راحتی اصلاح شود.
5- منحنی یادگیری
به عنوان یک پیش نیاز، شما باید پایتون را بدانید، حتی در سطح ابتدایی. هنگامی که شروع به یادگیری جنگو می کنید، منحنی یادگیری کوتاه است و سریعا میتوان مقدمات اولیه آن را فراگرفت اما برای کسی که اصلا وب کار نکرده است برای عمیقترشدن پیچیدگی های زیادی دارد چون پایتون یک زبان همه منظوره و مخصوص وب طراحی نشده است. درحالی که اوایل کار با php چون زبان مخصوص وب است درک بهتری برای کاربر ایجاد می کند. در مقایسه با جنگو، لاراول منحنی یادگیری طولانی تری دارد.
6- پشتیبانی از API
لاراول دارای یک سیستم روتینگ بسیاری قوی است و همچنین API ها رو پشتیبانی می کند این در حالی است که در جنگو ساخت REST APIs به راحتی پشتیبانی نمی شود و باید یک میان افزار اضافه نمود.
در واقع نکته زیبای لاراول این است که با پشتیبانی داخلی از ساخت API ارائه می شود، زیرا کوئری ها به طور پیش فرض JSON را برمی گردانند. در مقابل جنگو با این ویژگی داخلی همراه نیست و باید از Django REST برای دور زدن آن و اجرای همان ویژگی استفاده کرد.
7- ابزارهای سئو
جنگو با ارائه ابزارهای سئو داخلی برای پیاده سازی و نظارت سریع داده های مرتبط با سئو مزیت قابل توجهی دارد. این فریم ورک دارای ماژولی به نام SEO Framework است که به موتورهای جستجو امکان بارگیری سریعتر صفحات را میدهد. موتورهای جستجو معمولا از الگوریتمهای پیچیدهای برای ایندکس و رتبهبندی صفحات استفاده میکنند. فریم ورک جنگو سایتها را از طریق URL به جای آدرسهای IP روی سرور نگهداری میکند. به همین دلیل عمل نگهداری و توسعه وبسایتها آسانتر میشود.ولی لاراول هیچ ابزاری از سئو درونی را ندارد و باید به آن اضافه نمود.
8- سرعت
پایتون یک زبان سطح بالا است که سرعت اجرای بالایی دارد، جنگو نیز یک فریمورک سبک وزن بر پایه پایتون است. علاوه بر این، جنگو با پشتیبانی از توسعه دهندگان برای رسیدگی سریع مشکلات این فریمورک به سرعت بالاتری دست میابد.
لاراول و جنگو در سال 2021 برای سریال سازی JSON به صورت رو در رو آزمایش شدند و از آنجایی که پایتون زبان بسیار سریعی است، با اختلاف فاحشی برنده شد. نتایج این آزمایش در وبسایت techempower قابل مشاهده است.
اما نمیتوان سرعت را با همین چند معیار ساده بررسی کرد سرعت در جایگاه های مختلف متفاوت است. جنگو برای هر موردی مناسب نیست و گاهی اوقات نمی تواند به اندازه کافی سریع به درخواستها پاسخ دهد. مثلا در موارد زیر جنگو به اندازه کافی و با سرعت خوب عمل نمیکند:
- اجرای ریکوست ها از طریق middleware
- ساختن HTML از طریق Template
- تبدیل کوئری های دیتابیس به اشیا در پایتون
- در زمان اجرای garbage collection
9- همزمانی
وجودسرور WSGI در برنامه جنگو چیزی است که باعث می شود بتوان چندین درخواست همزمان را مدیریت کرد. Web Server Getway Interface یک وب سرور مختص زبان پایتون است که کمک میکند تا بتوانیم کدهای پایتونی را روی سرور اجرا کنیم. اما در php و لاراول چیزی تحت عنوان همزمانی و پردازش موازی نداریم.
10- امنیت
اگر بخواهیم یک نگاه سطحی به این موضوع داشته باشیم میتوانیم بگوییم عملکرد جنگو بهتر است. جامعهی کاربری Python به امنیت این فریمورک توجه زیادی داشته که نتیجه این توجه باعث شده تا از بسیاری مشکلهای امنیتی رایج مانند SQL injection، cross-site scripting، csrf و clickjacking در امان باشد. اما همیشه به همین سادگی نیست.
اگر هدف ما برنامههای صنعت بانکداری، برنامههای دسترسی چندلایه سازمانی، الگوریتمهای AI/VR یا تحقیقات علمی باشد، احتمالاً پایتون در کنار جنگو بهترین راه حل است. اما اگر سیستمهای مدیریت محتوا یا برنامههای مدیریتی با حداقل قابلیتهای هوش مصنوعی مدنظر ما باشد، لاراول پیشنهاد بهتری است؛ حتی اگر برنامهها به عملکردهای با امنیت بالا نیاز داشته باشند.
11-کدها
اگر نگاهی به کدهای مسیریابی در این دو فریمورک بیندازیم متوجه می شویم که کد لاراول کاملا بصری است. از سوی دیگر، کد جنگو نسبتاً پیچیده به نظر می رسد و استفاده از آن برای مبتدیان ساده بنظر نمیرسد.
12-ویژگی های خاص
یکی از قدرتمندترین بخش های جنگو، رابط خودکار مدیریت است. metadata را از مدلهای شما میخواند تا یک رابط سریع و مدل محور ارائه دهد که در آن کاربران قابل اعتماد بتوانند محتوای سایت شما را مدیریت کنند همچنین در این فریمورک سیستم کشینگ منحصر به فردی وجود دارد که برای ساخت برگه های پویا به شما کمک بسیاری میکند و دیگر نیازی به انجام محاسبات مختلف ندارید.
روتینگ برخلاف جانگو در این چهارچوب بسیار سادهتر است، همچنین ساخت API بسیار کار آسانی است. در لاراول ORM نیز پیادهسازی شده است. به همین دلیل ارتباط برقرار کردن با بانک اطلاعاتی از یک راه انتزاعی انجام میشود. در لاراول سیستمهای مختلفی برای باندلینگ پیادهسازی شده است به همین دلیل شما با سیستم ماژولاری نیز طرف خواهید بود.ویژگیهای داخلی لاراول به مراتب بیشتر از جانگو است. وجود سیستم کشینگ نیز یکی دیگر از ویژگیهای مثبت لاراول به حساب میآید.
تأیید اعتبار کاربر یک ویژگی متداول در برنامه های وب است. Laravel طراحی احراز هویت را آسان می کند زیرا شامل ویژگی هایی مانند ثبت نام، رمز عبور فراموش شده و ارسال یادآوری گذرواژه است.
برآیند
برآیند نمرات بر اساس فاکتورهای موجود در سایت techempower در آزمایش های انجام شده در سال 2021 امتیاز لاراول 326 در رتبه 115و جنگو 280 و در رتبه 118 قرار دارد.
نتیجه گیری
در پایان، نمیتوانیم بگوییم که یکی از آنها بسیار بهتر از دیگری است. ما دو چارچوب وب متفاوت داریم که برای دو زبان برنامه نویسی مختلف توسعه یافته اند: Python و PHP. این تصمیم را حتی سخت تر از انتخاب بین دو فریمورک ایجاد شده در یک زبان برنامه نویسی می کند. از یک طرف، ما پایتون را داریم، یک زبان سطح بالا که در حوزه های مختلف از تحقیق و الگوریتم تا توسعه وب استفاده می شود. از سوی دیگر، ما PHP را داریم، یکی از پرکاربردترین زبان های توسعه وب سمت سرور. یکی ذاتاً سریعتر و از نظر عملکرد عاقلانه است، اما دیگری استانداردهای زیادی برای نوشتن کدهای تمیز و زیبا و انتزاعی دارد.
پیشنهاد شخصی ماکرونت به شما این است باید نیازهای کسب و کار خود را تجزیه و تحلیل کنید و سپس فریم ورکی که با نیاز شما سازگارتر است را انتخاب نمایید.
«ملیحه ایزی»، فارغالتحصیل مقطع کارشناسی ارشد مهندسی کامپیوتر، گرایش نرم افزار است.
تمامی حقوق برای ماکرونت محفوظ است.