美文网首页
WebGL应用性能优化

WebGL应用性能优化

作者: 孤独剑GDJ | 来源:发表于2019-03-23 13:17 被阅读0次

0. 背景介绍

前段时间用WebGL做整车的web端展示,发现当三角片数量大于一定量级后,在微信内置浏览器内打开模型时,浏览器直接崩溃。于是就想到了数据压缩,花了大概一周多时间做数据压缩,然后就是修改代码,debug,修改代码,debug...
好容易调通了,上整车试试呗,在微信内置浏览器里边打开模型,见证奇迹的时刻到了,妈卖批,这次没有崩溃,但是发现数据加载的时候奇卡无比。像下边这样,持续大概要100秒左右:


优化前(一)

1. Chrome Performance工具

Chrome Performance工具界面

如上图所示,当我们刷新页面时,按下左上角实心黑色原点按钮,就可以把页面加载过程中的一些性能指标给记录下来,依据其记录结果,我们可以有针对性地对应用程序进行优化。
针对前边提到的加载卡顿的问题,我们使用Performance工具进行分析,其结果如下:


性能分析结果

由分析结果可知,性能瓶颈在XHR Load这个执行过程中,那么具体是哪个调用影响了性能呢?我们可以展开调用堆栈一探究竟:


展开调用堆栈
从展开的调用堆栈,我们很容易发现,是下边这条调用造成了严重的耗时:
gl.getShaderParameter,即图中红框框起来的位置。并且从调用堆栈中我们能知道这个函数的调用是在文件:shader.ts文件中,于是我们在本地IDE中打开该文件,发现的确有这样一条调用:
源码 做过WebGL开发的同学应该很容易看出来,这段代码其实是为了捕捉着色器的编译错误信息,方便调试用的,正式它导致了异常的时间消耗。我们把它注释掉,重新编译,运行,看看结果:
第一次优化后的性能分析结果 发现XHR Load这个执行耗时减少了20000+毫秒,但是性能瓶颈依然在这个地方。因此我们再次打开调用堆栈看看什么情况: 第一次优化后的调用堆栈 这次依然是gl.getShaderParameter造成了异常耗时,但是调用位置发生了变化,这次是在文件:shaderprogram.ts中,还是一样的,打开源码看看:
let length = gl.getProgramParameter(id, gl.ACTIVE_ATTRIBUTES);

这个调用的目的是为了来获取顶点着色器中attribute变量的数量。

由于最近为了做数据压缩修改了很多代码,猜测可能和我近期的代码修改有关(创建了太多的着色器程序),因此尝试修改代码逻辑,尽量减少不必要的着色器创建操作,对代码进行第二次优化,然后又是重新编译、运行,性能分析: 第二次优化后的性能分析结果
这一次,XHR Load的执行耗时已经从第一次优化后的63000+毫秒降低到了26000+毫秒,大概减少到了最开始没有优化时候的1/3左右。但是这个地方依然是性能瓶颈,应该还可以优化...

相关文章

  • WebGL应用性能优化

    0. 背景介绍 前段时间用WebGL做整车的web端展示,发现当三角片数量大于一定量级后,在微信内置浏览器内打开模...

  • WebGL应用性能优化(续)

    这篇文章是接着上一篇文章写的。之前提到,两次优化做完之后,性能瓶颈依然在XHR Load这条调用上边。而且耗时还是...

  • app性能优化(转)

    Android面试——APP性能优化Android应用性能优化基础知识。布局优化避免OverDraw过渡绘制优化布...

  • 前端性能优化

    js性能小贴士——优化循环 前端网页与js性能优化 我总结的js性能优化的小知识 提高 web 应用性能之 Jav...

  • 前端性能 优化 大全

    js性能小贴士——优化循环 前端网页与js性能优化 我总结的js性能优化的小知识 提高 web 应用性能之 Jav...

  • android 性能优化

    android 性能优化 android性能优化在实际开发中会经常应用到,当项目越来越庞大时,性能优化就显得更加重...

  • Java基础-优化

    网站性能优化 前端性能优化 应用服务器性能优化 解决线程安全的方法: 将对象设计成无状态对象,如Servlet 使...

  • 大佬就是强!意外收获史诗级Android性能优化资源,从理论到实

    Android性能优化 Android性能优化在实际开发中会经常应用到,当项目越来越庞大时,性能优化就显得更加重要...

  • 网络优化

    网络性能排查工具 网络性能优化 应用程序优化 优化I/O模型 套接字 net.core.optmem_max增大每...

  • 安卓开发详解—Android应用移动设备电池耗电性能分析

    前言 有了UI性能优化、内存性能优化、代码编写优化之后我们在来说说应用开发中很重要的一个优化模块—–电量优化。 A...

网友评论

      本文标题:WebGL应用性能优化

      本文链接:https://www.haomeiwen.com/subject/qvajvqtx.html