Det er et velkjent faktum at moderne webapplikasjoner brukes mer og mer, dag for dag. Utviklingen går veldig raskt og gjør det mulig å publisere applikasjoner på alle plattformer, der det eneste kravet er å ha et miljø som håndterer en gitt teknologistack. Språket som kan kalles kongen av alle de andre innenfor dette miljøet er JavaScript. I dag skal jeg dele med deg noen fakta om programvareutvikling relatert til dette språket.
Definisjon av rask utvikling av applikasjoner
Uttrykket "rask utvikling" kan tolkes på mange feil måter. For å unngå det, la oss forklare hva våre forventninger er. Vel, det viktigste er budsjettet. For å bygge mange versjoner av samme applikasjon trenger vi mange utviklere fra flere tekniske stabler og betale hver og en av dem. For å bygge native mobilapper må vi duplisere våre kode for å fungere godt på begge plattformene - Android og iOS. En vanlig tilnærming er å holde begge applikasjonene like, bruke samme API, opprettholde samme oppførsel og så videre. Som et resultat må vi duplisere koden for å bygge to versjoner av samme applikasjon. JS er et språk som gjør det mulig å bygge mobilapplikasjoner og webapplikasjoner samtidig. Høres det umulig ut? La meg forklare hva jeg snakker om.
Mobil? Nett? Jeg bryr meg ikke.
La oss si at vi ønsker å bygge en applikasjon som bruker React-biblioteket. Dette biblioteket kan brukes til å bygge webapplikasjoner og mobilapplikasjoner med React native. De logiske mekanismene i applikasjonen, for eksempel autorisasjon, databehandling, filtrering av data og så videre, kan gjøres med React-hooks. Poenget er at disse krokene kan deles av begge versjonene av applikasjonen - web og mobil. Takket være dette alternativet har vi følgende besparelser:
- Det er ikke nødvendig å duplisere koden som er ansvarlig for det samme,
- Det er ikke nødvendig å ansette egne mobilutviklere for å implementere den samme delen av applikasjonen,
- Det er ikke nødvendig å blande ulike språk for å implementere samme applikasjon på tvers av ulike mobilplattformer (Android/iOS),
- Én utvikler kan ha ansvaret for å implementere spesifikke applikasjonsfunksjoner på alle plattformene.
For å oppsummere dette avsnittet - det er ikke slik at én kodebase skal drive alle versjonene av applikasjonen, selv om vi kan dele opp den delte koden og bruke den i hver enkelt versjon for å gjøre utviklingsprosessen raskere.
Konklusjon - hvis du ønsker å bygge en webapplikasjon og en mobilapplikasjon samtidig, bør du vurdere React-biblioteket som kan dele en kodebase i mobil- og webversjonen av applikasjonen.
Men hva med backend?
For noen år siden, når man snakket om backend, var det nok få som hadde forestilt seg at vedlikeholdet av den kunne være mulig ved hjelp av et språk som JS. Utviklingen av dette språket er fantastisk, og fruktene kan høstes den dag i dag.
Hva er det jeg snakker om? Hvis du ansetter den rette JS-utviklereviser det seg at de ikke bare kan skrive frontend av applikasjonen, men også backend - det vil si være ansvarlig for behandling av data på serveren, kommunikasjon med databasen, ulike typer integrasjoner osv. Fortsatt nølende eller ikke overbevist om dette språket? Det er ingen grunn til å ha denne holdningen! Backend ved hjelp av JS kan implementeres på to populære måter - i en utvidbar og konfigurerbar modus, som express.js kan tilby oss, og i en strukturert modus ved hjelp av DI-mønsteret - nest.js.
Begge løsningene er ekstremt populære og driver mange produksjonsapplikasjoner med eiere som er "teknologigiganter" i sin bransje. Jeg tror de har modnet nok til å overbevise deg om å velge en av dem.
Fortsatt ikke nok? På samme måte som med kodedeling mellom nett- og mobilapplikasjoner, kan bakenden dele ressurser med både førstnevnte og sistnevnte. Nøkkelordet her er TypeScript - det gjør det blant annet mulig å dele en kodebase, det vil si en felles datatypedefinisjon på tvers av alle plattformer.
Med applikasjoner bygget utelukkende på JavaScript / TypeScript Ved å bruke monolitt kan vi spare mange kodelinjer som vi ellers måtte ha duplisert i de opprinnelige programmeringsspråkene. På den annen side, ved å bruke samme språk på alle fronter, kan vi dele en stor mengde logikk mellom alle applikasjoner, noe som definitivt vil øke tiden det tar å bygge en bestemt applikasjon. Høres ikke det flott ut?
Kan JS drive desktop-applikasjoner?
Det viser seg at teknologier for å bygge nettleserapplikasjoner er gode for å vedlikeholde de applikasjonene som vi bruker i desktopform - et godt eksempel her kan være Slack. Slack er en applikasjon som brukes til team kommunikasjon - i tillegg til standard meldingsutveksling har den mange forskjellige funksjoner og ulike typer eksterne integrasjoner. Alt dette gjør det til et av de mest populære programmene som hovedsakelig brukes i IT-bransjen.
Det viser seg at Slack også bruker webteknologier (og dermed JavaScript) for å bygge applikasjonsgrensesnittet sitt. Grunnlaget som gjør det mulig å kjøre slike applikasjoner på skrivebordet ditt, er elektron. Å lage grafiske grensesnitt ved hjelp av webteknologier gjør det mye enklere, raskere og generelt mulig å utvikle applikasjoner for forskjellige plattformer samtidig.
Er JS moden nok?
Når man ser på frontend-delen av applikasjonen, er det ingen illusjon om at JS er det eneste og eksklusive språket som driver økosystemet her. Foreløpig finnes det ingen levedyktige alternativer som kan erstatte denne delen av applikasjonen (selv om jeg tror at WebAssembly kan overraske oss i fremtiden). Så når vi snakker om JS' modenhet på frontend - det er ingen tvil om at det er den eneste kongelige.
Når vi snakker om backend, kan mange utviklere virke sjokkerte eller umiddelbart benekte at JS er egnet som programmeringsspråk på backend. Saken må imidlertid analyseres objektivt.
Mange skyleverandører tilbyr SDK-er som lar deg bruke sky metoder. Merkelig nok er en av de mest populære fanene, rett ved siden av C#, Go and Java, er Node.js. Det viser seg at denne plattformen er ideell for skalering og utvikling av applikasjoner basert på mikrotjenester eller serverløs arkitektur. Konklusjon - JS er et av de mest populære språkene for utvikling av applikasjoner basert på mikrotjenester/serverløs arkitektur. På skjermbildene nedenfor kan vi se at den hellige treenighet (Google Computing Services, AWS, Azure) av skyleverandører lar oss bygge applikasjoner ved hjelp av node.js.
Når det gjelder node.js-økosystemet, er sannsynligvis alle kjent med et bibliotek som heter express.js - det er et enkelt og greit verktøy som lar deg definere stier og deretter mate dem med passende data som har blitt behandlet på riktig måte på JS-siden. Dessuten har mønsteret som brukes blant HTTP-forespørsler som håndteres i express.js, blitt et av de mest populære i hele økosystemet og er et slags mønster for forskjellige andre biblioteker som bruker f.eks. serverløs arkitektur.
Konklusjon - JS er et språk som er modent nok til å sette alle kortene på bordet og bygge både frontend og backend. I tillegg er det et ganske ferskt språk som lett finner veien inn i moderne applikasjonsarkitekturer. Det er flott at en programmerer som kan ett språk, kan mestre begge sider (full stack) av en applikasjon.
Er JS rask nok?
Den motoren som oftest brukes til å kjøre JS-kode, er v8, som er basert på C++. Denne motoren er utviklet av Google og er dedikert til å kjøre applikasjoner for webplattformer. En interessant ting er at denne motoren ikke tolker JS-koden. I stedet gjør den det som kalles "JIT" - "just in time compilation". Takket være det trenger vi ikke å tolke JS-koden linje for linje, vi bare kompilerer den og kjører den. Det er enda raskere og gir oss virkelig gode ytelsesresultater.
Er JS rettferdig nok når det gjelder ytelse? Ja, det er det. Så lenge du holder algoritmene dine rettferdige nok, er det ikke noe problem å bruke JS på serversiden. Den andre tingen er å holde koden så asynkron som mulig. Med disse fremgangsmåtene kan koden din håndtere parallelle forespørsler uten problemer. Du trenger ikke å bry deg om teknologibyttet på grunn av ytelsen - spesielt ikke når applikasjonens arkitektur er skalerbar.
Jeg har allerede diskutert ytelsen og referanseverdiene i detalj i denne artikkelen.
Er ikke JS en slik finurlighet blant andre språk?
Vel, dette er dusinvis av meninger om at JS-språket oppfører seg rart i noen tilfeller, og at håndtering av det er noe som vil få hodet ditt til å eksplodere under utviklingsprosessen. Jeg er ikke enig 🙂 Akkurat som alle andre språk har det flere mønstre / oppførsel som ikke er elegante, men med forståelse av hvordan de fungerer og hva deres mål er, er det ikke ubehagelig å utvikle applikasjoner med JS.
Spesielt "asynkron" rett før JS får noen utviklere til å grøsse. Det er vanskelig å forstå når du ikke har noen erfaring med det. Det er imidlertid en del av JS som gjør det mulig for oss å bygge moderne løsninger på en enkel måte. La oss ta en titt på websockets: Siden de er hendelsesbaserte, kan hver av de tilkoblede enhetene - brukeren og serveren - sende ut og motta hendelser parallelt. Hvis koden som driver denne appen er asynkron nok og ikke blokkerer hovedtråden, kan vi enkelt håndtere tusenvis av forespørsler på kort tid.
La oss sammenligne JS og PHP med sammenheng med websockets. PHP er et synkront programmeringsspråk, så det å løse websocket-emner gir en enorm hodepine. Vi kan se at PHP henter mønstre fra JS for å bygge interaktive backend-applikasjoner som kan bruke moderne teknologier, for eksempel webrtc eller websockets.
Bland det hele sammen
Når vi samler alle avsnittene, kan vi slå fast noen fakta:
JavaScript er et språk som kan brukes til å bygge alle slags applikasjoner - fra web, til mobil, til desktop;
Programmer skrevet i JS kan dele ulike kodefragmenter med hverandre, for eksempel de som er ansvarlige for dataformatering eller typer i Typescript;
Takket være veksten på nettet er ytelsen som JS tilbyr, god nok til å velge både frontend- og backend-applikasjonsutvikling;
Takket være den uvanlige designen kan JavaScript støtte moderne applikasjonsinfrastrukturer, som websockets og WebRTC;
Ved å ansette en dyktig utvikler kan du utnytte potensialet i alle tilgjengelige frontend-løsninger som driver dette språket;
JS er et språk som har klatret på popularitetslistene i flere år nå, og det er ingenting som tyder på at dette vil endre seg på noen måte.
For å gi min, riktignok partiske, mening - å dra nytte av JavaScripts mulighet til å gjenbruke den samme koden på alle tilgjengelige fronter er noe som helt sikkert vil øke hastigheten på applikasjonsutviklingen og redusere antallet utviklere som er involvert i å vedlikeholde bakenden av applikasjoner som er skrevet i andre teknologier. Som en bekreftelse kan vi minne om at et stort antall såkalte IT-giganter følger dette mønsteret og deler ganske mye kodebase på tvers av plattformer. Til tross for ulike meninger om dette språket, må du ta hensyn til det faktum at statistikken over bruk og tilfredshet med bruken av JS vokser fra år til år, og utviklerne kan lett hekte seg på trenden med full stack.
Les mer om dette:
Derfor bør du (sannsynligvis) bruke Typescript
Hvordan unngår man å drepe et prosjekt med dårlig kodingspraksis?
Strategier for datahenting i NextJS