بطور کل نرمافزارهای موبایل به سه دسته تقسیم میشوند:
Native App Web App Hybrid App
نرمافزار Native چیست؟ ساخت و توسعه نرمافزارهای Native به این معناست که برای برنامه نویسی و توسعه نرمافزار خود از زبانهای اصلی سیستم عامل استفاده کنید. مثلا برای توسعه نرمافزار اندروید باید از زبان برنامه نویسی Java و برای توسعه نرمافزار آیفون باید از زبان برنامه نویسی Objective-C استفاده کنید. بزرگترین مزیت این حالت بازدهی (performance) بالای نرمافزار است، زمانی که شما برنامه خود را بصورت Native مینویسید کدهای شما به زبان ماشین کامپایل خواهند شد(Dalvik bytecode در اندروید) که همین موضوع باعث میشود شما حداکثر بازدهی ممکن از نرمافزار را داشته باشید. بازدهی بالا میتواند شامل افکتهای انیمیشن، روان کار کردن بخشهای مختلف برنامه، امکان استفاده از multi touch و خیلی موارد دیگه باشه که بدلیل دسترسی مستقیم به موقعیتهای حافظه و سختافزار گوشی اتفاق میفته. توسعه نرمافزارهای Native آسان نیست! چرا؟ چون باید برنامهای که میخواهید بنویسید، برای هر platform بشکل مجزا بنویسید. با اینکه امروزه منابع زیادی برای یادگیری برنامهنویسی در اینترنت وجود دارند اما باز هم یادگیری برنامهنویسی بصورت Native شاید برای همه قابل فهم و انجام نباشه و همین موضوع کمی کار رو سخت میکنه. اگر شما بخواهید نرمافزار خود را برای پلتفرمهای مختلف مانند اندروید، ios و یا ویندوز طراحی کنید باید کدی که مینویسید را به زبان برنامهنویسی هر کدام از پلتفرمها مجددا بنویسید! شاید منطق و الگوریتم همگی یکی باشند اما مسلما SDK و APIهای که برای هرکدام استفاده میکنید متفاوت خواهند بود و از همه مهمتر باید وقت بیشتری برای کدنویسی آن بگذارید.
پس اگر میخواهید شروع Native انجام دهید به خاطر داشته باشید برای هر Platfrom باید زبان برنامهنویسی آن را یاد بگیرید و مجددا کدهای برنامه خود را بنویسید. مزایا
بدلیل کامپایل شدن برنامه دارای سرعت بالایی هستند دسترسی به تمامی امکاناتی که سیستم عامل به برنامهنویس میدهد پشتیبانی از APIهای مختلف
معایب
دوباره نویسی کدهای برنامه برای پلتفرمهای مختلف هزینه تمام شده بالا بدلیل زمان توسعه برنامه
نرمافزار Web چیست ؟ نرمافزارهای web در واقع نرمافزار نیستند! آنها وبسایتی هستند که بصورت Responsive طراحی شدهاند و یا اینکه وبسایتی هستند که مخصوص موبایل پیادهسازی شدهاند و کاربران میتوانند توسط مرورگر دستگاههای خود آنها را بدرستی مشاهده کنند. شاید بشه گفت این قبیل نرمافزارها شبیه نرمافزار هستند، تا اینکه نرمافزار واقعی باشند. این نرمافزارها با استفاده از HTML5 طراحی و توسعه داده میشوند، به همین دلیل باید حتما در مرورگر گوشی آنها را مشاهده کرد. برای دسترسی به این قبیل نرمافزارها کاربر باید مانند بازدید از یک وبسایت عمل کند، یعنی ابتدا مرورگر را باز کند، در بخش نوار آدرس، آدرس وبسایت یا وباپلیکیشن را وارد کند و آنرا از طریق مرورگر مشاهده کند. امکان نصب نرمافزار بر روی گوشی وجود ندارد و کاربر فقط میتواند یک bookmark از آن آدرس را بر روی گوشی خود بسازد که در آینده دسترسی به آن سایت راحتتر باشد. با توجه به اینکه مرورگرهای مختلفی بر روی گوشیها وجود دارد و کاربر شما از مرورگر مورد علاقه خود استفاده میکند، اگر نرمافزار را اصولی توسعه ندهید و یا برخی نکات در طراحی سایت/اپلیکیشن را در نظر نگیرید، ممکن است نرمافزار شما در برخی از مرورگرها دچار مشکل شود. البته باید این رو هم گفت که Web Appها خیلی هم بد نیستند! چون کار شما رو به عنوان توسعه دهنده خیلی راحت میکنه! اگر شما در حال طراحی یک وب سایت با ساختار وب اپلیکیشن هستید کافیه موارد لازم برای دستگاههای موبایل و تبلت را در نظر بگیرید و نرمافزار خود را تولید کنید، بدین شکل شما یکبار کد میزنید و با همان کد هم وبسایت دارید و هم موبایل اپلیکیشن از نوع Web App مزایا
نوشتن کد یکبار و استفاده از آن در بسترهای متفاوت با توجه به اینکه فقط یکبار کد نوشته میشه رفع باگ و مشکلات بسیار آسان خواهد بود مستقل از سیستمعامل، بستر و حتی نسخه سیستم عاملها
معایب
نداشتن دسترسی به سختافزار گوشی یا تبلت وابسته به مرورگر عدم امکان انتشار نرمافزار در مارکتها و app store
نرمافزار Hybrid چیست ؟ نرمافزارهای Hybrid مانند نرمافزارهای Web هستند (وب سایت یا وب اپلیکیشن) که باید در مرورگر مشاهده شوند اما تفاوتی که با Web App دارد این است که نیازی نیست کاربر در مرورگر گوشی، برنامه را ببیند بلکه توسط WebView در اندروید و یا UIWebView در iOS (مرورگر native) محتوای نرمافزار به کاربر، در قالب یک نرمافزار Native نمایش داده خواهد شد. نرمافزارهای Hybrid توسط HTML و CSS و JavaScript توسعه داده میشوند و سپس توسط نرمافزارهای مانند Cordova به نرمافزار Native تبدیل میشوند. البته همانطوری که پیشتر گفته شد، تبدیل آنها به نرمافزار Native بدین معنا نیست که کدهای ما Compile شوند بلکه بر اساس پلتفرم مورد نظر، Cordova یک اپلیکیشن Native تولید میکند و در آن یک web view قرار میدهد و کدهای ما را درون آن اجرا میکند. این روش توسعه نرمافزار نسبت به نرمافزارهای Native سریعتر و راحتتر است. امکان رفع مشکلات و یا به روزرسانی نرمافزار بسیار راحت خواهد بود و هر زمان که بخواهید میتوانید برای هر بستری که لازم باشد نرمافزار خود را منتشر کنید. Cordova به شما این امکان را میدهد که بدون حتی اضافه کردن یک خط کد به برنامه خود، آنرا برای پلتفرمهای مختلف منتشر کنید! علاوه بر این تقریبا شما به تمامی امکانات سختافزاری دستگاه (که در نرمافزارهای Native میتوانستید کار کنید) دسترسی دارید و حتی کلی Plugin از قبل توسعه داده شده وجود دارد که میتوانید بسیار راحتتر برنامه خود را توسعه دهید. تنها ایرادی که به نرمافزارهای Hybrid وارده اینه که بازدهی نرمافزارهایی که بدین شکل توسعه داده میشوند به اندازه نرمافزارهای Native نیستند و دلیلش هم اینه که کدهای شما توسط مرورگر قرار است پردازش و نمایش داده شود. مزایا
نوشتن کد یکبار و استفاده از آن در بسترهای متفاوت دسترسی به تمامی امکاناتی که سیستمعامل به برنامه نویس میدهد دارای Pluginهای متعدد
معایب
بازدهی پایین نسبت به نرمافزار Native
در زمان بررسی Native یا Hybrid بودن نرمافزار، Web App جایگاهی ندارد. پس ما مقایسه رو بین این دو نوع نرمافزارها انجام می دهیم. همانطوری که در بالا گفته شد در تولید نرمافزار Native و Hybrid تقریبا امکانات و قابلیتها یکسان هستند فقط دو فرق عمده دارند:
سرعت و بازدهی نرمافزار نحوه نوشتن کد
در نرمافزارهای Hybrid بدلیل اینکه در مرورگر نرمافزار Native کدها اجرا میشوند، بازدهی پایینتری نسبت به Native دارند. چون یکبار باید web view باز شود و سپس داخل آن کدها اجرا شوند. اما در مورد کد نویسی، سرعت توسعه نرمافزار در حالت Hybrid خیلی سریعتر و راحتتر نسبت به Native است. حالا به این مرحله میرسیم که بین این دو کدام را انتخاب کنیم ؟