溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Node.js開(kāi)發(fā)技能有哪些

發(fā)布時(shí)間:2020-08-27 15:46:06 來(lái)源:億速云 閱讀:234 作者:小新 欄目:web開(kāi)發(fā)

這篇文章給大家分享的是有關(guān)Node.js開(kāi)發(fā)技能有哪些的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

1. 增加類(lèi)型和模式——TypeScript 是 2019 年的一個(gè)非常好的候選項(xiàng)

事實(shí)證明,無(wú)類(lèi)型編碼不僅效率不高,而且容易出錯(cuò)。但這并不意味著你一定要使用嚴(yán)格的類(lèi)型語(yǔ)法,你可以根據(jù)實(shí)際情況選擇類(lèi)型的嚴(yán)格程度,比如使用 JSON Schema 或 Joi 來(lái)驗(yàn)證實(shí)體和模型,或者用靜態(tài)類(lèi)型來(lái)注解 JS(請(qǐng)參考 https://github.com/facebook/flow ),或者使用全類(lèi)型的 TypeScript。

TypeScript 在 2018 年取得了顯著的進(jìn)展,似乎已經(jīng)進(jìn)入了 Node 領(lǐng)地。如果你計(jì)劃使用 TypeScript,那么應(yīng)該問(wèn)一下自己,你是否只是想要使用它的類(lèi)型功能,如果也要使用接口和抽象類(lèi),那么可能需要學(xué)習(xí)新的編程范式。

2. 豐富你的 linter

linter 實(shí)際上是免費(fèi)的午餐,只需要 5 分鐘的設(shè)置,就可以免費(fèi)獲得自動(dòng)代碼保護(hù),并在輸入代碼時(shí)發(fā)現(xiàn)重大問(wèn)題。認(rèn)為 linting 只是花拳繡腿的日子已經(jīng)一去不復(fù)雜了。如今,linter 可以捕獲嚴(yán)重的代碼問(wèn)題,例如錯(cuò)誤沒(méi)有被正確拋出、丟失信息、沒(méi)有完成的 promise,以及其他你從未真正想要留在代碼中的錯(cuò)誤。

3. 更多的 Java 和更少的 Ruby——加深你的架構(gòu)知識(shí)

有關(guān) NodeJS 生態(tài)系統(tǒng)的架構(gòu)和設(shè)計(jì)方面的知識(shí)并不多,每個(gè)人都在談微服務(wù),但只談到了一些內(nèi)部結(jié)構(gòu)。因此,大多數(shù)應(yīng)用程序和示例都是基于 MVC 概念以及一些來(lái)自 Ruby 的其他模式。這有什么問(wèn)題?MVC 適用于構(gòu)建內(nèi)容服務(wù),但在構(gòu)建健壯的后端方面差強(qiáng)人意。你可以用兩個(gè)類(lèi)——Controller 和 Model 來(lái)描述你的整個(gè)業(yè)務(wù)邏輯、規(guī)則、數(shù)據(jù)訪問(wèn)、與其他微服務(wù)的通信嗎?

我絕對(duì)不建議采用重量級(jí)的 Java/Spring 模式(所以我們才會(huì)來(lái)到 Node 的領(lǐng)地,不是嗎?),而是選擇一些能夠提供價(jià)值卻不會(huì)犧牲應(yīng)用程序簡(jiǎn)單性的想法。

4. 計(jì)劃如何利用 Async Hook 來(lái)獲得更好的跟蹤和上下文

單線程模型有一個(gè)缺點(diǎn)——請(qǐng)求會(huì)丟失上下文:當(dāng)它們流經(jīng)多個(gè)文件并執(zhí)行異步操作時(shí),變量在整個(gè)生命周期中不會(huì)被保留。為什么這個(gè)很糟糕?例如,開(kāi)發(fā)人員通常希望在每個(gè)日志條目中包含唯一標(biāo)識(shí)符,以便稍后可以關(guān)聯(lián)同一請(qǐng)求的所有日志條目——在 2018 年實(shí)現(xiàn)這個(gè)并不是很容易。

2019 年將會(huì)有新的東西出來(lái),Async Hook 就是其中之一(不是全新的特性,但很快就會(huì)結(jié)束實(shí)驗(yàn)階段)——簡(jiǎn)單地說(shuō),這是一種在異步操作開(kāi)始和結(jié)束時(shí)隨時(shí)注入自定義代碼的機(jī)制。這樣就可以關(guān)聯(lián)同一請(qǐng)求的所有代碼并保留上下文。這為很多自定義程序包奠定了基礎(chǔ),這些程序包將 Node 的跟蹤和上下文能力提升到了一個(gè)新的水平。

5. 了解最新的“Serverless”

注意:這里將 FaaS 和 Serverless 這兩個(gè)詞互換使用,盡管它們并不完全相同。

最初,F(xiàn)aaS 用于微任務(wù)的開(kāi)發(fā),而不是用于“微服務(wù)”應(yīng)用程序。隨著它們受歡迎程度越來(lái)越高,云供應(yīng)商的胃口也越來(lái)越大,很快,新功能開(kāi)始堆疊起來(lái),到了 2019 年,它似乎變成了強(qiáng)大的應(yīng)用程序基礎(chǔ)設(shè)施。

它現(xiàn)在可以與 Kubernetes 展開(kāi)競(jìng)爭(zhēng)并為大型應(yīng)用程序提供服務(wù)嗎?有些人認(rèn)為 Serverless 和 FaaS 是正交技術(shù),但實(shí)際上,2019 年的每一個(gè)新的云應(yīng)用程序都必須選擇三者中的一個(gè):裸機(jī)實(shí)例(如 EC2 或 GCP 計(jì)算)、Kubernetes 或 FaaS。因此,了解 K8S 和 FaaS/Serverless 并知道它們之間的區(qū)別將成為一項(xiàng)必備的設(shè)計(jì)技能。

6. 了解最新的 JavaScript 特性

我并不是一個(gè)只顧追求每一個(gè)語(yǔ)言新特性的狂熱粉絲,有時(shí)候,這些閃亮的玩具會(huì)違背代碼的簡(jiǎn)單性原則。一些真正有價(jià)值的 JavaScript 特性會(huì)隨著時(shí)間沉淀下來(lái)(比如兩年前引入的 async/await),所以 TC39 提案列表和 node.green 值得一探究竟。

7. 熟悉至少一種 API 技術(shù)——GraphQL 是 2019 年的一個(gè)很好的候選項(xiàng)

REST 風(fēng)格的 API 與它的設(shè)計(jì)目標(biāo)相得益彰:可以很好地控制實(shí)體的修改和查詢(xún)。假設(shè)你有一個(gè)財(cái)務(wù)記錄系統(tǒng),你可能希望設(shè)計(jì)非常嚴(yán)格的端點(diǎn),即單個(gè)顯式數(shù)據(jù)模型。然而,在其他非常常見(jiàn)的場(chǎng)景中,REST 表現(xiàn)不足,比如執(zhí)行一系列可能返回不同數(shù)據(jù)集的查詢(xún)、需要最小化 API 有效載荷的低帶寬網(wǎng)絡(luò)、強(qiáng)調(diào)速度的機(jī)器到機(jī)器通信,等等。那么是否應(yīng)該換成其他的?當(dāng)然不是,你可以選擇混合使用。API 并不是架構(gòu),它們只是應(yīng)用程序的端口(即入口點(diǎn)),并且多種 API 樣式可以共存,甚至是在單個(gè) Web 框架之上,如 Express。

那么要學(xué)習(xí)哪一個(gè)?你最好的選擇可能是 GraphQL,它正在成為主流。它的生態(tài)系統(tǒng)已經(jīng)非常成熟,可以提供非常流行的用例,如動(dòng)態(tài)搜索和層次數(shù)據(jù)源。另一方面,gRPC 仍然是一種適用于服務(wù)器到服務(wù)器間通信的小眾技術(shù),因?yàn)槠溟_(kāi)銷(xiāo)非常小(例如用于 Pub-Sub/ 消息隊(duì)列系統(tǒng))。

