web AR系統-3 效率評估-websocket
02-02
上一篇對系統的運行效率做了評估,耗費時間最大的在於ajax的時間開銷。基於樸素的工程師思想,考慮是否能通過替換ajax為websocket來減小這一部分的時間開銷。從而讓前端有更多的時間可以用來做別的事情。
推薦閱讀:
首先,在PC伺服器(酷睿 i5 centos7)上,後端執行一次完整的ajax時間大約為75ms。所謂完整的ajax,是指從發送請求的時間點開始,到請求執行完畢結果返回的時間點。使用websocket的話,相對於ajax除了有可能減少一些請求的時間耗費,還有一些其他的優點:
- 從邏輯角度,socket更容易控制。例如,可以前端間接性的發送請求給後端,後端判斷請求的內容和資料庫中目標圖像不匹配,則不返回。判斷匹配,再返回結果給前端。這種邏輯用socket會感覺比較合適。
- 同樣,這樣更容易做非同步控制。前端可以不需要等待後端的結果,就去處理下一幀圖像,後端則不斷處理消息隊列裡面的信息,發現匹配則發消息通知前端。邏輯上更清楚。
使用http://socket.io完成收發消息的部分,經測試PC本地socket只需要大約37ms就完成了從發送到收到回復的完整請求。效率整整比ajax快了一倍。
然而,最終在真實網路環境下測試,相對於之前平均150ms左右的ajax開銷,socket提升的空間非常有限。總體上也是120-150之間。個人猜測應該是這樣的原因,在真實的網路情況下,網路延遲才是導致時間耗費嚴重的最大的問題,而這個問題socket本身也是無法解決的。所以本地提升的30ms,放到這個網路延遲的大前提下是起不到多少作用的。
當然websocket並不是完全沒用,就像上面提到的,對於整體流程來講,會讓處理的邏輯更清楚。另外就是當處理很大消息量的時候,根據網路上獲取到的一些評測(如下圖),websocket會有更好的結果。而本系統不可避免面臨著大並發。
接下來會嘗試把特徵點提取這一步放到前端,這樣前端僅需要發送特徵向量給後端,通過減小發送的數據量,看是否能提高傳輸效率(當然特徵點的提取會佔用前端處理時間)。
推薦閱讀:
※如何評價Intel的實感(realsense)技術?
※如何評價 hololens 的『滑鼠出屏』交互?
※如何成為VR/AR領域的產品/交互設計師?