فریمورکهای چندسکویی ابزارهایی برای توسعه نرمافزارهایی هستند که توانایی اجرا بر روی بیش از یک سیستمعامل را دارند. در مقابل فریمورکهای چندسکویی، فریمورکهای Native هستند که تنها توانایی اجرا بر روی یک سیستمعامل را دارند.
برای مثال در حالت عادی اگر شما بخواهید یک نرمافزار موبایلی برای اندروید و آیاواس توسعه بدهید، درواقع باید دوبار این نرمافزار را توسعه بدهید. یکبار با ابزارهایی که گوگل بر روی اندروید به برنامهنویس ارائه میدهد و یکبار دیگر بصورت کاملا مستقل با ابزارهایی که اپل بر روی آیاواس به برنامهنویس ارائه میدهد. اما فریمورکهای چندسکویی بخاطر اینکه بر روی چند سیستمعامل توانایی اجرا دارند، به برنامهنویسها اجازه میدهند یک نرمافزار را یکبار توسعه بدهند و بر روی همهی سیستمعاملها اجرا کنند.
امروزه دیدگاههای متفاوتی در مورد این ابزارها وجود دارد و درحالی که گروهی آنها را کارآمد میدانند، به نظر گروهی دیگر ناکارآمد هستند.
در ادامه به بررسی فریمورکهای چند سکویی و مقایسه آن با فریمورکهای Native خواهیم پرداخت.
تاریخچه پیدایش فریمورکهای کراس پلتفرم
باید بدانید برخلاف تصور عموم که فریمورکهای چندسکویی را یک پدیده جدید میدانند، مبحث فریمورکهای چندسکویی مبحثی بسیار قدیمی است و بیشتر از ۳۰ سال است که فریمورکهای چندسکویی یا Cross platform وجود دارند و شرکتهای قدرتمندی آنها را پشتیبانی میکنند و توسعهدهندهها از آنها استفاده میکنند.
درسالهای دور فریمورکهای چند سکویی، معمولا فقط بین سیستمعاملهای دسکتاپ قابلیت انتقال داشتند. فریمورکهایی مانند Qt و GTK و یا WXWidgets جز این دسته از فریمورکها هستند.
پس از اینکه پای تلفنهای هوشمند با سیستمعاملهای سیمبین و ویندوز موبایل به میان آمد بعضی از این فریمورکها مانند Qt پا به عرصهی تلفنهای هوشمند هم گذاشتند و اولین فریمورکهای چند سکویی بودند که تلفنهای هوشمند را پشتیبانی میکردند.
پس از آن، سیستمعاملهای مدرنتر و امروزی به میان آمدند و علاوه بر Qt فریمورکهای چندسکویی بیشتری مانند React Native، Flutter، Xamarin و … پا به عرصه فریمورکهای چندسکویی گذاشتند.
هزینه توسعه نرمافزار با فریمورکهای Cross Platform
کاهش هزینه توسعه اصلیترین دلیل به وجود آمدن فریمورکهای چندسکویی است. این فریمورکها با متمرکز کردن انرژی تیم توسعه بر روی یک کد و یک پروسه توسعه، هزینهی توسعه را به شدت کاهش میدهند. معمولا هزینهی توسعه با فریمورکهای چندسکویی کمی بیشتر از توسعه یک نرمافزار Native و بسیار کمتر از دو یا چند نرمافزار Native میشود.
به عبارت دیگر اگر نرمافزار شما تنها قرار است بر روی یک سیستمعامل اجرا شود، احتمالا هزینهی توسعه آن با یک فریمورک چند سکویی کمی گرانتر میشود. اما اگر نرمافزارتان قرار باشد بر روی چند سیستمعامل اجرا شود، یک فریمورک چندسکویی مناسب میتواند هزینهی توسعه شما را به شدت کاهش دهد و در هزینههای شما بسیار صرفه جویی کند.
حالا تصور کنید یک نرمافزار قرار است روی چند سیستمعامل دیگر هم منتشر شود و هزینهی توسعهی آن بصورت Native چند برابر خواهد شد.
از طرف دیگر تقریبا غیرممکن است که شما بتوانید یک نرمافزار با ظاهری دقیقا مشابه روی چند سیستمعامل تولید کنید و معمولا باید هزینهی گزافی را برای آن بپردازید. کاری که بسیاری از فریمورکهای چندسکویی به راحتی انجام میدهند و این باعث شده است که بسیاری از برندهای مطرح جهان که داشتن نرمافزاری با ظاهر دقیقا یکسان روی تمامی سیستمعاملها برایشان مهم است، از این فریمورکها استفاده کنند. حتی با اینکه تشکیل چند تیم توسعه مستقل به منظور توسعه Native برای آنها هزینه چشمگیری ندارد.
فیسبوک، اینستاگرام، توییتر، اسپاتیفای، نتفلیکس، گوگل و بسیاری از شرکتهای بازیسازی از جمله این برندها هستند که در بعضی یا همه نرمافزارهای خود از فریمورکهای چندسکویی استفاده میکنند.
کیفیت و پایداری نرمافزارهای توسعهدادهشده با فریمورک چندسکویی
چیزی که معمولا فریمورکهای چندسکویی درگیر آن هستند کیفیت است و برخلاف تصور عموم توسعه نرمافزارهای چندسکویی اصلا کار آسانی نیست و نیازمند تجربه زیاد تیم توسعه میباشد و اگر تیم توسعه کمی بیدقت یا بیتجربه باشد، نرمافزار توسعه یافته دچار ضعف کیفیتی بسیاری خواهد شد و دربسیاری از موارد کاملا ناکارآمد خواهد بود.
چیزی که امروزه از بسیاری از افراد میشنویم که نرمافزار چندسکوییای توسعه دادهاند که در نهایت بخاطر کیفیت پایین آن، مجبور به کنار گذاشتن آن شده و ضرر زیادی را متحمل شدهاند.
درواقع اگر بخواهیم دقیقتر بررسی کنیم حفظ کیفیت در توسعه نرمافزارهای چند سکویی به دو عامل اصلی زیر بستگی دارد.
- انتخاب فریمورک مناسب: که بتواند تا حد زیادی کیفیت یکسان و مشابه روی سیستمعاملهای مختلف ارائه دهد و در فضا و شرایط متفاوت هر سیستمعامل به درستی عمل کند.
- تیم توسعه باتجربه و دقیق: توسعه نرمافزار چند سکویی نیاز به دقت بالایی دارد و تیم توسعه آن باید با چالشهای سیستمعاملهای مختلف آشنا باشند و بتوانند رفتارهای متفاوت هر سیستمعامل در شرایط مختلف را درست پیشبینی کرده و مهار کنند. تیم توسعه این نرمافزارها باید کاملا مسلط به فریمورک باشند و پروسه توسعه و تست منظمی داشته باشند.
در طرف مقابل فریمورکهای Native بخاطر اینکه مخصوص یک سیستمعامل ساخته میشوند، رفتارهای سیستمعامل را بهتر پیشبینی میکنند و اگر خود فریمورک ضعف کیفیتی نداشته باشد، تیم توسعه کمتر درگیر چالشهای مهار کردن رفتارهای سیستمعامل میشود و در نتیجه خروجی با کیفیتتری ارائه میدهند.
اما این به این معنی نیست که فریمورکهای چندسکویی کیفیت پایینتری دارند و تنها ثابت میکند توسعه یک نرمافزار چندسکویی کار سختتر و چالشبرانگیزتری نسبت به توسعه یک نرمافزار Native است و هر تیم توسعهدهندهای به راحتی از پس آن بر نمیآید.
سرعت فریمورکهای مالتی پلتفرم
فریمورکهای چندسکویی معمولا به دو دسته تقسیم میشوند.
- فریمورکهایی که در پسزمینه از فریمورکهای Native و ابزارهای خود سیستمعامل استفاده میکنند
- فریمورکهایی که کمتر به ابزارهای سیستمعامل وابستگی دارند و تقریبا میتوانند بصورت مستقل عمل کنند
از آنجایی که دسته اول یک لایهی نرمافزاری بالاتر از فریمورکهای Native دارند و از همان ابزارهای سیستمعامل استفاده میکنند، معمولا سرعتی پایینتر از فریمورکهای Native دارند.
در طرف مقابل فریمورکهایی که به ابزارهای سیستمعامل وابستگی ندارند سرعتشان کاملا مستقل از آنهاست و بنابراین سرعت آنها ممکن است بیشتر یا کمتر از آنها باشد.
قابل ذکر است که بیشتر فریمورکهای چندسکویی دسته اول را شامل میشوند و تعداد انگشت شماری از فریمورکها مانند Qt و Flutter هستند که در دسته دوم قرار میگیرند.
کیفیت رابط کاربری در نرمافزارهای توسعهدادهشده به صورت چندسکویی
رابط کاربری جز موارد مهمیست که برای صاحبان کسب و کارها بسیار حائز اهمیت است و از طرف دیگر تجربه کاربریای که به کاربران این کسب و کارها ارائه میشود، بسیار مهم است. بنابراین ارائه نرمافزاری با رابط کاربری استاندارد، و در عین حال زیبا و دلنشین دغدغه صاحبان کسب و کارها و بسیار مهم برای مخاطبان است.
چیزی که واضح است هر سیستمعامل استانداردهای خود را از نظر رابط کاربری دارد و فریمورکهای Native این استانداردها را بهتر از فریمورکهای جانبی دیگر رعایت میکنند.
اما گاهی اوقات مساله اصلی رعایت استانداردها نیست. خیلی وقتها برندها تمایل دارند نرمافزارشان هویت برندشان باشد و این همان جایی است که داستان کمی تغییر میکند. چرا که دیگر رعایت استانداردهای سیستمعامل دغدغهی ثانویه توسعه نرمافزار میشود و دغدغه اول طراحی نرمافزاری با ظاهر یکسان و مشابه روی همه سیستمعاملها که بتواند هویت برند را منتقل کند و به کاربر القا کند که این نرمافزار یک نرمافزار خاص با رابط کاربری مخصوص خودش است.
مثال ملموس این قضیه نرمافزارهای اینستاگرام، توییتر، اسکایپ، وایبر و اسپاتیفای هستند که رابطکاربری یکسانی را بر روی همه سیستمعاملها ارائه میدهند که منتقلکننده سبک و هویت برندشان است. به همین دلیل رعایت استانداردها در فریمورکهای چندسکویی سختتر و نیازمند یک طراح رابطکاربری و تجربهکاربری است که در کنار تیم توسعه بر روی موارد اینچنینی نظارت داشته باشد.
بصورت کلی فریمورکهای چندسکویی انتخاب بهتری برای برندها و نرمافزارهایی هستند که هدف اولشان داشتن برنامهای با ظاهر یکسان بر روی همه سیستمعاملها میباشد.
دو تصویر زیر اسکرینشاتهای اپلیکیشن پینترست در گوگلپلی و اپاستور هستند. همانطور که میبینید این دو نرمافزار کاملا مشابه هم و متفاوت از استانداردهای سیستمعامل طراحی شدهاند.
دسترسی به امکانات لایههای عمیق سیستمعامل در فریمورکهای چندسکویی
معمولا انتقادی که به بسیاری از فریمورکهای چندسکویی وارد میشود، عدم دسترسی آنها به لایهها و امکانات عمیق سیستمعاملهاست. به خصوص این مشکل برای بسیاری از فریمورکهای چند سکویی که زبانهای سطح بالا دارند بیشتر ملموس و دردسرساز است.
برای مثال برای تولید ویجتهای دسکتاپ در بسیاری از فریمورکهای چندسکویی، مجبور هستید بخشی از نرمافزار خود را با ابزارهای Native سیستمعامل بازنویسی کنید تا بتوانید از این امکان سیستمعامل استفاده کنید. معمولا بازنویسی این بخشها و اتصال آن به بدنه اصلی نرمافزار که با فریمورک چندسکویی توسعه داده شده کار آسانی نیست و به توسعهدهندههای خبره و باتجربه نیاز دارد که هم به زیر و بم فریمورک چندسکویی استفاده شده و هم به فریمورکهای Native وارد باشد.
امنیت توسعه با فریمورکهای چندسکویی
امنیت در توسعه یک نرمافزار تا حد زیادی مستقل از Native یا چندسکویی بودن پلتفرم است و بیشتر به معماری فریمورک و زبانهای برنامهنویسی استفاده شده و همچنین استانداردهایی که در توسعه آنها رعایت شده برمیگردد و معمولا فریمورکهای مطرح امنیت نسبتا خوبی دارند.
حجم بسته نهایی نرمافزار
از آنجایی که معمولا فریمورکهای چندسکویی ابزارهایی اضافه بر سیستمعامل ارائه میدهند، هنگام نصب آنها بر روی هر سیستمعامل این ابزارها هم باید در کنار نرمافزار شما باشند و همین باعث میشود که معمولا حجم بستههای نرمافزارهایی که با فریمورکهای چندسکویی توسعه داده شدهاند بیشتر از نرمافزارهای Native باشد.
البته این مورد روی iOS بخاطر اینکه حتی ابزارهای سیستمعامل بر روی بستههای نهایی نرمافزارها کپی میشود و اصطلاحا برنامهها static کامپایل میشوند کمی متفاوت است و ممکن است حجم برنامهی شما بسیار کمتر از نسخهی معادل Native آن شود.
آینده و پشتیبانی فریمورکهای چندسکویی
هر فریمورک Native قطعا تا زمانی که یک سیستمعامل زنده است وجود خواهد داشت. این در حالی است که بقا و طول عمر فریمورکهای چندسکویی وابسته به سیستمعامل نیست و همانطور که در اول مطلب اشاره کردیم فریمورکهای چندسکوییای مانند Qt هستند که ۳۰ سال از عمر آنها میگذرد و همچنان درحال توسعه هستند.
اما از طرفی اگر یک فریمورک چندسکویی غیرمطمئن را انتخاب کنید، ممکن است عمر آن به مراتب کمتر از عمر یک فریمورک Native و سیستمعامل آن باشد.
نتیجه گیری
هرکدام از فریمورکهای چند سکویی و Native در جایگاه خود کارآمد و خوب هستند و نمیتوان به صورت مطلق گفت کدام یک بهتر است. در واقع نیاز و بودجه شما تعیین میکند که کدام یک از این دو راهحل را انتخاب کنید. با این حال جدول زیر ممکن است بتواند به شما در انتخاب راهحل کمک کند.
Cross Platform | Native | |
---|---|---|
هزینه | اگر سیستمعامل هدف شما بیش از یک سیستمعامل است هزینه شما به شکل چشمگیر کاهش پیدا خواهد کرد. | اگر هدف شما ارایه نرمافزارتان تنها برای یک سیستمعامل است هزینهی شما احتمالا کمتر خواهد شد. |
کیفیت و پایداری | نیاز به یک تیم با تجربه و قوی دارد. اگر تیم توسعه ناوارد و بیتجربه باشد احتمالا نرمافزار نهایی بسیار بیکیفیت خواهد بود. | قطعا تیم توسعه و تجربیات آنها مهم است. اما توسعه مطمئنتری دارد و افراد بیشتری میتوانند با استفاده از آنها نرمافزارهای با کیفیت تولید کنند. |
سرعت | سرعت در چندسکوییها کاملا به فریمورک انتخاب بستگی دارد. میتواند بیشتر از Native باشد و یا میتواند کمتر باشد. | همیشه در حد قابل قبول و استاندارد است. |
رابط کاربری | انتخاب بهتر و مناسبتر برای آنهایی که میخواهند رابطکاربری یکسان که معرف هویت برندشان است را بر روی همه سیستمعاملها ارایه دهند | انتخاب بهتر برای آنها که میخواهند رابطکاربری مطابق استانداردهای هر سیستمعامل داشته باشند و طراح ندارند و یا میخواهند هزینهی کمتری صرف طراح کنند. |
دسترسی به امکانات سیستمعامل | کم، اما غیر ممکن نیست | زیاد و خیلی راحت |
امنیت | وابسته به نوع فریمورک | وابسته به نوع فریمورک |
حجم نهایی بسته | در اکثر مواقع بیشتر از Native | کم |
آینده و پشتیبانی | در صورت انتخاب فریمورک معتبر، معمولا طول عمر بیشتر و مستقل از سیستمعاملها دارند. | طول عمر کاملا وابسته به حیات سیستمعامل |