Native APP與Web APP的技術(shù)融合已經(jīng)逐漸成為一種趨勢(shì),使用標(biāo)準(zhǔn)的Web技術(shù)來開發(fā)應(yīng)用中的某些功能,不僅可以降低開發(fā)成本,同時(shí)還可以方便的進(jìn)行功能迭代更新。但是如何保證Web APP的流暢性也一直是業(yè)內(nèi)討論的熱點(diǎn)。InfoQ此次專訪了手機(jī)淘寶客戶端高級(jí)技術(shù)專家馮森林來談?wù)勈謾C(jī)淘寶在Web技術(shù)方面的一些實(shí)踐經(jīng)驗(yàn)。
淘寶手機(jī)客戶端是否使用了HTML5技術(shù)?能簡單介紹下嗎?
馮森林:手機(jī)淘寶大量使用了Web技術(shù),但對(duì)于HTML5,由于兼容性的要求,我們相對(duì)比較保守,使用到的特性并不多。主要是一些與觸屏體驗(yàn)相關(guān)的HTML5特性,大部分運(yùn)用在基礎(chǔ)JS庫中,業(yè)務(wù)開發(fā)直接使用的場(chǎng)景不多。優(yōu)點(diǎn)在于可以更好的支持一些優(yōu)化的體驗(yàn),充分發(fā)揮新技術(shù)優(yōu)勢(shì)和移動(dòng)端獨(dú)有的能力。缺點(diǎn)也很明顯,兼容性上需要考慮較多的適配問題。
我們知道Web頁面與原生的頁面在性能上還是有很大差距的,手機(jī)淘寶是如何處理Web頁面的體驗(yàn)瓶頸的?
馮森林:通過使用緩存技術(shù),可以在再次加載頁面(及用到的資源)時(shí)避免緩慢和不可靠的網(wǎng)絡(luò)請(qǐng)求,從本地緩存加載基本可以做到即時(shí)完成,接近于原生應(yīng)用的加載體驗(yàn)。為了解決首次加載,我們?cè)诰彺鏅C(jī)制的基礎(chǔ)上引入了預(yù)緩存機(jī)制(采用與AppCache一致的協(xié)議),提前將需要的頁面及資源緩存到本地,即使在用戶首次打開時(shí),也相當(dāng)于打開已經(jīng)緩存過的頁面。
在Web頁面中不可避免的會(huì)調(diào)用一些Native的功能,手機(jī)淘寶是如何實(shí)現(xiàn)的?
馮森林:我們采取了類似于PhoneGap的實(shí)現(xiàn)(但更輕量級(jí)),在Android和iOS兩個(gè)平臺(tái)上分別實(shí)現(xiàn)了JsBridge,在JavaScript的命名空間內(nèi)創(chuàng)建可映射到native對(duì)象的代理。并在業(yè)界通行的實(shí)現(xiàn)基礎(chǔ)上,我們還加入了一些安全增強(qiáng)和保護(hù)機(jī)制,封堵常見的JS注入漏洞。
看來手機(jī)淘寶在HTML頁面方面做了大量的技術(shù)投入,能分享下你們的經(jīng)驗(yàn)嗎?
馮森林:其實(shí),無論是緩存還是網(wǎng)絡(luò)方面的優(yōu)化,都是在傳統(tǒng)Web開發(fā)領(lǐng)域內(nèi)已經(jīng)相對(duì)成熟的實(shí)踐。在App內(nèi),由于我們所能掌控的部分大幅度的下移,能影響一部分以往受制于瀏覽器實(shí)現(xiàn)的技術(shù)層次,所以可以在這兩方面做的更多更深入。但是兼容Web的既有標(biāo)準(zhǔn)和實(shí)踐是我們做這些優(yōu)化的基本前提,比如使用AppCache協(xié)議支持預(yù)緩存,這樣有助于前端技術(shù)和實(shí)踐的跨平臺(tái)兼容和復(fù)用。
淘寶自己實(shí)現(xiàn)的WebView 緩存機(jī)制模塊同時(shí)兼容iOS 和 Android嗎? 能否具體講一下大概的實(shí)現(xiàn)思路?圖片緩存有特殊處理嗎?
馮森林:是的,在兩個(gè)平臺(tái)上,我們都采用了相似的實(shí)現(xiàn)。實(shí)現(xiàn)思路上完全參照標(biāo)準(zhǔn)的HTTP Cache-Control協(xié)議,在一些特定的場(chǎng)景下使用ETag。圖片與API采用一致的緩存實(shí)現(xiàn),唯服務(wù)端的緩存策略配置不同而已。
手機(jī)淘寶開發(fā)Web頁面時(shí)有沒有用到過一些開源框架?如果有自研框架,是否考慮開源?
馮森林:手機(jī)淘寶中使用到的大部分是前端業(yè)界成熟的開源框架,如JQuery、Mustache,也有一些我們自己構(gòu)建的框架,如已經(jīng)開源的Kissy;旧,除了對(duì)接私有設(shè)計(jì)的框架之外,我們都優(yōu)先考慮使用成熟的開源項(xiàng)目,并且將我們的補(bǔ)充反饋給開源社區(qū)。
淘寶對(duì)安全性要求很高,請(qǐng)問在Web與Native交互的過程中,是否進(jìn)行過一些加密和其它的處理?
馮森林:Web與Native的交互,本身還是受到OS安全性保護(hù)的。無論在Android還是iOS下,這都是App內(nèi)部的通信通道,因此在非越獄/ROOT的設(shè)備上不存在已知的安全風(fēng)險(xiǎn)。由于越獄和ROOT在國內(nèi)環(huán)境中的普遍性,所以在安全問題上,我們整體性的策略是將整個(gè)客戶端視同安全藩籬較低的終端,從云端通信及行為分析上去強(qiáng)化安全保護(hù)。比如我們已經(jīng)在Web容器中加入的『人機(jī)識(shí)別』模塊,可有效識(shí)別各種利用Web頁面和接口進(jìn)行的自動(dòng)『刷XX』行為。