Είναι γνωστό ότι οι σύγχρονες διαδικτυακές εφαρμογές χρησιμοποιούνται μέρα με τη μέρα όλο και περισσότερο. Η ανάπτυξη είναι πραγματικά γρήγορη και επιτρέπει τη δημοσίευση εφαρμογών σε όλες τις πλατφόρμες, όπου η μόνη απαίτηση είναι να υπάρχει ένα περιβάλλον που να χειρίζεται μια δεδομένη τεχνολογική στοίβα. Η γλώσσα που μπορεί να χαρακτηριστεί ως βασιλιάς όλων των άλλων σε αυτό το περιβάλλον είναι η JavaScript. Σήμερα, θα μοιραστώ μαζί σας ορισμένα γεγονότα σχετικά με την ανάπτυξη λογισμικού που σχετίζονται με αυτή τη γλώσσα.
Ορισμός της ταχείας ανάπτυξης εφαρμογών
Η φράση "γρήγορη ανάπτυξη" μπορεί να ερμηνευτεί με πολλούς λανθασμένους τρόπους. Για να το αποφύγουμε, ας εξηγήσουμε ποιες είναι οι προσδοκίες μας. Λοιπόν, το κύριο σημαντικό πράγμα είναι ο προϋπολογισμός. Για να κατασκευάσουμε πολλές εκδόσεις της ίδιας εφαρμογής, χρειαζόμαστε πολλούς προγραμματιστές από διάφορα τεχνολογικά stacks και να πληρώσουμε τον καθένα από αυτούς. Για να κατασκευάσουμε εγγενείς εφαρμογές για κινητά, πρέπει να αντιγράψουμε τις κωδικός να λειτουργεί καλά και στις δύο πλατφόρμες - Android και iOS. Μια κοινή προσέγγιση είναι να διατηρήσετε και τις δύο εφαρμογές παρόμοιες, να χρησιμοποιήσετε το ίδιο API, να διατηρήσετε την ίδια συμπεριφορά κ.ο.κ. Ως αποτέλεσμα, πρέπει να αντιγράψουμε τον κώδικα για να δημιουργήσουμε δύο εκδόσεις της ίδιας εφαρμογής. JS είναι μια γλώσσα που μας επιτρέπει να κατασκευάζουμε ταυτόχρονα εφαρμογές για κινητά και εφαρμογές ιστού. Ακούγεται αδύνατο; Επιτρέψτε μου να σας εξηγήσω τι εννοώ.
Κινητό; Web? Δεν με νοιάζει.
Ας υποθέσουμε ότι θέλουμε να δημιουργήσουμε μια εφαρμογή που χρησιμοποιεί τη βιβλιοθήκη React. Αυτή η βιβλιοθήκη μπορεί να χρησιμοποιηθεί για τη δημιουργία εφαρμογών ιστού και εφαρμογών για κινητά με εγγενή React. Οι λογικοί μηχανισμοί της εφαρμογής, όπως εξουσιοδότηση, υπολογισμός, φιλτράρισμα δεδομένων και ούτω καθεξής, μπορούν να γίνουν με άγκιστρα React. Το θέμα είναι ότι αυτά τα hooks μπορούν να χρησιμοποιηθούν από κοινού και από τις δύο εκδόσεις της εφαρμογής - web και mobile. Χάρη σε αυτή την επιλογή, έχουμε τις ακόλουθες εξοικονομήσεις:
- Δεν χρειάζεται να αντιγράψετε τον κώδικα που είναι υπεύθυνος για το ίδιο πράγμα,
- Δεν χρειάζεται να προσλάβετε προγραμματιστές εγγενών εφαρμογών για κινητά για να υλοποιήσετε το ίδιο μέρος των εφαρμογών,
- Δεν χρειάζεται να αναμειγνύετε διαφορετικές γλώσσες για να υλοποιήσετε την ίδια εφαρμογή σε διαφορετικές πλατφόρμες κινητής τηλεφωνίας (Android/iOS),
- Ένας προγραμματιστής μπορεί να είναι υπεύθυνος για την υλοποίηση συγκεκριμένων χαρακτηριστικών της εφαρμογής σε όλες τις πλατφόρμες.
Για να συνοψίσουμε αυτή την παράγραφο - δεν είναι ότι μια βάση κώδικα θα τροφοδοτεί όλες τις εκδόσεις της εφαρμογής, αν και μπορούμε να χωρίσουμε τον κοινόχρηστο κώδικα και να τον χρησιμοποιήσουμε σε κάθε μία για να κάνουμε τη διαδικασία ανάπτυξης πραγματικά πιο γρήγορη.
Συμπέρασμα - αν θέλετε να δημιουργήσετε μια εφαρμογή ιστού και μια εφαρμογή για κινητά ταυτόχρονα, σκεφτείτε τη βιβλιοθήκη React που μπορεί να μοιράζεται μια βάση κώδικα στην έκδοση για κινητά και τη διαδικτυακή έκδοση της εφαρμογής.
Τι γίνεται όμως με το backend;
Πριν από μερικά χρόνια, όταν μιλούσαμε για το backend, μάλλον λίγοι άνθρωποι θα φαντάζονταν ότι η συντήρησή του θα ήταν δυνατή με τη βοήθεια μιας γλώσσας όπως η JS. Η ανάπτυξη αυτής της γλώσσας είναι καταπληκτική και οι καρποί της μπορούν να συγκομιστούν μέχρι σήμερα.
Για τι πράγμα μιλάω; Αν προσλάβετε το σωστό Προγραμματιστές JS, αποδεικνύεται ότι μπορούν να γράψουν όχι μόνο το frontend της εφαρμογής, αλλά και το backend - δηλαδή να είναι υπεύθυνοι για την επεξεργασία δεδομένων στον διακομιστή, την επικοινωνία με τη βάση δεδομένων, διάφορους τύπους ενοποιήσεων κ.λπ. Εξακολουθείτε να διστάζετε ή να μην έχετε πειστεί για αυτή τη γλώσσα; Δεν υπάρχει κανένας λόγος να έχετε αυτή τη στάση! Backend χρησιμοποιώντας JS μπορεί να υλοποιηθεί με δύο δημοφιλείς τρόπους - σε μια επεκτάσιμη και παραμετροποιήσιμη λειτουργία, την οποία μπορεί να μας παρέχει η express.js, και σε μια δομημένη λειτουργία χρησιμοποιώντας το πρότυπο DI - nest.js.
Και οι δύο λύσεις είναι εξαιρετικά δημοφιλείς και τροφοδοτούν πολλές εφαρμογές παραγωγής, οι ιδιοκτήτες των οποίων είναι "τεχνολογικοί γίγαντες" στον κλάδο τους. Νομίζω ότι έχουν ωριμάσει αρκετά ώστε να σας πείσουν να επιλέξετε οποιαδήποτε από αυτές.
Ακόμα δεν είναι αρκετό; Παρόμοια με την κοινή χρήση κώδικα μεταξύ διαδικτυακών και κινητών εφαρμογών, το backend μπορεί να μοιράζεται πόρους τόσο με τις πρώτες όσο και με τις δεύτερες. Η λέξη-κλειδί που πρέπει να χρησιμοποιήσετε εδώ είναι TypeScript - μεταξύ άλλων, μας επιτρέπει να μοιραζόμαστε μια βάση κώδικα, δηλαδή έναν κοινό ορισμό τύπου δεδομένων μεταξύ όλων των πλατφορμών.
Με εφαρμογές που βασίζονται αποκλειστικά στην JavaScript / TypeScript στοίβα χρησιμοποιώντας το monolith, έχουμε εξοικονομήσει πολλές γραμμές κώδικα, τις οποίες θα έπρεπε να αντιγράψουμε σε μητρικές γλώσσες προγραμματισμού. Από την άλλη πλευρά, με τη χρήση της ίδιας γλώσσας σε όλα τα μέτωπα, μπορούμε να μοιραστούμε ένα τεράστιο ποσό λογικής μεταξύ όλων των εφαρμογών, γεγονός που σίγουρα θα επιταχύνει το χρόνο στον οποίο μπορεί να κατασκευαστεί μια συγκεκριμένη εφαρμογή. Δεν ακούγεται υπέροχο αυτό;
Μπορεί το JS να τροφοδοτήσει εφαρμογές γραφείου;
Αποδεικνύεται ότι οι τεχνολογίες για τη δημιουργία εφαρμογών περιήγησης είναι εξαιρετικές για τη διατήρηση των εφαρμογών που χρησιμοποιούμε στη μορφή desktop - ένα καλό παράδειγμα εδώ μπορεί να είναι το Slack. Το Slack είναι μια εφαρμογή που χρησιμοποιείται για ομάδα επικοινωνία - εκτός από την τυπική ανταλλαγή μηνυμάτων, διαθέτει πολλές διαφορετικές λειτουργίες και διάφορους τύπους εξωτερικών ενσωματώσεων. Όλα αυτά την καθιστούν μία από τις πιο δημοφιλείς εφαρμογές που χρησιμοποιούνται κυρίως στον κλάδο της πληροφορικής.
Όπως αποδεικνύεται, το Slack χρησιμοποιεί επίσης τεχνολογίες ιστού (και, ως εκ τούτου, το JavaScript) για τη δημιουργία της διεπαφής της εφαρμογής του. Η βάση που καθιστά δυνατή την εκτέλεση τέτοιων εφαρμογών στην επιφάνεια εργασίας σας είναι το electron. Η δημιουργία γραφικών διεπαφών με τη χρήση τεχνολογιών ιστού καθιστά πολύ πιο εύκολη, ταχύτερη και γενικά δυνατή την ταυτόχρονη ανάπτυξη εφαρμογών για διαφορετικές πλατφόρμες.
Είναι ο JS αρκετά ώριμος;
Λέγοντας από το frontend μέρος της εφαρμογής, δεν υπάρχει καμία ψευδαίσθηση ότι JS είναι η μοναδική και αποκλειστική γλώσσα που τροφοδοτεί το οικοσύστημα εδώ. Προς το παρόν, δεν υπάρχουν βιώσιμες εναλλακτικές λύσεις που μπορούν να αντικαταστήσουν αυτό το κομμάτι της εφαρμογής (αν και πιστεύω ότι η WebAssembly μπορεί να μας εκπλήξει στο μέλλον). Έτσι, μιλώντας για την ωριμότητα της JS στο frontend - δεν υπάρχει καμία αμφιβολία ότι είναι η μόνη βασιλική.
Μιλώντας για το backend, πολλοί προγραμματιστές μπορεί να σοκαριστούν ή να αρνηθούν αμέσως ότι η JS είναι κατάλληλη ως γλώσσα προγραμματισμού στο backend. Ωστόσο, το θέμα πρέπει να αναλυθεί αντικειμενικά.
Πολλοί πάροχοι cloud παρέχουν SDK που σας επιτρέπουν να χρησιμοποιήσετε απευθείας cloud μέθοδοι. Παραδόξως, μία από τις πιο δημοφιλείς καρτέλες, ακριβώς δίπλα στο C#, Go and Java, είναι Node.js. Αποδεικνύεται ότι αυτή η πλατφόρμα είναι ιδανική για την κλιμάκωση και τη δημιουργία εφαρμογών που βασίζονται σε μικρουπηρεσίες ή αρχιτεκτονική χωρίς διακομιστές. Συμπέρασμα - Η JS είναι μία από τις πιο δημοφιλείς γλώσσες για την ανάπτυξη εφαρμογών που βασίζονται σε αρχιτεκτονική microservices/serverless. Στις παρακάτω οθόνες, μπορούμε να δούμε ότι η ιερή τριάδα (Google Computing Services, AWS, Azure) των παρόχων cloud μας επιτρέπει να δημιουργούμε εφαρμογές χρησιμοποιώντας κόμβος.js.


