On tunnettu tosiasia, että nykyaikaisia verkkosovelluksia käytetään päivä päivältä enemmän. Kehittäminen on todella nopeaa ja mahdollistaa sovellusten julkaisemisen kaikilla alustoilla, kun ainoa vaatimus on ympäristö, joka käsittelee tiettyä teknologiapinoa. Kieli, jota voidaan kutsua kaikkien muiden kielten kuninkaaksi tässä ympäristössä, on JavaScript. Tänään aion jakaa kanssasi joitakin faktoja tähän kieleen liittyvästä ohjelmistokehityksestä.
Sovellusten nopean kehittämisen määritelmä
Ilmaisu "nopea kehitys" voidaan tulkita monella väärällä tavalla. Sen välttämiseksi selitetään, mitä odotuksemme ovat. No, tärkein tärkeä asia on budjetti. Saman sovelluksen monien versioiden rakentamiseen tarvitsemme useita kehittäjiä useista eri tekniikkapinoista ja maksamme jokaiselle heistä. Natiivien mobiilisovellusten rakentamiseen meidän on monistettava meidän koodi toimimaan hyvin molemmilla alustoilla - Androidilla ja iOS:llä. Yleinen lähestymistapa on pitää molemmat sovellukset samankaltaisina, käyttää samaa API:ta, säilyttää sama käyttäytyminen ja niin edelleen. Tämän seurauksena joudumme kopioimaan koodia rakentaaksemme kaksi versiota samasta sovelluksesta. JS on kieli, jonka avulla voimme rakentaa mobiilisovelluksia ja verkkosovelluksia samanaikaisesti. Kuulostaa mahdottomalta? Anna minun selittää, mistä puhun.
Matkapuhelin? Web? En välitä.
Oletetaan, että haluamme rakentaa sovelluksen, joka käyttää React-kirjastoa. Tätä kirjastoa voidaan käyttää verkkosovellusten ja mobiilisovellusten rakentamiseen React-natiivilla. Sovelluksen loogiset mekanismit, kuten valtuutus, laskenta, tietojen suodatus ja niin edelleen, voidaan tehdä React-koukkujen avulla. Tärkeintä on, että nämä koukut voidaan jakaa sovelluksen molemmille versioille - web- ja mobiiliversioille. Tämän vaihtoehdon ansiosta meillä on seuraavat säästöt:
- Samasta asiasta vastaavaa koodia ei tarvitse kopioida,
- Natiivien mobiilikehittäjien ei tarvitse palkata natiivikehittäjiä toteuttamaan samaa osaa sovelluksista,
- Saman sovelluksen toteuttamiseksi eri mobiilialustoilla (Android/iOS) ei tarvitse sekoittaa eri kieliä,
- Yksi kehittäjä voi vastata tiettyjen sovellusten ominaisuuksien toteuttamisesta kaikilla alustoilla.
Yhteenvetona tästä kappaleesta - kyse ei ole siitä, että yksi koodipohja on sovelluksen kaikkien versioiden voimanlähde, vaikka voimme jakaa jaetun koodin ja käyttää sitä jokaisessa versiossa kehitysprosessin nopeuttamiseksi.
Johtopäätös - jos haluat rakentaa verkkosovelluksen ja mobiilisovelluksen samanaikaisesti, harkitse React-kirjastoa, joka voi jakaa koodipohjan sovelluksen mobiili- ja verkkoversiossa.
Mutta entä backend?
Muutama vuosi sitten, kun puhuttiin backendistä, luultavasti harva olisi voinut kuvitella, että sen ylläpito olisi mahdollista sellaisen kielen avulla, kuten JS. Tämän kielen kehitys on hämmästyttävää, ja sen hedelmiä voidaan korjata vielä tänäkin päivänä.
Mistä minä puhun? Jos palkkaat oikean JS-kehittäjät, käy ilmi, että he voivat kirjoittaa sovelluksen etusivun lisäksi myös taustapuolen - eli vastata tietojen käsittelystä palvelimella, yhteydenpidosta tietokannan kanssa, erilaisista integraatioista jne. Epäröitkö vielä tai etkö ole vakuuttunut tästä kielestä? Tähän asenteeseen ei ole mitään syytä! Backendin käyttö JS voidaan toteuttaa kahdella suositulla tavalla - laajennettavassa ja konfiguroitavassa tilassa, jonka express.js voi tarjota meille, ja strukturoidussa tilassa käyttäen DI-mallia - nest.js.
Molemmat ratkaisut ovat erittäin suosittuja, ja ne pyörittävät monia tuotantosovelluksia, joiden omistajat ovat oman alansa "teknologiajättejä". Uskon, että ne ovat kypsyneet tarpeeksi vakuuttaakseen sinut valitsemaan jommankumman niistä.
Eikö vieläkään riitä? Samoin kuin web- ja mobiilisovellusten välinen koodinjako, backend voi jakaa resursseja sekä edellisten että jälkimmäisten kanssa. Avainsana tässä yhteydessä on TypeScript - se mahdollistaa muun muassa koodipohjan eli yhteisen tietotyyppimäärittelyn jakamisen kaikkien alustojen kesken.
Kun sovellukset on rakennettu yksinomaan JavaScript / TypeScript pino käyttämällä monoliittia, säästämme paljon koodirivejä, jotka meidän pitäisi kopioida natiivilla ohjelmointikielellä. Toisaalta käyttämällä samaa kieltä kaikilla rintamilla voimme jakaa valtavan määrän logiikkaa kaikkien sovellusten kesken, mikä varmasti nopeuttaisi tietyn sovelluksen rakentamiseen kuluvaa aikaa. Eikö kuulosta hienolta?
Voiko JS käyttää työpöytäsovelluksia?
On käynyt ilmi, että selainsovellusten rakentamiseen käytettävät tekniikat soveltuvat erinomaisesti niiden sovellusten ylläpitoon, joita käytämme työpöytämuodossaan - hyvä esimerkki tästä voi olla Slack. Slack on sovellus, jota käytetään joukkue viestintä - tavallisen viestinvälityksen lisäksi siinä on paljon erilaisia toimintoja ja erilaisia ulkoisia integraatioita. Kaikki tämä tekee siitä yhden suosituimmista sovelluksista, joita käytetään pääasiassa IT-alalla.
Kuten kävi ilmi, myös Slack käyttää web-tekniikoita (ja siten JavaScript:tä) sovellusrajapintansa rakentamiseen. Perusta, joka mahdollistaa tällaisten sovellusten käyttämisen työpöydälläsi, on electron. Graafisten käyttöliittymien luominen web-teknologioiden avulla tekee sovellusten kehittämisestä paljon helpompaa, nopeampaa ja yleensä mahdollista kehittää sovelluksia eri alustoille samanaikaisesti.
Onko JS tarpeeksi kypsä?
Kertomalla frontend osa sovelluksen, ei ole mitään harhakuvitelmia, että JS on ainoa ja yksinomainen kieli, jolla ekosysteemi toimii. Toistaiseksi ei ole olemassa toimivia vaihtoehtoja, jotka voisivat korvata tämän osan sovelluksesta (vaikka uskonkin, että WebAssembly voi yllättää meidät tulevaisuudessa). Joten, kun puhutaan JS:n kypsyydestä frontendissä - ei ole epäilystäkään siitä, että se on ainoa kuninkaallinen.
Kun puhutaan backendistä, monet kehittäjät saattavat olla järkyttyneitä tai kieltää heti, että JS soveltuu backendin ohjelmointikieleksi. Asiaa on kuitenkin analysoitava objektiivisesti.
Monet pilvipalveluntarjoajat tarjoavat SDK:ita, joiden avulla voit käyttää suoraan pilvi menetelmät. Kummallista kyllä, yksi suosituimmista välilehdistä, aivan C#, Go ja Java, on Node.js. On käynyt ilmi, että tämä alusta on ihanteellinen mikropalveluihin tai palvelimettomaan arkkitehtuuriin perustuvien sovellusten skaalaamiseen ja rakentamiseen. Johtopäätös - JS on yksi suosituimmista kielistä mikropalveluihin/palvelimettomaan arkkitehtuuriin perustuvien sovellusten kehittämiseen. Alla olevista näytöistä näemme, että pilvipalveluntarjoajien pyhä kolminaisuus (Google Computing Services, AWS, Azure) antaa meille mahdollisuuden rakentaa sovelluksia, joissa käytetään solmu.js.
Mitä tulee node.js-ekosysteemiin, luultavasti kaikki tuntevat kirjaston nimeltä express.js - se on yksinkertainen ja suoraviivainen työkalu, jonka avulla voit määritellä polkuja ja syöttää niille sopivia tietoja, jotka on käsitelty asianmukaisesti JS-puolella. Lisäksi express.js:ssä käsiteltyjen HTTP-pyyntöjen joukossa käytetystä kuviosta on tullut yksi suosituimmista koko ekosysteemissä ja se on eräänlainen malli erilaisille muille kirjastoille, jotka käyttävät esimerkiksi serverless-arkkitehtuuria.
Johtopäätös - JS on kieli, joka on tarpeeksi kypsä kaikkien korttien asettamiseen ja sekä frontendin että backendin rakentamiseen. Lisäksi se on melko tuore kieli, joka löytää helposti tiensä nykyaikaisiin sovellusarkkitehtuureihin. On hienoa, että yhden kielen osaava ohjelmoija voi hallita sovelluksen molemmat puolet (full stack).
Onko JS tarpeeksi nopea?
No, JS-koodin suorittamiseen useimmiten käytetty moottori on v8, joka perustuu C++-kieleen. Tämä Googlen kehittämä moottori on tarkoitettu web-alustojen sovellusten suorittamiseen. Mielenkiintoista on, että tämä moottori ei tulkitse JS-koodia. Sen sijaan se tekee niin sanotun JIT:n - "just in time compilation". Sen ansiosta meidän ei tarvitse tulkita JS-koodia rivi riviltä, vaan käännämme sen vain ja suoritamme sen. Se on jopa nopeampaa ja antaa meille todella hyviä suorituskykytuloksia.
Onko JS tarpeeksi reilu suorituskyvyn suhteen? Kyllä on. Kunhan algoritmit pidetään riittävän reiluina, JS:n käyttö palvelinpuolella ei ole ongelma. Toinen asia on pitää koodisi mahdollisimman asynkronisena. Näillä käytännöillä koodisi voi käsitellä rinnakkaisia pyyntöjä ilman ongelmia. Sinun ei tarvitse välittää tekniikan vaihtamisesta suorituskyvyn takia - varsinkin kun sovelluksen arkkitehtuuri on skaalautuva.
Olen jo käsitellyt suorituskykyä ja vertailuarvoja yksityiskohtaisesti tässä artikkelissa.
Eikö JS olekin sellainen omituisuus muiden kielten joukossa?
No, nämä ovat kymmeniä mielipiteitä siitä, että JS-kieli käyttäytyy joissakin tapauksissa oudosti ja että sen käsittely saa pään räjähtämään kehitysprosessin aikana. En voi olla samaa mieltä 🙂 Aivan kuten missä tahansa muussa kielessä, siinä on useita malleja/käyttäytymismalleja, jotka eivät ole tyylikkäitä, mutta kun ymmärtää miten ne toimivat ja mitä niiden tavoitteet ovat sovellusten kehittäminen JS:llä ei ole epämiellyttävää.
Erityisesti "asynkroninen" -merkintä juuri ennen JS:ää saa jotkut kehittäjät vapisemaan. Sitä on vaikea ymmärtää, kun siitä ei ole kokemusta. Se on kuitenkin osa JS:ää, jonka avulla voimme rakentaa nykyaikaisia ratkaisuja helposti. Tarkastellaanpa websocketteja: koska ne ovat tapahtumapohjaisia - kukin yhdistetyistä yksiköistä - käyttäjä ja palvelin voivat lähettää ja vastaanottaa tapahtumia rinnakkain. Jos sovelluksen käyttövoimana oleva koodi on riittävän asynkronista eikä se estä pääsäikeen toimintaa, voimme helposti käsitellä tuhansia pyyntöjä lyhyessä ajassa.
Verrataanpa JS:ää ja PHP websockettien yhteydessä. PHP on synkroninen ohjelmointikieli, joten websocket-aiheiden ratkaiseminen tuottaa valtavasti päänvaivaa. Näemme, että PHP saa JS:stä malleja interaktiivisten backend-sovellusten rakentamiseen, jotka voivat käyttää nykyaikaisia tekniikoita, kuten webrtc:tä tai websocketteja.
Sekoita kaikki yhteen
Kun kaikki kohdat kootaan yhteen, voidaan todeta muutamia tosiasioita:
JavaScript on kieli, jolla voidaan rakentaa kaikenlaisia sovelluksia - webistä mobiililaitteisiin ja työpöytäsovelluksiin;
JS-kielellä kirjoitetut sovellukset voivat jakaa keskenään erilaisia koodinpätkiä, kuten Typescriptin tietojen muotoilusta tai tyypeistä vastaavat osat;
Verkon kasvun ansiosta JS:n tarjoama suorituskyky on tarpeeksi hyvä, jotta sitä voidaan käyttää sekä frontend- että backend-sovellusten kehittämiseen;
Epätavallisen rakenteensa ansiosta JavaScript tukee nykyaikaisia sovellusinfrastruktuureja, kuten websocketteja ja WebRTC:tä;
Palkkaamalla kunnolla koulutetun kehittäjän voit hyödyntää sen potentiaalia kaikissa käytettävissä olevissa frontend-ohjelmissa, jotka käyttävät tätä kieltä;
JS on kieli, joka on noussut suosiossa jo useiden vuosien ajan, eikä ole mitään merkkejä siitä, että tämä muuttuisi millään tavalla.
Myönnän tosin puolueellisen mielipiteeni: JavaScript:n mahdollisuus käyttää samaa koodia uudelleen kaikilla käytettävissä olevilla rintamilla nopeuttaa varmasti sovelluskehitystä ja vähentää muilla tekniikoilla kirjoitettujen sovellusten backendin ylläpitoon osallistuvien kehittäjien määrää. Vahvistukseksi muistutetaan, että valtava määrä niin sanottuja IT-alan jättiläisiä noudattaa tätä mallia ja jakaa melko paljon koodipohjaa eri alustoilla. Huolimatta eriävistä mielipiteistä tästä kielestä on otettava huomioon, että käyttö- ja tyytyväisyystilastot ovat osoittaneet, että JS kasvavat vuosi vuodelta, ja sen kehittäjät voivat helposti liittyä täyden pinon trendiin.
Lue lisää:
Miksi sinun pitäisi (luultavasti) käyttää Typescriptiä?
Miten projektia ei saa tappaa huonoilla koodauskäytännöillä?
Tiedonhakustrategiat NextJS:ssä