Introducerea fusei pentru dezvoltarea aplicațiilor cross-platform

Nu există lipsă de instrumente atunci când vine vorba de dezvoltarea de aplicații care funcționează pe mai multe platforme. A început inițial cu PhoneGap, care a devenit apoi Cordova. Apoi au venit cadrele hibride cu performanță aproape nativă, cum ar fi React Native și NativeScript. Și mai recent a venit Google Flutter. 

Punctul meu este că există o mulțime de cadre acolo. Veți crede-mă dacă faceți doar o căutare rapidă de către Google a "cadrelor de dezvoltare mobile pe mai multe platforme". Dacă începeți să dezvoltați aplicații mobile, aceasta poate fi paralizantă. De aceea este important să vă cunoașteți opțiunile.

Așa că astăzi vă voi prezenta pe Fuse, o altă platformă pentru dezvoltarea de aplicații mobile care funcționează pe mai multe platforme.

În acest articol, voi încerca să răspund la următoarele întrebări:

  • Ce este Fuse?
  • Care sunt argumentele sale pro și contra?
  • Cum functioneazã?
  • Cum se compară cu alternativele mai populare, cum ar fi React Native?

Ce este siguranța?

Fuse este o platformă pentru dezvoltarea aplicațiilor cross-platform cu marcaj UX și JavaScript. Este în aceeași categorie ca și Reactive Native și NativeScript, dar principalul său punct de vânzare este furnizarea de instrumente care permit dezvoltatorilor și designerilor să colaboreze în timp real.

Fuse utilizează UX Markup, un limbaj bazat pe XML, care oferă componentele UI. De asemenea, vă permite să specificați modul în care diferitele componente s-ar comporta atunci când utilizatorii interacționează cu ei, astfel numele "UX".

Un alt lucru important de înțeles când începeți cu Fuse este că nu este o platformă bazată pe browser, cum ar fi Cordova. Deci, chiar dacă vă permite să utilizați cod JavaScript, nu toate funcțiile JavaScript care sunt disponibile într-un mediu de browser funcționează. 

Siguranța oferă o colecție decentă de polifluze, care vă permit să faceți lucruri cum ar fi efectuarea solicitărilor AJAX sau setarea unui interval pentru executarea unei bucăți de cod. În afară de aceasta, sunteți limitat la caracteristicile JavaScript de bază.

Pro-uri

  • Cross-platform: vă permite să construiți aplicații care rulează pe dispozitive Android și iOS.
  • Performanță nativă: Marcajul UX este compilat în codul nativ, motiv pentru care performanța este comparabilă cu cea nativă (dacă nu aceeași). Diferitele efecte și animații sunt accelerate OpenGL, ceea ce înseamnă o experiență de vârf a utilizatorilor.
  • Cod declarativ: animațiile, efectele și tranzițiile sunt declarate prin UX Markup. Deci lucrurile cum ar fi scalarea unui buton atunci când este făcut clic pe el sunt gestionate doar prin marcajul UX. Acest lucru vă permite să vă concentrați codul JavaScript asupra lucrurilor cum ar fi solicitările de API-uri, efectuarea calculelor și scrierea logicii de afaceri.
  • Dezvoltator și designer-friendly: Fuse utilizează tehnologii pe care dezvoltatorii web le cunosc și le iubesc: JavaScript pentru procesarea sarcinilor și un limbaj asemănător XML pentru UX. Marcajul UX pe care îl utilizează pentru a construi interfața utilizator este foarte simplu, ceea ce îl face ușor de utilizat, chiar și pentru designeri.
  • Documentație bună: diferitele caracteristici și API sunt bine documentate. Ei au, de asemenea, o colecție de exemple, deși prezintă mai ales UX-ul lor. 
  • Extensibil: Siguranța utilizează o limbă numită Uno pentru a extinde funcționalitatea nativă. Aceasta înseamnă că puteți implementa singuri funcționalitatea personalizată dacă aveți nevoie de funcționalități native care nu sunt expuse prin API-urile JavaScript ale Fuse.

Contra

  • Comunitatea tinerilor: în comparație cu React Native, comunitatea Fuse este încă tânără și nu prea este activă. Au un canal Slack și un forum. Ei au, de asemenea, o pagină pentru pachete comunitare, dar când vă uitați la repo GitHub, nu există prea multă activitate. Există, de asemenea, o lipsă de postări pe blog și tutoriale despre Fuse.
  • Nu există suport pentru cadrele JavaScript existente: Siguranța suportă doar JavaScript de la vanilla. Deci, dacă veniți de la Vue, React sau Angular și doriți să vă folosiți abilitățile pe platforma Fuse, din păcate că nu este posibil.
  • Niciun suport Linux: Nu puteți dezvolta aplicații cu ajutorul siguranței, dacă nu sunteți pe Windows sau MacOS. 
  • Nu există suport și sistem pachet NPM: nu puteți utiliza NPM pentru a instala și utiliza bibliotecile JavaScript existente. Deși există câteva biblioteci JavaScript despre care se știe că funcționează, o platformă nu este complet completă fără un sistem de pachete care permite dezvoltatorilor să instaleze biblioteci existente care implementează o anumită funcție! 
  • Nu suport nativ ES6: Fuse suportă numai ECMAScript 5.1 pentru scrierea codului JavaScript. Cu toate acestea, puteți utiliza un transpilator, cum ar fi Babel, pentru a vă transpune codul ES6 în ES5.

