React Native در مقابل توسعه اپلیکیشن‌های Native برای موبایل

گردآوری و تالیف : ارسطو عباسی
تاریخ انتشار : 15 بهمن 1396
دسته بندی ها : جاوا اسکریپت

به عنوان یک کارآموز اشتیاق زیادی به توسعه‌ اپلیکیشن برای آی‌او‌اس پیدا کرده‌ام، اما جدیدا با این موضوع مواجه شده‌ام که برای توسعه چنین اپلیکیشنی باید از زبان محلی و اصلی خود آن استفاده کنم یا اینکه سراغ React Native بروم. همزمان با اینکه در رابطه با تفاوت‌های آن‌ها شروع به جستجو کردم، متوجه شدم که من اولین فردی نیستم که چنین تصمیمی را می‌گیرد. همچنین به این موضوع پی بردم که نظرات جدای از این بحث، تفاوت‌های زیادی با هم دارند. در این مطلب قصد دارم تا شما را با تمام وجوه این تصمیم آشنا سازم. امیدوارم بتوانید تصمیم درست را بگیرید.

ابتدا قصد دارم تا توضیحی مختصر در رابطه با گزینه‌های پیش روی‌مان بدهم.

یک اپلیکیشن Native یا محلی، اپلیکیشنی است که برای یک پلتفرم خاص طراحی می‌شود. این روز‌ها دو پلتفرم موبایل وجود دارند که از دیگر موارد بسیار محبوب‌تر و پر استفاده‌تر هستند، ما این دو را با نام آی‌او‌اس و آندروید می‌شناسیم. وقتی می‌خواهید اپلیکیشنی محلی را برای آندروید بنویسید این کار را باید در آندروید استدیو و با استفاده از جاوا انجام دهید -کاتولین نیز یکی از انتخاب‌هاست-. برای آی‌او‌اس نیز از ابزار Xcode و هر دو زبان Objective-C و Swift استفاده می‌کنید.

از طرفی دیگر، React Native یک فریمورک جاوااسکریپتی متن باز است که از طرف فیسبوک توسعه داده شده، با استفاده از این فریمورک می‌توانید مفاهیم توسعه وب را در توسعه موبایل قرار دهید. توسعه این اپلیکیشن با استفاده از جاوااسکریپت انجام می‌شود اما مهم است که بدانید نتیجه یک اپلیکیشن محلی یا Native خواهد بود.

اپلیکیشنی که من قصد ساختن آن را داشتم نیاز داشت تا در هر دو پلتفرم آندروید و آی‌او‌اس وجود داشته باشد، به همین دلیل این موضوع باعث شد که من به React Native فکر کنم. با استفاده از این فریمورک دیگر نیازی نیست که دو اپلیکیشن کاملا جدا از هم را توسعه دهید. کدهای پایه‌ای که نوشته‌اید توانایی تبدیل شدن به هر دو نسخه آندروید و آی‌او‌اس را دارند، حتی نیازی نیست که المان‌های گرافیکی را نیز تغییر دهید. به نظر می‌آمد که این گزینه بسیار خوبی برای من باشد، اما آیا واقعا چنین بود؟ من تحقیقات‌م را با این حالت ادامه دادم که مزایا و معایب هر مورد را به خوبی درک کنم. 

برنامه‌نویسی به صورت Native

  • مزایا

دسترسی به API

تمام‌ API‌ها و توابعی که پلتفرم در اختیار شما قرار می‌دهد، از طریق محیط توسعه Native در دسترس شماست. در این حالت هیچ نیازی به لایه‌ی دیگری از کارایی ندارید -لایه‌ای که نیاز به بروزرسانی دارد-. همچنین هیچ محدودیت یا وابستگی به دیگر پلتفرم‌ها در این حالت دیده نمی‌شود.

کتاب‌خانه‌های اضافی

