Node.js срещу Java: Епична битка за споделяне на ум от разработчици

В историята на компютрите 1995 г. беше лудо време. Първо се появи Java, след което наближи JavaScript. Имената ги караха да изглеждат като сближени близнаци наскоро откъснати, но не можеха да бъдат по-различни. Един от тях е компилиран и набран статично; другият се интерпретира и динамично пише. Това е само началото на техническите разлики между тези два изключително различни езика, които оттогава преминаха към някакъв курс на сблъсък, благодарение на Node.js.

Ако сте достатъчно възрастни, за да сте били наоколо по това време, може би си спомняте ранния, епичен връх на Java. Тя напусна лабораториите и нейният хиперметър беше закрепен. Всички го виждаха като революция, която няма да спре до нищо по-малко от тотално завладяване на изчисленията. Тази прогноза в крайна сметка беше само отчасти вярна. Днес Java доминира над телефони с Android, корпоративни компютри и някои вградени светове като Blu-ray дискове.

Въпреки целия си успех, Java никога не е установила много сцепление на работния плот или в браузъра. Хората изтъкнаха силата на аплетите и инструментите, базирани на Java, но gunk винаги затрудняваше тези комбинации. Сървърите станаха сладкото място на Java.

Междувременно онова, което програмистите първоначално сбъркаха като тъпия близнак, дойде на себе си. Разбира се, JavaScript се маркира в продължение на няколко години като HTML и мрежата привлече Borg по света. Но това се промени с AJAX. Изведнъж тъпият близнак имаше власт.

След това беше създаден Node.js, който завъртя главите на разработчиците със своята скорост. JavaScript не само беше по-бърз на сървъра, отколкото някой очакваше, но често беше по-бърз от Java и други опции. Оттогава стабилната му диета от малки, бързи, безкрайни заявки за данни направи Node.js по-често срещан, тъй като уеб страниците станаха по-динамични.

Макар че преди 20 години това можеше да бъде немислимо, квази-близнаците вече са затворени в битка за контрол над света на програмирането. От едната страна са дълбоките основи на солидното инженерство и архитектура. От другата страна са простотата и повсеместността. Ще се задържи ли светът на Java, управляван от компилатор на старата школа, или скоростта и гъвкавостта на Node.js ще помогнат на JavaScript да продължи да поглъща всичко по пътя си?

Където Java печели: Каменна основа

Чувам разработчиците да се смеят. Някои може дори да умират от сърдечна недостатъчност. Да, Java има проблеми и грешки, но относително казано, това е Гибралтарската скала. Същата вяра в Node.js отнема много години. Всъщност може да минат десетилетия, преди екипажът на JavaScript да напише почти толкова тестове за регресия, колкото Sun / Oracle са разработили за тестване на Java Virtual Machine. Когато стартирате JVM, получавате 20 години опит от солиден куратор, решен да доминира в корпоративния сървър. 

Светът на JavaScript настига бързо. Когато голяма част от цялата мрежа зависи от механизма за изпълнение на JavaScript, милион часа разработчици отиват за полиране на всички ръбове. Но всички иновации имат недостатък, защото новите функции може да се разпространяват по-бързо, отколкото базата за разработчици може да ги усвои. Разработчиците на стари училища често са объркани от код, изпълнен с по-новите подобрения на синтаксиса на ECMAScript - и същият този нов код тихо ще срине някои по-стари браузъри. Безкрайното предлагане на иновативни препроцесори като CoffeeScript и JSX може да е чудесно за разработчиците, които искат тези функции, но затрудняват останалите от нас да отворят произволен файл и да го разберат веднага.

Java има своя дял от нови функции и опции, но в по-голямата си част е стабилна платформа. Това значително улеснява живота на разработчиците, които изграждат нещо, което да продължи.

Където Node.js печели: Ubiquity

Благодарение на Node.js, JavaScript намира дом на сървъра и в браузъра. Кодът, който пишете за един, повече от вероятно ще работи по един и същ начин и за двата. В живота нищо не е гарантирано, но това е толкова близо, колкото е в компютърния бизнес. Много по-лесно е да се придържате към JavaScript за двете страни на разделянето на клиент / сървър, отколкото да напишете нещо веднъж в Java и отново в JavaScript, което вероятно ще трябва да направите, ако сте решили да преместите бизнес логиката, която сте написали в Java за сървър към браузъра. Или може би шефът ще настоява логиката, която сте изградили за браузъра, да бъде преместена на сървъра. И в двете посоки, Node.js и JavaScript улесняват много мигрирането на код.

