- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
前端性能优化最佳实践篇本文导读:如今浏览器能够实现的特性越来越多,并且网络逐渐向移动设备转移,使我们的前端代码更加紧凑,如何优化,就变得越来越重要了。开发人员普遍会将他们的代码习惯优先于用户体验。但是很多很小的改变可以让用户体验有个飞跃提升,所以任何一点儿小小的优化都会提升你网站的性能。前端给力的地方是可以有许多种简单的策略和代码习惯让我们可以保证最理想的前端性能。
最佳实践1:使用DocumentFragments或innerHTML取代复杂的元素注入?
DOM操作在浏览器上是要付税的。尽管性能提升是在浏览器,DOM很慢,如果你没有注意到,你可能会察觉浏览器运行非常的慢。这就是为什么减少创建集中的DOM节点以及快速注入是那么的重要了。现在假设我们页面中有一个
元素,调用AJAX获取JSON列表,然后使用JavaScript更新元素内容。通常,程序员会这么写:
Javascript代码?
var?list?=?document.querySelector(ul);??
ajaxResult.items.forEach(function(item)?{??
//?创建
元素
var?li?=?document.createElement(li);??
????li.innerHTML?=?item.text;??
//?
元素常规操作,例如添加class,更改属性attribute,添加事件监听等
//?迅速将
元素注入父级
中
????list.apppendChild(li);??
});??
上面的代码其实是一个错误的写法,将
元素带着对每一个列表的DOM操作一起移植是非常慢的。如果你真的想要 使用document.createElement,并且将对象当做节点来处理,那么考虑到性能问题,你应该使用DocumentFragement。DocumentFragement 是一组子节点的“虚拟存储”,并且它没有父标签。在我们的例子中,将DocumentFragement想象成看不见的
元素,在 DOM外,一直保管着你的子节点,直到他们被注入DOM中。那么,原来的代码就可以用DocumentFragment优化一下:
Javascript代码?
var?frag?=?document.createDocumentFragment();??
ajaxResult.items.forEach(function(item)?{??
//?创建
元素
var?li?=?document.createElement(li);??
????li.innerHTML?=?item.text;??
//?
元素常规操作
//?例如添加class,更改属性attribute,添加事件监听,添加子节点等
//?将
元素添加到碎片中
????frag.appendChild(li);??
});??
//?最后将所有的列表对象通过DocumentFragment集中注入DOM
document.querySelector(ul).appendChild(frag);??
为DocumentFragment追加子元素,然后再将这个DocumentFragment加到父列表中,这一系列操作仅仅是一个DOM操作,因此它比起集中注入要快很多。如果你不需要将列表对象当做节点来操作,更好的方法是用字符串构建HTML内容:
Javascript代码?
var?htmlStr?=?;??
ajaxResult.items.forEach(function(item)?{??
//?构建包含HTML页面内容的字符串
????htmlStr?+=?
?+?item.text?+?/span;??/span/li
});??
//?通过innerHTML设定ul内容
document.querySelector(ul).innerHTML?=?htmlStr;??
这当中也只有一个DOM操作,并且比起DocumentFragment代码量更少。在任何情况下,这两种方法都比在每一次迭代中将元素注入DOM更高效。
最佳实践2:高频执行事件/方法的防抖?
通常,开发人员会在有用户交互参与的地方添加事件,而往往这种事件会被频繁触发。想象一下窗口的resize事件或者是一个元素的onmouseover事件 - 他们触发时,执行的非常迅速,并且触发很多次。如果你的回调过重,你可能使浏览器死掉。这就是为什么我们要引入防抖。防抖可以限制一个方法在一定时间内执行的次数。以下代码是个防抖示例:
Javascript代码?
//?取自?UnderscoreJS?实用框架
function?debounce(func,?wait,?immediat
您可能关注的文档
最近下载
- 建筑工程图集 99S203、99(03)S203:消防水泵接合器安装.pdf VIP
- 在2025年区庆祝第41个教师节暨表彰大会上的讲话.docx VIP
- 人教版四年级数学《上册全册》全套精品教学课件小学优秀课堂课件.pptx VIP
- 水库生态养殖可行报告.docx
- 隧道巡检机器人研发项目可行性研究报告.docx VIP
- 教科版(2024)小学科学一年级上册(全册)教案及反思(含目录).docx VIP
- 景观绿化工程施工设计方案.docx VIP
- 建筑结构与选型课程设计.docx VIP
- 建筑结构选型课程设计.docx VIP
- 安徽省庐巢七校联考2022-2023学年高二下学期3月期中英语试卷(含答案).pdf VIP
文档评论(0)