8. 超越單元和集成測(cè)試

你已經(jīng)對(duì)測(cè)試金字塔、單元、集成和端到端測(cè)試很熟悉了?很好,這些是成功測(cè)試策略的基礎(chǔ)。在過(guò)去的 10 年中,開(kāi)發(fā)領(lǐng)域發(fā)生了巨大的變化,但測(cè)試模型幾乎保持不變,于是我們不禁想知道如何測(cè)試像微服務(wù)、豐富的前端和 Serverless 這樣的東西。一些現(xiàn)代技術(shù)與傳統(tǒng)技術(shù)棧相輔相成,有時(shí)候甚至可以替換它們,以便實(shí)現(xiàn)更精簡(jiǎn)的測(cè)試策略,獲得更高的投資回報(bào)率。

9. 在監(jiān)控中遵循 SRE/DevOps 最佳實(shí)踐

2019 年,即使是一個(gè)中型應(yīng)用程序也可能包含數(shù)十個(gè)移動(dòng)部件。然而,大多數(shù)開(kāi)發(fā)人員沒(méi)有花心思去學(xué)習(xí)由 SRE 工程師教給他們的監(jiān)控和警報(bào)方面的知識(shí)。例如,開(kāi)發(fā)人員通常會(huì)優(yōu)先考慮并專(zhuān)注于 CPU 和內(nèi)存等內(nèi)部硬件指標(biāo),而不是去考慮會(huì)直接影響最終用戶體驗(yàn)的指標(biāo),例如錯(cuò)誤率或延遲。這些面向客戶的指標(biāo)有時(shí)候被稱(chēng)為“黃金信號(hào)”,而在 2019 年,你可能希望從關(guān)注這些指標(biāo)開(kāi)始,并采用類(lèi)似的最佳實(shí)踐。

