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

2021-01-10 人人都是產品經理

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

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

一、問題示例

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

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

整店導入商品

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

一個有三行文字的提示框

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

整店導入

總結一下以上問題:

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

二、開始思考

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

用戶控制:清晰知道進度,監控每個商品的導入情況,中斷任務的權力甚至是中斷某個商品導入的權力;前饋指引:告訴用戶這個功能是什麼,可以做什麼,功能有什麼條件限制等等;反饋提醒:執行導入任務後,讓用戶有安全感地關閉當前頁面,具體為讓用戶知道他可以隨時隨地回來查看這個任務,這個任務完成時會立即通知到用戶。於是第一點:讓用戶能夠選擇導入什麼商品(當然這個需要接口支持),用戶用連結採集時並非立即執行導入任務,而是先採集好店鋪的所有商品(未開始採集商品詳情),讓用戶去選擇需要導入的商品,當然也需要給出方便的交互讓用戶可以一鍵選擇全部商品來進行導入(或者用戶第一次導入時,不需要選擇直接導入整店的商品)。

選擇平臺

採集店鋪商品後,可以選擇導入什麼商品

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

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

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

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

一個帶有快捷入口的提示

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

氣泡框的輕度提示

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

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

一個彈出通知

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

三、總結

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

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

題圖來自 Unsplash,基於 CC0 協議

