隔了差不多40天瑟枫,終于有時(shí)間歸納一下另外一個(gè)系統(tǒng)的問題了祖乳,之前想說的只是一個(gè)業(yè)務(wù)上的異步(關(guān)于異步任務(wù)的設(shè)計(jì)探索(1)),今天寫的是真真正正的異步任務(wù)力喷,是代碼層面上的異步并非業(yè)務(wù)所要求的異步刽漂。
問題示例:
這次的例子來源于我們做“商品導(dǎo)入”這個(gè)功能;先看看我們之前的做法:
1.用戶可以選擇導(dǎo)入某個(gè)平臺(tái)的商品到我們的后臺(tái)中弟孟,但是若想再導(dǎo)入需要等當(dāng)前的導(dǎo)入任務(wù)全部結(jié)束才能進(jìn)行第二次導(dǎo)入贝咙,而且還對(duì)商品進(jìn)行了緩存,導(dǎo)致用戶在淘寶更新了商品后拂募,需要相隔12個(gè)小時(shí)才能再次導(dǎo)入更新了的商品到我們平臺(tái)
2.在實(shí)踐過程中庭猩,我們發(fā)現(xiàn)很多人停留在此頁面,怕關(guān)掉此頁面陈症,導(dǎo)入任務(wù)會(huì)中斷(雖然他關(guān)掉此頁面蔼水,后臺(tái)仍會(huì)繼續(xù)導(dǎo)入);為了處理這個(gè)問題爬凑,我們簡(jiǎn)單粗暴地加了一個(gè)提示框:
3.我們默認(rèn)會(huì)將用戶的整個(gè)店鋪的商品導(dǎo)進(jìn)來徙缴,用戶不能選擇導(dǎo)什么商品,這就導(dǎo)致后來的兩個(gè)問題:a.很難以導(dǎo)入次數(shù)去計(jì)費(fèi),b.消耗大量的服務(wù)器資源與成本于样;并且大多數(shù)用戶因?yàn)閷?dǎo)入時(shí)間等待過長(zhǎng)而流失掉疏叨。
總結(jié)一下以上問題:
·導(dǎo)入任務(wù)不能多個(gè)開啟,用戶需要等待任務(wù)完成后才能再導(dǎo)入其他商品
·提示過長(zhǎng)穿剖,并且沒有能讓用戶知道導(dǎo)入進(jìn)度的地方
·用戶無法選擇導(dǎo)入的商品蚤蔓,導(dǎo)致每次導(dǎo)入都消耗了大量的服務(wù)器資源和成本(有些店鋪的商品達(dá)到3000件)
開始思考??
接下來開始思考究竟怎么樣才能讓這個(gè)功能變好用,“好用”可以具體分為以下幾點(diǎn):
·用戶控制:清晰知道進(jìn)度糊余,監(jiān)控每個(gè)商品的導(dǎo)入情況秀又,中斷任務(wù)的權(quán)力甚至是中斷某個(gè)商品導(dǎo)入的權(quán)力
·前饋指引:告訴用戶這個(gè)功能是什么,可以做什么贬芥,功能有什么條件限制等等
·反饋提醒:執(zhí)行導(dǎo)入任務(wù)后吐辙,讓用戶有安全感地關(guān)閉當(dāng)前頁面,具體為讓用戶知道他可以隨時(shí)隨地回來查看這個(gè)任務(wù)蘸劈,這個(gè)任務(wù)完成時(shí)會(huì)立即通知到用戶
1.于是第一點(diǎn):讓用戶能夠選擇導(dǎo)入什么商品(當(dāng)然這個(gè)需要接口支持)昏苏,用戶用鏈接采集時(shí)并非立即執(zhí)行導(dǎo)入任務(wù),而是先采集好店鋪的所有商品(未開始采集商品詳情)威沫,讓用戶去選擇需要導(dǎo)入的商品贤惯,當(dāng)然也需要給出方便的交互讓用戶可以一鍵選擇全部商品來進(jìn)行導(dǎo)入(或者用戶第一次導(dǎo)入時(shí),不需要選擇直接導(dǎo)入整店的商品)
2.執(zhí)行導(dǎo)入后孵构,并不在當(dāng)前頁顯示導(dǎo)入的狀態(tài)或結(jié)果,引入另一個(gè)頁面來放置任務(wù)烟很;所以引入了另一個(gè)專門放置導(dǎo)入任務(wù)的頁面
但這樣會(huì)引入一個(gè)新的問題,由于導(dǎo)入的頁面與任務(wù)的頁面是割裂的雾袱,為了不打破用戶的“心流”精盅,我們需要在用戶導(dǎo)入完畢后自然引導(dǎo)用戶進(jìn)入任務(wù)查看,即“反饋提示”谜酒。如下圖:導(dǎo)入后告訴用戶已經(jīng)開始,并提供快捷入口讓用戶進(jìn)入查看妻枕。
當(dāng)用戶點(diǎn)擊取消時(shí)僻族,利用氣泡框輕度提示用戶可以從此入口查看任務(wù):
因?yàn)橛脩粢呀?jīng)點(diǎn)了【取消】,說明用戶:1.有其他流程需要處理屡谐;2.已經(jīng)非常熟悉導(dǎo)入流程述么,不需要查看。所以此時(shí)為了不打擾用戶愕掏,做一個(gè)輕度提示即可(甚至可以只在用戶第一次導(dǎo)入時(shí)提示)
3.導(dǎo)入完畢后度秘,需要及時(shí)提醒用戶導(dǎo)入任務(wù)已完成,這里有幾種方法,由于用戶不一定時(shí)刻在電腦前剑梳,所以可以取其中之一或全部用上唆貌。
·短信:若用戶注冊(cè)時(shí)需要提供手機(jī)號(hào),這是開發(fā)成本最低的一種做法垢乙,也是最快速锨咙;缺點(diǎn)是金錢成本會(huì)比較高。
·公眾號(hào):若用戶使用微信登錄追逮,并且關(guān)注公眾號(hào)酪刀,可以調(diào)用公眾號(hào)-消息模版能力,優(yōu)點(diǎn)是0金錢成本钮孵,還能順便提高公眾號(hào)的粉絲骂倘,缺點(diǎn)是需要開發(fā),并且消息模版只能使用微信的
·網(wǎng)頁端直接彈出提示:優(yōu)點(diǎn)是自己可以控制文案和樣式巴席,并且能夠直接跳轉(zhuǎn)查看對(duì)應(yīng)的任務(wù)历涝,缺點(diǎn)是需要開發(fā)通訊類功能(socks之類);用戶離開后就收不到消息
所以要與開發(fā)團(tuán)隊(duì)權(quán)衡好利弊情妖,進(jìn)行取舍睬关。
總結(jié):
當(dāng)初將異步的任務(wù)也設(shè)計(jì)成同步的交互,后來發(fā)現(xiàn)一團(tuán)糟毡证;經(jīng)過幾次與團(tuán)隊(duì)的探討电爹,看別人的文章與設(shè)計(jì)后,總結(jié)出幾點(diǎn):
1.碰到異步的任務(wù)時(shí)料睛,最好能在代碼層面了解它是怎么運(yùn)作的丐箩,包括但不限于調(diào)用了什么接口、接口調(diào)用的時(shí)長(zhǎng)(這個(gè)決定了是否要同步處理還是異步處理)恤煞、接口返回的錯(cuò)誤屎勘、任務(wù)是按照隊(duì)列去執(zhí)行還是能夠并發(fā)執(zhí)行;業(yè)務(wù)層面了解它需要的角色居扒、流程概漱、流程的時(shí)長(zhǎng)、流程涉及到的場(chǎng)景喜喂。
2.不要企圖僅用文案去解決用戶的不安以及等待瓤摧,這個(gè)是我們犯過最大的錯(cuò);以為提示可以解決一切玉吁;但用戶會(huì)跟著流程走照弥,流程設(shè)計(jì)出錯(cuò)的時(shí)候,用戶會(huì)非常無助地停留在原地进副。
3.多與開發(fā)溝通这揣,很多時(shí)候,設(shè)計(jì)貌似只是產(chǎn)品或UI的事情,開發(fā)只是執(zhí)行给赞,但在我執(zhí)行過的項(xiàng)目中机打,好的項(xiàng)目往往是開發(fā)一同參與設(shè)計(jì)部分的(并不是說執(zhí)行,而是給出建議)塞俱,因?yàn)橛行┓桨甘切枰_發(fā)人員的知識(shí)才能想到(具體可以參考“增長(zhǎng)黑客”一書中的案例)姐帚。
好,那我們下期見(可能沒有下一期了障涯,哈哈哈哈哈哈)