成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Web開發比較:Spring Boot與Express.js

新聞 前端
JavaScript的服務器端開發比Java更好嗎?它可能只取決于正在開發的應用程序。我現在可以聽到來自Java開發人員的發聲。

JavaScript的服務器端開發比Java更好嗎?它可能只取決于正在開發的應用程序。我現在可以聽到來自Java開發人員的發聲。

從Java開發人員的角度來看,使用Spring Boot生態系統和JavaScript與Express進行Web開發的簡單比較。

[[257762]]

本文的目標

這是一個不太技術性的比較(您可以在其他地方找到更具體的技術比較)。我只想概述當您是一名Java開發人員時,如何在Node.js中開發Web應用程序。

所以請記住,這篇文章充滿了個人意見。

在開始之前,我概述了一些前提:

1. 我是一名使用Java語言的軟件開發人員。我已經開發了基于Java的軟件大約15年了。

2. 我目前正在學習JavaScript開發(自2007年以來我一直在編寫前端JavaScript,但服務器端JavaScript已成為它自己的野獸)。

我想要比較什么

我想強調一下開發基于Node / Express堆棧的應用程序與基于Spring Boot的應用程序相比時所感受到的一些差異。

為什么我要比較這些

TL; DR:在完成一個簽約項目之后,我決定測試另一個生態系統來檢查它是否可以避免一些Java最受批評的點。

我***一個客戶是一家正在創建加密交換的公司(是的,在當今市場上很常見,但對于一家意大利公司來說并不常見)。他們讓我加入他們的團隊(三個不同的開發團隊)并幫助他們建立自己的平臺。我主要開發用于授權和身份驗證的微服務,核心事務處理,以及客戶的KYC微服務和不同微服務之間共享的代碼庫等其他東西。

這是一個大而有趣的項目。

但在與其他團隊和人員的討論中,我經常聽到對基于Java的Web開發的批評,轉而支持Python或Go。其他語言似乎沒有遭受Java的一些批評是:

  1. Java很冗長。
  2. Java中的一切都是界面混亂的。
  3. Java應用程序的內存消耗是壓倒性的。
  4. 磁盤空間消耗也可能是壓倒性的。
  5. 發展需要很多時間。

在編寫數百個基于Docker的微服務時應該考慮使用3.和4.我認為這個規模問題可能是無稽之談,因為如果你有數百個微服務運行,你的組織可能是相當有利可圖的,你可以買得起“昂貴” “實例支持內存貪婪的Java應用程序。

我必須誠實,有時我認為,在2019年,上述所有五點都是合理的批評,所以我想嘗試自籌資金項目來測試其他一些技術。

由于我需要進行Web開發而不一定是基于微服務的項目,在快速(非常快速地)看GO之后,我決定反對這種語言。我認為它是一種很棒的語言(從我讀到的內容)但它不適合我當前的項目。

所以我看了Python并開始使用Python,但我需要編寫一些JavaScript代碼,因為我將使用Puppeteer作為PricePaladin(一種價格跟蹤和監控工具)的基本組件, 并在審查了非常好的 語言比較之后 我決定使用Node.js.

對照

語言

如果您是Java開發人員,您會發現JavaScript并不難學。當你處理回調時,你肯定會凍結。你會發現Promises,并且在一天結束時,你將使用async-await語法糖,使一切恢復正常。

也就是說,JavaScript聽起來有點奇怪,但今天的JavaScript絕對沒問題(正如我之前所說,它不是2015年的JavaScript)。它簡單,功能強大且簡潔。

我留下關于動態打字的所有觀察結果,在我看來,這并不是什么大不了的事。

Node.js是單線程的

好的,對于Java開發人員來說,這是最“令人震驚”的事情之一。但片刻之后震驚消失了。您應該考慮一切都在一個線程上運行(在任何Java Web應用程序上,您有多個線程),并且回調函數(異步函數)在執行它們時排隊并執行,但所有代碼都在單個線程上運行(Node.js的速度和低內存消耗的關鍵)。從Java開發人員的角度來看,這意味著:

1. 不要運行CPU時間密集型代碼,否則在執行新的排隊功能之前,所有內容都將等待CPU空閑。

2. 如果出現問題并且Node.js崩潰,那么 一切都會 崩潰:在Web應用程序服務多個并發請求的情況下,所有請求都會崩潰。您沒有Java Web應用程序的隔離。

