編輯導語:在上一篇文章《關於異步任務的設計探索(1)》中,作者為我們解答了異步任務的設計邏輯是什麼?有哪些需要注意的問題?在本篇文章中,作者又繼續異步任務設計的故事,從代碼層面上分享了關於異步任務的設計探索。
終於有時間歸納一下另外一個系統的問題了,之前想說的只是一個業務上的異步(關於異步任務的設計探索(1)),今天寫的是真真正正的異步任務,是代碼層面上的異步並非業務所要求的異步。
一、問題示例
這次的例子來源於我們做「商品導入」這個功能,先看看我們之前的做法:
用戶可以選擇導入某個平臺的商品到我們的後臺中,但是若想再導入需要等當前的導入任務全部結束才能進行第二次導入,而且還對商品進行了緩存,導致用戶在淘寶更新了商品後,需要相隔12個小時才能再次導入更新了的商品到我們平臺;
整店導入商品
在實踐過程中,我們發現很多人停留在此頁面,怕關掉此頁面,導入任務會中斷(雖然他關掉此頁面,後臺仍會繼續導入);為了處理這個問題,我們簡單粗暴地加了一個提示框:
一個有三行文字的提示框
我們默認會將用戶的整個店鋪的商品導進來,用戶不能選擇導什麼商品,這就導致後來的兩個問題:很難以導入次數去計費、消耗大量的伺服器資源與成本;並且大多數用戶因為導入時間等待過長而流失掉。
整店導入
總結一下以上問題:
導入任務不能多個開啟,用戶需要等待任務完成後才能再導入其他商品;提示過長,並且沒有能讓用戶知道導入進度的地方;用戶無法選擇導入的商品,導致每次導入都消耗了大量的伺服器資源和成本(有些店鋪的商品達到3000件)。
二、開始思考
接下來開始思考究竟怎麼樣才能讓這個功能變好用,「好用」可以具體分為以下幾點:
用戶控制:清晰知道進度,監控每個商品的導入情況,中斷任務的權力甚至是中斷某個商品導入的權力;前饋指引:告訴用戶這個功能是什麼,可以做什麼,功能有什麼條件限制等等;反饋提醒:執行導入任務後,讓用戶有安全感地關閉當前頁面,具體為讓用戶知道他可以隨時隨地回來查看這個任務,這個任務完成時會立即通知到用戶。於是第一點:讓用戶能夠選擇導入什麼商品(當然這個需要接口支持),用戶用連結採集時並非立即執行導入任務,而是先採集好店鋪的所有商品(未開始採集商品詳情),讓用戶去選擇需要導入的商品,當然也需要給出方便的交互讓用戶可以一鍵選擇全部商品來進行導入(或者用戶第一次導入時,不需要選擇直接導入整店的商品)。
選擇平臺
採集店鋪商品後,可以選擇導入什麼商品
執行導入後,並不在當前頁顯示導入的狀態或結果,引入另一個頁面來放置任務,所以引入了另一個專門放置導入任務的頁面。
一個專門放置任務的頁面,詳情可以查看每個任務裡商品導入的情況
但這樣會引入一個新的問題,由於導入的頁面與任務的頁面是割裂的,為了不打破用戶的「心流」,我們需要在用戶導入完畢後自然引導用戶進入任務查看,即「反饋提示」。
如下圖:導入後告訴用戶已經開始,並提供快捷入口讓用戶進入查看。
一個帶有快捷入口的提示
當用戶點擊取消時,利用氣泡框輕度提示用戶可以從此入口查看任務:
氣泡框的輕度提示
因為用戶已經點了【取消】,說明用戶:有其他流程需要處理;已經非常熟悉導入流程,不需要查看。所以此時為了不打擾用戶,做一個輕度提示即可(甚至可以只在用戶第一次導入時提示)。
導入完畢後,需要及時提醒用戶導入任務已完成,這裡有幾種方法,由於用戶不一定時刻在電腦前,所以可以取其中之一或全部用上。
一個彈出通知
所以要與開發團隊權衡好利弊,進行取捨。
三、總結
當初將異步的任務也設計成同步的交互,後來發現一團糟;經過幾次與團隊的探討,看別人的文章與設計後,總結出幾點:
碰到異步的任務時,最好能在代碼層面了解它是怎麼運作的,包括但不限於調用了什麼接口、接口調用的時長(這個決定了是否要同步處理還是異步處理)、接口返回的錯誤、任務是按照隊列去執行還是能夠並發執行;業務層面了解它需要的角色、流程、流程的時長、流程涉及到的場景。不要企圖僅用文案去解決用戶的不安以及等待,這個是我們犯過最大的錯;以為提示可以解決一切;但用戶會跟著流程走,流程設計出錯的時候,用戶會非常無助地停留在原地。多與開發溝通,很多時候,設計貌似只是產品或UI的事情,開發只是執行,但在我執行過的項目中,好的項目往往是開發一同參與設計部分的(並不是說執行,而是給出建議),因為有些方案是需要開發人員的知識才能想到(具體可以參考「增長黑客」一書中的案例)。本文由 @蔡包 原創發布於人人都是產品經理,未經許可,禁止轉載
題圖來自 Unsplash,基於 CC0 協議