關于性能問題優化的小討論

??大家好,我是阿趙。
??最近很流行把之前制作在安卓或者iOS端的游戲轉成微信小程序上架,我所在的項目也有這樣的操作。微信小程序是用WebGL來運行的,實際上它的性能很差,只有不到app端的三分之一的性能可用,內存方面也有非常大的限制,所以導致了在微信小程序端的應用比較容易閃退,而且幀率比app端要低很多。
??我的項目同樣也遇到了類似的問題,閃退、掉幀等問題很影響游戲的體驗。大家都在努力的去嘗試解決這個問題。領導也非常的著急,總感覺團隊沒有這方面的經驗,想在外面找些朋友來幫忙解決,包括網上問一些其他公司的人,甚至帶著某些同事直接去別的公司去取經。
??在取經完成的第二三天,我們的游戲小程序端的閃退率從原來的百分之10幾,掉到了只有百分之三左右了。得到了這個結果,大家都很高興,領導估計就更高興了,因為他可以確定團隊本身的確沒經驗沒能力解決這個閃退問題,然后得益于他找關系帶我們去取經,最終解決了這個問題。
??從不懂技術的人的眼中,解決一個問題,應該是只要大方向改一下,就OK的。比如說,引擎里面有一個什么設置,你只要勾選一下,就可以。或者發布的時候,有個什么選項漏了勾選,然后選一下,就解決問題了。這些問題有可能只是自己沒有經驗忽略了,所以稍微問一下人,應該就解決了。但實際上是不是真的這么簡單了?
??實際情況是,為了解決這個問題,其實我重寫了對象池,重寫了消耗大的Shader,重寫了之前消耗占比比較大的角色移動邏輯,然后再在場景上面做了lua的內存檢測和定時回收機制。其實這些問題在領導出去取經之前,就已經做好了,只是一直沒有更新出去。然后取經回來的結果,唯一的收獲只有一個提高設置可用內存,讓低端機直接不能啟動,從而欺騙性的降低閃退率(低端機直接啟動不了,當然就沒有閃退率了),當然,這種手段也是可以用上去的,畢竟低端機沒有人權,不需要玩游戲。
??然后就一起更新了,所以得到的結果是,問題在取經后順利解決了。不過其實我也無所謂,因為雖然整個項目的底層都是我寫的,但由于工作室同時開多個項目,我寫完了所有的底層之后,就已經去做別的項目組,并不直接參與該項目的管理了,只是由于我是整個底層的作者,有難題還是需要我去解決而已。所以不論怎樣,解決了問題就好了。
??領導不懂技術,是很正常的情況。實際上如果領導一定要搞技術,反而沒有精力去搞管理工作。不過很多時候,領導自己認為的事情,實際情況并不是那樣。如果真的能隨隨便便問問朋友,找找關系,就能把一個項目做好,把技術問題都解決,那么辦公司就太簡單了。就算朋友之間的關系有多好,涉及到工作利益上的東西,如果不是有足夠利益的誘惑,就算關系再好,有別的公司過來請教,我也不可能把真正的核心問題告訴別人。而能告訴別人的東西,一般網上都能查得到。
??然后是,每個項目的底層框架和設計理念會存在差異,并不是說一個項目的經驗就能直接套用在另外一個項目上的。都是需要具體問題具體分析。所以近年來才這么多專門幫別人分析項目性能的服務出現,比如UWA,我也用過。如果是買服務深入項目去做詳細分析,我覺得是非常有用的,他們可以幫助項目很具體的找出問題所在,并提供建議針對實際情況去修改。但如果只是提供一下工具,讓我們看一下性能,或者只是簡單的問問一些籠統的問題,其實對項目的幫助是不會很大的。
??最后再分享一下阿趙我自己解決性能問題的思路。我自己解決問題的思路很簡單,先分析消耗的來源,是cpu、gpu還是內存。有了大方向之后,再配合著性能分析工具,逐個值得懷疑的函數去檢查,找出真正產生問題的點。當找到了懷疑問題所在的地方,直接對比調用和不調用時候的性能情況。如果確定了產生問題的根源,那么就開始分析函數存在的問題,然后再針對性的進行優化了。
??這些步驟都很細碎,很繁瑣,所以是比較耗時間的。查性能問題本身就不是一個很簡單的事情,所以有可能大家都很心急,但實際上心態要好。因為真的不存在說聽誰誰說改一個設置,問題就能解決這么簡單的。問題的出現,往往是由于某一行代碼欠缺考慮,或者某個資源做的時候不夠規范,諸如此類。如果沒有良好的心態,真的是做不到逐個函數去檢查,然后找出根源去解決問題的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14031.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14031.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LabVIEW機器視覺技術對工業制造有什么影響?