JS相當于Spring Boot Ecosystem:Express.js,Passport.js,Sequelize

如果我們僅限于與MVC Web應用程序部分的比較,Spring Boot絕對是非常棒的:輕巧,快速,完整且極其可配置。從這個角度來看,與Express.js提供的相比,Java開發人員并沒有任何重大缺陷。

Express.js也提供相同的潛力。根據個人品味,可以更好地理解或不是路由:不是在Java注釋級別定義,而是在路由文件級別定義。

更一般地說,Spring Boot表示將代碼組織到包(模型,服務,控制器)中的非常精確的方法,而在Express.js上下文中則沒有這樣的指導。盡管如此,可以重新應用類似的代碼結構,并且通常有一些項目的代碼結構與Spring Boot項目類似。

對于身份驗證部分,Spring Security是“***工具”......但如果用于某些特別復雜的情況,它也是“馴服的野獸”。JavaScript對應的是Passport.js,它非常強大,但結構和成熟度較低。然而,您感覺它能夠處理與Spring Security相同的情況和條件。在任何情況下,該框架也廣泛支持開發通用認證機制,例如JWT認證或其他常見的auth機制。Spring Security的成熟度尚未與Passport.js相匹配,但我認為Spring Security提供的80%的功能也是在Passport.js中實現的,有時候更簡單。

從我的觀點來看,Java中的ORM一直是Java應用程序的致命弱點。Java標準大致是Hibernate(盡管有各種各樣的選擇,無論多么廣泛,如Jooq和MyBatis),而對于與關系數據庫相關的JS世界,***的庫是Sequelize。

Hibernate與Sequelize

TL; DR:Hibernate仍然是最完整,最成熟,最通用的解決方案,但成本非常高!Sequelize可能會覆蓋90%的用例。

我不討厭Hibernate,但我肯定不喜歡它。它過于設計,緩慢而復雜。它就像一頭大象。但是,它可以對任何受支持的數據庫執行任何操作。相反,Sequelize小而簡單但無法管理所有用例。

我通過使用Sequelize發現的一些事情:

1. 你會有一個不那么難,但絕對不是那么容易的時間嘗試使用蛇案件的桌子的領域。您可以逐個手動指定它們(但這太過分了),或者您可以使用一些黑客將名稱轉換為蛇案例。這是一個簡單的解決方案,但它的缺點在于它會破壞遷移命令行工具。無論如何,用于引入命名約定定義的靈活性的所有請求都被丟棄并被忽略是不可接受的。

2. 它不完全支持復合鍵。正如這里明確指出的那樣 ,“雖然可以在Sequelize中創建復合主鍵,但Sequelize當前不支持復合外鍵,因此無法引用具有復合主鍵的模型/表。”從我的角度來看,這是不成熟的。

3. 由于時區解釋,你必須做一些很好的技巧來管理日期字段(這真是出乎意料)。

4. 將實例添加到兩個實體(例如Book和Author)之間相關的字段時,會立即保存實體。這并不是什么大不了的事,但表明Sequelize遠不如Hibernate復雜,后者有內部機制來決定何時刷新數據。

在Sequelize中也有一些我喜歡的東西,比如在運行時創建查詢的容易性(這是輕而易舉的,你可以在運行時編寫一個JSON對象并將其傳遞給查詢引擎)。嘗試在創建JPQL查詢時執行此操作,或者考慮使用某些條件進行復雜化的過程。老實說,在嘗試通過某些字段在運行時動態過濾查詢時使用Hibernate和Spring Data JPA是一件很痛苦的事情,而在Sequelize中這很容易(應該用任何框架/語言)。

Sequelize在Hibernate方面閃耀的另一個方面是,當你遇到一些困難的情況并且需要進行本機查詢時:它們都允許你執行本機查詢,但老實說,將結果轉換為模型更簡單Sequelize比Spring Data JPA / Hibernate。

而且我不是在談論啟動時間:介紹Hibernate會增加啟動時間,而Sequelize則非常直接。

作為***的考慮,很明顯:

1. Sequelize比Hibernate成熟得多,

2. Hibernate能夠做任何事情,而Sequelize僅覆蓋90%的用例。

3. Sequelize不那么抽象,而且更容易使用。

