曹建華,朱若靈,李烜焱
(中國(guó)電信集團(tuán)客服運(yùn)營(yíng)支撐中心,上海 200041)
星級(jí)服務(wù)是中國(guó)電信在原有VIP服務(wù)體系的基礎(chǔ)上,升級(jí)和優(yōu)化后推出的全新服務(wù)體系。中國(guó)電信向"消費(fèi)穩(wěn)定、網(wǎng)齡長(zhǎng)且信用記錄良好"的優(yōu)質(zhì)客戶授予相應(yīng)星級(jí),同時(shí)提供積分倍增、10000號(hào)優(yōu)先接入等一系列差異化服務(wù)。
為服務(wù)好星級(jí)客戶,中國(guó)電信建設(shè)了集約的星級(jí)客戶權(quán)益行權(quán)平臺(tái)(簡(jiǎn)稱集約星級(jí)服務(wù)),通過APP、微信公眾號(hào)等互聯(lián)網(wǎng)渠道提供向星級(jí)客戶提供服務(wù)。集約星級(jí)服務(wù)需要解決兩個(gè)關(guān)鍵問題:
(1)用戶服務(wù)界面的快速迭代與APP版本更新頻率之間的矛盾。
(2)用戶服務(wù)界面的快速響應(yīng)與復(fù)雜的業(yè)務(wù)邏輯處理耗時(shí)之間的矛盾。
本文重點(diǎn)介紹這兩個(gè)問題的技術(shù)解決方案和達(dá)到的效果。
手機(jī)APP開發(fā)有兩類主流的技術(shù),分別是Native App(原生App)和Web App。由于集約星級(jí)服務(wù)用戶頁(yè)面會(huì)頻繁更新,同時(shí)又要使用手機(jī)底層設(shè)備功能。因此APP中的集約星級(jí)服務(wù)使用了HTML5+原生的混合框架,H5頁(yè)面?zhèn)戎赜跇I(yè)務(wù)功能實(shí)現(xiàn),原生則提供手機(jī)底層的基礎(chǔ)能力。該技術(shù)綜合了H5和原生的優(yōu)點(diǎn):
(1)集約星級(jí)服務(wù)頁(yè)面具有良好的跨平臺(tái)性,能很好的兼容APP和微信公眾號(hào)。
(2)集約星級(jí)服務(wù)頁(yè)面不依賴于APP版本的限制,可以實(shí)時(shí)進(jìn)行迭代和發(fā)布。
(3)APP通過原生技術(shù)對(duì)底層基礎(chǔ)能力進(jìn)行封裝如拍照、分享等,并提供給上層H5頁(yè)面使用,實(shí)現(xiàn)更復(fù)雜的業(yè)務(wù)邏輯。
H5頁(yè)面與原生APP之間的交互機(jī)制如下:
下面以星級(jí)服務(wù)頁(yè)面實(shí)現(xiàn)拍照并獲取圖片為例說明兩者交互機(jī)制:
(1)HTML頁(yè)面調(diào)用APP拍照功能
function openCamera( ){
window.abilityToOpen.runOnAndroidOpenCamera();
}
(2)APP把圖片的絕對(duì)路徑傳給Html頁(yè)面
webView.loadUrl("javascript:getImagePath('" + imgFile+ "')");
其中H5頁(yè)面中g(shù)etImagePath定義如下:
function getImagePath(path){
document.getElementById("imagePath").value=path;
}
作為服務(wù)于中國(guó)電信高端客戶的門戶,集約星級(jí)服務(wù)頁(yè)面打開要快。由于頁(yè)面業(yè)務(wù)邏輯復(fù)雜,與后臺(tái)存在多項(xiàng)數(shù)據(jù)交互,因此應(yīng)用了雙重緩存+異步刷新技術(shù)提升頁(yè)面加載速率,并保持?jǐn)?shù)據(jù)的準(zhǔn)實(shí)時(shí)性。
(1)頁(yè)面資源緩存并異步刷新:頁(yè)面被用戶首次加載時(shí),圖片壓縮并轉(zhuǎn)為base64編碼連同獲取的后臺(tái)數(shù)據(jù)存入localStorage中。后續(xù)再次被訪問時(shí)先從localStorage中讀取,同時(shí)啟動(dòng)異步線程調(diào)取后臺(tái)接口數(shù)據(jù)與緩存數(shù)據(jù)進(jìn)行比對(duì),將變化部分局部刷新并再緩存。
(2)后臺(tái)數(shù)據(jù)緩存并異步刷新:后臺(tái)數(shù)據(jù)來源于集團(tuán)企信接口,一次接口請(qǐng)求約耗時(shí)1秒。由于客戶星級(jí)等數(shù)據(jù)更新頻率不高,因此后臺(tái)獲取到這些數(shù)據(jù)后既返回給前端頁(yè)面也同時(shí)緩存一份至Redis(高性能內(nèi)存數(shù)據(jù)庫(kù))中,后續(xù)再次被請(qǐng)求時(shí)直接從Redis緩存讀取,接口耗時(shí)縮短至100ms以內(nèi)。同時(shí)為保持緩存中數(shù)據(jù)的準(zhǔn)實(shí)時(shí)性,兩次請(qǐng)求間隔時(shí)間超過設(shè)定的閾值,會(huì)啟動(dòng)異步線程調(diào)取集團(tuán)企信數(shù)據(jù)刷新緩存。具體流程如下:
通過應(yīng)用雙重緩存+異步刷新,頁(yè)面打開時(shí)間縮短至1s以內(nèi),又保持了數(shù)據(jù)的準(zhǔn)實(shí)時(shí)性,用戶感知明顯提升。
集約星級(jí)服務(wù)采用H5+原生混合框架綜合了兩者的優(yōu)勢(shì),既可以快速迭代發(fā)布還可以充分使用手機(jī)底層設(shè)備功能。采用雙重緩存+異步刷新技術(shù),用戶感知提升明顯。這兩項(xiàng)關(guān)鍵技術(shù)具有很好的通用性和可復(fù)制性。