Оловото на Node в този свят само се разширява. Най-сложните уеб рамки, като React, ще решат в последната секунда дали да стартират кода на сървъра или клиента. Един ден ще работи на клиента, а друг ден на сървъра. Някои интелигентни логики ще вземат решението в движение въз основа на натоварване или резервна RAM или нещо друго. Някои рамки ще изпращат JavaScript към базата данни като заявка, където тя се изпълнява. Вашият код може да работи навсякъде и е все по-трудно да се справи, защото не изпраща пощенска картичка до дома. Просто бъдете щастливи, защото не е нужно да мислите за подробностите.

Където Java печели: По-добри IDE

Разработчиците на Java имат Eclipse, NetBeans или IntelliJ, три първокласни инструмента, които са добре интегрирани с дебъгъри, декомпилатори и сървъри. Всяка от тях има години на развитие, отдадени потребители и солидни екосистеми, пълни с приставки.

Междувременно повечето разработчици на Node.js въвеждат думи в командния ред и кодират в любимия си текстов редактор. Да, някои от най-добрите текстови редактори като Atom имат сложни колекции от приставки, които правят почти всичко, но дори тогава се чувства, че Node.js е по-старо училище от Eclipse. Скоро ще заменим нашата мишка с Atari стик за радост.

Някои разработчици използват Eclipse или Visual Studio, и двете поддържат Node.js. Разбира се, приливът на интерес към Node.js означава, че пристигат нови инструменти, някои от които, като Node-RED на IBM, предлагат интригуващи подходи, но все още са далеч от това да бъдат толкова завършени или доминиращи като Eclipse или IntelliJ.

Странното е, че разработчиците изглежда не използват тези инструменти. Командният ред трябваше да изчезне преди 35 години с пристигането на Mac, но никой не каза на разработчиците на Node.js. Вариантите са налице. WebStorm, например, е солиден търговски инструмент от JetBrains, който включва много инструменти за изграждане на командния ред.

Разбира се, ако търсите IDE, която редактира и жонглира с код, новите инструменти, които поддържат Node.js, са достатъчно добри. Но ако поискате от вашата IDE да ви позволи да редактирате, докато оперирате текущия изходен код, като сърдечен хирург отрязва скрин, е, инструментите на Java са много по-мощни. Всичко е там и всичко е местно.

Където Node.js печели: Заявки към база данни

Заявки за някои от по-новите бази данни, като CouchDB и MongoDB, са написани в JavaScript. Смесването на Node.js и извикване към базата данни не изисква превключване на предавките, камо ли нужда от запомняне на синтаксисните разлики. 

Междувременно много разработчици на Java използват SQL. Дори когато използват Java DB - по-рано Derby, база данни, написана на Java за Java разработчици - те пишат своите заявки в SQL. Бихте си помислили, че те просто ще извикат Java методи, но ще сгрешите. Трябва да напишете кода на вашата база данни в SQL, след което оставете Derby да анализира SQL. SQL е приятен език, но е напълно различен от Java и много от екипите за разработка се нуждаят от различни хора, които да пишат SQL и Java.

За да влошат нещата, много Java кодери използват сложни библиотеки и схеми, за да преобразуват данните от SQL заявката в Java обекти, само за да могат да ги преработят в шаблони. Това е луд процес и в крайна сметка доста разточителен.

Където Java печели: Типове 

Много от въвеждащите курсове по програмиране продължават да използват Java, защото много сериозни програмисти са склонни да харесват статично въведен код както за простота, така и за безопасност. Кодът просто се чувства по-строг, след като компилаторът улови очевидните грешки.

JavaScript обаче наваксва и някои разработчици преминават към TypeScript, статично напечатан супер набор от JavaScript, който прилага цялата магия за проверка на типа, преди да изплюе нещо, което работи в JavaScript стека на вашия браузър. Ако обичате типовете, това може да е достатъчно, за да прегърнете JavaScript. Или просто можете да разпознаете имитацията като най-искрената форма на ласкателство и да се придържате към Java, която обхваща статично писане от самото начало.

Където Node.js печели: Синтактична гъвкавост

JavaScript е бил прост език за изскачащи нежелани полета за предупреждение и двойна проверка на въведената форма. Тогава общността на разработчиците създаде много различни версии на езика, които могат да бъдат преобразувани в нещо за браузъра. Тълпата на CoffeeScript предлага шепа различни синтаксиси, създадени да задоволят вкуса за по-чиста пунктуация. Има тълпата React / Vue, която смесва заедно HTML и JavaScript, само защото е по-чиста. Има TypeScript за любителите на типа и LiveScript за почитателите на функционалния език.