وقتی در یک محیط Native شروع به توسعه اپلیکیشن می‌کنید، بسیار مهم است که بدانید کتاب‌خانه‌های اضافی بسیاری وجود دارد که می‌توانید از آن‌ها استفاده کنید. جامعه‌ی اینگونه محیط‌های توسعه بسیار بزرگ‌تر هستند و منابع بسیاری برای بهتر کردن تجربه توسعه‌دهندگی شما و خود اپلیکیشن وجود دارد.

درک بهتر

با وجود اینکه ساختن اپلیکیشن از طریق فریمورک‌های دیگری نیز قابل انجام است، اما داشتن درکی کلی از خود پلتفرم و معماری ساخت آن یکی از بهترین مزایا است. برخی از کارکردها توانایی پیاده‌سازی در محیط‌های دیگری را ندارند بنابراین برای پیاده سازی آن‌ها درک ساختار یک اپلیکیشن محلی الزامی است.

جنبه‌های بلند مدت

برای موضوع بلند مدت کار با محیط‌های توسعه محلی، یکی از امن‌ترین و بهترین انتخاب‌های ممکن است. مطمئنا آن‌ها نیز ویژگی‌های زبان و APIهای‌شان را تغییر می‌دهند -مانند اپل که از Objective-C به Swift مهاجرت کرد- اما این تغییرات سازگار هستند و در ضمن به شما راهنمای کاملی برای اینکه کدهای‌تان را به حالت جدید تبدیل کنید داده می‌شود. حداقل این ماجرا آن است که شما از این قضیه که پلتفرم بروزرسانی می‌شود و امنیت خوبی پشت آن قرار دارد، مطمئن می‌شوید.

زبان سخت‌گیرانه

تمام زبان‌های محلی برای آندروید و آی‌او‌اس زبان‌های strict یا سخت‌گیرانه‌ای به حساب می‌آیند، این زبان‌ها به شما کمک می‌کنند تا بهتر خطاهای پنهانی را شناسایی کنید. با وجود اینکه این زبان‌ها سخت‌گیرانه هستند، اما یادگیری و کار با آن‌ها بسیار ساده است، البته برای این کاملا با آن احساس راحتی داشته باشید، باید میزانی وقت بگذارید.

  • معایب

شما مجبور هستید که دو اپلیکیشن را درست کنید

یکی از ویژگی‌هایی که محیط‌های توسعه محلی دارند این است که آن‌ها صرفا برای یک تولید اپلیکیشن در یک پلتفرم خاص تعریف شده اند. این بدان معنی است که اگر شما توسعه دادن به صورت محلی را انتخاب کرده‌اید، مجبور هستید که برای هر پلتفرم یک اپلیکیشن جداگانه طراحی کنید. متاسفانه کدنویسی در این دو پلتفرم که ما آن‌ها را آندروید و IOS در نظر می‌گیریم کاملا از همدیگر متفاوت هستند، به همین دلیل نمی‌توانید آن‌ها را به سادگی بین همدیگر پورت کنید. البته تنها وجه اشتراک آن‌ها کارکرد اپلیکیشن و شیوه ارائه آن است.

برنامه‌نویسی در React Native

  • مزایا

یک پایه کد

همانطور که قبلا اشاره شد در React Native شما نیازی ندارید که دو اپلیکیشن جدا از همدیگر را توسعه دهید. بجای این‌کار کدهای پایه شما می‌توانند در هر دو پلتفرم مورد استفاده قرار گیرند. به نظر می‌آید که این یک مزیت خوب است که مجبور نیستید دو زبان متفاوت از همدیگر را برای توسعه اپلیکیشن‌های متفاوت یاد بگیرید، تنها کافی‌ست یک مورد را بدانید.

زمان

وقتی که از React Native استفاده می‌کنید، همواره برای ساختن یک اپلیکیشن ساده و انتشار آن در مارکت، سرعت بیشتری دارید و این به نسبت اپلیکیشن‌های Native به شما امکان تسریع در روند توسعه را می‌دهد. این موضوع براین اساس در نظر گرفته شده که شما تنها یک اپلیکیشن را برای دو کاربرد متفاوت ایجاد می‌کنید.

مفاهیم وب

