ThinkJS 做者李成銀:擇善而從之,篤行致遠

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/260246html

李成銀,奇虎360前端技術專家,ThinkJS 框架做者,開發了Chrome擴展版的Fiddler,以支持模板語法處理的Fl,等等。目前參與開發的一個項目是燕尾服,藉助多進程和 Ast/Token 大幅提升如今前端工做流的編譯性能,項目地址爲:https://github.com/stcjs/stc前端

圖片描述

很是有幸邀請到李成銀老師,進行一期圖靈專訪。git

關於 ThinkJS

什麼緣由促使你開發了 ThinkJS 框架?github

提到 ThinkJS,可能有些人會想到,ThinkJS 是否是和國內的 PHP 框架 ThinkPHP 有一些關係呢。沒錯,剛開始 ThinkJS 就是借鑑 ThinkPHP 來開發的。到2013 年下半年的時候,Node.js 框架主要仍是 Express,但用 Callback 處理異步的方式讓人很是頭疼。一種比較好的方案就是用 Promise,因此我慢慢就有了借鑑 ThinkPHP,使用 Promise 機制開發一個 Node.js 框架的想法。算法

隨着項目複雜度的提高,ThinkJS、Promise 也暴露出一些弊端,例如不能很好的跳過一些中間環節和數據傳遞。我想到藉助 Babel 編譯提早使用 ES2015 規範和 React 的新特性。對於異步處理方式,我也有了更好的方式——Generator Function 或者 Async Function。express

2015年3月,咱們完成了 ThinkJS 全新版本的設計,目標定位爲可以在項目裏直接使用 Es2015+ 特性開發,框架自動編譯及更新,大大方便 Node.js 項目的開發;同時優化 1.0 版本當中不合理的架構和設計,脫離對 ThinkPHP 的依賴。2015年10月30日咱們終於成功發佈了 2.0 版本,而這天也是 Babel 發佈 6.0 的日子!瀏覽器

聽說 ThinkJS 不止侷限於大家開發團隊的內部,外部愈來愈多的人員也開始使用。當初開發 ThinkJS 框架的時候,有沒有預想到它會如此成功?微信

ThinkJS 其實還算不上成功,到目前爲止 GitHub 上的 star 數也才 1700,社區也不是太活躍。不過,如今確實有愈來愈多的公司在使用 ThinkJS 開發項目,有 PV 超過千萬的項目,也有一些秒殺的項目。前端工程師

最近上線的 ThinkJS 2.2 在功能和性能上有哪些改進?架構

2.2 版本主要支持將錯誤定位到源文件和支持斷點調試的功能。由於開發的時候使用了 ES6+ 的語法,而後使用 Babel 編譯,若是程序報錯,輸出的錯誤信息會是編譯後的代碼,這給調試帶來很大的麻煩,同時斷點調試只能調試編譯後的代碼,這對開發又是很是不利的。因此 2.2 版本致力於將報錯定位到源代碼,而且基於源文件進行斷點調試。

性能方面的改進是從 2.1 版本就開始的。雖然 ThinkJS 面向企業級應用,封裝了不少基礎的功能,但性能上卻並不亞於 express/koa 這些輕便級的框架。而對於一樣面向企業級的 Sails.js 框架,ThinkJS 的性能是它的 4 倍。因此說 ThinkJS 的性能是很是卓越的。具體的性能測試數據能夠見https://thinkjs.org/zh-cn/doc/index.html#toc-9c0

固然在真實的項目中,框架損耗的性能佔比很是小,不用太過關注,只要框架自己沒有內存泄露等問題都是能夠接受的。

咱們知道 ThinkJS 相對於其餘的 Node.js 框架來講,更適合企業級的大型項目。目前,360公司的哪些項目正在使用 ThinkJS 框架?

目前,360內部的不少項目都是使用 ThinkJS 開發的,如線上項目「爆米兔」 https://www.baomitu.com/ 以及其餘一些商業級的項目,如http://shangyi.360.cn/

ThinkJS 的成功帶給你怎樣的體驗?或者說,該框架的成功開發對你的生活帶來哪些變化?

雖然 ThinkJS 如今還不算太成功,將來的路也還很長,不過在開發 ThinkJS 過程當中確實有不少的感覺。

  1. 做爲開源項目,除了開發自己的框架代碼外,還要寫豐富的測試用例。ThinkJS 如今的測試用例有 1700 多個,單元測試的代碼比框架自己的代碼要多得多,每次改動都要確保測試無誤。對於一些接口變更也不能隨意,須要考慮向後兼容等各類狀況。同時,還要寫各類使用文檔,項目示例,等等。

  2. 須要花不少的時間處理 QQ 羣/社區裏提的各類問題。常常有人問安裝問題、環境問題、簡單的使用問題,剛開始的時候,我要親自逐一進行回答,不過如今社區慢慢成形了,簡單的問題會有成員幫忙回答,節省了我不少時間。

  3. 相對於國內開發者索取爲主,國外開發者更願意積極貢獻。awesome-* 項目發 pr,讓其添加 ThinkJS,也會主動修改文檔中的一些拼寫錯誤,而後發 pr。更好玩的是,有個老外 EunseokEom 以爲 ThinkJS 的官網不太好看,就親自設計了一個新的https://github.com/75team/www.thinkjs.org/pull/60。雖然咱們最終沒有采納老外設計的這個網站,但他的貢獻精神真的很是贊。這也讓咱們有了優化官網的想法。