相關焦點

  • 有返回結果的異步任務Futrue與Callable
    異步任務有返回值 如果出現一個計算量稍大用時較長而後面需要結果的情況,可以先把這個任務提交到另外的線程異步執行,主線程仍然繼續做運行等到需要計算結果的時候再來獲取,但是提供異步計算Runnable或者說線程Thread都不返回結果。
  • 《Java 8 in Action》CompletableFuture:組合式異步編程
    Future接口Future接口在Java5中被引入,設計初衷是對將來某個時刻會發生的結果進行建模。它建模了一種異步計算,返回一個執行運算結果的引用,當運算結束後,這個引用被返回給調用方。在Future中觸發那些潛在耗時的操作把調用線程解放出來,讓它能繼續執行其他有價值的工作,不再需要等待耗時的操作完成。
  • 通俗系列之同步、異步、阻塞和非阻塞
    那究竟什麼是同步、異步、阻塞和非阻塞呢?我決定嘗試用比較通俗的例子舉例來解釋一下,於是便有了這篇文章。同步概念什麼是同步?同步就是一個任務的完成依賴於另外一個任務,只有被依賴的任務完成後,那麼依賴的任務才能繼續完成。
  • 【本科教學】採用慕課平臺異步SPOC授課解讀
    面對疫情影響,學校及早謀劃,充分研究已有的在線教學平臺和資源,綜合考慮我校實際,反覆論證,設計方案,於2月5日發布了《關於做好2019-2020學年春季學期本科教學相關工作安排的通知》(教字[2020]6號),盡最大努力保證教學秩序,減少疫情對本科教學的影響。
  • 單相異步電動機型號及分類
    打開APP 單相異步電動機型號及分類 發表於 2019-10-24 09:28:24 單相異步型號由系列代號、設計代號、機座代號
  • 採用BC定時查詢方式的總線控制器異步通訊處理方案
    異步請求方式無查詢開銷,但它對非周期消息響應不確定,必須在請求RT獲得總線使用權時BC才組織傳輸非周期消息。BC定時查詢方式較前者有很強的確定性,它每個小周期對各個終端查詢一次,可以保證非周期消息的解析度,雖然有查詢開銷,但由於採用UDP&T方式,開銷並不多。另外由於它的確定性,系統設計時可確切地對系統進行性能評價,便於系統設計。
  • Django 3.1異步視圖實例學習
    請注意,此特定視圖不是異步調用任何內容。如果Django以傳統的WSGI模式運行,則將創建(自動)新的事件循環來運行此協程。因此,在這種情況下,它可能會比同步版本慢一些。但這是因為沒有使用它來同時運行任務。那麼,為什麼還要麻煩編寫異步視圖呢?同步視圖的局限性只有在訪問規模很大才顯現出其瓶頸。當涉及到大型Web應用程式時,比如FaceBook。
  • 三相異步電動機維護保養_三相異步電動機額定電流計算
    三相異步電動機維護保養_三相異步電動機額定電流計算 網絡整理 發表於 2020-03-16 09:03:38   三相異步電動機維護保養   我國中小型異步裝機容量已達
  • JAVA中使用CompletableFuture進行異步編程
    CompletableFuture異步任務執行線程池,默認是把異步任務都放在ForkJoinPool中執行。在這種方式中,主線程不會被阻塞,不需要一直等到子線程完成。主線程可以並行的執行其他任務。使用runAsync 和 supplyAsync方法CompletableFuture 提供了四個靜態方法來創建一個異步操作。
  • 三相異步電動機的結構和原理
    我們今天一起學習下三相異步電動機的知識,首先我們來了解一下三相異步電動機的結構和原理。先看一下三相異步電動機的結構。根據轉子繞組的不同的形式,我們把三相異步電動機分為鼠籠式型的三相異步電動機和繞線型的三相異步電動機。定子由機座,定子鐵芯,定子繞組;轉子由轉子鐵芯,轉子繞組,以及相應的軸和軸承所組成。在三相異步電動機的基座上有散熱筋,是增加異步電動機的散熱功能。
  • RMxprt在三相異步電動機中的2D電磁場分析
    摘要 RMxprt是基於電機等效電路和磁路的設計理念來計算、仿真各種電機模型,具有建立模型簡單快捷、參數調整方便等優點,同時具備一定的設計精度和可靠性。針對如何才能更好地計算仿真三相異步電動機,求解二維和三維有限元件這一問題。文中以一臺三相異步電動機為藍本,分析RMxprt模塊在三相異步電動機的2D電磁場的應用。
  • 上海市市場監督管理局:2批次三相異步電動機產品抽查不合格
    米迪電機(上海)有限公司米迪電機(上海)有限公司高效率三相異步電動機圖形商標YE2-80M2-2 1.1kW/910359;910360上海連成電機有限公司上海連成電機有限公司三相異步電動機/YX3-90L-2 2.2kW/2004051
  • 基於TLl6C550C的DSP異步串行通信的實現
    為此,本文基於TL16C550C設計了一種通過TMS32C6416實現UART數據通信的方法,同時給出了其硬體設計框圖以及通過TMS320C6416初始化TLl6C550C的軟體編程方式。在應用系統中,往往需要DSP與下位機通信或者接受上位機的控制信號時,一般都是採用異步串行通信協議,如RS232或RS422來實現。由於TMS320C6416器件自身只帶有同步的串口,因此,為了實現正常的通信,一般都需要為其擴展異步串口。
  • 上海市市場監管局:4批次三相異步電動機產品不合格
    本次抽查發現涉及安全性指標的保護接地裝置檢查項目有2批次符合標準要求。另有3批次產品不符合《強制性產品認證管理規定》,涉及的不合格項目為:CCC標識。保護接地裝置的設計目的是保證接地裝置與接地導線具有良好的電連接而不損壞導線和端子,對於電動機中絕緣一旦失效有可能帶電的可觸及金屬零部件與接地裝置有永久的、可靠的和良好的電連接。
  • Workerman 3.3.6 發布,新增多個異步 PHP 組件
    支持異步Mysql客戶端支持異步Redis客戶端支持異步HTTP客戶端支持異步dns客戶端支持異步zmq客戶端支持異步whois客戶端支持異步RabbitMQ客戶端支持異步文件系統支持異步進程組件支持promise其它更多組件...
  • 三相異步電動機知識詳解,入門不得不看的材料
    ,因此目前三相異步電動機已經被廣泛的使用在很多方面,並且三相異步電動機也是很多電控專業基本的知識,本文就詳細的為大家介紹一下關於三相異步電動機的相關知識,希望本文的介紹,能夠讓熱愛電動機的迷們能夠對三相異步電動機有一個比較清晰的認識。
  • 《原神》探索劍冢任務怎麼做 探索劍冢任務完成方法匯總
    導 讀 原神中探索劍冢任務還是比較有趣的,那麼到底要怎麼才能完成呢?
  • 三相異步電機的用途、結構
    可見,電機的基本結構是由固定不動的部分一定子和轉動部分轉子以及其他零部件組成的,如圖6-2所示。1.定子異步電機的定子由定子鐵芯、定子繞組以及機座、端蓋、軸承等組成。大中型異步電機定子鐵芯沿軸線長度上每隔一定距離有一條通風溝,以利於散熱。(2)定子繞組定子繞組有成型硬繞組和散嵌軟繞組兩類。散嵌軟繞組多用於小容量電機,它是由高強度漆包圓銅線(或鋁線)繞制而成。
  • 三相異步電動機正反轉接線圖
    打開APP 三相異步電動機正反轉接線圖 姚遠香 發表於 2018-12-21 13:46:44
  • 國內首臺6MW級異步鼠籠風力發電機成功下線
    該發電機為國內首臺6MW級異步鼠籠風力發電機,是公司為中國船舶集團海裝風電有限公司高海拔風電機組配套研製的一款大功率、緊湊型異步風力發電機。智能化設計智能化運行該發電機採用多點溫度、速度、振動及報警信號監控設計,實現發電機智能化運行。