Όσον αφορά το οικοσύστημα node.js, πιθανώς όλοι γνωρίζουν μια βιβλιοθήκη που ονομάζεται express.js - είναι ένα απλό και ξεκάθαρο εργαλείο που σας επιτρέπει να ορίζετε διαδρομές και στη συνέχεια να τις τροφοδοτείτε με κατάλληλα δεδομένα που έχουν υποστεί κατάλληλη επεξεργασία στην πλευρά του JS. Επιπλέον, το μοτίβο που χρησιμοποιείται μεταξύ των αιτημάτων HTTP που διαχειρίζεται η express.js έχει γίνει ένα από τα πιο δημοφιλή σε ολόκληρο το οικοσύστημα και αποτελεί ένα είδος προτύπου για διάφορες άλλες βιβλιοθήκες που χρησιμοποιούν, π.χ., την αρχιτεκτονική serverless.
Συμπέρασμα - Το JS είναι μια γλώσσα αρκετά ώριμη για να βάλει όλα τα χαρτιά και να χτίσει τόσο frontend όσο και backend. Επιπλέον, είναι μια αρκετά φρέσκια γλώσσα που βρίσκει εύκολα το δρόμο της στις σύγχρονες αρχιτεκτονικές εφαρμογών. Είναι σπουδαίο το γεγονός ότι ένας προγραμματιστής που γνωρίζει μία γλώσσα μπορεί να κατακτήσει και τις δύο πλευρές (full stack) μιας εφαρμογής.
Είναι το JS αρκετά γρήγορο;
Λοιπόν, η μηχανή που χρησιμοποιείται συχνότερα για την εκτέλεση κώδικα JS είναι η v8, η οποία βασίζεται στη γλώσσα C++. Αυτή η μηχανή που αναπτύχθηκε από την Google είναι αφιερωμένη στην εκτέλεση εφαρμογών για πλατφόρμες ιστού. Ένα ενδιαφέρον στοιχείο είναι ότι αυτή η μηχανή δεν ερμηνεύει τον κώδικα JS. Αντ' αυτού, κάνει αυτό που ονομάζεται "JIT" - "just in time compilation". Χάρη σε αυτό, δεν χρειάζεται να ερμηνεύσουμε τον κώδικα JS γραμμή προς γραμμή, απλώς τον μεταγλωττίζουμε και τον εκτελούμε. Είναι ακόμα πιο γρήγορο και μας δίνει πραγματικά ωραία αποτελέσματα απόδοσης.
Είναι η JS αρκετά δίκαιη όσον αφορά τις επιδόσεις; Ναι, είναι. Εφόσον οι αλγόριθμοί σας είναι αρκετά δίκαιοι, δεν υπάρχει κανένα πρόβλημα στη χρήση του JS στην πλευρά του διακομιστή. Το άλλο πράγμα είναι να διατηρείτε τον κώδικά σας όσο το δυνατόν πιο ασύγχρονο γίνεται. Με αυτές τις πρακτικές ο κώδικάς σας μπορεί να χειριστεί παράλληλες αιτήσεις χωρίς προβλήματα. Δεν χρειάζεται να ενδιαφέρεστε για την ανταλλαγή τεχνολογίας λόγω της απόδοσης - ειδικά όταν η αρχιτεκτονική της εφαρμογής είναι κλιμακούμενη.
Έχω ήδη συζητήσει λεπτομερώς τις επιδόσεις και τα σημεία αναφοράς σε αυτό το άρθρο.
Η JS δεν είναι μια τέτοια ιδιορρυθμία μεταξύ άλλων γλωσσών;
Λοιπόν, αυτές είναι δεκάδες απόψεις ότι η γλώσσα JS συμπεριφέρεται περίεργα σε ορισμένες περιπτώσεις και ο χειρισμός της είναι κάτι που θα σας κάνει να εκραγεί το κεφάλι σας κατά τη διάρκεια της διαδικασίας ανάπτυξης. Δεν μπορώ να συμφωνήσω 🙂 Όπως και κάθε άλλη γλώσσα, έχει αρκετά μοτίβα/συμπεριφορές που δεν είναι κομψά αλλά με την κατανόηση του τρόπου λειτουργίας τους και των στόχων τους η ανάπτυξη εφαρμογών με JS δεν είναι δυσάρεστη.
Ειδικά η παρατήρηση "ασύγχρονη" ακριβώς πριν από το JS κάνει μερικούς προγραμματιστές να ανατριχιάζουν. Είναι δύσκολο να το καταλάβεις όταν δεν έχεις καμία εμπειρία με αυτό. Ωστόσο, είναι ένα μέρος του JS που μας επιτρέπει να χτίζουμε σύγχρονες λύσεις με εύκολο τρόπο. Ας ρίξουμε μια ματιά πάνω στα websockets: καθώς βασίζονται σε συμβάντα - κάθε μία από τις συνδεδεμένες μονάδες - ο χρήστης και ο διακομιστής μπορούν να εκπέμπουν και να λαμβάνουν συμβάντα παράλληλα. Αν ο κώδικας που τροφοδοτεί αυτή την εφαρμογή είναι αρκετά ασύγχρονος και δεν μπλοκάρει το κύριο νήμα, μπορούμε εύκολα να χειριστούμε χιλιάδες αιτήσεις σε σύντομο χρονικό διάστημα.
Ας συγκρίνουμε τα JS και PHP με το πλαίσιο των websockets. Η PHP είναι μια σύγχρονη γλώσσα προγραμματισμού, οπότε η επίλυση θεμάτων websocket προκαλεί τεράστιο πονοκέφαλο. Μπορούμε να δούμε ότι η PHP παίρνει πρότυπα από την JS για τη δημιουργία διαδραστικών backend εφαρμογών που μπορούν να χρησιμοποιήσουν σύγχρονες τεχνολογίες, όπως το webrtc ή τα websockets.
Ανακατέψτε τα όλα μαζί
Συγκεντρώνοντας όλες τις παραγράφους μαζί, μπορούμε να αναφέρουμε μερικά γεγονότα:
JavaScript είναι μια γλώσσα που μπορεί να χρησιμοποιηθεί για τη δημιουργία όλων των ειδών των εφαρμογών - από το διαδίκτυο, για κινητά και για επιτραπέζιες εφαρμογές,
Εφαρμογές γραμμένες σε JS μπορούν να μοιράζονται μεταξύ τους διάφορα τμήματα κώδικα, όπως αυτά που είναι υπεύθυνα για τη μορφοποίηση δεδομένων ή τους τύπους στην Typescript,
Χάρη στην ανάπτυξη του διαδικτύου, οι επιδόσεις που προσφέρει το JS είναι αρκετά καλές ώστε να επιλέγεται τόσο για την ανάπτυξη εφαρμογών frontend όσο και για την ανάπτυξη εφαρμογών backend,
Χάρη στον ασυνήθιστο σχεδιασμό του, το JavaScript είναι σε θέση να υποστηρίζει σύγχρονες υποδομές εφαρμογών, όπως websockets και WebRTC,
Προσλαμβάνοντας έναν κατάλληλα καταρτισμένο προγραμματιστή, μπορείτε να αξιοποιήσετε τις δυνατότητές της σε κάθε διαθέσιμο frontend που υποστηρίζει αυτή τη γλώσσα,
Η JS είναι μια γλώσσα που σκαρφαλώνει στους πίνακες δημοτικότητας εδώ και αρκετά χρόνια και δεν υπάρχει καμία ένδειξη ότι αυτό θα αλλάξει με οποιονδήποτε τρόπο.
Για να εκφράσω την ομολογουμένως προκατειλημμένη γνώμη μου - η αξιοποίηση της δυνατότητας του JavaScript για επαναχρησιμοποίηση του ίδιου κώδικα σε όλα τα διαθέσιμα μέτωπα είναι κάτι που σίγουρα θα επιταχύνει την ανάπτυξη εφαρμογών και θα μειώσει τον αριθμό των προγραμματιστών που εμπλέκονται στη συντήρηση του backend εφαρμογών γραμμένων σε άλλες τεχνολογίες. Ως επιβεβαίωση, ας θυμηθούμε το γεγονός ότι ένας τεράστιος αριθμός των λεγόμενων κολοσσών της πληροφορικής ακολουθούν αυτό το μοτίβο και μοιράζονται αρκετά μεγάλο μέρος της βάσης κώδικα σε όλες τις πλατφόρμες. Παρά τις διαφορετικές απόψεις σχετικά με αυτή τη γλώσσα, πρέπει να λάβετε υπόψη το γεγονός ότι τα στατιστικά στοιχεία χρήσης και ικανοποίησης από τη χρήση της JS αυξάνονται από χρόνο σε χρόνο και οι προγραμματιστές της μπορούν εύκολα να ενταχθούν στην τάση της πλήρους στοίβας.

Διαβάστε περισσότερα:
Γιατί θα πρέπει (πιθανώς) να χρησιμοποιήσετε την Typescript
Πώς να μην σκοτώσετε ένα έργο με κακές πρακτικές κωδικοποίησης;
Στρατηγικές άντλησης δεδομένων στο NextJS