首頁 > web前端 > js教程 > 2019如何作為一個更好的Node.js開發者

2019如何作為一個更好的Node.js開發者

發布: 2019-01-11 10:26:29
轉載
2935 人瀏覽過

这篇文章汇编了 19 项在 2019 年可能会很有价值的技能和主题。但请不要感觉到有任何压力——我和其他大多数开发者也并非对每一个主题都很熟悉。我只是觉得这些东西应该值得我们关注,而且 JavaScript 生态系统的发展本来就永无止境。

1. 增加类型和模式——TypeScript 是 2019 年的一个非常好的候选项

事实证明,无类型编码不仅效率不高,而且容易出错。但这并不意味着你一定要使用严格的类型语法,你可以根据实际情况选择类型的严格程度,比如使用 JSON Schema 或 Joi 来验证实体和模型,或者用静态类型来注解 JS(请参考 https://github.com/facebook/flow ),或者使用全类型的 TypeScript。

TypeScript 在 2018 年取得了显著的进展,似乎已经进入了 Node 领地。如果你计划使用 TypeScript,那么应该问一下自己,你是否只是想要使用它的类型功能,如果也要使用接口和抽象类,那么可能需要学习新的编程范式。

2. 丰富你的 linter

linter 实际上是免费的午餐,只需要 5 分钟的设置,就可以免费获得自动代码保护,并在输入代码时发现重大问题。认为 linting 只是花拳绣腿的日子已经一去不复杂了。如今,linter 可以捕获严重的代码问题,例如错误没有被正确抛出、丢失信息、没有完成的 promise,以及其他你从未真正想要留在代码中的错误。

3. 更多的 Java 和更少的 Ruby——加深你的架构知识

有关 NodeJS 生态系统的架构和设计方面的知识并不多,每个人都在谈微服务,但只谈到了一些内部结构。因此,大多数应用程序和示例都是基于 MVC 概念以及一些来自 Ruby 的其他模式。这有什么问题?MVC 适用于构建内容服务,但在构建健壮的后端方面差强人意。你可以用两个类——Controller 和 Model 来描述你的整个业务逻辑、规则、数据访问、与其他微服务的通信吗?

我绝对不建议采用重量级的 Java/Spring 模式(所以我们才会来到 Node 的领地,不是吗?),而是选择一些能够提供价值却不会牺牲应用程序简单性的想法。

4. 计划如何利用 Async Hook 来获得更好的跟踪和上下文

单线程模型有一个缺点——请求会丢失上下文:当它们流经多个文件并执行异步操作时,变量在整个生命周期中不会被保留。为什么这个很糟糕?例如,开发人员通常希望在每个日志条目中包含唯一标识符,以便稍后可以关联同一请求的所有日志条目——在 2018 年实现这个并不是很容易。

2019 年将会有新的东西出来,Async Hook 就是其中之一(不是全新的特性,但很快就会结束实验阶段)——简单地说,这是一种在异步操作开始和结束时随时注入自定义代码的机制。这样就可以关联同一请求的所有代码并保留上下文。这为很多自定义程序包奠定了基础,这些程序包将 Node 的跟踪和上下文能力提升到了一个新的水平。

5. 了解最新的“Serverless”

注意:这里将 FaaS 和 Serverless 这两个词互换使用,尽管它们并不完全相同。

最初,FaaS 用于微任务的开发,而不是用于“微服务”应用程序。随着它们受欢迎程度越来越高,云供应商的胃口也越来越大,很快,新功能开始堆叠起来,到了 2019 年,它似乎变成了强大的应用程序基础设施。

它现在可以与 Kubernetes 展开竞争并为大型应用程序提供服务吗?有些人认为 Serverless 和 FaaS 是正交技术,但实际上,2019 年的每一个新的云应用程序都必须选择三者中的一个:裸机实例(如 EC2 或 GCP 计算)、Kubernetes 或 FaaS。因此,了解 K8S 和 FaaS/Serverless 并知道它们之间的区别将成为一项必备的设计技能。

6. 了解最新的 JavaScript 特性

我并不是一个只顾追求每一个语言新特性的狂热粉丝,有时候,这些闪亮的玩具会违背代码的简单性原则。一些真正有价值的 JavaScript 特性会随着时间沉淀下来(比如两年前引入的 async/await),所以 TC39 提案列表和 node.green 值得一探究竟。

7. 熟悉至少一种 API 技术——GraphQL 是 2019 年的一个很好的候选项

REST 風格的 API 與它的設計目標相得益彰:可以很好地控制實體的修改和查詢。假設你有一個財務記錄系統,你可能想要設計一個非常嚴格的端點,即單一顯式資料模型。然而,在其他非常常見的場景中,REST 表現不足,例如執行一系列可能返回不同資料集的查詢、需要最小化 API 有效載荷的低頻寬網路、強調速度的機器到機器通信,等等。那麼是否應該換成其他的呢?當然不是,你可以選擇混合使用。 API 並不是架構,它們只是應用程式的連接埠(即入口點),多種 API 樣式可以共存,甚至在單一 Web 框架之上,例如 Express。

那麼要學哪一個?你最好的選擇可能是 GraphQL,它正在成為主流。它的生態系統已經非常成熟,可以提供非常流行的用例,例如動態搜尋和層次資料來源。另一方面,gRPC 仍然是一種適用於伺服器到伺服器間通訊的小眾技術,因為其開銷非常小(例如用於 Pub-Sub/ 訊息佇列系統)。

# 8. 超越單元和整合測試

你已經對測試金字塔、單元、整合和端對端測試很熟悉了?很好,這些都是成功測試策略的基礎。在過去的 10 年中,開發領域發生了巨大的變化,但測試模型幾乎保持不變,所以我們不禁想知道如何測試像微服務、豐富的前端和 Serverless 這樣的東西。一些現代技術與傳統技術棧相輔相成,有時甚至可以替換它們,以便實現更精簡的測試策略,獲得更高的投資回報。

# 9. 在監控中遵循 SRE/DevOps 最佳實踐

2019 年,即使是中型應用程式也可能包含數十個移動部件。然而,大多數開發人員沒有花心思去學習由 SRE 工程師教給他們的監控和警報方面的知識。例如,開發人員通常會優先考慮並專注於 CPU 和記憶體等內部硬體指標,而不是考慮會直接影響最終用戶體驗的指標,例如錯誤率或延遲。這些面向客戶的指標有時被稱為“黃金訊號”,而在 2019 年,你可能希望從關注這些指標開始,並採用類似的最佳實踐。

# 10. 像攻擊者一樣思考:透過學習攻擊工具和技術來提高安全等級

如果你不能像攻擊者那樣思考,也就無法像防守者一樣思考。 2019 年,你不應該將防禦工作外包給第三方公司或只依靠靜態安全掃描程序:攻擊類型的數量非常之多,應用程式發生變更的速度是不可控的——在進行安全研討會兩天之後,團隊有可能又增加了幾個新的AWS 服務、資料庫類型和新的IAM 角色……因此,開發人員其實是最大的隱含威脅,教育他們似乎是最終的補救措施。你必須將安全 DNA 根植到你自己和團隊中,並為所有東西添加安全保護。

當你開始這麼做之後,事實證明,安全問題並不沒有那麼可怕。你只需熟悉常見的攻擊類型和工具,畫出應用程式架構和流程,並想想你自己會如何攻擊它。隨著時間的推移,在不知不覺中,你將在做出每個設計決策和編寫每一行程式碼時考慮安全問題。

# 11. 制定套件更新策略

2018 年的教訓:過早更新可能會很危險。一個團隊通常會使用這兩個套件更新策略中的一種:一個是盡快更新,有時甚至使用自動化流程。一個是根本沒有更新策略,有時候是看心情更新。雖然第一種方法似乎更好,但令人驚訝的是,它在2018 年成為最危險的方法:在40 天之內,社區發現了好多個惡意包事件,如flat-stream,那些在等待或沒有進行更新的人反而平安無事。可以考慮使用自動化工具正式化更新策略,並找到不更新和更新之間的最佳平衡。

# 12. 進行漸進式安裝,將部署和發布階段分開

2019 年,你可能會發現進行更安全的部署非常重要,也就是不一次性推出到所有的生產環境,然後讓你的小心臟像鐵鎚一樣砰砰跳。進行細粒度部署(也就是金絲雀部署)可以分為 3 個階段:部署-將新程式碼傳送到隔離的新生產環境(例如新的 Kubernetes 服務或新的機器實例)。在這個階段,它不為實際用戶提供服務,所以沒有什麼好擔心的。測試-現在有少數人可以使用生產環境的實例,並測試新程式碼。發布-逐步允許更多的使用者使用新版本,在你有足夠的信心後,可以下架舊版本。

要注意的是:進行全面的金絲雀部署在 2019 年仍然是非常昂貴的,因為它需要協調許多基礎設施部件,例如路由和監控。因此,請考慮從簡單和半手動金絲雀部署開始(例如根據監控指標手動啟動更多部署了新版本的主機)。

# 13. Kubernetes 正在吃掉這個世界

有一個很明顯的趨勢:Kubernetes(K8S),一個為應用程式元件提供網路、橫向擴展、部署和其他骨幹服務的基礎設施,現在幾乎是託管應用程式的事實標準。它的受歡迎程度是非常驚人的:在所有雲端供應商的支持下,擁有無與倫比的擴展生態系統,54%的企業已經擁有至少一個 K8S 集群。

如果你是初學者,這裡提供了一個很好的入門概述。同時也請了解 Istio、K-Native、Kuberenes 作業、網路政策、Helm、Scaffold。一句話:你花在加深了解 K8S 技能的時間最終會為你帶來回報。

# 14. 區塊鏈技術提供了一些很好的機會

一個很明顯的趨勢:區塊鏈不只是用於比特幣和加密功能,它也可以用於任何分散式事務性系統。

# 15. 獲得機器學習技能,至少有一定的談資

一個很明顯的趨勢,可惜的是,我對機器學習庫一無所知,我的2019 年目標至少是能夠說出一些有關機器學習的東西,並能夠找出快速獲勝的機會(例如像tensorflow.js 和brain.js 這樣的JS 庫可以在沒有強大的基礎設施的情況下提供一些見解)。

# 16. 了解其他開源程式庫程式碼

注意,長時間在一個專案中使用相同的技術可能會讓你的視野變窄,並隱藏了許多替代方案。所以,努力去了解更多其他的項目,主要是成功的開源專案。

# 17. 深化對Linux 作業系統的理解,重點關注Linux 進程方面的東西

了解Linux 進程將讓你獲得真正的競爭優勢,因為它會影響很多開發任務,如監控、保護進程、使用Docker、優雅地關閉等其他任務。努力了解進程、訊號、權限模型、常用指令、進程類型,等等。

# 18. 深入了解Node.js 內部

我真的很喜歡Ryan Dahl(Node.js 原始作者)講的一句話:「你不可能理解所有的東西。但是,你應該讓自己去了解系統」。當你需要處理令人頭痛的生產環境問題或設計一些基礎設施組件(例如監控事件循環性能)時,對底層機器的深入了解被證明是有價值的。你可能已經熟悉了 v8 和 libuv 等核心構建塊。

那麼 2019 年是深入了解 Node.js 的好時機,例如,了解每個 libuv 事件循環週期內究竟發生了什麼?或是可以了解與作業系統 IO 的互動是如何進行的(例如活動句柄)?

# 19. 學習使用科學的方法

你學到的和內化的東西將塑造你未來的職業生涯。然而,許多開發人員既沒有學習策略,也沒有學習如何使用科學的方法進行有效的學習。

在一個關於「防止JavaScript 類型錯誤」的會議上,VP 要求繼續使用JavaScript 而不重構整個程式碼庫(不使用TypeScript…),突然你的一位同事建議使用Facebook Flow,房間裡的每個人都表示贊同!你突然想起你曾經看過有關它的文章,但它從來沒有被你內化,只是在你的腦海中一閃而過。

這是怎麼回事?

顯然,有一種叫作「競爭幻覺」的現象解釋了為什麼我們會忘記這些東西:你可能花了 1 個小時閱讀一篇博文,但在幾天之內就不記得了!研究表明,如果你稍後嘗試與某人說起這些東西,或者在第二天再次閱讀文章摘要,就可以大大提高記憶成功率。當然,還有其他各種技巧可以幫助你在正確的時間記住並獲得正確的知識。花幾個小時學習如何學習可以為你的職業生涯帶來很大的幫助!


以上是2019如何作為一個更好的Node.js開發者的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:微信公众号InfoQ
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板