摘要:非常有幸邀請到李成銀老師,進行一期圖靈專訪。具體工作中,技術能力可能只占了,軟素質方面的能力卻高達。大數(shù)據(jù)處理隨著大數(shù)據(jù)處理越來越熱門,很多項目都要在前端進行大數(shù)據(jù)處理和展現(xiàn)。提案可以大大提升在大數(shù)據(jù)處理方面的性能。
非商業(yè)轉載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/260246
李成銀,奇虎360前端技術專家,ThinkJS 框架作者,開發(fā)了Chrome擴展版的Fiddler,以支持模板語法處理的Fl,等等。目前參與開發(fā)的一個項目是燕尾服,借助多進程和 Ast/Token 大幅提高現(xiàn)在前端工作流的編譯性能,項目地址為:https://github.com/stcjs/stc。
非常有幸邀請到李成銀老師,進行一期圖靈專訪。
關于 ThinkJS什么原因促使你開發(fā)了 ThinkJS 框架?
提到 ThinkJS,可能有些人會想到,ThinkJS 是不是和國內(nèi)的 PHP 框架 ThinkPHP 有一些關系呢。沒錯,剛開始 ThinkJS 就是借鑒 ThinkPHP 來開發(fā)的。到2013 年下半年的時候,Node.js 框架主要還是 Express,但用 Callback 處理異步的方式讓人非常頭疼。一種比較好的方案就是用 Promise,所以我慢慢就有了借鑒 ThinkPHP,使用 Promise 機制開發(fā)一個 Node.js 框架的想法。
隨著項目復雜度的提升,ThinkJS、Promise 也暴露出一些弊端,例如不能很好的跳過一些中間環(huán)節(jié)和數(shù)據(jù)傳遞。我想到借助 Babel 編譯提前使用 ES2015 規(guī)范和 React 的新特性。對于異步處理方式,我也有了更好的方式——Generator Function 或者 Async Function。
2015年3月,我們完成了 ThinkJS 全新版本的設計,目標定位為能夠在項目里直接使用 Es2015+ 特性開發(fā),框架自動編譯及更新,大大方便 Node.js 項目的開發(fā);同時優(yōu)化 1.0 版本當中不合理的架構和設計,脫離對 ThinkPHP 的依賴。2015年10月30日我們終于成功發(fā)布了 2.0 版本,而這天也是 Babel 發(fā)布 6.0 的日子!
據(jù)說 ThinkJS 不止局限于你們開發(fā)團隊的內(nèi)部,外部越來越多的人員也開始使用。當初開發(fā) ThinkJS 框架的時候,有沒有預想到它會如此成功?
ThinkJS 其實還算不上成功,到目前為止 GitHub 上的 star 數(shù)也才 1700,社區(qū)也不是太活躍。不過,現(xiàn)在確實有越來越多的公司在使用 ThinkJS 開發(fā)項目,有 PV 超過千萬的項目,也有一些秒殺的項目。
最近上線的 ThinkJS 2.2 在功能和性能上有哪些改進?
2.2 版本主要支持將錯誤定位到源文件和支持斷點調(diào)試的功能。因為開發(fā)的時候使用了 ES6+ 的語法,然后使用 Babel 編譯,如果程序報錯,輸出的錯誤信息會是編譯后的代碼,這給調(diào)試帶來很大的麻煩,同時斷點調(diào)試只能調(diào)試編譯后的代碼,這對開發(fā)又是非常不利的。所以 2.2 版本致力于將報錯定位到源代碼,并且基于源文件進行斷點調(diào)試。
性能方面的改進是從 2.1 版本就開始的。雖然 ThinkJS 面向企業(yè)級應用,封裝了很多基礎的功能,但性能上卻并不亞于 express/koa 這些輕便級的框架。而對于同樣面向企業(yè)級的 Sails.js 框架,ThinkJS 的性能是它的 4 倍。所以說 ThinkJS 的性能是非常卓越的。具體的性能測試數(shù)據(jù)可以見https://thinkjs.org/zh-cn/doc/index.html#toc-9c0
當然在真實的項目中,框架損耗的性能占比非常小,不用太過關注,只要框架本身沒有內(nèi)存泄露等問題都是可以接受的。
我們知道 ThinkJS 相對于其他的 Node.js 框架來說,更適合企業(yè)級的大型項目。目前,360公司的哪些項目正在使用 ThinkJS 框架?
目前,360內(nèi)部的很多項目都是使用 ThinkJS 開發(fā)的,如線上項目“爆米兔” https://www.baomitu.com/ 以及其他一些商業(yè)級的項目,如http://shangyi.#/
ThinkJS 的成功帶給你怎樣的體驗?或者說,該框架的成功開發(fā)對你的生活帶來哪些變化?
雖然 ThinkJS 現(xiàn)在還不算太成功,未來的路也還很長,不過在開發(fā) ThinkJS 過程中確實有很多的感受。
作為開源項目,除了開發(fā)本身的框架代碼外,還要寫豐富的測試用例。ThinkJS 現(xiàn)在的測試用例有 1700 多個,單元測試的代碼比框架本身的代碼要多得多,每次改動都要確保測試無誤。對于一些接口變動也不能隨意,需要考慮向后兼容等各種情況。同時,還要寫各種使用文檔,項目示例,等等。
需要花很多的時間處理 QQ 群/社區(qū)里提的各種問題。經(jīng)常有人問安裝問題、環(huán)境問題、簡單的使用問題,剛開始的時候,我要親自逐一進行回答,不過現(xiàn)在社區(qū)慢慢成形了,簡單的問題會有成員幫忙回答,節(jié)省了我很多時間。
相對于國內(nèi)開發(fā)者索取為主,國外開發(fā)者更愿意積極貢獻。awesome-* 項目發(fā) pr,讓其添加 ThinkJS,也會主動修改文檔中的一些拼寫錯誤,然后發(fā) pr。更好玩的是,有個老外 EunseokEom 覺得 ThinkJS 的官網(wǎng)不太好看,就親自設計了一個新的https://github.com/75team/www.thinkjs.org/pull/60。雖然我們最終沒有采納老外設計的這個網(wǎng)站,但他的貢獻精神真的非常贊。這也讓我們有了優(yōu)化官網(wǎng)的想法。
ThinkJS 未來的規(guī)劃是怎么樣的?
ThinkJS 內(nèi)置了很多功能,這加大了框架本身的代碼量,也增加了學習的成本。我們計劃在未來的版本中精簡核心,將一些功能剝離出來,以插件的方式存在。同時,加強框架周邊的建設,為企業(yè)級項目開發(fā)更好地保駕護航。
關于團隊360前端團隊“奇舞團”是怎樣的一個工作團隊?團隊合作帶給你怎樣的生活體驗和專業(yè)提升?
“奇舞團”是 360 最大的前端團隊,支持公司的很多業(yè)務。開放的團隊鼓勵每個人利用業(yè)余時間開發(fā)各種工具、平臺,提高團隊的開發(fā)效率。
團隊非常注重技術培養(yǎng),每周都有技術分享會,覆蓋新技術學習和使用、項目經(jīng)驗和總結、算法優(yōu)化等各個方面。不光奇舞團的同學可以參加,公司其他部門的前端同學也可以參加。我們還會邀請外面的一些團隊來公司交流分享,讓每一位同學都能快速成長。
對外方面,奇舞團每周都會發(fā)布《奇舞周刊》,方便團隊以外的同學持續(xù)學習前端知識。
“眾成翻譯”是360前端推出的一款在線翻譯平臺。該平臺是否適用于出版行業(yè)的引進版圖書翻譯工作?如果適合,這對外版書的翻譯工作會產(chǎn)生哪些積極作用?
“眾成翻譯”1.0 是“奇舞團”在2016年5月10日發(fā)布的,這個項目由李松峰老師負責,使用最新的 ThinkJS 2.0 開發(fā)。發(fā)布兩個月來,已經(jīng)翻譯文章200多篇,字數(shù)超過了50萬字?!氨姵煞g”當前的主要功能是推薦和翻譯技術文章,核心是為譯者提供便捷的翻譯輔助,提高翻譯效率和質量。目前項目正在圍繞譯者翻譯體驗的提升和優(yōu)質內(nèi)容的展示做功能優(yōu)化。比如正在開發(fā)的翻譯問答功能,就是為譯者在翻譯過程中向翻譯高手求助牽線搭橋的。從社區(qū)形態(tài)來看,這個功能上線后將可能成為國內(nèi)第一個以技術翻譯為主的問答社區(qū),成為有助于廣大翻譯愛好者快速學習、鍛煉和成長的一個翻譯知識共享社區(qū)。由于“眾成翻譯”目前只支持文章的翻譯,所以在上面翻譯圖書會有些局限,必須手工把內(nèi)容拆分然后再合成。“眾成翻譯”未來有可能考慮協(xié)作翻譯和引進版圖書翻譯的功能,為專業(yè)的翻譯、出版機構和譯者提供一個可選的第三方工作平臺。希望到時候能夠依托已有的譯者隊伍,為更專業(yè)的翻譯工作提供有力的支持。
關于前端設計一個好的前端工作者,應具備哪些特質。
我認為一個好的前端工程師,最基本的就是要做事靠譜。而做事靠譜,不光需要技術能力,還需要溝通能力、責任心和執(zhí)行力等各個方面的軟素質。具體工作中,技術能力可能只占了 40%,軟素質方面的能力卻高達 60%。工作中,你很經(jīng)??吹郊夹g能力一般但能把事情做好的同學,也會見到技術能力很強,但把事情做砸的同學!
你認為,未來新的ES標準將在哪些特征上做進一步的改進。
JavaScript 這幾年在語法糖和 API 上有了很大的改進,尤其是 ES2015 標準之后,每年都會發(fā)布一個新版本。這得意于前端行業(yè)的迅猛發(fā)展,前端技術已經(jīng)不再局限于瀏覽器端,它發(fā)展到了 Wed 服務端、手機端,甚至用 JavaScript 做一些硬件接口的開發(fā)和游戲的開發(fā)。
至于未來如何改進不太好說,不過我比較看好下面幾點:
語法改進:借鑒其他語言當中一些比較好的特性,讓開發(fā)大型項目更加便利,如class 相關。
異步處理:雖然 async/await 還沒正式發(fā)布,不過狀態(tài)已經(jīng)是 stage-3,明年可以如期發(fā)布,這樣 JavaScript 在異步處理上將有質的改變。另外 Asynchronous Iterators 提案,可以在 iterators 里直接處理異步的情況。
大數(shù)據(jù)處理:隨著大數(shù)據(jù)處理越來越熱門,很多項目都要在前端進行大數(shù)據(jù)處理和展現(xiàn)。SIMD.JS 提案可以大大提升 JavaScript 在大數(shù)據(jù)處理方面的性能。
再次感謝您參與本次的訪談!
更多精彩,加入圖靈訪談微信!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/80006.html
摘要:根據(jù)李成銀大大的文章示例想做的使用,發(fā)現(xiàn)有部分問題直接使用創(chuàng)建,每次創(chuàng)建實例導致重新創(chuàng)建新的連接,導致數(shù)據(jù)庫連接無限上漲將緩存使用,導致的復寫將這兩個問題修復后,代碼如下不過修改,自動編譯不會的不會直接修復,需要重啟服務生效創(chuàng)建連接連接數(shù)據(jù) 根據(jù)李成銀大大的文章示例想做ThinkJS的mongoose使用,發(fā)現(xiàn)有部分問題:1、mongoose直接使用createConnection創(chuàng)建...
摘要:前言本文為篤行日常工作記錄,爛筆頭系列。最終通過分析源碼了解到最終的確定是一個協(xié)商的過程,而不是簡單的配置生效。根據(jù)客戶端上報的和服務端自身的。如果上報的小于則設置為如果上報的大于則設置為如果介于兩則之間,則以上報的時間為準。 0.前言 本文為篤行日常工作記錄,爛筆頭系列。 源碼前面,了無秘密 — by 侯杰 近期的一個C++項目里使用了Zookeeper做服務發(fā)現(xiàn),期間遇到了Sess...
摘要:京東更是已經(jīng)實現(xiàn)深度學習的初步運用。目前深度學習推廣的條件已經(jīng)成熟。李成華表示,隨著深度學習的發(fā)展和成熟,的機器學習算法將會被取代。京東研究深度學習的初衷客服對電商發(fā)展的重要性毋庸置疑。隨后深度學習技術的風靡,加深了京東完善的想法。 說深度學習(Deep Learning)算法是當前人工智能皇冠上的明珠并不過分。通過深層神經(jīng)網(wǎng)絡(DNN)模型的運用,深度學習已成為目前最接近人腦的智能學習方法...
摘要:插件機制可以說是自定義的鉤子函數(shù)。首先在新建文件夾,新建文件以為例更新內(nèi)容緩存里對應的數(shù)組表示鉤子函數(shù)的調(diào)用名,具體調(diào)用的是下面的方法。 一.簡介 這個個人博客網(wǎng)站最初制作的目的就是練習使用thinkJs,這一篇就主要講一下thinkJs的一些特性和注意事項。涉及到了文件上傳,thinkJs的插件機制,model層建立以及CURD的編寫方式等。本項目github地址在這里。 項目thi...
閱讀 3635·2021-10-11 10:59
閱讀 1657·2021-09-29 09:35
閱讀 2326·2021-09-26 09:46
閱讀 3835·2021-09-10 10:50
閱讀 1005·2019-08-29 12:17
閱讀 880·2019-08-26 13:40
閱讀 2516·2019-08-26 11:44
閱讀 2165·2019-08-26 11:22