برای یک توسعه‌دهنده وب، کار روی توسعه موبایل کمی سخت است. React Native از آنجایی که از جاوااسکریپت قدرت می‌گیرد، این انتقال یا تغییر روش را ساده‌تر می‌کند. بیشتر توسعه‌دهندگان وب مطمئنا با جاوااسکریپت کار کرده‌اند، به همین دلیل روند توسعه اپلیکیشن موبایل برای‌شان درک‌پذیر‌تر و ساده‌تر است.

بارگذاری مجدد سریع

وقتی مشغول توسعه یک اپلیکیشن در React Native هستید و یک فایل را ذخیره می‌کنید، تغییرات به سرعت در دستگاهی که اپلیکیشن روی آن قرار دارد اعمال می‌شود، این سرعت عملکرد در پاسخگویی به فییدبک‌ها یکی از موارد بسیار خوب است.

متن باز

React Native یک فریمورک متن‌باز است که به شما این اجازه را می‌دهد تا بتوانید کدها را بازرسی کنید. این موضوع برای درک بیشتر فریمورک بسیار مفید است، اما جدای از آن به شما کمک می‌کند تا بتوانید باگ‌ها را درست کنید و ویژگی‌های جدیدی را نیز به آن اضافه نمایید.

  • معایب

پشتیبانی نکردن از تمام APIها

React Native از تمام APIهای موجود برای اپلیکیشن‌های Native پشتیبانی نمی‌کند. این فریمورک APIهای لازم را پشتیبانی می‌کند اما گاهی ممکن است API یا کارکرد بخصوصی را که شما به نیاز دارید را پشتیبانی نکند. استفاده از این کارایی‌ها از طریق ماژول‌های محلی انجام می‌شود که در مورد پایینی مشاهده می‌کنیم.

ماژول‌های محلی

از آنجایی که تمام APIها و کارکردها در React Native قرار ندارد، به همین دلیل حالت ماژول‌های محلی ارائه شده است. این ماژول‌ها قسمت‌هایی هستند که در زبان Native نوشته شده اند و بعد از آن وارد کدهای React Native شده اند. به نظر راه حل مناسب و معقولی می‌آید، اما برای استفاده از این ماژول‌ها، توسعه‌دهنده نیاز دارد که از زبان‌های Native نیز درکی داشته باشد به همین دلیل است که برخی افراد از استفاده React Native خودداری می‌کنند. البته در کنار این، چنین ماژول‌هایی می‌تواند روی کدها نیز تاثیر بگذارد به این دلیل که ماژول‌های مربوط به Android با IOS متفاوت است.

کتاب‌خانه‌های دیگر

React Native جامعه کوچک‌تری نسبت به جامعه اپلیکیشن‌های Native دارد، به همین دلیل کتابخانه‌های کمتری برای آن ساخته شده است. برای استفاده کردن از کتاب‌خانه‌های نوشته شده در React Native شما نیاز دارید که آن‌ها را در ماژول‌های Native نوشته شوند. البته این موضوع در حال تغییر است و تقریبا می شود گفت دیگر این موضوع به دلیل بزرگتر شدن جامه برنامه نویسان مطرح نیست .

تاثیر از دیگر اپلیکیشن‌های Native

وقتی قصد دارید به اپلیکیشن‌های محلی دیگری مانند دوربین پلتفرم دسترسی داشته باشید این کار از طریق محیط‌های توسعه Native خیلی ساده‌تر انجام می‌شود. React Native در برخی حالت‌ها از این وضعیت پشتیبانی نمی‌کند به همین دلیل شما را مجبور می‌کند که از دیگر فریمورک‌ها یا ماژول‌های Native استفاده کنید.

طراحی

آندروید و IOS طراحی و ظاهر متفاوتی دارند که هر کدام برای خود دارای راهنما و شیوه‌های متفاوتی هستند. المان‌های گرافیکی در React Native در پلتفرم‌های مختلف تبدیل می‌شود اما این جایگزین کردن‌ها در برخی مواقع ممکن است بی‌ثبات باشد. به همین دلیل بسیاری از اوقات نیاز دارید که شیوه‌های متفاوتی را برای کار کردن با المان‌های طراحی در بر بگیرید.

