摘要:玉伯,淘寶前端類庫 KISSY、前端模塊化開發框架SeaJS、前端基礎類庫Arale的創始人。本期【開源專訪】咱們邀請玉伯來爲咱們分享一些關於前端框架、前端開發的那些事,以及前端大牛是如何煉成的。html
在Web應用程序的用戶體驗愈來愈被重視的今天,前端開發的地位也上升到了史無前例的高度,而隨之而來的也有更多的挑戰。前端
爲了將前端開發者繁重的工做變得簡單,框架應運而生。國內也不乏一些很是優秀的前端開發框架。本期【開源專訪】咱們邀請到了國內前端大牛玉伯(@玉伯也叫射鵰),請他爲咱們分享一些關於前端框架、前端開發的那些事,以及前端大牛是如何煉成的。git
玉伯(王保平),淘寶前端類庫 KISSY、前端模塊化開發框架SeaJS、前端基礎類庫Arale的創始人。程序員
CSDN:先介紹一下本身和目前的工做吧!github
玉伯:我叫王保平,阿里花名玉伯。目前在支付寶前端技術部工做,從事前端基礎類庫、工具等產品的研發。喜歡編碼,熱愛思考,努力把每一天過得平淡又精彩。後端
CSDN:Sea.js是什麼?致力於解決什麼問題?瀏覽器
玉伯:Sea.js是一個很純粹小巧的模塊加載器,它只解決一個問題:前端代碼的模塊化。經過Sea.js,能夠將大量JavaScript代碼封裝成一個個小模塊,而後輕鬆實現模塊的加載和依賴管理。安全
有了Sea.js,咱們就能夠書寫模塊了。Arale則是一套知足支付寶需求的通用模塊集合,是一套基於模塊化的前端基礎類庫,目前具有100多個模塊,簡單易用。前端框架
CSDN:發起Sea.js項目的初衷是什麼?它的本質意義是什麼?併發
玉伯:2008年,在前端開發過程當中,常常會出現一個單文件幾千行甚至近萬行的狀況。這種大文件,對協做開發、後續維護、性能調優等都不利。Sea.js初衷是幫助前端開發工程師將大文件拆分紅小文件,能保持小顆粒度的模塊化開發,同時不須要過多考慮依賴關係,讓依賴管理輕鬆自如,讓模塊化開發變得更天然,就像瀏覽器原生提供的同樣。
Sea.js的本質意義是經過模塊化開發,來提升代碼的可維護性。對工程師而言,是關注度分離,更將更多精力聚焦在代碼自己的邏輯上。
CSDN:Sea.js的設計思想是什麼?是如何具體實現的?
玉伯:Sea.js的核心設計思想是保持簡單。有兩層含義:
除了保持簡單,Sea.js的設計理念還有職責清晰、性能優先和適度完備。
職責清晰是讓Sea.js的範疇明確,隨時知道本身應該作什麼,不該該作什麼。一個框架,最怕的是需求膨脹,最怕的是複雜化。
性能優先是由於Sea.js是底層加載器,假若性能很差,直接會影響頁面性能,所以源碼中有很多地方會刻意追求性能。
適度完備是從功能的層面看Sea.js的API是否能知足經常使用需求,同時又能經過插件機制對外提供適度的可擴展性。Sea.js不追求可以知足全部需求,而是追求2/8原則。
具體代碼實現純文字不太好描述,感興趣的能夠閱讀源碼:https://github.com/seajs/seajs,全部源碼都在上面,歡迎閱讀,歡迎給出建議。
CSDN:Sea.js開發過程當中,最大的困難是什麼?是如何解決的?
玉伯:這個提及來比較有意思,在開發過程當中,Sea.js最大的困難,不是編碼,而是模塊定義規範的肯定。
在業界,目前流行的模塊定義規範,有CommonJS的Modues/1.x規範,還有RequireJS倡導的異步模塊定義規範AMD。這兩個規範,在社區裏存在比較大的討論,各有利弊,適用於不一樣的運行環境。Sea.js最後採用的是延自CommonJS Modules/2.0規範的通用模塊定義規範CMD。這個至今都有爭議,不一樣的團隊,不一樣的場景下,喜愛和選擇都有可能不一樣。
隨着Sea.js的推廣,CMD規範目前在國內已經有至關多人承認。接下來會進一步國際化,但願能獲得更大社區範圍內的承認。這條路還很長,不能說已解決了,一切還在解決的路上。
不過,這些都不是關鍵。即使Sea.js之後死掉,只要你們對模塊化開發理念有深度承認了,那一切也就值了。
CSDN:Sea.js和Arale目前分別應用在哪些地方?
玉伯:Sea.js目前已應用在阿里、騰訊、網易、百姓網等不少公司,具體能夠查看seajs.org首頁下面的logo牆,目前國內有大量中小網站採用Sea.js。
Arale的使用範圍是支付寶,還有阿里巴巴ICBU部門,在一小部分國內創業型公司中也有使用。
CSDN:您以前還開發過前端類庫KISSY,而Arale也是一個基於Sea.js的前端類庫,二者有什麼不一樣?這是在「造輪子」嗎?它們的開發初衷是什麼?目標又是什麼?
玉伯:Kissy和Arale都是前端基礎類庫,從組件提供的功能來說,存在很大重合度。但從理念上來說,這兩個類庫有比較大的不一樣。
Kissy是大教堂式思路,全部組件,從底層基礎組件,到上層UI組件,都是自主研發。這和業界的YUI三、Sencha等類庫的思路是同樣的。
Arale有所不一樣。Arale的首要理念是開放。開放不光意味着將本身作好的貢獻給社區,開放更意味着將社區已有的優秀組件直接拿進來用。在開放的理念下,Arale類庫裏,直接引入了jQuery、Backbone、Moment、Handlerbars等業界成熟組件。在這種思路下,Arale能與開源社區緊密互動,彼此快速共進。
Kissy和Arale的初衷都很簡單,Kissy是解決淘寶的前端基礎類庫問題,Arale則是解決支付寶的前端基礎類庫問題。二者的目標,都是減小前端開發過程當中的重複工做量,儘可能提升前端開發的工做效率,同時在通用組件層面保障全站的用戶體驗。
CSDN:Sea.js和Arale將來會如何發展?目標是什麼?
玉伯:從2.0開始,Sea.js的發展目標是作簡單、純粹的模塊加載器,甚至但願從2.x的某個版本開始,就不須要更新了,就能知足絕大部分需求,能很是穩定下來,不須要再升級。
Sea.js穩定後,更多精力會放在Arale等前端基礎類庫的建設上。Sea.js名稱中的Sea,是海納百川、有容乃大的意思。Sea.js但願是一片海,經過CMD規範,能夠容納各類各樣的模塊,但願能造成一個模塊的生態圈,能造成生態鏈,能促進良性循環,能讓整個前端開發界都受益。
摘要:玉伯,淘寶前端類庫 KISSY、前端模塊化開發框架SeaJS、前端基礎類庫Arale的創始人。本期【開源專訪】咱們邀請玉伯來爲咱們分享一些關於前端框架、前端開發的那些事,以及前端大牛是如何煉成的。
玉伯的開源感悟
CSDN:爲何選擇將這些項目開源出來?開源對於本身的技能提高是否有幫助?
玉伯:選擇開源有兩個初衷:
Sea.js是在開源中不斷成長流行的,不少需求點、優化點,若是不是開源,Sea.js很難走到今天。
開源自己對技能提高我的以爲是有限的,但技能以外的軟技能提高,好比溝通協做、產品化思路、運營管理等很是有幫助。經過開源的方式,比較容易讓一個技術人員有產品觀,能讓本身的眼界在編碼以外看到更多美景。
CSDN:在開源領域這麼久,您有什麼感悟?您理解的「開源精神」是什麼?
玉伯:我理解的開源精神,有三點:
1. 拿來主義。懂得從現有成熟開源項目中去挑選符合本身需求的項目,直接拿來用。程序員容易犯一個病,就是什麼東西都想本身造,或者對別人造的,淺嘗輒止就判斷別人的不行。真正的拿來主義,須要一顆謙卑的心。在「拿」的過程當中,須要去看文檔,甚至去讀源碼,這些過程,對程序員的技能增加都很是有幫助。不少程序員的技能提高,並不是是寫的代碼太少,而是看的代碼不夠多。懂得去看、去理解、去用,是邁入開源世界的第一步。
2. 參與比主導更重要。開源世界裏永遠不會有完美的項目。當你學會了「拿來主義」後,在使用開源項目時,確定會遇到各類bug、各類特性不知足。這時,你能夠本身去新開一個項目,也能夠參與到該開源項目中去,幫助做者一塊兒來完善。我的以爲對於絕大部分項目來講,參與進去幫助完善是更明智的選擇。參與進去,可讓你更懂得美,懂得感恩之心,懂得回饋之情。這在過程當中,你的功力,每每也會大增。不光是技術上的進步,還包括英語讀寫能力。在人性溝通上,你也會收穫不少,這是無價的財富。
3. 重視社區。除了代碼,還有文檔、測試用例、Issues 管理、版本發佈、升級策略、書籍、視頻等等。jQuery、Backbone、AngularJS 等成熟項目,成熟的是社區,而不是源碼。好的社區,是在 Google 中一搜索,就能找到很多資料。好的社區,是你踩過的坑,常常已經有人也踩過並整理分享出來了。社區的造成很是不易,若是選擇了開源,從項目一開始,就儘可能可能的去讓社區逐步造成起來。社區造成後,開源纔會活起來,不然就是死開源。
最後,知易行難。上面的道理或許你們都懂,真要作到,則是一場修行。Sea.js 和 Arale 也纔剛剛上路,旅途中,有西湖愜意的微風,也有沙漠般的烈日當頭。好在,選擇了,就不怕遠。
CSDN:您認爲,Kissy、Seajs和Arale這些開源項目爲何能取得成功?它們是否從社區中得到了貢獻?
玉伯:還談不上成功。目前社區未徹底成型,以Sea.js和Arale爲例,目前從社區中得到的貢獻有:
1. bugs反饋和新功能討論。這很重要,只知足一個公司的需求時,不少想法都想不到,當有多個公司使用你的產品時,在某些點上能夠幫團隊打開思路,去看到很多原來看不到的地方,甚至有時會有「爲何咱們以前沒想到」的感慨。
2. 全網測試。這一塊,在Sea.js的開發上尤其明顯。Sea.js在每次發佈前,都會邀請社區人員一塊兒幫忙運行測試用例。前端開發與後端開發的最大區別之一,就是後端代碼的運行環境是固定的,是開發人員本身選擇的,而前端代碼的運行環境卻沒法固定,是用戶決定的。這使得前端代碼的測試,除了本身的內部測試,還須要線上的「衆包測試」。開源使得「衆包」成爲可能。
3. 代碼優化。因爲是開源的,代碼是公開的,偶爾就會有人會去閱讀源碼,並發現其中能夠優化的一些點。這在Sea.js和Arale裏都有一些案例,有時挺感動的。社區的力量,會給人驚喜。
CSDN:您如何看待國內的開源環境?
玉伯:國內開源環境還不夠理想,但愈來愈好了。很期待更多的公司加入並推進開源活動。對於前端開發領域,必定程度上真沒有什麼祕密,期待更多公司的加入。
前端大牛是如何煉成的
CSDN:前、後端開發有沒有明確的分界(是否能徹底獨立)?您心目中理想的前、後端開發模式是什麼?
玉伯:先後端開發很難徹底獨立,我的以爲也沒有必要彼此獨立。個人想法是「全端工程師」,都是Web開發工程師,從前到後應該都能作才行,這對效率、質量都有好處。
但獨立的先後端開發工程師也應該存在。前端一些深鑽領域,須要前端領域專家的持續投入,後端也同樣。這些專家來自一線開發工程師,同時在某個領域有獨到的想法和執行力,能沉澱下來造成工具和技術平臺,這些平臺反過來提供給「全端工程師」去用,這是往深裏鑽的技術工具化、平臺化思路。
CSDN:有人認爲,過多使用框架會致使開發者忽視對JavaScript原生語言特性的學習,變得懶惰,或者基礎會很薄弱;也有人認爲,只要精通原生JavaScript就能夠,無需使用框架也能開發出應用,對此您怎麼看?
玉伯:在前端開發工做中,JavaScript語言的使用只佔比較小的一部分。更多的精力,須要花在語言以外。掌握JavaScript語言的基本使用,就如咱們在學校學習,須要掌握中學數學的內容同樣。這一塊我以爲不難,只要肯花時間去學就好。
值得提醒的是,若是隻精通原生JavaScript,那麼就如只會中學數學同樣,雖然已經能解決不少問題,但要優雅地、更簡單地解決問題就比較困難了。
框架可讓你從重複低級工做中脫離出來,特別是應用複雜到必定程度時,若是沒有框架層的抽象,代碼每每會複雜得難以維護。在前端開發愈來愈複雜的今天,框架已是必不可少的了。學會去用,去擁抱,能夠事半功倍。
框架不會讓你偷懶,更不會讓你基礎薄弱。即使是jQuery,若是你對DOM的基本原生操做不太會,那麼你也很難真正把jQuery使用得很好。就如中學數學都不理解的話,要把大學數學用得很好只會是夢。
CSDN:對於繁多的前端框架,應該如何選擇?
玉伯:這個問題太大了。虛的回答是,根據本身公司的需求去選擇合適的就好。實的回答是,用Sea.js吧,而後模仿Arale去造一個適合本身的模塊集合,目前這套方案,在我知道的各類場景下,都能比較好的用起來。
CSDN:阿里的前端開發流程是什麼樣的?
不一樣團隊不同。好比淘系團隊和支付寶系團隊不少流程就很不同。流程很大程度上取決於業務類型。淘系不少業務是導購類型,快速每每是第一要素,支付寶不少業務則是金融類型的,穩定與安全每每是第一位的。這兩種要求下,產生的流程有很是大的不同,甚至能夠說是地球的兩極。目前也在逐步靠攏,尋求合理的權衡下的統一。
CSDN:可否分享一些您的學習經歷、經驗?您認爲學習前端開發最重要的是什麼?
玉伯:前端開發是距離用戶最近的編碼工做,我的以爲,一個優秀的前端開發工程師,必定要對產品有愛。若是作的產品本身都不怎麼用,那麼不少交互細節極可能你會缺少深思,你會在潛意識裏忽略掉。可是,若是你本身也用這個產品,那麼你就不只僅是在編碼了,你同時仍是PD、PM、測試等等角色,甚至你就是這個產品的CEO。當CEO的感受挺累但挺爽的,去找到你承認、讓你爲之瘋狂的產品吧,你的開發能力會在你的瘋狂中日新月異。
CSDN:您眼中的技術大牛是什麼樣的?如何成爲技術大牛?
玉伯:我理解的技術大牛,就是把事情作得很專業的人。溫伯格在《理解專業程序員》中對專業有很好的定義:
專業是指具備了不得的技藝或經驗,併爲其餘人解決問題,不管問題有多麻煩。
不少人在追求具備了不得的技藝或經驗,但只有這一項,永遠稱不上「專業」。專業還必須不厭其煩地爲他人解決問題。不管作業務仍是基礎技術,都能作得很專業。追求專業,變得專業,價值、成就感每每就會水到渠成。成爲技術大牛,也就是天然而然了。