当前位置: 首页 > Web前端 > CSS

前端性能优化JavaScript

时间:2023-03-31 01:37:08 CSS

一直以来,关于前端性能优化的讨论很多,囊括了很多知识。可以说性能优化只能更好,不能最好。前面写了一篇关于CSS优化的总结文章,今天说说JavaScript。1、在资源加载方面,浏览器的加载顺序是按照源码从上到下加载分析的。遇到链接、脚本等资源时,页面渲染会被阻塞,所以我们将脚本放在前面,也可以结合构建工具(webpack、gulp...)压缩js文件,提取publicjs,去掉空格,去掉注释,js文件尽量小,防止脚本阻塞页面渲染。2、在写代码的时候,还要注意以下问题。(1)减少作用域链上的查找次数。我们知道js代码在执行的时候,如果需要访问一个变量或者函数,需要从当前执行环境的作用域链向上查找到全局作用域。如果我们需要频繁访问全局环境的变量对象,每次都必须逐级遍历当前作用域链,显然是比较耗时的。函数getTitle(){varh1=document.getElementByTagName("h1");for(vari=0,len=h1.length;i

我们可以这样写window.onload=function(){varAdd=document.getElementById("add");varRemove=document.getElementById("删除");varMove=document.getElementById("移动");varSelect=document.getElementById("选择");Add.onclick=function(){alert('添加');};Remove.onclick=function(){alert('删除');};移动。onclick=function(){alert('移动');};Select.onclick=function(){alert('select');}}使用事件委托可以这样写:window.onload=function(){varoBox=document.getElementById("盒子");oBox.onclick=function(ev){varev=ev||窗口事件;vartarget=ev.目标||ev.src元素;if(target.nodeName.toLocaleLowerCase()=='input'){switch(target.id){case'add':alert('add');休息;案例“删除”:警报(“删除”);休息;case'move':alert('移动');休息;案例“选择”:警报(“选择”);休息;}}}}而使用事件委托还有一个好处就是当你添加一个新的按钮时,同样会绑定点击事件,这就是委托事件的好处上面是原生js写的,jquery可以这样写:$("#box").on("click","input",function(event){vartargetId=$(this).attr('id');switch(targetId){case'add':alert('add');break;case'remove':alert('delete');break;case'move':alert('move');break;case'select':alert('select');break;}})这样写起来容易多了。(6)避免不必要的DOM操作,尽量使用ID选择器:ID选择器速度最快,避免逐层查找节点。(7)类型转换:使用数字+""将数字转换为字符串。虽然看起来有点难看,但其实这样效率是最高的。在性能方面:(""+)>String()>.toString()>newString()(8)对字符串进行循环操作,如替换和查找,应该使用正则表达式。因为JavaScript本身的循环速度比较慢,而正则表达式的操作是用C写的语言API,性能非常好。(9)使用[""]查询的对象查询比.items()更快。这和之前减少对象查找的思路是一样的。调用.items()添加查询和函数调用。(10)使用Math.floor()或Math.round()将浮点数转换为整数。parseInt()是用来将字符串转成数字的,而Math是一个内部对象,所以Math.floor()其实查询方法和调用的时间并不多,速度是最快的。关于js性能优化,涉及到很多方面,尤其是现在前端框架很多,优化的方式也不一样。上面说的都是很简单的事情,在开发的时候多注意一下,尽量简化你的代码。性能优化还需要进一步研究。