原文 BY Tommy MacWilliam
無論是為了讓用戶的體驗更好仪缸,還是為了跑A/B測試,我們一直都在努力提升Quora的移動端和網頁端的用戶體驗痴荐。Quora的iPhone和Android版App都能夠通過內置瀏覽器Webviews來執(zhí)行Javascript代碼血柳,這樣我們就能夠跳過App/Play Store來進行較大規(guī)模的更新(進一步閱讀:從頭開始重新構建iPhone版Quora)。
讓我們來看一些例子蹬昌,首先從第一打開App的時候開始:
這個頁面上的所有內容都能夠進行A/B測試而不用發(fā)布新版本混驰。事實上,整個頁面是個全屏的WebView
,里面呈現了我們服務器上的Html5頁面栖榨。我們使用了一些原生代碼來處理登錄注冊相關的交互昆汹,卻能夠在不更新客戶端的前提下替換頁面上的任意內容。通過這種方式我們能夠輕松進行A/B測試婴栽。
當你登錄之后首先看到的是Feed流满粗,下面這張圖說明了這個頁面哪些用了原生代碼,而哪些是使用了Web代碼:
綠色框中的內容我們都可以任意A/B測試而不用更新客戶端映皆,而藍色框中的內容想要更改就只能去App Store發(fā)布新版本了。例如轰枝,當你按下導航欄坐上角的Feed
按鈕時會觸發(fā)一個原生事件捅彻,因此這種情況下我們沒有辦法不通過App Store就改變這中交互。但是鞍陨,這個原生事件觸發(fā)后的效果是下劃一個新的包含了WebView
的UIView
步淹,因此里面包含的內容我們是能夠進行A/B測試的。
不過上面說的并不意味著在不更新App/Play Store的客戶端的前提下诚撵,所有的使用原生代碼實現的功能都無法修改缭裆。當我們添加一些新內容時,我們都會在其中隱藏一些“鉤子”(hooks)寿烟,進而這些內容都能夠通過Javascript來修改了澈驼。例如,下部導航欄的標簽都是原生的組件筛武,但在我們寫它們的時候加入了即使不修改原生代碼缝其,也能夠允許上面的文字改變的功能∨橇可能一些聰明的用戶已經注意到之前我們上線測試寫文章模塊時(Write Page)并沒有發(fā)布新版本氏淑,盡管原生部分的改變相當明顯。這都歸功于之前加入的功能硕噩,把底部標簽欄標簽上的文字從"Open Questions"改為了"Write"。
另外像新添加文字這種小的修改我們也能夠不發(fā)布新版本就進行A/B測試缭贡。比如說想要在"Your Content"部分進行A/B測試炉擅,我們應該怎么做?
再回到上面Feed
的例子阳惹,頂部導航和底部標簽欄中間的所有部分都是在服務器上生成的Web網頁谍失,因此我們可以很方便地對語言、布局莹汤、顏色或字體大小等進行修改快鱼。頂部導航上的標題是原生的部分,但也能夠通過Javascript修改,也不需要發(fā)布新版本抹竹。右上角的按鈕也一樣线罕,Javascript決定上面顯示的內容,因此這里也可以很方便地對語言做A/B測試窃判。當你按下這個按鈕钞楼,你會看到這樣的一個浮層:
顯然這里能看到的所有東西都能夠很方便地修改,無論是內容袄琳、按鈕文字询件、標題或是按鈕的行為等。事實上唆樊,我們能夠在不提交App/Play Store新版本的情況下改變任何一個原生按鈕的行為宛琅。所以說,如果我們想要對某個頁面的切換行為做A/B測試:切換導航與彈出浮層 —— 依然不需要提交新版本逗旁。更夸張一點嘿辟,甚至將一個按鈕改為做另一件完全不同的事(比如,在當前頁彈出一個搜索欄)痢艺,依然不需要新版本仓洼。
最后總結一下,我們能夠不通過App/Play Store而改變App上絕大多數UI元素(無論是原生的還是Web的)的行為堤舒。這種架構以及我們的持續(xù)開發(fā)模型(continuous deployment model)使得我們能夠快速迭代色建,從而做出更好的產品。