專訪《AngularJS 2權威教程》作者Nate Murray:程式碼更像圖表,需要多維度把握(圖靈訪談)
Nate Murray |
>
除了程式設計開發之外,生活中玩音樂、養蜜蜂。
參與開發了一款專為“喵星人”設計的遊戲,該遊戲被《紐約時報》《洛杉磯時報》《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 是文學化程式設計方面比較成熟的工具之一,但這些工具要求所有程式碼必須出現且以線性順序呈現。這意味著用這些工具只能完成一小部分的應用程式,無法真正掌握整個結構。程式碼不是文件,更像是一個圖表,你需要來回跳轉。
- 譯者注:文學化程式設計是由高德納提出的一種程式設計方法,該方法認為程式設計就是用自然語言如英語,解釋程式邏輯的過程。穿插巨集和傳統原始碼的片段,生成可編譯的原始碼。
為了解決上面的問題,我最近開發了一款
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也提供了很棒的視訊課程。
更多精彩,加入圖靈訪談微信!
相關文章
- 《矽谷之火》作者訪談
- 圖靈訪談系列之一:陳世欣談產品經理與社群圖靈
- 圖靈訪談系列之九:CNode社群談Node.js技術及生態圖靈Node.js
- DataGirls社群創始人 Aislinn:做勇敢的少數派(圖靈訪談)AI圖靈
- 深度專訪:圖示的故事
- 專訪明略科技CTO郝傑,共繪會話智慧發展藍圖 | 愛分析訪談會話
- 多維 opencv Mat訪問OpenCV
- geoserver控制服務訪問許可權-類似百度地圖的keyServer訪問許可權地圖
- 家訪(圖論建模)圖論
- 圖靈訪談系列之八:對話歸隱的大師——Donald E. Knuth(高德納)圖靈
- 寫到世界充滿愛:專訪 RSSHub 作者 DIYgodGo
- golang對接阿里雲私有Bucket上傳圖片、授權訪問圖片Golang阿里
- postgresql關於訪問檢視需要的許可權SQL
- Matlab繪圖(2)透過程式碼進行區域性放大繪圖、多檔案繪圖Matlab繪圖
- 訪談 | 對話看雪2021年度優秀作者【misskings】— 提升自我的投資永遠不虧
- 專訪 | 經典與熱門,商業與Indie,一款彈珠遊戲的多維度考察遊戲
- WordPress網站訪問慢解決方案(超詳細圖文教程)網站
- Gopher China 2019 講師專訪 -PingCAP 姚維GoPingCAP
- 圖靈訪談1025 | 美團攻城獅:用技術創造歷史,用走過的路寫一本書圖靈
- 談談 Kubernetes 的匿名訪問
- 設定二維碼圖片背景透明教程
- 【練習】註冊appid、下拉選單、訪問百度地圖APIAPP地圖API
- 小程式引入多個e-charts圖表
- PlantUML --- 使用程式碼快速繪製時序圖、思維導圖時序圖
- 權威專訪|對話凡泰極客聯合創始人楊濤: 小程式生態市場潛力廣闊
- Ant Design Pro v4 基於角色的許可權訪問控制實戰教程 #2 初始化專案
- 程式設計師需要專精,還是廣度多一點?程式設計師
- JBOSS未授權訪問
- Quarkus中基於角色的許可權訪問控制教程
- AngularJS(二、如何用AngularJS建立前端程式碼框架)AngularJS前端框架
- Oracle Database 12cR2多租戶權威指南OracleDatabase
- windows2個本地專案curl訪問Windows
- 瀏覽器 Web 訪問剪下板圖片瀏覽器Web
- 解決圖片訪問403 Forbidden問題ORB
- 阿里雲圖片跨域訪問設定阿里跨域
- Struts2教程之三Action訪問方式
- Spring Boot 2.x基礎教程:使用JdbcTemplate訪Spring BootJDBC
- PHP記錄訪問ip程式碼PHP
- 分享一個開源的JavaScript統計圖表庫,40行程式碼實現專業統計圖表JavaScript行程