高德前端這五年:動態化技術的研發歷程和全面落地實踐
前言
2015年-2020年,歷經5年發展,高德地圖應用開發前端團隊在業務快速發展中不斷成長。一路走來,從小團隊主要負責短期運營活動開發的散兵遊勇,到現在團隊規模100人+,覆蓋高德5大業務線,上百個模組的堅甲利兵。本文將分享隨著業務快速增長高德前端的技術發展歷程,總結動態化技術的落地實踐,以及高德前端未來的發展方向。
高德(應用開發)前端技術的發展按照時間線來看,大致可以分為 4 個階段:
- 2015 年 ,業務上大量拉新的訴求,活動需求暴增,應用前端開始登上高德技術大舞臺。
- 2016 年 - 2017 年,業務高速發展,對於效率以及雙端一致性的訴求,帶來了前端發展的契機,動態化技術開始落地。
- 2017 年 - 2019 年,動態化在高德全面落地,前端開發的角色越來越重要,業務半徑不斷延展。
- 2019 年 - 至今,這是目前的發展階段,更加關注支撐的穩定性和延展性,讓業務更好的活在未來。
一言蔽之就是“順勢而為,乘風破浪”。
2015 年:小荷才露尖尖角
2014 年底,高德地圖提出專注使用者需求,專注做地圖導航產品和導航產品的技術研發,未來三年無商業化目標的新戰略。沒有了商業化的壓力,一心專注產品和使用者體驗的高德地圖,技術就此踏上了高速發展的軌道。
運營活動開發需求暴增,“工程、效率”解題
圍繞促進日活和留存的戰略, 大量運營活動的開發需求應運而生,這個階段的活動特點是“短平快”,開發週期短,一週內交付驗證,活動時效期過後即可下線,完全不需要維護。對於程式碼的可維護性、技術上的創新要求不高,目標是快速響應熱點事件,完成活動開發。這種模式給當時人員稀少的前端團隊帶來了非常大的考驗,因為很多運營活動搭建需要在前端完成。而此時的前端團隊在技術沉澱上較為薄弱,重複勞動明顯。基於此,我們首先要完成的是效率上的提升,主要工作包括:
- 元件化:和運營同學一起規範、建設活動常用元件。
- 模版化:拼圖,透過模版化解決簡單頁面的搭建問題。
- 流程化:CLI 加速工作流。
正是在基礎能力上的耕耘,在之後多個熱點事件時,我們才能遊刃有餘,在短時間內完成業務開發、上線。
十一全民出行節,“效能、體驗”沉澱
時間回到 2015 年 10 月 1 日,為了配合“十一全民出行節”,第一個大型運營活動“十一挖寶”就此誕生,也拉開了每年出行高峰必有大型活動的序幕。我們透過開發更加簡單、有趣的互動設計提升使用者的遊戲體驗,強烈的社交屬性例如 PK,排行榜等促進使用者之間傳播。
這一年的活動在公司內外進行了大範圍的運營推廣,“尋寶嘉年華,十六臺 Smart 汽車送不停”,“鬥魚主播全場直播挖寶” 小夥伴們應該還有印象, 當時直播間非常火熱,我們卻戰戰兢兢,如履薄冰,特別擔心直播時出現卡頓、白屏等問題,把火熱的“全網挖寶”變成全網大型吐槽節目,運氣比較好,我們擔心的事情沒有發生。
儘管如此,後背發涼的回憶使我們意識到,技術上如何完善複雜遊戲的效能體驗必將成為日後的課題,基於此我們又完成了基礎技術(體驗、效能)能力上的沉澱,包括:音訊語音互動解決方案,大型遊戲效能的最佳實踐。
到 2015 年底整個前端團隊初具雛形,團隊開始建立規範化,標準化,體系化的思維,在技術上也積攢了不少家底。為了應對可預見的考驗,前端團隊也招入了很多有能力的新人。正是這些人才,使我們在接下來的多線作戰中游刃有餘。
2016 年 - 2017 年:忽如一夜春風來
隨著高德地圖業務沿著擴品類、在垂直品類做精做細,景區、酒店、銀行商鋪、充電樁等個性化定製需求凸顯,對前端展現提出了更高的要求,對“快速應變”要求也越來越高,這段時間主要面臨以下痛點:
- 業務要求快速發版試錯。
- 研發資源越來越無法滿足業務的快速增長。
契機,高德動態化技術誕生
這些問題也在不斷地督促我們去反思,到底有沒有一種架構既能象 H5 一樣快速的開發、釋出又能保持原生 Native 的體驗?實際上,在 2015 年,我們就開始做動態化了,那時候業內有 React Native, 團隊做了技術調研,發現不能完全滿足業務上的需要,尤其是效能方面,因此我們決定自研一套動態化技術。在專案伊始就有一些難點擺在我們面前:
- 佈局怎麼做?RN 的 yoga、iOS 的絕對佈局還是 Android 的 RelativeLayout?
- Runtime framework 放在哪裡?C++ 、JS 誰來承載?
- 模組化的機制是什麼樣的?Node Require、Webpack Require?
- 通訊、動畫怎麼做等諸多問題需要我們探索,抉擇。
經過團隊內部多次思想上的碰撞、激烈的討論, 最終確定以下核心設計思想。
核心
核心處理儘量下沉動態化引擎層,雙端儘量做薄,動態化引擎(C++)以 Webkit、Node 為參考,即可以透過 HTML、CSS、JavaScript 編寫原生應用,又可以像 Nodejs 一樣使用檔案操作等與原生應用的互動能力。這樣的設計在上層對接前端生態時更加靈活,在處理複雜、頻繁互動的大型頁面時也會有更好的效能。
最佳化
除常規動畫外,還設計了關聯動畫解決高頻聯動動畫,關聯動畫本質上並非是一種播放型別的動效,是基於觀察者模式設計的,被觀察者的屬性變化會影響觀察者的屬性變化,它將關聯關係提前繫結好,一次性由 JS 執行緒傳遞給 UI 執行緒,這樣能夠很好的保證互動效能。
在方案明確後,整個團隊也投入到能力建設中來,儘管每週都在發現問題、解決問題中艱難前行,但大家仍然樂此不疲,對於這種打怪升級的過程樂在其中。在基礎能力、輔助工具齊備的背景下,我們開始著手動態化業務的落地實踐,最終我們選擇了 POI 業務。POI 即(Point ofInterest)興趣點,如學校、酒店、飯店、加油站、超市等,高德地圖上有數千萬的 POI。
起航,動態化技術落地 POI
首先看一看 POI 業務的特點:
- UI 複雜,多品類,多種多樣的展現形式。
- 與地圖有存在互動。
- 效能要求高,長列表,資料量大。
- 富互動,大量手勢互動,關聯動畫。
- 多人協作開發問題
為了快速驗證能力,專案的排期非常緊張,為此前端同學 All in,業務上看盡管 POI 只有一個頁面,但是卻有多個行業,而行業是由多個模組拼接而成,每個模組在不同行業展現形式也不盡相同,如何解決協作問題就成為專案成敗的關鍵之一。
為此我們完成了 Framework 框架開發,可以用 JSX 語法實現基本元件化,在元件這個級別進行 CURD 解決了模組化開發的問題。
除錯問題
在專案之初我們並不存在完備的除錯方式,甚至可以說不存在除錯能力,只是透過 print 將 log 輸出到手機端展現。這在開發 POI 時遇到了極大的問題,業務場景複雜大量實時日誌無法檢視,導致效率極低。
為此我們完成了 websdk,mock 能力,在瀏覽器端完成了 POI 頁面的預覽,除錯。
儘管 POI 落地過程中,遇到了各種各樣的問題,但結果是美好的,動態化技術也經受住了業務的考驗,新的 POI 不僅完全覆蓋了之前 H5 的功能,在手勢動畫、List 展現上還體現了更加卓越的互動體驗和效能。伴隨著業務上線,基建一期也基本完成,這個階段以滿足業務為中心,主要圍繞支撐能力的設計和基本的開發體驗。
POI 的圓滿落地也標誌著前端技術有能力在高德地圖中承擔更復雜、更核心、更大的業務場景,前端開發也即將迎來春天。
2017 年 - 2019 年:千樹萬樹梨花開
POI 業務上的成功落地,標誌著動態化技術解決方案趨於穩定,可以應對各種各樣的複雜業務,隨之而來的是大量業務的考驗。隨著動態化技術應用的深入、主要業務模組的全面接入,支撐能力不完善、動態化技術開發人員缺乏導致改造壓力越來越大。
團隊壯大,“小前端”到 “大前端”
人員的問題主要從內外兩方面解決,外部啟動招聘,大量吸納有相關背景的前端同學。內部 Native 同學加強技術培訓,轉向動態化技術開發也正式提上日程。
不少同學一定有這樣的經歷,如果讓其去調研一門新的技術大家一定非常樂意,充滿幹勁,對未知領域的探索,求知渴望是研發的共同點。不過如果讓其持續朝著這門技術發展就會有非常多的疑慮。
透過培訓等方式,解決大家對於技術不確定性和前景的擔憂,大量同學開始轉向動態化技術,到 2019 年初整個動態化“大前端”團隊得到快速增加。
基建完善,“研發閉環,逐個突破”
- 透過 IDE 將開發、除錯能力打通。
- 透過工程平臺進行釋出、回滾、更新、監控、分析操作。
業務增長,“橫跨 5 大業務線,高德核心業務全覆蓋”
富有戰鬥力的團隊、漸漸完善的基建使業務從小步慢走到大步快跑,從使用者的核心訴求我在哪(主圖,定位),我去哪(搜尋,POI),怎麼去(規劃,導航) 到使用者的延伸訴求怎麼去(叫車) 怎麼玩(景區)高德 5 大業務線 60 多個模組全面接入動態化技術。
這個階段動態化業務發展迅猛,“前端團隊”不斷壯大,由“小前端”轉變為“大前端”,基建方面也是圍繞業務全面展開,不斷完善。有了穩定的開發環境, 2017 年 - 2018 年,不到 2 年的時間我們完成程式碼量從 3W 到 60W,模組數量從 1 到 60+,開發人員井噴式增長。業務發版頻次漸漸加快、加密,從單月版→快迭雙週版。
2019 年 - 至今:九層之臺,起於壘土
面對著越來越複雜的業務,仍有不少細節問題需要進一步解決, 如何更好的為業務賦能再次成為重點,阿里前端大咖玉伯之前的分享中有句話給我們印象頗深:
願等花開,堅持長期主義,要快,但不能急。
回到自身來說,前面幾年都是保證業務贏在當下, 支撐上都是大刀闊斧快速建設,完成 0 到 1 的過程。接下來應該幫助業務更好的活在未來,在當前基礎能力具備的情況下,需要閉關審視自身,從功能的完整性,延展性等方面做到精細化。
未來,我們也將從研發生態、工程中臺、智慧化 3 大方向上以精細化、標準化、差異化為基礎要求,不斷補足能力,逐漸完成中臺化、智慧化的基礎建設工作,圍繞 IDE 打造更好的一站式場景化開發體驗。
五化基建方針
- 精細化:切中痛點,系統解題。
- 標準化:集團生態、業界標準。
- 差異化:標準化基礎上,提供 Amap 能力擴充套件。
- 智慧化:低程式碼,物料複用,UI 自動生成。
- 中臺化:前臺通用能力下沉到中臺,不再侷限高德。
技術大圖
接下來的重點方向
- 工具鏈路穩定性、延展性持續最佳化。
- 平臺能力中臺化。
- 全鏈路監控:快速分析、定位問題。
- 物料:縮短開發到資源路徑,沉澱更多基礎能力。
- 智慧化:低程式碼、零程式碼。
以上是 5 年來高德地圖前端技術的發展歷程,過程中有失有得,我們還在路上,未來會更加努力,讓出行更美好。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69941357/viewspace-2692134/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- UI自動化技術在高德的實踐UI
- 持續交付體系在高德的實踐歷程
- 淺談研發數字化在汽車之家的落地實踐
- 區塊鏈發展歷程,區塊鏈技術的落地應用區塊鏈
- 虛擬化技術的發展歷程簡述
- 前端模組化發展歷程 (-)前端
- 高德最佳實踐:Serverless 規模化落地有哪些價值?Server
- 容器技術在企業落地的最佳實踐
- SAP 技術架構的發展歷程架構
- 高德車載導航自研圖片格式的探索和實踐
- 虛擬化的發展歷程和實現方式
- 2020高德技術年刊:18萬字、750頁+,智慧出行最佳技術實踐都在這了
- 騰訊董志強:基建、研發、安全——雲安全前沿技術探索和實踐
- 如何在軟體研發階段落地安全實踐
- 前端技術演進(六):前端專案與技術實踐前端
- 從技術支撐到落地實踐 華為雲全面賦能“新雲原生企業”
- 一文讀懂螞蟻金服自研技術的發展和實踐
- 一文全面瞭解火山語音無監督預訓練技術的落地實踐
- 前端開發:基於cypress的自動化實踐前端
- 創新的力量 天翼雲推動科技創新技術實踐落地
- toB應用私有化交付發展歷程、技術對比和選型
- 熱點部落格,技術歷程和技術積累 (個人)
- 自動化測試框架選型和落地實踐路徑框架
- 得物技術埋點自動化驗證的探索和最佳實踐
- 十年WEB技術發展歷程Web
- gulp 前端自動化實踐前端
- Spring開發:動態代理的藝術與實踐Spring
- 技術沙龍|京東雲DevOps自動化運維技術實踐dev運維
- 前端元件化開發實踐前端元件化
- Java使用FreeMarker模版技術動態生成word實踐Java
- 高德AR & 車道級導航技術演進與實踐
- 高德演算法工程一體化實踐和思考演算法
- 高德服務單元化方案和架構實踐架構
- Web 前端小白入門(一):心路歷程,非技術指南Web前端
- Web 前端小白入門(二):心路歷程,非技術指南Web前端
- 高精地圖中地面標識識別技術歷程與實踐地圖
- DWDM技術在B站基礎工程的落地實踐之路
- 【敏捷研發系列】前端DevOps流水線實踐敏捷前端dev