前端組
其實在內部我們叫大前端,公司名也不報了,媽媽說要低調,嗯嗯!
體系
不同公司對邊界的定義都不一樣。我們對界線的劃分主要分為,是否影響了使用者可互動,可操作的體驗,效率需要高(ps:窮!)
在我們這面對前端的定義是高效率的實現可互動並且高質量的產品。所以我們整體的支撐體系如下:
- 應用
- 規範
- 工具
- 團隊
應用
最終前端這塊主要負責前端開發(本職工作)和服務端開發(應用邏輯)。
為了保證服務的高可用,並且能提供靠譜的使用者體驗,在整個應用這塊我們主要做了4件事:
體驗。
體驗這塊主要和設計團隊的溝通比較多。設計團隊主要負責:視覺規範、互動規範、介面設計。前端團隊主要負責:元件抽象、視覺還原、互動還原 。
元件化這塊,我們調研了多種方案(其實業內成熟方案真的很多)最終結合各種調研以及我們自己的業務場景我們得到以下結論:
- 我們是資料展示為主的業務,所以要根據資料模型來對元件進行建模
- 高內聚,解決檔案管理的問題,可以快速剝離和替換
- api統一
- 可獨立執行
- 業務一致性
基於以上的結論,我們先封裝了第一批元件,但是發現整體粒度還是比較粗,UI一致性很難保證,所以我們在這一層的基礎上抽離了一層UI元件,用來保障UI的一致性。
名稱空間是通過資料夾的方式去管理,每個元件通過index.js來做為出入口。
每個元件內部存在於一個狀態組,來對內部邏輯進行控制。
前後端分離
前後端分離分為2塊,由於我們的業務資料量比較大,單個介面的速度會非常慢,如果採用後端直出的方案去渲染頁面的話,頁面白屏的時間會非常長。所以我們採用前端spa,後端自建服務(基於Node.js)。
-
spa
-
框架選擇這塊我主要針對幾個方面進行調研,社群、是否資料驅動,是否大廠出品,是否支援ie8(或者通過改造可以比較容易適配),團隊整體的學習和上手成本(部分同學比較弱),圈定出來的範圍其實比較明顯angular1.x,react,團隊同學一致對大而全的框架比較感興趣,react在構建大型應用上需要引入太多第三方的包來管理狀態,所以最終的決定是angular1.4.7(改動的成本最小)
-
vue是團隊內部比較喜歡的框架(不相容ie8/(ㄒoㄒ)/~~),所以我們在移動中嘗試使用,相比於react的jsx,我們更加喜歡vue的簡潔
-
在pc端我們的產品是非常重的資料型產品,所以前端的單個檔案會比較大,通過構建工具合併後檔案會非常大。所以我們引入了code split的方式,通過路由來切分檔案,並且在會在主頁面渲染完成後,預載入部分指令碼(js、css我們是壓縮在一個檔案中的),來優化整體的體驗。
-
-
服務端
- 服務主要以Node.js為主,部分老系統有python,也有php,為什麼要選Node.js呢?
- 團隊整體為前端團隊,整體技術棧以js為主,python和php的同學只有1-2個
- 業務相對沒有那麼複雜,前後端的一部分邏輯是可以共用的
- 框架經過封裝後上手難度相對較低
- 大家對這塊的熱情比較高
- 單方向溝通相對更輕鬆,效率也更快,ps:主要薪資更高了
- 業務分2塊
- 主要負責公司2條產品線的應用研發工作
- 自研類的產品(微信預警、微信日報、郵件服務、內部專案管理平臺搭建、前端監控埋點等)
- 服務主要以Node.js為主,部分老系統有python,也有php,為什麼要選Node.js呢?
監控
監控這塊分了3部分:
-
前端監控
-
由於我們的主要客戶是酒店,遇到問題後,他們內部在遠端除錯上很難辦到,但是有時候會出現使用者有問題,我們自己通過賬號去復現就很難發現問題,根據上面的情況,我們實現了一套前端監控的體系,用來捕獲使用者的操作路徑和js層面的異常。
-
主要實現了2部分功能:
- 操作路徑捕獲,每個使用者進來後記錄使用者的每次點選,根據時間和元素,來判斷使用者的操作流程。
- 捕獲window.error和劫持ng和vue中的handleerror方法
-
-
服務監控
- 程式和硬體層面的監控比較簡陋
- 程式守護pm2
- 埠掃描
- CPU、記憶體、硬碟監控 上面的產生異常後,呼叫預警服務傳送到對應的使用者
- 在業務程式碼中部署特殊的埋點,來監控某些特殊的場景
- 程式和硬體層面的監控比較簡陋
-
預警
- 中介軟體服務,目前只實現了2部分:
- 微信預警
- 郵件預警
通過api來接收使用方的預警資訊,目前也用在給客戶傳送相應的報表
- 中介軟體服務,目前只實現了2部分:
工程
工程方面,在專案的評審,開發,聯調,測試,上線,運營各個環節,我們提供相應的工具支援,以及標準操作流程和文件,從而保證各個環節的產出質量和效率,以及各個環節之間過渡的平滑性。
- 評審。包含需求評審、設計評審、測試評審。
- 開發。包含風格校驗、前端除錯、服務端除錯。
- 聯調。根據api自動生成mock資料。
- 測試。提供程式碼編譯、部署,以及模擬環境的模擬(灰度)。
- 上線。同上
規範
規範化主要是eslint、csslint這類工具保證程式碼的風格,結合我們的團隊特性我們也產出了自己的程式碼規範(每個團隊應該不一樣,所以不獻醜了)。 整體質量的保證是各個組的leader,會定期review專案的程式碼(主要是忙,2週一次迭代,只能抽時間做)。
工具
框架都是通過業內比較熟知的框架來封裝的(前端angular,後端express),
- 前端主要是實現了名稱空間控制,路由控制、根據路由對檔案進行codesplit,資源預載入,通用介面和方法封裝。
- 後端基於express自研,api簡化,增加路由自動生成,資料庫分庫分表支援,多人協作,埠自動分配,nginx配置生成,業務分層處理等功能
自動化工具除了大家常規的工具如壓縮、合併這類的,基於我們的專案我們自研了專案自動構建,配置自動構建等
團隊
-
分享
- 團隊內部
- 每週一次分享會,分享人自己定主題,分享人是通過輪詢的方式來定。
- 分享的內容可以是專案心得,也可以是個人情感,也可以是新技術等等(一點節操都沒有啥都不限制)
- 公司層面
- 跨事業部組織公司層面的分享會,效果還不錯,借用了FEDAY的名字(嘻嘻),還有自己的logo衫,當然要感謝老闆的支援,以及小夥伴們的熱情。
- 團隊內部
-
調研/自研
- 大家都是靠自驅動去造輪子或者研究開發新的玩意兒
- 最近在關注的新技術
- 看graphql,感覺在api這塊是下一個爆點,準備在下一個專案中引入。
- 據說app的專案要回到我們手裡了,最近在看RN,當然也在學一點OC和JAVA
- 其他的也會了解一點兒,但是看場景吧,可能過幾天就忘了。。
-
總結
- 專案。每個專案結束,參與人會分享下當前專案的心得。
- 年終。每年每人回顧下上一年的得失。
ps:招人啦?liuqing@liluo.me
前端、大資料、爬蟲~~