معرفی و بررسی Frameworkهای Server-Side Swift (قسمت اول)
در مطلب قبل دیدیم که چطور شد که Swift راه خودش رو به سایر سیستم عامل ها باز کرده و به زبانی برای نوشتن کدهای سرور تبدیل شد.
در اینجا به بررسی Frameworkهای مختلف این زبان میپردازم.
1- Perfect
پرفکت (Perfect) قدیمی ترین فریمورک (Framework) بر پایه زبان Swift است. این فریمورک در سال 2015 توسط شرکت کانادایی PerfectySoft معرفی شد. در حال حاضر دومین فریمورک پرطرفدار از لحاظ ستارههای Github است (حدود ۱۳۲۰۰ ستاره). پرفکت فریمورکی بسیار قدرتمند، سریع و با امکانات فراوان است.
از لحاظ امکانات و کتابخانه ها (Library)، میشه گفت کامل ترین فریمورک از بین همه است. لیست بعضی از امکانات از پیش آماده شده در این فریمورک :
Directory and File Management
FastCGI, HTTP, HTTP2, HTTPS
iOS Notifications
JSON Encoding/Decoding
Mustache Support
Process Management
Sessions
URL Routing
WebSockets
از لحاظ ارتباط با دیتابیس هم پرفکت کامل ترین لیست رابط ها را دارد و دست شما رو در انتخاب دیتابیس پروژه تون کاملا باز میذاره. حتی از دیتابیس FIleMaker که صرفا بر روی سیستم عامل macOS استفاده میشه هم پشتیانی میکنه.
MySQL
PostgreSQL
MongoDB
SQLite
Redis
FileMaker
متاسفانه ابزاری برای مدیریت پروژه از طریق Command Line ندارد ولی اپلیکیشنی جهت مدیریت و ایجاد پروژه دارد به نام Perfect Assistant که فعلا فقط بر روی سیستم عامل macOS کار میکند. این برنامه از سیستم Docker استفاده میکنه برای همین وقتی دارین با سیستم مک تون روی یک پروژه کار میکنین میتونین به راحتی پروژه رو برای Linux کامپایل کنین و مطمئن بشین که برنامه تون حتما بر روی Linux هم کار میکنه.
کتابخانه ORM این فریمورک به نام StORM بسیار کامل است و از دیتابیس های PostgreSQL, MySQL, CouchDB, Mongo, and SQLite پشتیبانی کامل میکند. این حد از پشتیبانی رو در هیچ کدوم از فریمورک های دیگه نمیبینیم.
برای تولید محتوای HTML پرفکت از فرمت های Mustache و Markdown پشتیبانی میکند. این ۲ فرمت از استانداردهای پرطرفدار و معروف هستند و اگر با آنها آشنایی قبلی دارین از بابت یادگیری فرمت جدید، میتونه خیالتون راحت باشه.
برای پرفکت مطالب آموزشی فراوانی یافت میشه و مهم تر از همه برنامه های نمونه (Example projects) زیادی بر روی Github پروژه قرارد داره که از این لحاظ هیچ کم و کاستی احساس نمیکنین. میتونین برنامه ها رو با تغییراتی مختصر، مناسب شرایط پروژه خودتون بکنین و استفاده کنین. داکیومنت این فریمورک کامل و دارای مثال های فراوان است.
نقاط قوت
امکانات بسیار زیاد نسبت به بقیه فریمورک ها. در هیچ کدام از فریمورک های دیگه این همه امکانات آماده و یکجا رو پیدا نمیکنین. در سایر فریمورک ها خیلی از این امکانات توسط تیم هایی به غیر از توسعه دهندگان اصلی به فریمورک ها اضافه شده (Third party packages) یا اصلا وجود نداره. اما پرفکت یک گروه کامل از کتابخانه های مورد نیاز برای توسعه برنامه ها رو در اختیار شما میذاره.
پروژه های نمونه و مثال های زیاد برای تسریع یادگیری. برنامه های آماده در Repository جداگانه ای در Github جمع آوری شده اند و به راحتی به آنها دسترسی پیدا میکنین و با خواندن کد آنها مطالب رو سریعتر و بهتر یاد میگیرین.
بسیار سریع. در حال حاضر سریعترین فریمورک در بین تمام فریمورک ها میباشد.
نقاط ضعف
اولین و مهمترین نقطه ضعف این فریمورک ترکیب (Syntax) بسیار سخت آن است. از اونجایی که سرعت مهمترین گزینه توسعه دهندگان این فریمورک بوده است، برای نتیجه گرفتن در بسیاری از کارها، باید کد زیادی نوشت، اون هم به سخت ترین نحوه! برای همین این فریمورک برای کسانی که آشنایی کامل و در حد پیشرفته با زبان Swift ندارن توصیه نمیشه.
ایراد بعدی که به این فریمورک میشه گرفت اینه که از Swift-NIO استفاده نمیکنه. Swift-NIO کتابخانه پرقدرت و Async برای برنامه تحت شبکه است. بعد از اینکه اپل Swift-NIO رو معرفی کرد فریمورک های دیگه شروع به استفاده از اون کردن و کدهای پایه رو دوباره بر پایه NIO نوشتن. ولی پرفکت هنوز از Swift-NIO استفاده نمیکنه و این یعنی این فریمورک Async نیست. به عنوان مثال وقتی درخواستی به سرور میرسه، پرفکت درخواست رو بررسی میکنه و از دیتابیس درخواست گرفتن اطلاعاتی رو میکنه و منتظر میمونه تا جواب از طرف دیتابیس ارسال بشه. کل Thread سرور در این مدت قفل و در اختیارِ همین درخواست است. پس از وصول جواب از طرف دیتابیس، پرفکت پاسخ را آماده میکند و بازگشت میدهد. اگر فریمورک Async باشه در این مدت که منتظر جواب از طرف دیتابیس است، درخواست های دیگه رو دریافت میکنه، بررسی میکنه، حتی درخواست هایی به دیتابیس ارسال میکنه، و هر وقت جواب درخواست اول از طرف دیتابیس دریافت شد، اون جواب رو بررسی و پاسخ رو آماده میکنه و بازگشت میده. در این حالت وقتی تعداد درخواست های همزمان زیاد باشه، سرعت پاسخگویی سرور بسیار بالاتر از حالت اول میشه.
یکی دیگه از ایرادتی که میشه برای این فریمورک گرفت اینه که مطالب و ویدیو های آموزشی آن در سایتهای مختلف پخش هستند و یک مکان واحد برای دسترسی به اونها وجود نداره.