影響JavaScript應用可擴展性因素

引言:JavaScript 應用變得愈來愈龐大。這是由於使用JavaScript能作的事情遠比咱們大多數人所需求的要多得多。咱們不能僅由於技術上可行,就去考慮軟件系統的擴展問題。爲一個不須要擴展的系統增長擴展性是不值得的,尤爲對最終用戶來講,這隻會使系統顯得更加笨重。 
本文選自《大型JavaScript應用最佳實踐指南》。前端

  做爲JavaScript 開發者和架構師,必須認可並瞭解影響擴展性的因素。雖然不是全部JavaScript 應用都須要擴展,但總有一部分是須要的。好比,咱們很難確認某個系統不須要擴展,不須要爲它的可擴展性花費時間和精力。除非咱們開發的系統不須要後期維護,不然總會有對增加和成功的預期。 
  從另外一方面講,JavaScript 應用並不是天生成熟的可擴展應用,而是逐步積累、進化成的可擴展應用。對於JavaScript 開發人員來講, 「可擴展性的影響因素」是一個有效的工具。咱們不但願一開始就過分設計,更不但願被早期設計綁住手腳,限制了可擴展性。後端

對可擴展的須要

 擴展軟件是一種基於反應的活動。考慮可擴展性的影響因素能夠幫助咱們積極地作出準備。在應用後端等系統中,這種「擴展活動」一般是被自動處理的,多是短暫的訪問高峯。例如,激增的用戶請求致使負載驟增,這時負載均衡器介入,將負載均勻地分派到後端服務器。在某些極端狀況下,系統可能會在須要時自動準備新的後端資源來應對變化,當再也不須要時將這些資源自動銷燬。 
  可是前端不同,前端的擴展活動一般發生的時間週期較長,並且更加複雜。JavaScript應用的獨特一面在於,瀏覽器能得到的硬件資源就是它能使用的所有硬件資源,它從後端獲取的數據能夠很好地按比例增加,但這不是咱們須要考慮的。隨着軟件的不斷演進,咱們要想成功作點什麼,就必須關注「可擴展性的影響因素」。 
圖片描述
  上圖自上而下地展現了可擴展性的影響因素。首先是用戶提出軟件須要實現的功能,接着功能尺寸、與其餘功能的關係等因素會直接影響開發團隊的構成,沿着箭頭自上而下影響相應地增加。瀏覽器

不斷增加的用戶

  若是構建的應用只服務於一個用戶,就沒有必要這麼大費周章了。基於典型用戶的需求來構建的應用將會爲更多用戶提供服務。因此在應用進化過程當中,應該預見到用戶的增加。儘管並無確切的目標用戶數量,不過,基於應用自身的特色,仍然可使用http://www.alexa.com/這類工具做爲基準,設定活躍用戶數量的目標值。好比,若是咱們的應用是任何人均可以訪問的,就會但願有大量的註冊用戶;但若是僅針對我的安裝,那麼加入系統的用戶數量的增加就會比較緩慢。但即便如此,咱們仍是但願部署數量不斷增長,以提高軟件的用戶總量。 
  與前端界面交互的用戶數量是擴展應用最大的影響因素。每增長一個用戶都伴隨着各類架構層面上指數級的增加。若是自上而下地看,用戶決定一切。應用的存在終歸是爲了服務用戶。JavaScript 代碼越易於擴展,就越能取悅用戶。服務器

