展开目录
前端性能观察器
js
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

由于手机浏览器的性能往往比较渣,一些电脑上能正常运行的js代码,到了手机上就一卡一卡的,所以不得不对比较慢的代码部分进行优化。为了能找到哪些代码片段是影响性能的,我写了一个前端性能观察器用于统计各个代码片段之间的时间损耗。

/**
 前端性能观察器
 作者:雾海树妖 <http://treemonster.github.io/>
 */
let docter_time
let docter=(loc_kw,slow_ms)=>{
  let id=`docter_${Date.now()}`
  if(location.href.indexOf(loc_kw)<0)return ()=>{};
  document.body.innerHTML+=`<textarea id="${id}" style="
    position:fixed;
    left:0;
    top:20%;
    height:50%;
    background:#eee;
    border:1px solid #ccc;
    width: 50%;
    min-width: 300px;
    z-index:999999;
  "></textarea>`
  return {log:(tag)=>{
    let n=new Date
    let m=n-docter_time
    if(m>=slow_ms){
      let d=document.getElementById(id)
      d.value+=`${tag}: ${m}ms\n\n`
      d.scrollTop=d.scrollHeight
    }
    docter_time=n
  },reset:()=>docter_time=new Date}
}

使用范例:

<body>
<script>
/**
 前端性能观察器
 作者:雾海树妖 <http://treemonster.github.io/>
 */
let docter_time
let docter=(loc_kw,slow_ms)=>{
  let id=`docter_${Date.now()}`
  if(location.href.indexOf(loc_kw)<0)return ()=>{};
  document.body.innerHTML+=`<textarea id="${id}" style="
    position:fixed;
    left:0;
    top:20%;
    height:50%;
    background:#eee;
    border:1px solid #ccc;
    width: 50%;
    min-width: 300px;
    z-index:999999;
  "></textarea>`
  return {log:(tag)=>{
    let n=new Date
    let m=n-docter_time
    if(m>=slow_ms){
      let d=document.getElementById(id)
      d.value+=`${tag}: ${m}ms\n\n`
      d.scrollTop=d.scrollHeight
    }
    docter_time=n
  },reset:()=>docter_time=new Date}
}


let doc=docter('my_docter',100)

// 计时器清零
doc.reset()

doc.log('begin')
for(i=0;i<3e7;i++);
doc.log('step 1 done')
for(i=0;i<1e7;i++);
doc.log('step 2 done')
for(i=0;i<7e7;i++);
doc.log('step 3 done')


</script>
</body>

相关文档

  1. 记一次nodejs内存泄漏的排查经历

  2. nodejs 长连接

  3. npm包命令行调用

  4. nodejs本地双向代理 端口转发

  5. nodejs socks5

  6. nodejs俄罗斯方块

  7. webrtc服务搭建

  8. ssl 证书生成方式

  9. 猴子选大王算法问题

  10. html表格导出csv文件并下载

  11. js日志去重工具

  12. nodejs建立多级目录

  13. 用ClosureCompiler混淆代码

  14. jshtml模板引擎

  15. linux 上配置node路径

  16. json2html源码

  17. nodejs处理gb2312编码

  18. nodejs遍历文件夹

  19. 读取Blob的内容实体

  20. nodejs那恶心的stream.Readable

  21. Promise复习,nodejs异步建立多级目录

  22. 判断javascript运行环境

  23. 异步并发也要保证原子性

  24. 简易命令行解析器

  25. Promise才是javascript的正统队列

  26. callback => Promise.then

  27. 简易转义字符转实体字符方法

  28. 简易JSON函数封装

  29. seajs同步加载依赖的实现和弊病

随便看看

  1. sqlite 查看table的构建语句

  2. cnpm 立即同步

  3. word文件命令行打印

  4. sass变量和继承类写法

  5. mac 终端运行后台程序如何在终端关闭时继续运行

  6. nodejs 长连接

  7. npm远程服务器某些配置不兼容代理的解决办法

  8. curl用法

  9. 搜索命令整理

  10. npm设置仓库地址和代理

  11. TIME_WAIT过多

  12. putty使用http代理连接服务器

  13. mongodb2.4 添加用户

  14. centos查看最近一次的开机时间

  15. 树莓派配置收发邮件

  16. mysql选取内容导出到文件

  17. centos7 开放或者关闭端口

  18. youku电脑版跳过广告代码

畅言模块加载中