Cum funcționează siguranța??

Sub capotă, siguranța traduce marcajul UX în cod C ++ nativ prin intermediul compilatorului Uno. Uno este limbajul similar lui C #, folosit pentru a scrie toate clasele de bază ale Fuse. Deci, marcajul UX pe care l-ați scris, împreună cu cadrul Fuse, este compilat în C ++. Apoi, instrumentele de platformă nativă (Android Studio sau Xcode) iau acel cod C ++ și compilau aplicația nativă.

În ceea ce privește codul JavaScript, acesta este interpretat de un JavaScript VM în timpul rulării. Aceasta înseamnă că interfața utilizator și logica de afaceri sunt independente una de cealaltă. 

Cum se compară Fuse pentru a reacționa Nativ?

Nici un articol introductiv despre o platformă nouă nu ar fi complet fără a fi comparat cu o platformă existentă. O platformă comparabilă cu Fuse este React Native. Deci, vom compara aceste două platforme pe baza următoarelor criterii:

  • platforma
  • performanţă
  • cod
  • extendability

Rețineți că voi compara doar funcțiile gratuite ale Fuse deoarece React Native este o platformă gratuită.

Caracteristicile platformei

Atât Fuse, cât și React Native vin cu următoarele caracteristici:

  • Reîncărcarea rapidă: modificările aduse codului sunt reflectate automat în previzualizarea aplicației. Cu toate acestea, dacă comparați cât de repede se întâmplă actualizările UI, Fuse este în mod clar câștigătorul. Reîncărcarea lor la cald este aproape instantanee.
  • API-uri JavaScript pentru utilizarea funcționalității native: atât Fuse și React Native vă permit să accesați funcționalitatea dispozitivului nativ, cum ar fi camera, localizarea geografică și notificările push prin intermediul unui API JavaScript. Cu toate acestea, dacă comparați documentația, este clar că React Native are mai multe API-uri disponibile.

Iată caracteristicile care sunt disponibile numai pentru Fuse:

  • Previzualizarea pe mai multe dispozitive: acest lucru permite dezvoltatorilor și designerilor să previzualizeze aplicația pe mai multe dispozitive cu factori de formă diferiți. Singura cerință este ca mașina de dezvoltare să se afle pe aceeași rețea wireless ca și dispozitivele. Acest lucru este foarte util pentru că vor vedea imediat dacă ceva nu arată frumos pe un anumit fereastră de vizualizare.
  • Previzualizare desktop: acest lucru permite ca aplicațiile să fie previzualizate pe desktop. Rețineți că acest lucru va avea un impact foarte mic asupra performanței computerului. Acest lucru se datorează faptului că nu este de fapt un emulator de dispozitive. Previzualizarea desktop vă permite de asemenea să previzualizați aplicația pe mai multe ferestre de vizualizare. 
  • Previzualizare aplicație: dacă doriți o modalitate rapidă de previzualizare a aplicației, este disponibilă și o aplicație client pentru Android și iOS. Aceasta vă permite să scanați un cod QR, care apoi deschide aplicația pe dispozitiv. Puteți face acest lucru pentru cât mai multe dispozitive doriți. Schimbările la codul sursă sunt reflectate automat în fiecare dintre aceste dispozitive. 

Singurul dezavantaj al aplicației de previzualizare, spre deosebire de previzualizarea personalizată (modul implicit de previzualizare a aplicațiilor pe un dispozitiv), este că codul Uno personalizat și pachetele terță parte nu vor funcționa. Comenzile de localizare, notificări push și notificări locale nu vor funcționa. Este mai bine să utilizați previzualizarea personalizată în acele cazuri. 

Performanţă

Performanța fusei este comparabilă cu cea locală, deoarece marcajul UX este compilat la interfața utilitară nativă pentru platforma respectivă. Și deoarece toate animațiile, efectele și tranzițiile sunt definite în marcajul propriu-zis, el știe deja ce să facă atunci când, de exemplu, este apăsat un buton. Așa cum am menționat mai devreme, JavaScript rulează pe un fir separat și nu va afecta deloc performanța UI. În plus, Fuse utilizează OpenGL ES, care oferă performanțe grafice accelerate hardware. Aceasta înseamnă că diferite animații și efecte pot fi utilizate în același timp fără a avea un efect considerabil asupra performanței UI. Aceasta face Fuse o platformă foarte potrivită pentru dezvoltarea de jocuri mobile.