添加新功能

  也許可以取悅用戶的功能就是用戶基數龐大的成功軟件最顯而易見的附帶產物。軟件的功能會隨着用戶數不斷增加,儘管新功能顯而易見,但仍是常常被忽視。明明知道增長新功能不可避免,但咱們仍是不多思考如何合理地在代碼中實現源源不斷的新需求。正是缺乏這樣的思考,阻礙了咱們繼續發展。 
  這在軟件交付初期很是棘手。軟件開發商會不遺餘力吸引新的用戶,但因爲初期階段可以吸引用戶的功能有限,致使收效甚微。沒有足夠多的成熟特性,沒有龐大的開發團隊,也沒有機會去打破用戶習慣。當沒有這些限制條件時,比較容易可以實現一些功能讓已有或潛在用戶感到眼花繚亂。可是咱們如何才能在早期決策時迫使本身考慮周全?如何才能在提供更多功能的前提下確保沒有限制咱們擴展軟件的能力? 
  你也許會發現,無論是開發新功能仍是加強已有的功能,都是可擴展JavaScript 架構始終須要考慮的問題。咱們須要考慮的不只僅是軟件推廣文案中羅列的各類功能,還要考慮這些功能的複雜度、各個功能之間的共性以及各個功能有多少「移動部件(MovingParts)」。當自上而下審視JavaScript 架構時,若是用戶是第一層級,那麼各個功能就是下一個層級。從這個層級開始擴展變得紛繁複雜。 
  使功能變複雜的,並非某一個單獨用戶,而是一羣須要這個功能的用戶。從這個角度講,咱們不得不思考使用軟件的用戶的特徵或者角色,以及哪些功能提供給哪些角色。對這種組織結構的需求在一開始並不明顯。直到後期,咱們先前的決策使得引入基於角色的特性難以實施時,它纔會顯現出來。而且,這還取決於咱們的軟件是如何部署的,有時可能須要支持多種不一樣的用例。好比,可能幾個大機構用戶,都有各自的部署方案,而且極可能有各自獨特的用戶結構上的限制。這是十分具備挑戰性的,若是但願作到可擴展,架構就須要支持這些組織結構迥然不一樣的需求。微信

僱傭更多的開發者

  實現軟件的各類功能須要可靠的JavaScript 開發人員,而且他們應該知道本身在作什麼。能有一個這樣的開發者團隊是很是幸運的事情。團隊組建不是自發的,在團隊能夠開發出優秀代碼以前,須要在某種程度上創建起彼此之間的信任和尊重。一旦開始,咱們就處於一個良好的狀態。再看一下前面提到的自上而下的可擴展性影響因素,咱們要開發的功能會直接影響團隊的健康。這之間的平衡基本上是沒法維持的,可是能夠儘可能接近。缺乏人手但又有太多的功能要實現,這會讓團隊成員倍感壓力。當如期交付毫無但願時,你們就不會努力嘗試了。另外一方面,若是開發人員過多,要開發的功能有限,就會帶來更多的溝通負擔,而定義職責又很困難,因此當你們對職責沒有共識時,離失敗就不遠了。 
  相對於擁有太多的開發人員,開發人員不足反而更易於功能的開發。當面臨巨大的功能開發壓力時,是一個很好的時機來退後想想:「若是咱們有更多的開發者,會與如今有哪些不一樣呢?」這個問題常常被忽略掉,直接去招更多的開發者。而讓你們驚訝的是,招聘到新人後功能的產出並無立竿見影的效果。這就是爲何咱們須要一個沒有愚蠢問題、責任分配明確的研發文化。 
  團隊組織結構和開發方法並無定式,開發團隊須要有針對性地處理開發中的狀況,最大的問題無疑就是功能的數量、規模和複雜度。因此,這些纔是咱們在創建團隊之初,以及團隊成長過程用應該考慮的。後一點尤其重要,由於當功能大量增長後,初期的團隊結構是沒法適應的。 
  鑑於這些擴展影響因素會隨着時間推移而改變,咱們以架構的角度來調整設計或者修改產品,以應對擴展所面臨的挑戰。 
若要進一步討論這些影響擴展的各項因素,深刻了解它們並準備一個核對清單,以幫助咱們實現可擴展的JavaScript 應用來響應這些事件,可見《大型JavaScript應用最佳實踐指南》一書。 
  本文選自《大型JavaScript應用最佳實踐指南》,點此連接可在博文視點官網查看此書。 
                    圖片描述架構

想及時得到更多精彩文章,可在微信中搜索「博文視點」或者掃描下方二維碼並關注。
                       圖片描述負載均衡

相關文章
相關標籤/搜索