编写高能的js

常见编码规范

  • 将 js 脚本放在页面底部,加快渲染页面
  • 将 js 脚本将脚本成组打包,减少请求
  • 使用非阻塞方式下载 js 脚本
  • 尽量使用局部变量来保存全局变量
  • 遵循严格模式:"use strict";
  • 尽量减少使用闭包
  • 减少对象成员嵌套
  • 缓存DOM节点访问
  • 避免使用eval()和Function()构造器
  • 尽量使用直接量取创建对象和数组
  • 最小化重绘(repaint)和回流(reflow)

为什么JS要放到body尾部?

如果JS需要绑定操作DOM,那么放在header中如果处理不当就不会绑定到DOM

**JS 引擎是独立于渲染引擎存在的。**我们的 JS 代码在文档的何处插入,就在何处执行。当 HTML 解析器遇到一个 script 标签时,它会暂停渲染过程,将控制权交给 JS 引擎。JS 引擎对内联的 JS 代码会直接执行,对外部 JS 文件还要先获取到脚本、再进行执行。等 JS 引擎运行完毕,浏览器又会把控制权还给渲染引擎,继续 CSSOM 和 DOM 的构建。

浏览器之所以让 JS 阻塞其它的活动,是因为它不知道 JS 会做什么改变,担心如果不阻止后续的操作,会造成混乱。

结论:

  • 如果JS在header中,浏览器会阻塞并等待JS加载完毕并执行
  • 如果JS在body尾部,览器会进行一次提前渲染,从而提前首屏出现时间

参考demo: 执行/性能优化/testDemo/slowServer/index.js,注意查看终端

非核心代码的异步加载

  • 动态脚本加载
    • 使用JS创建一个script标签再插入到页面中
  • defer(IE)
    • 整个HTML解析完后才会执行,如果是多个,按照加载顺序依次执行
  • async
    • 加载完之后立即执行,如果是多个,执行和加载顺序无关

header中meta

兼容性配置,让IE使用最高级的Edge渲染,如果有chrome就使用chrome渲染。

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

如果是双核浏览器,优先使用webkit引擎

<meta name="render" content="webkit">

使用节流和防抖

懒加载

懒加载的原理就是只加载自定义区域(通常是可视区域,但也可以是即将进入可视区域)内需要加载的东西。 对于图片来说,先设置图片标签的 src 属性为一张占位图或为空,将真实的图片资源放入一个自定义属性中,当进入自定义区域时,就将自定义属性替换为 src 属性,这样图片就会去下载资源,实现了图片懒加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值