Ще откриете огромно количество креативност и в света на Java, но по някаква причина това не се изразява с много предварителни процесори. Има редица езици като Kotlin, Scala и Clojure, които са превърнати в байт код за JVM, но по някакъв начин те се чувстват достатъчно различни, за да се отделят като отделни езици. Всички препроцесори правят живота по-забавен за програмистите на JavaScript, които обичат различни начини да формулират или прецизират своя код.

Където Java печели: Лесен процес на изграждане 

Сложните инструменти за изграждане като Ant и Maven революционизираха програмирането на Java. Но има само един проблем. Записвате спецификацията в XML, формат на данни, който не е проектиран да поддържа логика на програмиране. Разбира се, сравнително лесно е да се изрази разклоняване с вложени тагове, но има нещо досадно в превключването на зъбни колела от Java на XML само за изграждане на нещо. С JavaScript няма превключване на предавките. 

Node.js използваше по-простата компилация. Просто ще редактирате кода и след това натиснете „стартиране“. Това беше тогава. Тъй като разработчиците на Node са „подобрили“ процеса, те са добавили препроцесори, които вземат любимия ви поддиалект на JavaScript и го превръщат в нещо, което може да се изпълни. Тогава мениджърът на пакети Node трябва да намери правилната библиотека. През повечето време това просто работи, но понякога не работи и тогава прекарвате време в търсене на правилния номер на версията на някакъв артефакт, който сами изграждате в отделна стъпка. И ако допуснете някаква грешка в хранилището на артефакти, добре, този номер на версията се изстрелва и трябва да завъртите колелата на одометъра отново.

Java също има сложен процес на изграждане, който е доста подобен на метода Node.js, но не изглежда, че е станал по-сложен. По някакъв начин Maven и Ant изглеждат като част от основата на Java сега. Много от грубите ръбове отдавна са изчезнали и компилациите просто работят по-често. Ако имаше някаква абсолютна мярка за изграждане на караница, двата езика може да са сходни, но бързият взрив на сложността на JavaScript означава, че Java печели.

Свързано видео: Node.js съвети и трикове

В това обяснително видео научете няколко техники, които могат да подобрят вашия опит за разработка на Node.

Където Node.js печели: JSON

Когато базите данни изплюват отговори, Java отива на сложни дължини, за да превърне резултатите в Java обекти. Разработчиците ще спорят с часове за POJO картографиране, хибернация и други инструменти. Конфигурирането им може да отнеме часове или дори дни. В крайна сметка Java кодът получава Java обекти след цялото преобразуване. А що се отнася до конфигурацията, светът на Java все още се придържа към XML и дори предлага два основни анализатора, за да даде на разработчиците повече причини да се безпокоят.

Днес много уеб услуги и бази данни връщат данни в JSON, естествена част от JavaScript. JSON вече е толкова разпространен и полезен, че много Java разработчици използват формата, а редица добри JSON парсери са достъпни и като Java библиотеки. Но JSON е част от основата на JavaScript. Не ви трябват библиотеки. Всичко е там и е готово за работа.

Къде печели Java: Отдалечено отстраняване на грешки

Java се гордее с невероятни инструменти за наблюдение на клъстери от машини. В JVM има дълбоки куки и сложни инструменти за профилиране, които помагат да се идентифицират тесните места и грешките. Корпоративният стек Java управлява някои от най-усъвършенстваните сървъри на планетата, а компаниите, които използват тези сървъри, изискват най-доброто в телеметрията. Всички тези инструменти за наблюдение и отстраняване на грешки са доста зрели и готови за внедряване.

Къде печели Node.js: Desktop

Възможно е там да се изпълняват някои Java аплети и аз все още поддържам някои Java JAR файлове, върху които мога да щракна, за да стартирам, но в по-голямата си част десктопният свят до голяма степен е без Java. JavaScript, от друга страна, продължава да улавя все повече и повече действия, тъй като браузърът изяжда повечето роли за нашия работен плот. Когато Microsoft пренаписа Office, за да работи в браузъра, матрицата беше хвърлена. Ако все още се чудите, има интересни опции като Electron, които вземат вашия уеб код и го превръщат в самостоятелно настолно приложение.

Където Java печели: Ръчни устройства

Приложенията за Android често се пишат на Java и 90 процента от новите телефони работят с някаква версия на Android. Много хора дори вече не използват настолни компютри, защото телефоните са достатъчно добри за всичко.

Разбира се, има малко объркване. Много разработчици пишат уеб приложения Node.js, насочени към мобилните браузъри както на iPhone, така и на Android. Ако това е направено добре, представянето често е достатъчно добро.