關于異步任務的設計探索(2)

0 評論 4463 瀏覽 7 收藏 10 分鐘

編輯導語:在上一篇文章《關于異步任務的設計探索(1)》中,作者為我們解答了異步任務的設計邏輯是什么?有哪些需要注意的問題?在本篇文章中,作者又繼續異步任務設計的故事,從代碼層面上分享了關于異步任務的設計探索。

終于有時間歸納一下另外一個系統的問題了,之前想說的只是一個業務上的異步(關于異步任務的設計探索(1)),今天寫的是真真正正的異步任務,是代碼層面上的異步并非業務所要求的異步。

一、問題示例

這次的例子來源于我們做“商品導入”這個功能,先看看我們之前的做法:

  • 用戶可以選擇導入某個平臺的商品到我們的后臺中,但是若想再導入需要等當前的導入任務全部結束才能進行第二次導入,而且還對商品進行了緩存,導致用戶在淘寶更新了商品后,需要相隔12個小時才能再次導入更新了的商品到我們平臺;

關于異步任務的設計探索(2)

整店導入商品

  • 在實踐過程中,我們發現很多人停留在此頁面,怕關掉此頁面,導入任務會中斷(雖然他關掉此頁面,后臺仍會繼續導入);為了處理這個問題,我們簡單粗暴地加了一個提示框:

關于異步任務的設計探索(2)

一個有三行文字的提示框??

  • 我們默認會將用戶的整個店鋪的商品導進來,用戶不能選擇導什么商品,這就導致后來的兩個問題:很難以導入次數去計費、消耗大量的服務器資源與成本;并且大多數用戶因為導入時間等待過長而流失掉。

關于異步任務的設計探索(2)

整店導入

總結一下以上問題:

  • 導入任務不能多個開啟,用戶需要等待任務完成后才能再導入其他商品;
  • 提示過長,并且沒有能讓用戶知道導入進度的地方;
  • 用戶無法選擇導入的商品,導致每次導入都消耗了大量的服務器資源和成本(有些店鋪的商品達到3000件)。

二、開始思考

接下來開始思考究竟怎么樣才能讓這個功能變好用,“好用”可以具體分為以下幾點:

  • 用戶控制:清晰知道進度,監控每個商品的導入情況,中斷任務的權力甚至是中斷某個商品導入的權力;
  • 前饋指引:告訴用戶這個功能是什么,可以做什么,功能有什么條件限制等等;
  • 反饋提醒:執行導入任務后,讓用戶有安全感地關閉當前頁面,具體為讓用戶知道他可以隨時隨地回來查看這個任務,這個任務完成時會立即通知到用戶。

于是第一點:讓用戶能夠選擇導入什么商品(當然這個需要接口支持),用戶用鏈接采集時并非立即執行導入任務,而是先采集好店鋪的所有商品(未開始采集商品詳情),讓用戶去選擇需要導入的商品,當然也需要給出方便的交互讓用戶可以一鍵選擇全部商品來進行導入(或者用戶第一次導入時,不需要選擇直接導入整店的商品)。

關于異步任務的設計探索(2)

選擇平臺

關于異步任務的設計探索(2)

采集店鋪商品后,可以選擇導入什么商品

執行導入后,并不在當前頁顯示導入的狀態或結果,引入另一個頁面來放置任務,所以引入了另一個專門放置導入任務的頁面。

關于異步任務的設計探索(2)

一個專門放置任務的頁面,詳情可以查看每個任務里商品導入的情況

但這樣會引入一個新的問題,由于導入的頁面與任務的頁面是割裂的,為了不打破用戶的“心流”,我們需要在用戶導入完畢后自然引導用戶進入任務查看,即“反饋提示”。

如下圖:導入后告訴用戶已經開始,并提供快捷入口讓用戶進入查看。

關于異步任務的設計探索(2)

一個帶有快捷入口的提示

當用戶點擊取消時,利用氣泡框輕度提示用戶可以從此入口查看任務:

關于異步任務的設計探索(2)

氣泡框的輕度提示

因為用戶已經點了【取消】,說明用戶:有其他流程需要處理;已經非常熟悉導入流程,不需要查看。所以此時為了不打擾用戶,做一個輕度提示即可(甚至可以只在用戶第一次導入時提示)。

導入完畢后,需要及時提醒用戶導入任務已完成,這里有幾種方法,由于用戶不一定時刻在電腦前,所以可以取其中之一或全部用上。

  • 短信:若用戶注冊時需要提供手機號,這是開發成本最低的一種做法,也是最快速,缺點是金錢成本會比較高;
  • 公眾號:若用戶使用微信登錄,并且關注公眾號,可以調用公眾號-消息模版能力,優點是0金錢成本,還能順便提高公眾號的粉絲,缺點是需要開發,并且消息模版只能使用微信的;
  • 網頁端直接彈出提示:優點是自己可以控制文案和樣式,并且能夠直接跳轉查看對應的任務,缺點是需要開發通訊類功能(socks之類),用戶離開后就收不到消息。

關于異步任務的設計探索(2)

一個彈出通知

所以要與開發團隊權衡好利弊,進行取舍。

三、總結

當初將異步的任務也設計成同步的交互,后來發現一團糟;經過幾次與團隊的探討,看別人的文章與設計后,總結出幾點:

  1. 碰到異步的任務時,最好能在代碼層面了解它是怎么運作的,包括但不限于調用了什么接口、接口調用的時長(這個決定了是否要同步處理還是異步處理)、接口返回的錯誤、任務是按照隊列去執行還是能夠并發執行;業務層面了解它需要的角色、流程、流程的時長、流程涉及到的場景。
  2. 不要企圖僅用文案去解決用戶的不安以及等待,這個是我們犯過最大的錯;以為提示可以解決一切;但用戶會跟著流程走,流程設計出錯的時候,用戶會非常無助地停留在原地。
  3. 多與開發溝通,很多時候,設計貌似只是產品或UI的事情,開發只是執行,但在我執行過的項目中,好的項目往往是開發一同參與設計部分的(并不是說執行,而是給出建議),因為有些方案是需要開發人員的知識才能想到(具體可以參考“增長黑客”一書中的案例)。

 

本文由 @蔡包 原創發布于人人都是產品經理,未經許可,禁止轉載

題圖來自?Unsplash,基于 CC0 協議

給作者打賞,鼓勵TA抓緊創作!
更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!