10. 像攻擊者一樣思考:通過(guò)學(xué)習(xí)攻擊工具和技術(shù)來(lái)提高安全級(jí)別

如果你不能像攻擊者那樣思考,也就無(wú)法像防守者一樣思考。2019 年,你不應(yīng)該將防御工作外包給第三方公司或只依靠靜態(tài)安全掃描程序:攻擊類(lèi)型的數(shù)量非常之多,應(yīng)用程序發(fā)生變更的速度是不可控的——在開(kāi)展安全研討會(huì)兩天之后,團(tuán)隊(duì)有可能又添加了幾個(gè)新的 AWS 服務(wù)、數(shù)據(jù)庫(kù)類(lèi)型和新的 IAM 角色……因此,開(kāi)發(fā)人員其實(shí)是最大的隱含威脅,教育他們似乎是最終的補(bǔ)救措施。你必須將安全 DNA 根植到你自己和團(tuán)隊(duì)中,并為所有東西添加安全保護(hù)。

當(dāng)你開(kāi)始這么做之后,事實(shí)證明,安全問(wèn)題并不沒(méi)有那么可怕。你只需熟悉常見(jiàn)的攻擊類(lèi)型和工具,畫(huà)出應(yīng)用程序架構(gòu)和流程,并想想你自己會(huì)如何攻擊它。隨著時(shí)間的推移,在不知不覺(jué)中,你將在做出每個(gè)設(shè)計(jì)決策和編寫(xiě)每一行代碼時(shí)考慮安全問(wèn)題。

11. 制定包更新策略

