專訪《AngularJS 2權威教程》做者Nate Murray:代碼更像圖表,須要多維度把握

本文僅用於學習和交流目的,不表明圖靈社區觀點。非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/art...前端

Nate Murray
內特是一名全棧開發人員,編碼工做從深度學習領域的圖像識別到手機遊戲的開發。曾供職於IFTTT,處理MapReduce,分佈式計算,iOS應用程序和一些Web應用程序中的T級大規模數據集挖掘工做。最近和Ari Lerner、Felipe Coury、Carlos Taborda合著了《AngularJS 2權威教程》一書。git

圖片描述

除了編程開發以外,生活中玩音樂、養蜜蜂。github

參與開發了一款專爲「喵星人」設計的遊戲,該遊戲被《紐約時報》《洛杉磯時報》《ABC 新聞》等多家報社報道並評選入圍「前100款熱門iPad娛樂類應用軟件」。編程

此外,在Github上有不少的開源項目:後端

  • cascading-simhash瀏覽器

  • Smoker服務器

  • Similarity微信

  • Chordjerl數據結構

  • ...架構

《AngularJS 2權威教程》堪稱AngularJS 2領域的里程碑式著做,涵蓋了關於AngularJS 2的幾乎全部內容。

即便沒有任何經驗,本書平實、通俗的講解,遞進、嚴密的組織,也可讓你毫無壓力地登堂入室,迅速領悟新一代Web應用開發的精髓。若是你有相關的經驗,本書對AngularJS 2概念和技術細節的全面剖析,以及引人入勝、切中肯綮的講解,將幫助你完全掌握這個框架,在本身職業技術修煉之路上更進一步。

訪談內容:

點擊查看英文版

圖靈目前正在翻譯《AngularJS 2權威教程》,咱們有必要、也很榮幸請到合著做者之一Nate Murray,進行一期圖靈專訪。

對Nate而言,AngularJS意味着什麼,它又有什麼優點值得做者們爲AngularJS寫本專著?

Angular爲編寫和組織Web應用程序提供了美妙的框架。它基於組件開發Web,運用可伸縮、容易理解的方式編寫易於維護的大型應用程序。過去咱們須要藉助jQuery這樣的庫來讀取和改變DOM,但這樣的代碼,衆所周知,至關笨拙。然而,把代碼拆分紅組件能夠將系統分解,每一個組件只負責視圖的某個部分,整個應用程序也就更容易推出。

《AngularJS 2權威教程》《AngularJS 權威教程》的升級版麼?

不,這是一本全新的書。Angular 2 和Angular 1 在邏輯上有一致性,但它們的框架徹底不一樣。《Angular2 權威教程》向讀者介紹了一些新庫,同時增長了做者們近些年來在Web開發方面的新認識。

在編寫《AngularJS 2權威教程》的過程當中,4位(Ari Lerner, Nate Murray, Felipe Coury, Carlos Taborda)做者是如何合做的?你具體負責哪部分?

我主要負責提綱、調查、編輯和協調整個「寫書項目」,差很少編寫了一半的內容。Felipe Coury 一樣貢獻了大量的內容,他的工做很是的出色。多人合做著書的最大挑戰應該是統一問題,幸虧咱們幾人的追求一致,實際操做中並無太大的問題。

你怎麼看待代碼和文學的關係?

理想狀況下,代碼邏輯要足夠清楚,不須要任何輔助文檔。在被機器理解以前,代碼要爲人類提早理解,但實際狀況告訴咱們,有些人並不適合一開始就學習代碼庫。

解決辦法有不少,尤爲是「文學化編程」1 領域。IPython/Jupyter 是文學化編程方面比較成熟的工具之一,但這些工具要求全部代碼必須出現且以線性順序呈現。這意味着用這些工具只能完成一小部分的應用程序,沒法真正掌握整個結構。代碼不是文檔,更像是一個圖表,你須要來回跳轉。

  1. 譯者注:文學化編程是由高德納提出的一種編程方法,該方法認爲編程就是用天然語言如英語,解釋程序邏輯的過程。穿插宏和傳統源代碼的片斷,生成可編譯的源代碼。

