برنامههای ترکیبی یا محلی
یکی از مهمترین پرسشها قبل از آغاز هر پروژه وبمحوری انتخاب نوع برنامه است. توسعهدهندگان مجرب همواره پیشنهاد میکنند سازمانها و برنامهنویسان تازهکار به فکر ساخت برنامههای محلی باشند و برای این حرف دلایل خاص خود را دارند. در ادامه مزایا و معایب برنامههای محلی را بررسی میکنیم.
مزایای برنامههای محلی/ بومی (Native)
هیچ برنامه غیر بومی قادر نیست عملکرد برنامههای بومی نوشته شده برای اندروید یا iOS را ارائه کند. همچنین سطح کنترلی که برنامههای بومی برای نظارت یا دسترسی به دستگاه همراه ارائه میکنند قابل مقایسه با برنامههای غیر بومی نیست. فیسبوک توسعهدهنده چهارچوب React/React Native برنامه پیامرسان خود را ابتدا با React Native نوشت، اما سرانجام تصمیم گرفت آنرا در قالب یک برنامه بومی بازنویسی کند تا قدرت و قابلیتهای بیشتری در اختیار کاربران قرار دهد. در زمان طراحی برنامههای بومی، به سادگی میتوان قابلیتهای پیچیده را به یک پروژه بزرگ یا کوچک اضافه کرد، بدون آنکه عملکرد برنامه دستخوش تغییر شود. اغلب اوقات برنامههای بومی توسط گروه بزرگی از توسعهدهندگان حمایت میشوند، زیرا فرآیند توسعه آنها طولانیتر است، به تدریج تکامل پیدا میکنند و محیطهای توسعه قدرتمندی برای آنها ارائه شده است. همچنین هیچ چهارچوبی نمیتواند بهطور کامل قابلیتهایی یکسان با برنامههای بومی ارائه کند.
معایب برنامههای بومی
اصلیترین مشکل برنامههای بومی فرآیند توسعه پیچیده و بهکارگیری منابع زیاد است. به همین دلیل توسعه برنامههای بومی بهمراتب گرانتر از برنامههای ترکیبی است. شما برای توسعه برنامههای بومی اندروید باید به زبانهای جاوا یا کاتلین و برای برنامههای بومی iOS به زبانهای سوئیفت یا آبجکتیو سی تسلط داشته باشید. همچنین برای ساخت برنامههای iOS باید یک کامپیوتر مک در اختیارتان باشد تا بهراحتی برنامههای نوشته شده را آزمایش کنید. به همین دلیل است که طیف گستردهای از توسعهدهندگان (حداقل در بازار کار ایران) در ابتدا کار را با اندروید و نه iOS آغاز میکنند، زیرا به سامانههای مک دسترسی ندارند. بنابراین برای توسعه و نگهداری برنامههای بومی برای هر دو زیرساخت اندروید و iOS به منابع بیشتری نیاز است. اگر در آینده تصمیم بگیرید برنامه کاربردی را به محیط وب یا دسکتاپ گسترش دهید باید مهارت دیگری را به شکل مجزا یاد بگیرید یا افراد مسلط به این مهارتها را استخدام کنید، زیرا کدهای اصلی برنامههای بومی را نمیتوان به راحتی با زیرساختهای ناهمگون تطبیق داد و اغلب اوقات نیاز است تا راهحلهای مخصوص آن زیرساخت نوشته شوند. در زمان توسعه برنامههای بومی، راندمان کاری توسعهدهندگان کاهش پیدا میکند، زیرا دستیابی به الزاماتی مطابق با نیازهای مشتری یا سازمان و تطبیق آنها با زیرساختهای خاص در مقایسه با زیرساختهای ترکیبی به زمان بیشتری نیاز دارد. به همین دلیل اگر به دنبال یک نمونهسازی سریع هستید که به سرعت وارد بازار شود، برنامههای بومی به تلاش بیشتری نسبت به برنامههای ترکیبی نیاز دارند. فرآیند بیلد (Build) و اجرای برنامههای بومی در زمان توسعه به زمان زیادی نیاز دارد، برخی از توسعهدهندگان عادت دارند بهطور مرتب در مدت زمان توسعه برنامه را اجرا کنند که همین موضوع راندمان را کاهش میدهد. بهطور مثال، یک دستور ساده را مینویسند و سپس فرآیند بیلد را اجرا میکنند تا اطمینان حاصل کنند کدی که نوشتهاند عاری از خطاهای زمان اجرا است. مشکل دیگر پلتفرمهایی شبیه به اندروید، پیغامهای خطای عجیب gradle است که گاهی اوقات ظاهر میشوند و دلیل موجهی برای آنها وجود ندارد. البته تعداد این خطاها در چند سال اخیر به میزان قابل توجهی کاهش پیدا کرده، اما زمان بیلد نسبت به چهارچوبهایی شبیه به فلاتر و ریکت نیتیو بیشتر است.
کدامیک را انتخاب کنیم، بومی یا ترکیبی؟
انتخاب گزینه بومی یا ترکیبی برای انجام یک پروژه کار مشکلی است و باید برخی نکات به دقت بررسی شوند.
- درک الزامات: اگر برنامه قابلیتهای پیچیدهای دارد و باید به تمام ظرفیتهای گوشی دسترسی داشت، گزینه بومی را انتخاب کنید تا در آینده با مشکلی روبرو نشوید.
- درک محدودیتها: اگر منابع، توسعهدهندگان و بودجه کافی برای هر دو زیرساخت اندروید و iOS وجود دارد و با مشکل کمبود زمان روبرو نیستید، بهتر است روی توسعه برنامههای بومی تمرکز کنید.
- اگر برنامه پیچیدگی خاصی ندارد: اگر هدف دریافت و نمایش اطلاعات از منابع مختلف، ورودیهای کاربر و موارد این چنینی است، بهتر است از برنامههای ترکیبی استفاده کنید تا به میزان قابل توجهی در وقت و زمان صرفهجویی کنید.
در نهایت به این نکته دقت کنید که برنامههای بومی به زمان و هزینه بیشتری نیاز دارند، اما در بلندمدت انعطافپذیری، قابلیت اطمینان بالا، گسترشپذیری ساده و دسترسی به ظرفیتهای بالا را ارائه میکنند. اگر تصور میکنید که قرار است یک قابلیت پیچیده را طراحی کنید، پیشنهاد میکنم روی توسعه برنامههای بومی حتا برای پروژههای ساده تمرکز کنید، زیرا قدرت مانور بیشتری در اختیارتان قرار میدهند.
کدامیک بهتر است، فلاتر یا ریاکت نیتیو؟
فلاتر و ریاکت نیتیو به لحاظ چهارچوب و توسعه برنامههای موبایل دو نقطه مقابل هم هستند. ریاکت ابتدا به عنوان یک چهارچوب وب معرفی شد و اکنون به دنیای موبایل راه پیدا کرده است، اما فلاتر از همان ابتدا به عنوان یک چهارچوب ساخت برنامههای موبایل معرفی شد و در ادامه به دنیای وب و سایر زیرساختها وارد شد.
مزایای ریاکت نیتیو
ریاکت نیتیو (React Native) یک چهارچوب توسعه برنامههای موبایل چند سکویی توسعه یافته توسط فیسبوک است. از مزایای این چهارچوب به موارد زیر میتوان اشاره کرد:
- فناوری رایچ: نقطه ضعف فلاتر دقیقا نقطه قوت ریاکت نیتیو است. مدت زمان زیادی از معرفی ریاکت نیتیو گذشته و به همین دلیل جامعه بزرگی از توسعهدهندگان و تقریبا تمامی SDKها شبیه به AWS از آن پشتیبانی میکنند.
- پشتیبانی خوب: برای ریاکت نیتیو بستههای شخص ثالث و کتابخانههای زیادی ارائه شده که اجازه میدهند انجام هر کاری با چهارچوب فوق فراهم شود. به همین دلیل توسعهدهندگان در زمان بهکارگیری این چهارچوب در دنیای موبایل و وب با مشکل خاصی روبرو نمیشوند.
- یادگیری ساده برای توسعهدهندگان مجرب: اگر توسعهدهندهای هستید که سابقه ساخت برنامههای وبمحور با ریکت را دارید، بهکارگیری ریاکت نیتیو و ساخت پروژههای کاربردی با این چهارچوب کار سخت و پیچیدهای برای شما نخواهد بود.
معایب ریاکت نیتیو
با وجود مزایای بالقوه ریاکت نیتو، چهارچوب فوق معایبی نیز دارد که از آن جمله به موارد زیر میتوان اشاره کرد:
- وابستگی به کتابخانههای ثالت: بستههای برنامهنویسی ثالث ریاکت نیتیو توسط جامعه توسعهدهندگان متنباز ارائه میشود. برخی از این بستهها پشتیبانی ضعیفی دارند و توسعهدهندگانی که برای انجام پروژهای جدی از آنها استفاده کردهاند با مشکل روبرو شدهاند.
- عدم یکپارچگی عناصر رابط کاربری: اگر تصمیم بگیرید برنامه کاربردی که برای اندروید نوشتهاید را روی شبیهساز iOS اجرا کنید متوجه برخی ناسازگاریها میان عناصر رابط کاربری میشوید که برای رفع این مشکل باید زمان قابل توجهی را اختصاص دهید.
- عدم سازگاری با نسخههای پیشین: زمانی که نسخه ریاکت نیتو را ارتقا میدهید، ریسک زیادی وجود دارد که پروژه همچون گذشته به خوبی کار نکند و مجبور شوید اصلاحات زیادی را اعمال کنید.
- عملکرد ضعیفتر نسبت به فلاتر: ریاکت نیتو روی یک گذرگاه جاوااسکریپت که روی دستگاه کلاینت نصب میشود، کار میکند، اما فلاتر با زبانهای سی و سیپلاسپلاس توسعه یافته و به کد آرم محلی کامپایل میشود که عملکردی معادل برنامههای محلی ارائه میکند.
- بارگذاری مجدد سریع (Hot Reloading) راندمان جالبی ندارد: در حالی که بارگذاری مجدد سریع در فلاتر عملکردی در حد انتظار ارائه میکند، اما ریاکت نیتو گاهی اوقات به درستی عمل نمیکند و برنامه باید به شکل کامل راهاندازی شود.
فلاتر
فلاتر یک چهارچوب توسعه برنامههای کاربردی چندسکویی متنباز است که گوگل آنرا توسعه داده است. فلاتر نیز هماند ریاکت نیتیو مزایا و معایبی به شرح زیر دارد:
مزایای فلاتر
- راندمان: هیچ چهارچوب کاربردی ترکیبی نمیتواند با عملکرد برنامههای فلاتر برابری کند. با استفاده از فلاتر میتوان برنامههایی با عملکرد واقعا عالی و نزدیک به برنامههای محلی پیادهسازی کرد.
- بهبود راندمان توسعهدهندگان: یکی از شاخصترین مزایای فلاتر بارگذاری مجدد سریع است که به شکل سریع تغییرات کد را در برنامه کاربردی انعکاس میدهد و صرفهجویی قابل ملاحظهای در زمان توسعه و اشکالزدایی برنامه ارائه میکند. همچنین ضرورتی ندارد توسعهدهندگان به سیستم مک دسترسی داشته باشند تا بتوانند برنامههای کاربردی فلاتر را برای iOS طراحی کنند. ابزارهایی شبیه به Codemagic قابلیت ساخت برنامههای iOS بر بستر ابر را ارائه میکنند.
- توسعه سریع پروتوتایپها: در فلاتر به سرعت نمونههای اولیه ساخته میشوند، در نتیجه توسعهدهندگان و سازمانها با صرف زمان کمتری محصول را به بازار ارائه میکنند، بازخوردها را دریافت میکنند و برنامه را متناسب با تغییرات بهروزرسانی میکنند.
- کم بودن وابستگیها: چهارچوب فلاتر وابستگی به بستههای ثالث برنامهنویسی را به میزان قابل توجهی کاهش میدهند. با استفاده از فلاتر میتوان تمامی قابلیتهای اولیه را بدون نیاز به بستههای نرمافزاری ثالت در برنامه پیادهسازی کرد. اینکار باعث کمتر شدن پیچیدگی کدنویسی میشود.
- زیرساختها: کد اصلی فلاتر را میتوان روی اندروید، iOS و وب توزیع کرد و انتظار میرود در آینده نزدیک امکان توزیع روی زیرساختهای دسکتاپی به شکل کارآمدی ارائه شود. عناصر رابط کاربری نیز روی تمامی زیرساختها به شکل یکسانی نشان داده میشوند.
- یادگیری ساده: کدنویسی در فلاتر با زبان برنامهنویسی دارت انجام میشود که بیشتر برنامهنویسان وب آشنایی زیادی با آن ندارند، اما یادگیری آن ساده است. کافی است اصول اولیه کار با فلاتر را یاد بگیرید و با یک تجربه اندک برنامههای خوبی طراحی کنید.
- منعطف برای ساخت برنامههای بومی: یکی از مهمترین نقاط قوت فلاتر انعطافپذیری در ساخت برنامههای بومی است که اغلب نادیده گرفته میشود. بهطور مثال، فرض کنید قابلیتی در برنامه کاربردی قرار دادهاید که باید به ساعت هوشمند کاربر از طریق گوشی وی دسترسی پیدا کند، حال فرض کنید تمامی قابلیتهای دیگر با استفاده از چهارچوب فلاتر ساخته شدهاند، اما استفاده از فلاتر برای دسترسی به ساعت اندروید یا اپل وجود ندارد. در چنین شرایطی باید از کیتهای توسعه محلی اندروید و iOS استفاده کنید. تنها کاری که باید انجام دهید این است که از کانالهای فلاتر (Flutter Channels) استفاده کنید و کد محلی اندروید و iOS را صرفا برای پیادهسازی این قابلیت بنویسید، در حالی که سایر بخشهای برنامه بدون مشکل و به شکل یک برنامه کاربردی فلاتر عمل میکنند. در این حالت دیگر نیازی نیست کل پروژه را با وارد کردن کدهای پروژه محلی کند و پیچیده کنید.
- سازگاری با نسخههای پیشین: اگر نسخه فلاتر مورد استفاده در برنامه کاربردی را ارتقا دهید، برنامه بدون آنکه کرش کند همچون گذشته کار میکند. این سازگاری با نسخ قبلی در چهارچوبهای ریاکت و ریاکت نیتیو چندان رایج نیست.
- محبوبیت فلاتر از ریاکت نیتیو بیشتر است: فلاتر به نسبت سایر چهارچوبها تازه وارد میدان است، اما در همین مدت کوتاه با استقبال خوب توسعهدهندگان روبرو شده، به گونهای که نظرسنجی سایت Stackoverflow نشان میدهد آینده روشنی پیش روی فلاتر است.
معایب فلاتر
با وجود مزایای بالقوه فلاتر، چهارچوب فوق معایبی نیز دارد که از آن جمله به موارد زیر میتوان اشاره کرد:
- فلاتر یک تازهوارد دنیای فناوری است. به همین دلیل بیشتر کیتهای SDK موردنیاز برای توسعه برنامههای موبایل هنوز آنرا در منابع رسمی قرار ندادهاند. بهطور مثال،AWS در زمان نگارش این مقاله به شکل رسمی از فلاتر پشتیبانی نکرده است. AWS اعلام کرده تیمهای برنامهنویسی این شرکت در تلاش هستند تا SDK رسمی برای فلاتر ارائه کنند. کیتهای برنامهنویسی مفیدی نیز وجود دارند که بهطور گسترده توسط برنامهنویسان پشتیبانی میشوند و برای ساخت برنامههای کاربردی در دسترس قرار دارند. با اینحال برای دریافت SDKهای پایدار و قابل استفاده در محیطهای توسعه سازمانی باید صبر کنید و اخبار مربوطه را دنبال کنید تا هر زمان SDKهای رسمی منتشر شدند از آنها استفاده کنید.
- بستههای ثالث برای پشتیبانی از فلاتر روی زیرساختهای اندکی در دسترس هستند. با اینکه فلاتر میتواند از زیرساختهای مختلف توسط یک سورسکد اصلی منفرد پشتیبانی کند، اما بستههای زیادی وجود دارند که باید خارج از فلاتر بهینهسازی شوند تا امکان بهکارگیری آنها به شکل قابل اعتماد فراهم شود. بهطور مثال، بستههای زیادی وجود دارند که به آسانی روی هر دو پلتفرم اندروید و iOS استفاده میشوند، اما همین بستهها ممکن است برای وب یا سیستمعامل مک عرضه نشده باشند.
- آزادی و انعطافپذیری: انعطافپذیری برای نوشتن کدها به روشهای مختلف یکی از مزایای بالقوه فلاتر است، اما همزمان ممکن است ساخت رویههای بد را به همراه داشته باشد که نتیجه آن کدنویسی زیاد، پیچیدگی و از دست رفتن قابلیت نگهداری پروژهها در بلندمند است.
- یادگیری یک چهارچوب جدید: این موضوع برای توسعهدهندگانی که روی فناوریهای دیگر متمرکز بودهاند یک چالش به شمار میرود. فلاتر ترکیب نحوی خاص خود را دارد و در نتیجه باید این سبک کدنویسی متفاوت را درک کنید تا قادر به استفاده از آن باشید. به همین دلیل باید نکات جدیدی را یاد بگیرید که همین مسئله برای برخی افراد یک چالش بزرگ است.
انتخاب میان ریاکت نیتیو و فلاتر
اگر یک توسعهدهنده منفرد هستید یا عضو تیمی از توسعهدهندگان هستید و در نظر دارید در کوتاهمدت برنامههای زیبا با راندمان بالا بسازید و آنرا در آینده برای وب و سایر پتلفرمها منتشر کنید، بهتر است از فلاتر استفاده کنید. اگر در زمینه برنامهنویسی وب مهارت دارید یا برنامههای وبمحور دارید، بهتر است از ریاکت نیتو استفاده کنید تا زمان آمادهسازی و انتشار را کوتاهتر کنید.
سخن پایانی
همانگونه که اشاره شد هیچ چهارچوب ترکیبی نمیتواند عملکردی یکسان با برنامههای محلی ارائه کند. به همین دلیل اگر زمان و پول کافی برای توسعه برنامههای محلی دارید، بهتر است روی ساخت این مدل برنامهها متمرکز شوید. در این حالت کنترل و انعطافپذیری کاملی روی مبحث گسترشپذیری پروژه خواهید داشت. فلاتر جدید، اما به سرعت در حال رشد است و آینده روشنی دارد. زمانی که شروع به یادگیری میکنید با چالشهای مختلفی روبرو میشوید، اما در نهایت قادر خواهید بود به بهترین شکل از قابلیتهای کاربردی آن استفاده کنید. ریاکت نیتو مدت زمان زیادی است که منتشر شده، تقاضای زیادی برای آن وجود دارد و برای پاسخگویی به نیازهای توسعهدهندگان پشتیبانی خوبی از آن به عمل میآید. بهکارگیری ریاکت نیتو برای توسعهدهندگان وب به هیچ کار اضافی نیازی ندارد و اجازه میدهد به سرعت برنامههای چند سکویی موبایل را طراحی کنید.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