2018 年的教訓(xùn):過(guò)早更新可能很危險(xiǎn)。一個(gè)團(tuán)隊(duì)通常會(huì)使用這兩個(gè)包更新策略中的一種:一個(gè)是盡快更新,有時(shí)甚至使用自動(dòng)化流程。一個(gè)是根本沒(méi)有更新策略,有時(shí)候是看心情進(jìn)行更新。雖然第一種方法似乎更好,但令人驚訝的是,它在 2018 年成為最危險(xiǎn)的方法:在 40 天之內(nèi),社區(qū)就發(fā)現(xiàn)了好多個(gè)惡意包事件,如 flat-stream,那些在等待或沒(méi)有進(jìn)行更新的人反而平安無(wú)事。可以考慮使用自動(dòng)化工具正式化更新策略,并找到不更新和更新之間的最佳平衡點(diǎn)。

12. 進(jìn)行漸進(jìn)式安裝,將部署和發(fā)布階段分開(kāi)

2019 年,你可能會(huì)發(fā)現(xiàn)進(jìn)行更安全的部署非常重要,也就是不一次性推出到所有的生產(chǎn)環(huán)境,然后讓你的小心臟像錘子一樣砰砰跳。進(jìn)行細(xì)粒度部署(也就是金絲雀部署)可以分為 3 個(gè)階段:部署——將新代碼發(fā)送到隔離的新生產(chǎn)環(huán)境(例如新的 Kubernetes 服務(wù)或新的機(jī)器實(shí)例)。在這個(gè)階段,它不為實(shí)際用戶提供服務(wù),所以沒(méi)有什么可擔(dān)心的。測(cè)試——現(xiàn)在有少數(shù)人可以使用生產(chǎn)環(huán)境的實(shí)例,并測(cè)試新代碼。發(fā)布——逐步允許更多的用戶使用新版本,在你有足夠的信心后,可以下架舊版本。

需要注意的是:進(jìn)行全面的金絲雀部署在 2019 年仍然是非常昂貴的,因?yàn)樗枰獏f(xié)調(diào)很多基礎(chǔ)設(shè)施部件,如路由和監(jiān)控。因此,請(qǐng)考慮從簡(jiǎn)單和半手動(dòng)金絲雀部署開(kāi)始(例如根據(jù)監(jiān)控指標(biāo)手動(dòng)啟動(dòng)更多部署了新版本的主機(jī))。

13. Kubernetes 正在吃掉這個(gè)世界

有一個(gè)很明顯的趨勢(shì):Kubernetes(K8S),一個(gè)為應(yīng)用程序組件提供網(wǎng)絡(luò)、橫向擴(kuò)展、部署和其他骨干服務(wù)的基礎(chǔ)設(shè)施,現(xiàn)在幾乎是托管應(yīng)用程序的事實(shí)標(biāo)準(zhǔn)。它的受歡迎程度是非常驚人的:在所有云供應(yīng)商的支持下,擁有無(wú)與倫比的擴(kuò)展生態(tài)系統(tǒng),54%的企業(yè)已經(jīng)擁有至少一個(gè) K8S 集群。

如果你是初學(xué)者,這里提供了一個(gè)很好的入門(mén)概述。同時(shí)也請(qǐng)了解 Istio、K-Native、Kuberenes 作業(yè)、網(wǎng)絡(luò)政策、Helm、Scaffold。一句話:你花在加深了解 K8S 技能上的時(shí)間最終會(huì)給你帶來(lái)回報(bào)。

14. 區(qū)塊鏈技術(shù)提供了一些很好的機(jī)會(huì)

一個(gè)很明顯的趨勢(shì):區(qū)塊鏈不只是用于比特幣和加密功能,它也可以用于任何分布式事務(wù)性系統(tǒng)。

15. 獲得機(jī)器學(xué)習(xí)技能,至少有一定的談資

一個(gè)很明顯的趨勢(shì),可惜的是,我對(duì)機(jī)器學(xué)習(xí)庫(kù)一無(wú)所知,我的 2019 年目標(biāo)至少是能夠說(shuō)出一些有關(guān)機(jī)器學(xué)習(xí)的東西,并能夠找出快速獲勝的機(jī)會(huì)(例如像 tensorflow.js 和 brain.js 這樣的 JS 庫(kù)可以在沒(méi)有強(qiáng)大的基礎(chǔ)設(shè)施的情況下提供一些見(jiàn)解)。