LabVIEW機器視覺技術對工業制造產生了深遠的影響,主要體現在以下幾個方面: 1. 提高生產效率 LabVIEW機器視覺技術可以自動檢測和分析生產線上的產品,提高檢測速度和精度。傳統的人工檢測方式往往效率低下且容易出錯,而機器視覺系…

java 數組的常見操作

在 Java 中,數組是一種特殊的對象,用于存儲相同類型的多個元素。以下是一些常見的數組操作: 聲明數組:使用以下語法聲明一個數組,其中 type 是數組元素的數據類型,name 是數組的名稱。 type[] name;例如&…

第19講:自定義類型:結構體

目錄 1.結構體類型的聲明1.1 結構體回顧1.1.1 結構的聲明 特殊的結構聲明1.3 結構的?引? 2. 結構體內存的對齊2.2 為什么存在內存對??2.3 修改默認對?數 3. 結構體傳參4. 結構體實現位段4.1 什么是位段4.2 位段的內存分配4.3 位段的跨平臺問題4.5 位段使?的注意事項 正文…

梳理 JavaScript 中空數組調用 every方法返回true 帶來驚訝的問題

前言 人生總是在意外之中. 情況大概是這樣的. 前兩天版本上線以后, 無意中發現了一個bug, 雖然不是很大, 為了不讓用戶使用時感覺到問題. 還是對著一個小小的bug進行了修復, 并重新在上線一次, 雖然問題不大, 但帶來的時間成本還是存在的. 以及上線后用戶體驗并不是很好. 問題…

JVM學習-垃圾收集器(二)

Serial回收器:串行回收 Serial收集器是最基本、歷史最悠久的收集器JDK1.3之前新生代唯一的選擇Hotpot中Client模式下的默認新生代垃圾收集器采用復制算法,串行回收“Stop-the-world”機制的方式執行內存回收除了年輕代之外,Serial收集器還提…

TG-5006CG溫補晶振在WiFi6無線路由器模塊的應用

WiFi6無線路由器是采用了wiFi6技術的無線網絡設備,旨在為家庭、辦公室或其他場所提供高速、穩定的無線網絡連接。它不僅能實現更高的數據傳輸速率和更低的延遲,還提供了更先進的加密和安全措施,確保用戶數據安全。為了支持這些高級功能&#…

深入 Rust 標準庫,Rust標準庫源代碼系統分析

系列文章目錄 送書第一期 《用戶畫像:平臺構建與業務實踐》 送書活動之抽獎工具的打造 《獲取博客評論用戶抽取幸運中獎者》 送書第二期 《Spring Cloud Alibaba核心技術與實戰案例》 送書第三期 《深入淺出Java虛擬機》 送書第四期 《AI時代項目經理成長之道》 …

Elasticsearch集群部署以及認證配置

文檔地址: 官網文檔地址: https://www.elastic.co/guide/index.html rpm包/源碼下載地址:https://www.elastic.co/cn/downloads 源碼安裝-環境準備: node-01 192.168.95.174 node-02 192.168.95.173 node-03 …

關于Mysql基本概念的理解

系列文章 關于時間復雜度o(1), o(n), o(logn), o(nlogn)的理解 關于HashMap的哈希碰撞、拉鏈法和key的哈希函數設計 關于JVM內存模型和堆內存模型的理解 關于代理模式的理解 關于Mysql基本概念的理解 關于軟件設計模式的理解 文章目錄 前言一、事務隔離級別二、存儲引擎1.…

【Python爬蟲】案例_斗魚

聲明:案例只用于學習,不得惡意使用 要求:獲取直播間標題、類型、主播、熱度,并實現翻頁 定位隨著網站更新可能不會實現,請自行更改 from selenium import webdriver from selenium.webdriver.chrome.options import…

【uniapp】CSS實現多行文本展開收起的文字環繞效果

1. 效果圖 收起狀態 展開狀態 2. 代碼實現 <view class"word-wrap" id"descriptionTxt"><view class"fold-text" v-if"isFold"><text class"fold-btn" click"changFold">全文</text&g…

【網絡安全】Linux 應急響應-溯源-系統日志排查知識點

Linux 應急響應-溯源-系統日志排查知識點匯總 1. 查看當前已經登錄到系統的用戶 (w 命令) w2. 查看所有用戶最近一次登錄 (lastlog 命令) lastlog lastlog | grep -v "Never logged in"3. 查看歷史登錄用戶以及登錄失敗的用戶 (last 和 lastb 命令) last lastb4. …

使用docker完整搭建前后端分離項目

1、docker的優勢&#xff0c;為啥用docker 2、docker的核心概念 鏡像【Image】- 只讀模板 容器【Container】- 運行鏡像的一個外殼&#xff0c;相當于一個獨立的虛擬機 倉庫【repository】- 鏡像的管理工具&#xff0c;可公開&#xff0c;可私有&#xff1b;類似git倉庫 3、c…

【前端】js通過元素屬性獲取元素

【前端】js通過元素屬性獲取元素 <div for"hc_opportunity_config">aaaaa</div>//通過屬性獲取元素document.querySelector([for"hc_opportunity_config"]) document.querySelector([屬性"屬性值"])

操作教程|通過DataEase開源BI工具對接金山多維表格

前言 金山多維表格是企業數據處理分析經常會用到的一款數據表格工具&#xff0c;它能夠將企業數據以統一的列格式整齊地匯總至其中。DataEase開源數據可視化分析工具可以與金山多維表格對接&#xff0c;方便企業更加快捷地以金山多維表格為數據源&#xff0c;制作出可以實時更…

包拯斷案 | MySQL5.7替換路上踩過的坑 一鍵get解決辦法@還故障一個真相

提問&#xff1a;作為DBA運維的你&#xff0c;是否有過這些煩惱 1、業務系統進行替換投產時&#xff0c;發現數據庫回放并行度低 2、雖然2個數據庫集群使用同一份數據&#xff0c;卻在關閉雙一后&#xff0c;二級從庫的回放效率依舊緩慢&#xff0c;不知是什么原因&#xff1f…

機器人開源項目分享,助力一戶一機器人

最初&#xff0c;因隋煬帝思念心切&#xff0c;命工匠按照柳抃的形象制作了木偶機器人&#xff0c;被認為是歷史上最早的機器人之一。這些木偶機器人通過精巧設計的機關&#xff0c;能夠執行坐、起、拜、伏等動作。 如今&#xff0c;隨著科技的發展&#xff0c;機器人已經廣泛…

從ES5邁向ES6:探索 JavaScript 新增聲明命令與解構賦值的魅力

個人主頁&#xff1a;學習前端的小z 個人專欄&#xff1a;JavaScript 精粹 本專欄旨在分享記錄每日學習的前端知識和學習筆記的歸納總結&#xff0c;歡迎大家在評論區交流討論&#xff01; ES5、ES6介紹 文章目錄 &#x1f4af;聲明命令 let、const&#x1f35f;1 let聲明符&a…

Linux磁盤初始化與fstab文件更新

環境&#xff1a; Redhat 7.9 本文操作&#xff1a; >>給disk設置分區 &#xff08;fdisk&#xff09; >>給disk設置file system格式 (mkfs ) >>創建路徑&#xff0c;并將disk mount上(mkdir和mount ) >>修改fstab文件 初始化Disk 初始化前&#xff…

Vue組件通信 - 組件傳值 / 什么是組件

1.什么是組件通信&#xff1a; 組件&#xff08;.vue&#xff09;通過某種方式來傳遞信息以達到某個目的 2.組件通信可以解決什么問題&#xff1a; 每個組件之間都有獨立的作用域&#xff0c;組件間的數據是無法共享的&#xff0c;但在實際開發中我們常常需要讓組件之間共享…