جنبه‌های بلند مدت

همواره یک شک از نگرانی برای پشتیبانی بلند مدت از React Native وجود دارد. فیسبوک هر روز می‌تواند تصمیم بگیرد که دیگر از این فریمورک پشتیبانی نکند، این حالت وضعیت را برای انتخاب سخت می‌کند.

چگونه من به تصمیم رسیدم؟

از مزیت‌های React Native همانطور که گفته شد می‌توان به قابلیت توسعه اپلیکیشن برای هر دو پلتفرم اشاره کرد، این مسئله برای وقتی که زمان و بودجه شما محدود است بسیار مفید و بزرگ است. همچنین برای وقتی که توسعه‌دهنده وب قصد داشته باشد اپلیکیشنی را ایجاد کند، استفاده از این حالت بسیار خوب است به این دلیل که دیگر نیازی یادگیری موارد پیچیده و تخصصی ندارد.

توسعه اپلیکیشن به صورت Native نیز در شرایط مختلفی پیشنهاد می‌شود. با این وجود درک زبان Native و APIهای آن در React Native نیز یکی از الزامات است که باید بدانید. منظورم از این قضیه این است که اگر تازه به روند توسعه شروع کرده‌اید بهتر است سراغ محیط‌های توسعه Native بروید. 

برای من انتخاب بسیار سخت بود. اپلیکیشنی که قصد ایجاد آن را داشتم از توابع حرفه‌ای ساخته می‌شد البته نه زیاد هم. برای‌م بسیار مهم بود که اپلیکیشن در هر دو سیستم عامل قابل دسترس باشد، پس React Native انتخاب خوبی بود، اما یک الزام به حساب نمی‌آمد. من قبلا با ری‌اکت کار کرده ام و از آن لذت می‌برم به این دلیل که خیلی از ویژگی‌های آن برای‌م ملموس بودند.

از طرفی دیگر مشتاق بودم که به یک توسعه دهنده IOS تبدیل شوم. قبلا با این نوع از توسعه کاملا آشنایی پیدا کرده‌ام و حال فکر می‌کنم که Swift برای من انتخاب بسیار خوبی است. هرچند من فکر می‌کنم موارد بسیار دیگری برای یادگیری و تبدیل شدن به یک توسعه دهنده خوب IOS نیاز است. 

در انتهای مسیر من تصمیم گرفتم که برنامه‌نویسی به صورت Native را ادامه دهم. البته این موضوع به این نیز برمی‌گردد که من قبلا با IOS آشنایی داشتم اما اگر چنین حالتی در کار نبود، ممکن بود که تصمیم دیگری بگیرم. 

منبع

مقالات پیشنهادی

آموزش ساخت برنامه موبایل توسط React Native – قسمت اول

در این سری آموزش‌ها میخوایم درباره ساخت اپلیکیشن های native برای ios و اندروید یاد بگیریم. اما این کار رو توسط فریمورک محبوب React Native Javascript ا...

11 اشتباه رایج در طی توسعه برنامه‌های React Native / Redux

پس از کار کردن با React Native به مدت تقریبا یک سال، ‌تصمیم گرفتم اشتباهات رایجی که معمولا تازه‌کاران انجام می‌دهند را لیست کنم. در این مثاله، با ۱۱ م...

آموزش ساخت برنامه موبایل توسط React Native – قسمت دوم

در قسمت قبل با ساختار و نحوه راه اندازی React Native آشنا شدیم, در این قسمت میخواهیم بیشتر روی کار عملی تمرکز کنیم و پروژه رو جلو ببریم.

Xamarin در مقابل React Native

هر روزه هزاران اپلیکیشن جدید در دنیا ایجاد می‌شوند. برخی از این اپلیکیشن‌ها روانه App Store و برخی دیگر وارد Play Store می‌شوند، در این بین درصد کمی ن...