1. 程式人生 > >cocos creator JavaScript微信小遊戲開發問題筆記:遊戲在瀏覽器和微信開發工具的模擬器上執行都沒有問題,但手機上執行卻會都別卡。

cocos creator JavaScript微信小遊戲開發問題筆記:遊戲在瀏覽器和微信開發工具的模擬器上執行都沒有問題,但手機上執行卻會都別卡。

最近專案組在開發一款執行在微信小遊戲環境的鬥地主遊戲,專案的第一個版本收尾階段突然出現了一個奇怪的bug,因為之前開發階段的測試都是在瀏覽器以及微信開發工具上的模擬器進行的測試,所以直到臨近專案上線才發現這個問題,具體表現如下:遊戲執行在手機上會特別卡,並且卡一段時間、或者卡一下就斷線,即使斷線恢復後也依然很不穩定。

初步猜想:卡頓問題屬於客戶端程式問題,斷線情況可以排除心跳包問題,可能是客戶端傳送訊息包存在格式問題,或者伺服器一些異常導致。

首先通過除錯資訊來看,客戶端並沒有主動請求斷開與伺服器的連線,追蹤伺服器的日誌資訊來看,在客戶端與伺服器斷開連線前,都是因為資料傳輸協議解析錯誤問題,導致伺服器主動斷開連線的,然後就又通過除錯資訊檢視斷開連線前客戶端傳送給客戶端的訊息包是否有格式問題,結果出乎意料沒有。

這就奇怪了,沒辦法,專案週期將至,不得不做些取捨,暫時實在沒有頭緒只好打算在伺服器解析到訊息包錯誤時忽略該訊息,不做主動斷開連線,本以為這樣就可以暫時了事,怎料遊戲執行在手機環境下的問題依然存在。

從斷線這條路線找下去沒有頭緒,只好換成從卡頓問題下手,用排除法把可能的邏輯程式碼註釋除錯,最後定位出了是因為程式碼中有些地方的console.log(...)日誌記錄非常耗時,有些地方光是因為加了這行程式碼就使邏輯執行時間慢了3秒,好了,問題找出來了就好辦,最後採取的措施是:開發測試時因為是用瀏覽器以及微信開發工具模擬器除錯,加上在模擬器上又不存在這種現象(其實是裝置配置問題),所以程式設計師自己測試不加任何優化,如果是要上傳微信體驗包,就把console.log方法重寫為一個空方法,這樣,專案裡每一句呼叫console.log()方法的地方實際不能使用正常的日誌記錄功能,僅僅是呼叫的一個空方法,這樣改善之後,遊戲跑在手機上就不存在這種問題了。