16. 了解其他開(kāi)源庫(kù)代碼

注意,長(zhǎng)時(shí)間在一個(gè)項(xiàng)目中使用同樣的技術(shù)可能會(huì)讓你的視野變窄,并隱藏了很多替代方案。所以,努力去了解更多其他的項(xiàng)目,主要是成功的開(kāi)源項(xiàng)目。

17. 深化對(duì) Linux 操作系統(tǒng)的理解,重點(diǎn)關(guān)注 Linux 進(jìn)程方面的東西

了解 Linux 進(jìn)程將會(huì)讓你獲得真正的競(jìng)爭(zhēng)優(yōu)勢(shì),因?yàn)樗鼤?huì)影響很多開(kāi)發(fā)任務(wù),如監(jiān)控、保護(hù)進(jìn)程、使用 Docker、優(yōu)雅地關(guān)閉等其他任務(wù)。努力了解進(jìn)程、信號(hào)、權(quán)限模型、常用命令、進(jìn)程類(lèi)型,等等。

18. 深入了解 Node.js 內(nèi)部

我真的很喜歡 Ryan Dahl(Node.js 原始作者)講的一句話:“你不可能理解所有的東西。但是,你應(yīng)該讓自己去了解系統(tǒng)”。當(dāng)你需要處理令人頭疼的生產(chǎn)環(huán)境問(wèn)題或設(shè)計(jì)一些基礎(chǔ)設(shè)施組件(例如監(jiān)控事件循環(huán)性能)時(shí),對(duì)底層機(jī)器的深入了解被證明是有價(jià)值的。你可能已經(jīng)熟悉了 v8 和 libuv 等核心構(gòu)建塊。

那么 2019 年是深入了解 Node.js 的好時(shí)機(jī),例如,了解每個(gè) libuv 事件循環(huán)周期內(nèi)究竟發(fā)生了什么?或者可以了解與操作系統(tǒng) IO 的交互是如何進(jìn)行的(例如活動(dòng)句柄)?

19. 學(xué)習(xí)使用科學(xué)的方法

你學(xué)到的和內(nèi)化的東西將塑造你未來(lái)的職業(yè)生涯。然而,很多開(kāi)發(fā)人員既沒(méi)有學(xué)習(xí)策略,也沒(méi)有學(xué)習(xí)如何使用科學(xué)的方法進(jìn)行有效的學(xué)習(xí)。

在一個(gè)關(guān)于“防止 JavaScript 類(lèi)型錯(cuò)誤”的會(huì)議上,VP 要求繼續(xù)使用 JavaScript 而不重構(gòu)整個(gè)代碼庫(kù)(不使用 TypeScript……),突然你的一位同事建議使用 Facebook Flow,房間里的每個(gè)人都表示贊同!你突然想起你曾經(jīng)看到過(guò)有關(guān)它的文章,但它從來(lái)沒(méi)有被你內(nèi)化,只是在你的腦海中一閃而過(guò)。

這是怎么回事?

顯然,有一種叫作“競(jìng)爭(zhēng)幻覺(jué)”的現(xiàn)象解釋了為什么我們會(huì)忘記這些東西:你可能花了 1 個(gè)小時(shí)閱讀一篇博文,但在幾天之內(nèi)就不記得了!研究表明,如果你稍后嘗試與某人說(shuō)起這些東西,或者在第二天再次閱讀文章摘要,就可以大大提高記憶成功率。當(dāng)然,還有其他各種技巧可以幫助你在正確的時(shí)間記住并獲取正確的知識(shí)。花幾個(gè)小時(shí)學(xué)習(xí)如何學(xué)習(xí)可以為你的職業(yè)生涯帶來(lái)很大的幫助!

感謝各位的閱讀!關(guān)于Node.js開(kāi)發(fā)技能有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI