【笔记】Chrome浏览器的性能调试(performance)工具使用和代码优化

文章目录

简介

记录chrome性能页签的使用和代码优化

需求

在RK3528上通过浏览器访问视频网站并播放视频, 但是由于性能问题, 加载界面缓慢, 视频播放卡顿(1-2帧每秒)

过程

了解页签功能

  • 在电脑浏览器打开视频网站, 等待页面自动播放后, 通过菜单中的开发者工具打开控制台
  • 切换到网络(network)面板, 观察以ts结尾的请求的间隔(这里大概是5秒)
  • 切换到性能(performance)面板, 点击开始记录按钮, 等待30秒左右(大约可以包含5个ts加载过程)

  • 捕获结束后, 图中的每个黄色区块都是一个ts解码点
  • 鼠标移动到箭头所示的空白位置, 以类似于选择连续文字的方式, 选中其中一个解码点
  • 选择之后, 会在下方显示统计信息和堆栈信息, 我们的目标就是减少脚本运行用时Scripting的数值
  • 点击上图中3号标示, 切换到堆栈视图, 可以查看每个方法的耗时和跳转到具体的代码位置

分析代码性能

  • 跟踪到下图2个方法时, 用时出现了分叉,点击右侧的代码行数链接跳转到具体的代码位置
  • 一般会自动格式化, 如果没有, 可以点击左下角的花括号
  • 开启资源覆盖功能: 如果Page旁边不是Overrides, 点击那2个大于符号后选择, 然后点击Select选择一个空白文件夹 注意是空白文件夹
  • 在文件名上右键选择Override content, 就可以在右侧看到对应的文件列表
    • 在打开控制台的情况下, 刷新界面会优先加载Override的内容
    • 如果关闭控制台, 刷新界面则会加载网络的原始内容
  • 并且文件上有个小圆圈, 点击文件名打开该文件, 可以查看到文件内容
    • 后续如果不需要了, 可以在文件夹删除此文件
  • 打开刚才选择的文件夹, 在里面找到该文件, 用记事本或其他软件打开 不要在上面显示的代码页签中直接编辑文件, chrome会保存美化后的代码, 导致刷新页面后解析文件时非常卡, 网页白屏
  • 添加代码, 排查方法中各代码块运行耗时
js 复制代码
// 在方法开头添加
const startTime = performance.now();
// 在需要统计的位置添加用时记录
console.log(' code user', performance.now()-startTime);
  • 用记事本打开该文件, 内容是压缩后的, 不便于查看和编辑, 可以只美化部分代码, 在方便查看的同时不会导致浏览器卡顿, 以前文截图中的ik方法为例:
    • ik方法前有特殊字符串ih[wX(0x607)+'ve'](去掉空格后), 在记事本中搜索, 可找到代码的开始位置
    • 返回控制台, 向下查看代码找到方法的结束位置, 找到另一个特殊字符串ih[wX(0x11bc)+wX(0x115c)]
    • 返回记事本搜索该字符串找到结束位置
    • 将这2个方法之间的代码替换为美化后的代码
  • 经过排查, 发现以下问题
    • 其中的for操作的Uint8Array对象长度非常大
    • 对于相同的索引区间, 先进行置0, 再拷贝填充
    • 调用wasm方法
  • 解决方法
    • 对于置0后无拷贝的代码块, 改用Uint8Arrayfill方法
    • 对于置0后拷贝的代码块, 改用Uint8Arrayset方法
    • 对于先创建数组后进行拷贝的代码块, 改用Uint8Arrayslice方法
    • wasm看不懂

比对修改结果

  • 修改完毕后, 保存文件, 返回浏览器, 刷新页面以便加载修改后的代码
    • 验证视频播放正常
    • 再次进行性能分析
  • 对比优化前, 解码点用时已大幅缩短

  • 对优化前(换一个浏览器或chrome打开隐身标签)和优化后的代码进行一次3分钟的性能记录
    • 打开页面等待播放稳定再记录
  • 比对结果, 大约优化了50+(忽略优化前的截图中启用了屏幕截图)

应用到RK3258

  • 通过Andriod的WebView组件将优化后的代码应用到RK3528
    • autojs6更方便, 但是没搞定其中的WebClient
  • 优化前按帧播放, 优化后可以流畅播放1到2分钟再卡一下
    • 可能是网络或cpu的共同影响
  • 首页加载的速度有点慢
相关推荐
滿3 分钟前
Vue3 父子组件表单滚动到校验错误的位置实现方法
前端·javascript·vue.js
智者知已应修善业1 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
夏梦春蝉1 小时前
ES6从入门到精通:模块化
前端·ecmascript·es6
拓端研究室2 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
工一木子3 小时前
URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
前端·缓存
孞㐑¥4 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
半点寒12W5 小时前
微信小程序实现路由拦截的方法
前端
某公司摸鱼前端5 小时前
uniapp socket 封装 (可拿去直接用)
前端·javascript·websocket·uni-app
要加油哦~5 小时前
vue | 插件 | 移动文件的插件 —— move-file-cli 插件 的安装与使用
前端·javascript·vue.js
小林学习编程6 小时前
Springboot + vue + uni-app小程序web端全套家具商场
前端·vue.js·spring boot