Pe de altă parte, React Native utilizează un modul bridge pentru fiecare platformă. Acest modul funcționează ca o conexiune între API-urile JavaScript (inclusiv componentele UI) și funcționalitatea nativă, astfel încât să poată comunica între ele. Acest lucru face React Native mai puțin performantă decât Fuse din cauza costului de comunicare dintre componentele native și componentele UI corespunzătoare Reactive Native. 

Cod

Atât Fuse, cât și React Native oferă un limbaj de markup ca un bloc de construcție pentru interfața utilizator. Cu toate acestea, doar prin compararea documentelor Fuse și React Native, puteți vedea că React Native are mai multe componente care reprezintă omologii lor nativi.

Fuse UX Markup vă permite să descrieți animațiile unei componente ori de câte ori un utilizator interacționează cu acesta. De exemplu, iată cum puteți crea un buton care devine de trei ori mai mare decât dimensiunea originală în timp ce este apăsat. Siguranța are grijă de cât timp va fi tranziția dacă nu o specificați:

    

Pe de altă parte, React Native se bazează pe JavaScript pentru aproape orice. În codul de mai jos, TextInput componentă se bazează pe text să fie inițializată în stat. Se actualizează apoi de fiecare dată când textul introdus de utilizator se modifică: 

 this.setState (text) valoare = this.state.text />

Iată cum este furnizat textul implicit pentru un câmp de text:

constructor (recuzită) super (recuzită); this.state = text: 'Text implicit'; 

Între cei doi, modul în care Fuse separă logica de afaceri de administrarea UI este favorabil în ceea ce privește colaborarea dintre un dezvoltator și un designer. Marcarea UX este suficient de simplă pentru înțelegerea designerului, astfel încât să poată lucra în timp ce dezvoltatorul se ocupă de logica de afaceri. 

Extendability

Siguranța vă permite să utilizați aceeași limbă pe care o folosesc pentru toate clasele de bază ca o modalitate de a extinde funcționalitatea nativă. Cu toate acestea, acest lucru necesită cunoașterea modului de utilizare a API-urilor native în Android și iOS. De la Fuse's Uno, puteți utiliza cod străin pentru a implementa funcționalitatea nativă. În prezent, Uno acceptă numai Obiectiv-C pentru iOS și Java pentru Android. Clasa rezultată este expusă astfel încât să puteți suna de la JavaScript.

În mod similar, React Native are un modul corespunzător pentru pod iOS și Android. Acest modul de punte servește drept punte între funcționalitatea nativă și JavaScript. La fel ca Fuse, acest lucru necesită să aveți o cunoaștere activă a obiectivului C sau Java.

Ambele platforme vă permit, de asemenea, extinderea componentelor UI native pentru fiecare platformă țintă. Deci, dacă, de exemplu, doriți să implementați o componentă UI corespunzătoare pentru controlul nativ de tip tooltip pe Android? Puteți face asta atât pe Fuse, cât și pe Nativ React.

Siguranța merită să fie?

Dacă îmi ceri opinia, aș spune că depinde de cazul tău specific de utilizare. Siguranța este pregătită pentru producție. Principalul său avantaj îl reprezintă performanța și cât de repede puteți trece de la o idee la un prototip de lucru. Aplicațiile create cu Fuse sunt foarte performante, iar colaborarea dintre dezvoltatori și designeri este foarte ușoară.

Principalul său dezavantaj este comunitatea sa. Siguranța este în mod clar angajată să deschidă sursa cu lansarea bibliotecilor care fac ca siguranța să funcționeze sub capotă. Cu toate acestea, ei sunt încă o companie mică (în comparație cu Facebook, cel puțin). Aceasta înseamnă că trebuie să facă bani într-un fel sau altul. De aceea, aceștia au planuri profesionale plătite, care sunt mai bine orientate către echipe și întreprindere. Deci, se poate presupune că majoritatea eforturilor lor vor fi depuse pentru dezvoltarea acestor instrumente plătite. Acest lucru lasă efortul sursei deschise unui cetățean de clasa a doua. 

Dacă lucrați pentru o companie care dezvoltă aplicații zilnic, atunci Fuse este o opțiune bună. Dar dacă sunteți un dezvoltator independent ca mine, suntem mai mult blocați cu utilizarea planului gratuit. Este suficient de bun pentru cele mai multe cazuri de utilizare, dar dacă aveți nevoie de funcționalitate nativă personalizată, atunci va trebui să o implementați singur.

La sfârșitul zilei, totul depinde de cazul dvs. de utilizare. Dacă vedeți că aplicația dvs. nu trebuie să funcționeze cu o grămadă de servicii, instrumente și API-uri native, atunci mergeți la Fuse. În caz contrar, nu. Nu cu excepția cazului în care aveți mult timp să vă rezervați în dezvoltarea modulelor native personalizate!

Concluzie

Acum ar trebui să înțelegeți bine ce este Fuse, cum funcționează, avantajele și dezavantajele sale și dacă merită încercat ca o alternativă la cadrele de dezvoltare mobile mai populare. În cea de-a doua parte a acestei serii, vom examina cum să dezvoltăm o aplicație cu Fuse.

Cod