ThinkJS 將來的規劃是怎麼樣的?

ThinkJS 內置了不少功能,這加大了框架自己的代碼量,也增長了學習的成本。咱們計劃在將來的版本中精簡核心,將一些功能剝離出來,以插件的方式存在。同時,增強框架周邊的建設,爲企業級項目開發更好地保駕護航。

關於團隊

360前端團隊「奇舞團」是怎樣的一個工做團隊?團隊合做帶給你怎樣的生活體驗和專業提高?

「奇舞團」是 360 最大的前端團隊,支持公司的不少業務。開放的團隊鼓勵每一個人利用業餘時間開發各類工具、平臺,提升團隊的開發效率。

團隊很是注重技術培養,每週都有技術分享會,覆蓋新技術學習和使用、項目經驗和總結、算法優化等各個方面。不光奇舞團的同窗能夠參加,公司其餘部門的前端同窗也能夠參加。咱們還會邀請外面的一些團隊來公司交流分享,讓每一位同窗都能快速成長。

對外方面,奇舞團每週都會發布《奇舞週刊》,方便團隊之外的同窗持續學習前端知識。

「衆成翻譯」是360前端推出的一款在線翻譯平臺。該平臺是否適用於出版行業的引進版圖書翻譯工做?若是適合,這對外版書的翻譯工做會產生哪些積極做用?

「衆成翻譯」1.0 是「奇舞團」在2016年5月10日發佈的,這個項目由李鬆峯老師負責,使用最新的 ThinkJS 2.0 開發。發佈兩個月來,已經翻譯文章200多篇,字數超過了50萬字。「衆成翻譯」當前的主要功能是推薦和翻譯技術文章,核心是爲譯者提供便捷的翻譯輔助,提升翻譯效率和質量。目前項目正在圍繞譯者翻譯體驗的提高和優質內容的展現作功能優化。好比正在開發的翻譯問答功能,就是爲譯者在翻譯過程當中向翻譯高手求助牽線搭橋的。從社區形態來看,這個功能上線後將可能成爲國內第一個以技術翻譯爲主的問答社區,成爲有助於廣大翻譯愛好者快速學習、鍛鍊和成長的一個翻譯知識共享社區。因爲「衆成翻譯」目前只支持文章的翻譯,因此在上面翻譯圖書會有些侷限,必須手工把內容拆分而後再合成。「衆成翻譯」將來有可能考慮協做翻譯和引進版圖書翻譯的功能,爲專業的翻譯、出版機構和譯者提供一個可選的第三方工做平臺。但願到時候可以依託已有的譯者隊伍,爲更專業的翻譯工做提供有力的支持。

關於前端設計

一個好的前端工做者,應具有哪些特質。

我認爲一個好的前端工程師,最基本的就是要作事靠譜。而作事靠譜,不光須要技術能力,還須要溝通能力、責任心和執行力等各個方面的軟素質。具體工做中,技術能力可能只佔了 40%,軟素質方面的能力卻高達 60%。工做中,你很常常看到技術能力通常但能把事情作好的同窗,也會見到技術能力很強,但把事情作砸的同窗!

你認爲,將來新的ES標準將在哪些特徵上作進一步的改進。

JavaScript 這幾年在語法糖和 API 上有了很大的改進,尤爲是 ES2015 標準以後,每一年都會發佈一個新版本。這得意於前端行業的迅猛發展,前端技術已經再也不侷限於瀏覽器端,它發展到了 Wed 服務端、手機端,甚至用 JavaScript 作一些硬件接口的開發和遊戲的開發。

至於將來如何改進不太好說,不過我比較看好下面幾點:

  1. 語法改進:借鑑其餘語言當中一些比較好的特性,讓開發大型項目更加便利,如class 相關。

  2. 異步處理:雖然 async/await 還沒正式發佈,不過狀態已是 stage-3,明年能夠如期發佈,這樣 JavaScript 在異步處理上將有質的改變。另外 Asynchronous Iterators 提案,能夠在 iterators 裏直接處理異步的狀況。

  3. 大數據處理:隨着大數據處理愈來愈熱門,不少項目都要在前端進行大數據處理和展示。SIMD.JS 提案能夠大大提高 JavaScript 在大數據處理方面的性能。

再次感謝您參與本次的訪談!


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

圖片描述

相關文章
相關標籤/搜索