4. 這可能是一個很大的優勢,特別是當您擁有數據庫模式,不必適應遺留數據庫,并且您不打算有一天遷移數據庫引擎時(說實話,我只看到一個案例)數據庫遷移在我的生活中,當兩家銀行決定合并時,因此決定只保留一個IT系統并將廢棄的代碼重寫到另一個平臺。有數千個存儲過程需要重寫,所以代碼可移植性,在我看來,在談論ORM時,是一個無用的功能。)

***的考慮因素

我目前正在使用描述的JavaScript堆棧,目前我對它非常滿意。 PricePaladin(一種價格跟蹤和監控工具) 是使用上面提到的堆棧構建的,由于其內存占用少,目前已部署到廉價的服務器上。

使用JavaScript可以為您帶來更高級的簡單性。它是腳本和標準Web開發的理想選擇,但我不會將它用于復雜項目(小型專用和隔離的微服務除外),也不會將它用于數字應用程序或數字計數的應用程序(如Java和Java的加密交換)它的 BigDecimal類非常適合該范圍)。

最終,我在開發服務器端JavaScript時的一般感覺是,與基于Java的等效應用程序相比,一切都更簡單,更簡單,盡管我強烈認為缺乏穩定性和成熟度。用Java提供的庫(只有當特定項目需要某些庫時才缺乏實際,否則沒有區別)。

另一種看法是JavaScript開發周期快了約20%。通過這種方式,我的意思是,由于更復雜的代碼和過度設計的Java應用程序結構遵循經典指南和重建代碼所花費的時間,因此您在Java中開發相同功能的時間比在JavaScript中花費的時間多得多。

因此,在應用程序不提供計算或阻塞處理的情況下,并且關注經典的小型Web應用程序的開發,我幾乎肯定會選擇使用所描述的JavaScript堆棧進行開發,而在其他情況下,我會將應用程序基于從長遠來看,我認為Spring Boot堆棧提供了更強的可維護性。

責任編輯:張燕妮 來源: 頭條科技
相關推薦

2013-06-14 09:27:51

Express.jsJavaScript

2017-04-24 08:31:26

Node.jsExpress.jsHTTP

2024-09-11 23:00:41

2017-08-02 14:44:06

Spring Boot開發注解

2012-02-08 13:49:53

Node.js

2025-03-05 00:02:00

Next.jsExpress.jAPI 路由

2024-01-16 12:48:00

Express.jsNode.jsHTTP 服務器

2021-01-14 10:48:34

Docker CompNode.js開發

2011-01-19 15:51:41

PHPjavaweb

2021-06-15 09:00:00

Web技術開發

2018-05-04 15:27:22

Spring Boo Web開發

2021-03-07 09:12:54

GolangNode.js.后端

2024-01-05 07:38:55

2017-10-17 15:14:33

Spring BooThymeleafWeb

2023-11-02 18:01:24

SpringMVC配置

2024-05-09 09:01:03

2023-03-27 15:07:27

PythonWeb 開發編程語言

2020-03-24 14:55:48

Spring Boot多模塊Java

2020-08-14 10:54:56

NodejsGolang開發

2009-09-22 11:49:34

ibmdwREST
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区高清不卡 | 国产成年人视频 | 97国产一区二区精品久久呦 | 日本精品在线观看 | 北条麻妃一区二区三区在线观看 | 久久99深爱久久99精品 | 在线国产一区 | 中文字幕在线观看第一页 | 午夜电影福利 | 男人阁久久 | 黄色国产在线播放 | 色狠狠一区| 国产成人精品一区二三区在线观看 | 日本亚洲欧美 | 色婷综合网| 亚洲福利 | 欧美久久综合 | а天堂中文最新一区二区三区 | 亚洲欧美日韩精品久久亚洲区 | 天天干精品 | 精品久久久久久中文字幕 | 欧美成人a∨高清免费观看 欧美日韩中 | 动漫www.被爆羞羞av44 | 国产成人精品久久二区二区91 | 日日操夜夜操视频 | 91在线影院 | 日韩国产高清在线观看 | 国产精品久久精品 | 日韩不卡视频在线观看 | 中文字幕1区| 国产免费视频 | 精品一区二区免费视频 | 日韩成人在线观看 | 日韩在线视频一区二区三区 | 免费黄色录像视频 | 精品91 | avmans最新导航地址 | 91亚洲精选| 一级黄色毛片子 | 国产精品一区在线观看 | 久久久久国产一区二区 |