Link Search Menu Expand Document (external link)

AJ 1.8 Native bundeling av JavaScript för olika operativsystem och enheter

Table of contents


Vad är Native Bundling?

Native bundling innebär att skriva kod (ofta superset till JS, t.ex. JSX, TS, TSX) som sen fungerar på olika enheter och till olika operativsystem. JavaScript är ju dock ett väldigt löst/luddigt språk, och det skulle vara väligt svårt för en mobil telefon att kompilera det till striktare språk (Java/Kotlin för Android eller Objective C/Swift för iOS). Istället för compilering så görs en bundling (mer om det nedan). 1

Med Native bundling kan vi alltså skapa cross-platform appar, där vi med samma språk och kodbas kan göra appar för både Android och iOS.


Frameworks

Det finns olika frameworks för Native Bundling, där React Native nog är det mest kända (och det är true native, istället för at använda WebView). 2 I React Native skriver du JSX (eller TSX), men istället för att koden kompileras för webben så bundlas den alltså, för att sedan kunna köras nativt på olika enheter.

React Native

React Native är ett open-source framework, skapat av Facebook. Med detta kan du skapa ett helt native user interface i appar, men du kan också bädda in web -views. Skulle du behöva skriva helt native kod för viss funktionalitet på mobila enheter (t.ex. Java eller Objective C) så är det också möjligt. 3

React Native har ett stort växande community, och det är väldigt effektivt för att skapa cross-platform appar. 3

Bundling processen

Vår JSX kod transpileras först ner till JavaScript, sen bundlas den. För att sen kunna köra den i t.ex. mobila enheter med en mycket striktare kodbas, så kan t.ex frameworket JavaScriptCore 4 användas. JavaScriptCore ingår i operativsystemet i iOS, men till Android måste vi lägga till det med vår bundle. 1


Varför använda Native Bundling?

Det finns både för- och nackdelar med Native Bundling. Koden blir med återanvändbar, det förenklar underhåll och det är snabbare deploy, men det blir också en extra komplexitet, då det är olika design konventioner för olika enheter, vissa saker går inte att skriva i cros-platform frameworks utan måste skrivas helt native.

Fördelar

  • Delad businesslogik
    • Med samma kodbas för flera OS kan det räcka med att skriva grejer en gång och sen lansera appen på flera ställen samtidigt
  • Snabb prototypning av appar
    • Prototypningen leder till versioner för flera enheter samtidigt
    • Det går direkt att börja samla in feedback från användare av flera olika enheter
  • Skapa appar snabbare
    • React Native har funnits (hyfsat) länge och hunnnit bli rätt stabil
    • Stort ekosystem, det finns många moduler redan
  • Enklare underhåll
    • Då appar för olika enheter delar kod så hjälper det både initialt och (förhoppningsvis) resten av appens livslängd
  • Räcker att kunna ETT språk
    • Lättare att lära sig en stack baserat på ett språk än att lära sig flera stackar och språk
    • Får du expertis inom React Native så kan du sen klara mer komplexa uppdrag
    • Har du grunderna i ett språk så är det lättare att lära sig fler liknande
  • Två appar - samma team
    • Räcker med ett team för att släppa produkter till flera plattformar
    • En stack, ett team kan göra allt (bug-reports, utveckling, tester etc)
  • Samma unit-tester
    • Dela unit-tester för funktionalitet i cross-platform appen
    • Det går snabbare att skriva tester (eller så får vi ordentligt med tid att skriva testerna)
  • Når fler användare
    • Hela poängen; att nå fler användare på deras nativa plattformar
    • Öka applikationes räckvidd till flera olika enheter/OS

Nackdelar

  • Olika plattformar ÄR olika
    • Android och iOS är olika, de har olika design guidelines, konventioner etc, och användare märker direkt när det bryts
    • Vill du göra en bra app så måste du optimera för olika typer av UI
    • Många små förändringar i koden gör att det kanske snarare blir 60% delad kod än 100%
    • Det finns flera plattformsspecifika features, som Picture in picture, ARKit, ARCore, hur länge appar får köra aktiviteter i bakgrunden etc
  • Prestanda
    • Koden kan inte riktigt mäta sig med nativt skriven kod, den kommer att vara långsammare
    • Laddningstider kan vara längre (det går dock att göra en app som för användare känns väldigt native)
  • Osmidig utveckling
    • Buggar kan komma från en massa olika håll, det kan vara koden, ett bibliotek, plattformen etc
    • Detta är fortfarande så nytt, bibliotek och verktyg behöver många år och ett aktivt community (eller uppbackning från stort företag) för att mogna
    • Istället för att implementera nya features på enheten direkt i våran kod, så måste vi kanske vänta på att cross-platform frameworksen vi använder lägger in de nya funktionerna
      • Konkurrenter kan få långt förspråk när det kommer nya features om de bara kodar native
    • Jämför med mängden bibliotek till React så finns det inte alls lika många till React Native (än)
  • Expertis
    • För att verkligen göra appar med hög kvalitet så kan det var bra att lära sig olika språk och SDK (software development kit)
    • Kan vara svårt att hitta utvecklare men många års erfarenhet inom cross-platform utveckling (bra läge för oss)
  • Business beroende av EN teknologi
    • Vad händer om den teknologin slutar underhållas?
    • Kanske kommer verktygen/modulerna du är beroende av inte att vara kompatibla med framtida versioner av Android eller iOS

Referenser