摘要:集裝箱化集裝箱化集裝箱化以下是部分原因集裝箱化會迫使你遵從應用開發大原則。通過集裝箱化,可以實現開發階段測試以及生產環境的對等。實現環境集裝箱化的理由還有很多很多,一旦掌握了基本知識,集裝箱化就不難實現。
很多情況下,產品的設計與開發人員一直想打造一套高品質的解決方案,從而快速、平穩地適應產品迭代。速度是衡量產品適應性的真正且唯一的標準,而且,這并不是筆者的一家之言。
「速度是衡量適應能力的真正指標。」 ——艾瑞克·埃利奧特
許多公司選擇 JavaScript,就是看中了它靈活、快速的優點。盡管此言非虛,但如果你在構建 JavaScript 系統時考慮得不夠周全,靈活與高速的特性反而可能將你帶入歧途。
一些值得特別關注的問題包括:
代碼重復
樣式或風格不一致
無法隨意擴展
工具與模塊選擇阻礙了生產力
測試程序不可靠或缺失
深度繼承(猩猩/香蕉問題)
原作者曾在多個側重 JavaScript 的開發環境中工作了一段時間之后,幾乎經歷了所有擴展 JavaScript 應用可能導致的問題,客戶端與服務器端均不能幸免。以下是對這些問題的總結,希望能幫助大家少走一些彎路。
在探討與上下文相關的 JavaScript 問題之前,以下是一些與平臺相獨立的建議,肯定能幫助你減輕工作負擔。
JavaScript 功能非常強大,它為對象組合提供了原型繼承與函數式編程功能,使用 JavaScript 的這兩大支柱功能,而不執著于經典的面向對象模式,能夠有效發揮 JavaScript 的強勁功能。應用的組合度與模塊化程度越高,今后就越容易重構與擴展。
現而今,NPM 上提供了超過20萬個模塊。時間就是金錢,你花在代碼維護上的時間越多,對雇主而言,你就越昂貴。更何況,許多代碼其實不用你親自編寫。
在這里,筆者還建議你使用第三方的運維服務與工具。沒必要建立自己的分析平臺,除非你的應用擴展到非常大的規模,以致于 Google Analytics,Mixpanel,百度統計等 SaaS 營銷軟件無法滿足你的需求。使用這些服務處理相關任務,能促使你專注于真正重要的東西——產品,而且,現在研發的人力成本越來越高,使用適當的 APM 軟件也能減少開發維護網站的任務量,例如 OneAPM 、NewRelic、APPdynamic 等,這能讓工程師專注于生產價值,而不是管理代碼質量。
導致生產力嚴重下滑的另一重要原因是面對陌生代碼時手足無措,四處翻找。采用統一的風格指南,創建可辨明的樣式,就能解決這一難題。同樣的風格與樣式意味著新的項目看起來也更為熟悉。
筆者尤其偏愛 Airbnb 的風格指南。該指南的貢獻者超過 160 人,每個月有16.9萬次的下載。此外,它還提供了一個 ESLint 插件,也就是說,如果你不準備覆蓋什么的話,無需任何配置就能為你所用。
與成千上萬名 JavaScript 工程師共享樣式與風格。
此外,使用 linter 以確保團隊內部的樣式一致。目前,ESLint 是筆者最愛的 linter,因為它不僅提供了插件能力,還擁有來自開源社區的持續支持。幾乎針對每一種文本編輯器與 IDE,都有 ESLint 插件可用。
Yeoman 也可以幫你創建在新項目中使用的應用模板,實現更為深入的一致性。有了 Yeoman,你可以在每個應用中使用相同的基本依賴關系,編碼樣式以及風格。
JavaScript 是擁有最完備的工具生態系統的編程語言之一。請一定要利用這一點!iron-node,react devtools 和 redux devtools 都是不容錯過的工具。
Electron 與 React Native 提供了訪問原始環境的能力,允許你為對種平臺創建應用,而且,能有效提高代碼重用率。
將應用分為許多小巧的模塊,能真正實現可組合的 JavaScript。遵循 FIRST 原則(Focused 專注,Independent 獨立,Reusable 可重用,Small 小巧,Testable 可測試),能夠降低應用復雜度,同時提升測試能力與重用率。
「無論是客戶端組件還是服務器端的組件,無論是 Node 模塊還是一段可視化 UI,龐大的組件總是比小巧的組件更復雜,更難以維護。」 ——阿迪·奧斯馬尼
請記住,模塊的功能越小越好。事實上,模塊越小,其重用率就越高。
將其用于 APIs,SPAs,以及兩者的所有中間環節。類似 Bable的工具能給你帶來極大的優勢。在今天,使用 ES2015 的能力意味著你可以用更少、更整潔的代碼創建應用。不要因為害怕供應商鎖定或這些工具不容易找到而放棄使用它們。
老實說,現在已經沒有理由不適用 Babel 了!Bable 既可以處理普通的 JavaScript,也可以處理任何類型的編譯代碼。這意味著,你可以隨時將模塊移回 ES5。
建立能與 JavaScript 完好擴展的服務并非易事。應用越大,快速運行并適應新變化就越難。請確保你正在建造的服務是高度可用,且支持自動擴展的。
JavaScript 是一種單線程的語言。這意味著,在沒有集群的情況下,你的應用只能使用單個 CPU。筆者喜歡將負載平衡工作留給代理或 NGINX 之類的負載平衡器,而不是交由 Node 的集群模塊處理。此外,筆者還偏好使用較小的服務器來運行應用。這樣,當需要更多資源時,筆者只需增加服務器的數量就能輕易實現橫向擴展。這能幫助筆者最小化當前的運營成本。
以下是部分原因:
集裝箱化會迫使你遵從應用開發12大原則。
通過集裝箱化,可以實現開發、階段、測試以及生產環境的對等。
集裝箱非常易于橫向擴展。
你可以輕易將應用轉移到其他云服務上。(防止供應商鎖定,使用其他支出服務。)
實現環境集裝箱化的理由還有很多很多,一旦掌握了基本知識,集裝箱化就不難實現。如果你想打造在任何平臺都能使用的靈活應用,集裝箱化是必須掌握的第一步。而且,由于集裝箱在外部是無狀態的,可以支持無限次復制。
對于 APIs 與服務,選擇 Hapi 作為服務器框架,Joi 用于校驗,hapi-swagger 插件用于維護活文檔,是相當不錯的組合。
Hapi 特別適用于模塊化的大型應用,同時也能為簡單的應用提供支持。此外,最讓它與眾不同的是其提供的封裝能力。Hapi 提供了許多通過依賴注入訪問服務器的「插件」。這樣,你可以將業務邏輯按照緊密程度進行分組。將應用分解到這些插件中,能極大地提高擴展能力。項目的操縱也變得極為直白,原因是不需要學習自定義的插件架構,而 Hapi 本身又提供了豐富的文檔資料。
Joi 是一種驗證模塊,與 Hapi 出自同一班工程師之手(Walmart Labs)。Joi 的 API 與其卓越的功能使得驗證變成小菜一碟。你知道如何建立驗證模式,因此創建驗證模塊也變得非常簡單。用于驗證 UI 中某個表格的一段代碼也可以用來驗證一個傳入的請求、一個模塊,或測試。的確是非常令人驚奇。
將 hapi-swagger 插入服務器后,你可以輕易地將任意路徑標記為 API 的一部分,hapi-swagger 會幫你生成活文檔。更不用說,hapi-swagger 會讀取 Joi 驗證,為開發者提供細致的 API 文檔,而你不用費吹灰之力。不過,使用 Express 或 Koa 也可能得到相同的效果,但筆者仍舊認為 Hapi 是非常驚人的工具。
本文主要講的是關于 JavaScript 使用過程中的一些基礎性的心得體驗,不一定適合每一個人,但是確實也是作者的「踩坑之得」,大家在閱讀之后如果有什么想分享的也可以在討論區進行回復,閉門造車總是不行的。
本文的下一個姊妹篇,主要講的內容預計為關于 JavaScript 使用過程中如何提高用戶體驗和性能優化這方面的內容,敬請期待~
Browser Insight 是一個基于真實用戶的 Web 前端性能監控平臺,能夠幫大家定位網站性能瓶頸,網站加速效果可視化;支持瀏覽器、微信、App 瀏覽 HTML 和 HTML5 頁面。想閱讀更多技術文章,請訪問OneAPM 官方技術博客。
本文轉自 OneAPM 官方博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78905.html
摘要:本文是面向前端小白的,大手子可以跳過,寫的不好之處多多分鐘搞定常用基礎知識前端掘金基礎智商劃重點在實際開發中,已經非常普及了。 JavaScript字符串所有API全解密 - 掘金關于 我的博客:louis blog SF專欄:路易斯前端深度課 原文鏈接:JavaScript字符串所有API全解密 本文近 6k 字,讀完需 10 分鐘。 字符串作為基本的信息交流的橋梁,幾乎被所有的編程...
閱讀 3480·2023-04-26 02:44
閱讀 1622·2021-11-25 09:43
閱讀 1510·2021-11-08 13:27
閱讀 1881·2021-09-09 09:33
閱讀 899·2019-08-30 15:53
閱讀 1762·2019-08-30 15:53
閱讀 2771·2019-08-30 15:53
閱讀 3106·2019-08-30 15:44