爲了解決上面的問題,我最近開發了一款cq,藉助CSS樣式選擇器提取代碼片斷到文檔。在寫《AngularJS 2權威教程》的時候,咱們就藉助cq有效減小了拼寫錯誤和維護難度(咱們老是從磁盤上可運行的代碼裏直接加載須要的代碼塊)。選擇器清楚地掌握代碼結構,即便代碼行號發生了變化,魯棒性也不會改變。

這固然不是代碼和文學關係的最終解釋,但對咱們的理解有很大幫助。

從您的簡歷介紹上,咱們得知,從2009年開始你一直從事大型數據挖掘工做。相信你必定能給圖靈社區成員一些數據挖掘方面的建議。某些狀況下,咱們須要在父做用域操做子做用域的數據,做用域間通訊的最佳實踐是什麼?是$broadcast/$emit/$on 嗎?

你說的$broadcast/$emit/$on應該是指Angular 1。《AngularJS 2權威教程》主要關於Angular 2,並不包含這些,但下面的概念一樣適用。

在經典Angular裏,$broadcast/$emit/$on絕對是做用域間數據傳遞的第一選擇,但隨着Angular的演進,咱們的思考方式和工具也都發生了變化。特定狀況下,咱們能夠根據如下三個方式來決定應用程序的數據結構:

  • 經過包含EventEmitter 的服務管理狀態;

  • 若是你更喜歡Observables,採用RxJS並讓組件訂閱這些RxJS流的變動;

  • 徹底擺脫$scope ,使用Redux。

Redux是近來新出現的一種有趣的數據結構模式,經過將數據存儲在中央數據結構減小數據直接突變。這樣,咱們就再也不須要調度action,把舊狀態和action 傳遞給返回一個新狀態的函數。我建議徹底放棄$emit/$broadcast$scope,藉助Redux存儲任何一個全新Angular項目的狀態。

處理大型複雜結構的數據時,ng-repeat有時會出現卡的現象,應該如何提升它的性能呢?

有一個好的辦法是隻顯示必定的數量,而後循環利用DOM元素(而不是顯示整個列表,併爲每個建立DOM元素)。

假如重複可滾動容器中的一個div列表,你能夠限制DOM中div的最大數量好比爲100,而後等待容器元素滾動並填充div。設置這些須要大量的工做,但會獲得更好的性能。

如今咱們來預測下Angular的前景。Angular有沒有可能走進後端開發,成爲一個相似Diango的後端開發解決方案?

就我而言,成爲相似Diango或者Rails這樣的後端開發框架並非Angular的目標。Angular自己是一個強大的前端開發框架,做用於瀏覽器的DOM,可以向任何API發出HTTP請求填充數據。

也就是說,Angular 2 這樣的構建方式支持多個平臺,尤爲是移動開發平臺。在Angular 2 框架下運用NativeScript或者Ionic建立移動客戶端至關激動人心。

在服務端,Patrick Stapleton和其餘貢獻者爲Angular Universal 也作出了很棒的努力。Angular Universal能夠加速服務器運行和應用程序啓動。理論上,它能爲用戶帶來更好的性能體驗。

Angular技術未來會直接封裝進瀏覽器內部麼?

這很難說,但極可能不會。若是可能,也是瀏覽器讓Angular的某些功能再也不必要。Web組件就是一個很好的例子。瀏覽器支持的功能愈來愈普遍,最終使@component沒有必要存在。

瀏覽器還會提供變化檢測,好比Zones ,這樣咱們幾乎能夠看到瀏覽器實現Object.observe,Object.observe跟Angular的$watch很是相似。但它並無成爲ECMA標準的一部分,很好。

Angular 2 相對於組件有更多的功能,好比路徑選擇、依賴注入、測試框架,等等。雖然這些框架都很好,但任何框架都不能適合每一種狀況,因此我也不知道它們會不會被封裝進瀏覽器。

Angualr技術很強大卻也複雜,能不能給初學者一些學習上的建議?

學習任何一種框架的最好方式就是用這種編程框架構建些東西出來。因此我建議初學者到Angular官網上學習文檔,跟着教程學習。Angular 1 和Angular 2 官網上都有相關的介紹教程。

接下來,我建議初學者找到可以提供一步一步引導學習的示例代碼源。我我的覺得《AngularJS 權威教程》和《AngularJS 2權威教程》就是很好的資源,另外Egghead.io也提供了很棒的視頻課程。


更多精彩,加入圖靈訪談微信!

圖片描述

相關文章
相關標籤/搜索