威狐小編:11月20-22日,qqjoy嘉年華在上海舉辦。20日當天的qq開發(fā)者大會,騰訊公司qq小程序/小游戲平臺技術負責人朱煌帶來了技術賦能--小程序小游戲最佳實踐的演講。
對于玩家來說,小程序/游戲在體驗上一定是開了就用,開了就玩,這對性能也提出了更高的要求。目前大部分用戶反饋集中在啟動速度和運行性能等方面。
朱煌表示,在loading界面等待3秒以上的用戶流失率上升非???,如果首次啟動速度可以在3秒內完成,那么可以減少75%的流失。對于如何優(yōu)化游戲加載速度,朱煌給出了具體的答案。
騰訊為小游戲開發(fā)者準備了大招:qq和ieg去年一起發(fā)起聯合開發(fā)的crossengine,為小游戲和手游同時提供3d引擎能力和工具支持。另外,可以一鍵開發(fā)支持手機游戲、qq平臺和微信小游戲平臺多平臺運行,還計劃支持原生云游戲。
以下為演講實錄
朱煌:各位開發(fā)者,大家上午好!我是qq小程序游戲隊Hank
今天非常高興能夠在這里從技術角度分享小程序游戲平臺的最佳實踐和思考。
首先我們簡單回顧一下平臺功能開放的過程:自去年7月上線開放訪問以來,憑借較低的接入成本和快速迭代的生態(tài)能力,吸引開發(fā)者加入,已經打造出不少優(yōu)質的小程序和游戲。
那我們從最早基礎建設,到不斷開發(fā)的新能力,比如云開發(fā)和實時音視頻的能力,去幫助直播類的小程序快速上線。
同時,QQ把自己的關系鏈通過子域的方式開放給開發(fā)者,可以開發(fā)出基于好友和群關系的玩法,提高用戶粘性。
除了關系鏈以外,QQ特有的生態(tài),包括群和彩簽能力,以及加好友加群等私域流量也以API的方式開放出來。
小程序小游戲和平臺的結合越來越緊密。在這個過程中,我們一直是開發(fā)者的幫手,來生產更多優(yōu)質的內容。
最近幾個月,我們一直在思考兩個問題,第一個是,平臺還能提供哪些能力,尤其在QQ強大的社交背景下。那這里也做了一些嘗試,比如對戰(zhàn)游戲在用戶數據上的確有更好的表現。
另外一個方面,小程序小游戲在體驗上一定是“點開即用、點開即玩”的方式,對性能也有更高的要求。那我們也一直在思考性能有沒有進一步提升的空間,哪些是可以一起來優(yōu)化。
首先,我們發(fā)現的一個趨勢是,越來越多的虛擬形象在游戲中的使用,可以提高游戲的沉浸感和趣味性。比如snapgames通過bitmoji帶來更多高品質的游戲。回到我們的平臺,也有非常多的3D形象在游戲中使用,只是大部分都是骨骼小人和灰皮小人,缺少精細的運營。那帶來的游戲體驗感也會差一些。主要的原因是素材制作的成本還是比較高的。
虛擬形象一直都是QQ的社交資產,從PC時代的QQ秀,到移動時代的厘米秀,已經是一套體系,并且積累了非常多的用戶。
這里的玩法,從厘米秀選擇,2D/3D主頁,到AIO的動作/表情玩法,以及最近我們上線的自動捏臉和裝扮,可以滿足更多個性化的需求。厘米秀已經活躍在QQ的各個場景。
厘米秀有沒有可能和小游戲結合到一起呢?隨著平臺和產品的開放,答案是肯定的。我們把這部分能力做成厘米秀Kit,放到小游戲生態(tài)中。也能帶來不少效率的提升,原來在一個游戲團隊,需要設計師、前端、后臺一起協(xié)作,幾個星期甚至到數月才能做出來的效果。那現在只需要一位前端做一下API的接入,幾天就能完成。那這里的設計原理和接入方法具體是怎么樣的。
首先看一下現有的小游戲架構,初步分為三個部分:上部是游戲業(yè)務JS邏輯,中間是第三方引擎;底部是平臺的native引擎。
厘米秀kit實現的是平臺和引擎在模型標準和加載能力的對齊。
開發(fā)商只需要簡單的代碼接入,其他的可以交給我們,就可以把用戶個性化的形象帶入到游戲中。目前厘米秀kit已經有部分游戲在接入,歡迎大家來使用。除了能力建設外,作為開發(fā)商和用戶的連接者,我們也一直在傾聽用戶的聲音。
這個是最近半年來提取的一些反饋關鍵字??梢钥吹揭恍┵澰S的,那更多的是用戶反饋的問題,打不開、卡頓是經常出現的關鍵字。那我們從感性的反饋,去做一下理性和技術的分析。
首先是啟動速度,啟動耗時和留存有些密不可分的關聯,有位研究人機交互的Jakob教授,發(fā)現響應時間有三個非常重要的時間點:
首先是100ms,如果超過100ms,人會感受到交互的不連續(xù)。大部分的native頁面打開都是在100ms內。
第二個是1s,超過1s,會感受到思路被打斷。這也是為什么很多性能優(yōu)化的目標都是秒開。如果超過10s,大部分用戶會選擇關閉。那我們看一下,大盤首次打開流失分布圖,也就是說在loading界面就關閉的用戶關閉的時候等了多久。
其中可以看到,大于3秒,流失率升得很快,如果首次啟動速度能優(yōu)化到3s內,我們能減少75%的用戶流失。那有沒有什么辦法?
首先簡單看一下啟動的流程,從點擊到渲染出來,平均iOS需要3-4s,android需要5-6s,經過分析,大部分的耗時在業(yè)務包的下載。
而外網的首包平均大小是2.29M,雖然有壓縮的辦法,意味著光下載可能都需要幾秒,這里有不少優(yōu)化空間。另外加載數據也需要一個以上的RTT,可能有上百毫秒的延時。
針對這些場景/部分,我們建議一些優(yōu)化辦法。首先是分包,這個是最有效的優(yōu)化手段,可以把啟動邏輯放在首包,其他放分包延遲加載。
另外針對游戲,我們去年底推出了引擎插件,只需要在game.json配置引擎信息,能做到跨游戲的引擎插件復用,實際測試平均能提速28%。
最后一個是數據預拉取的API,可以提前或者并行拉取啟動需要的JSON數據或者對應的資源包zip。加快首幀的加載。
另外一方面,渲染性能也是體驗非常重要的部分。一般小于30fps就可能有卡的感覺。那這個占比在外網接近36%。
那怎么發(fā)現卡頓點具體在哪,我們提供了FrameFrofile工具,可以通過真機調試看到每幀的函數調用和消耗,對應來優(yōu)化。實際FPS低是有一些常見的原因:
(1)JS邏輯過于復雜,復雜的部分推薦用異步化和worker來解決。
(2)幀間隔設計不合理,比如實際的游戲復雜度每秒只能處理30幀,但是設置了60次回調,會導致處理不過來。這里可以采用動態(tài)幀率的API來設置合理的回調次數。
(3)紋理和物理效果復雜,可以通過一些降級、復用的方式優(yōu)化。平臺也做了GPU加速來優(yōu)化這里的性能體驗。
有了這些優(yōu)化后,大部分游戲都可以流暢的跑起來。但是隨著小游戲和硬件的發(fā)展,游戲的玩法越來越多樣,尤其現在的大型3D游戲也嘗試在小游戲平臺跑起來。由于這些游戲模型頂點和面數非常多,drawcall也非常多,性能瓶頸比較明顯。
尤其基于webgl渲染的框架,大部分邏輯都是在JS層,而且在iOS平臺沒有JIT性能會更差。當前框架已經不能滿足這些游戲的要求,帶著邏輯下沉到native的思路,和IEG游戲引擎團隊的研究。
我們從去年開始一起聯合開發(fā)CrossEngine,為小游戲和手游同時提供3D引擎能力和工具的支持。
CrossEngine主要包括全新設計的渲染接口,能使用最新的硬件能力,比如iOS的Metal。也使用了最新的ECS架構,并且一次開發(fā)能夠支持手游、QQ平臺和微信小游戲平臺多平臺運行,也計劃支持原生云游戲。
CrossEngine目前已經完成了基本模塊的開發(fā),包括整個Core、runtime和UI系統(tǒng)。也完成了demo的驗證。這里有一個在手機QQ iOS上跑的demo效果,開放的格斗場景,超過10W面的模型,已經有了流暢的效果。
CrossEngine目前已經也有深圳的游戲團隊在接入和測試,也期待很快有更多游戲來使用。
總體上,平臺以后會更開放,更多玩法和能力。同時也會在工具和引擎上提供給大家更強大的支持,以技術賦能。也期待在QQ平臺上創(chuàng)造更多優(yōu)質的小程序和小游戲。
謝謝大家。
404549