美文网首页
JavaScript的常见优化

JavaScript的常见优化

作者: 于飞_d529 | 来源:发表于2018-12-23 11:15 被阅读3次

    尽量把JS放在页面底部

    循环中要多次使用的表达式,比如:判断长度的表达式、获取对象的表达式,最好在外面做个变量来保存

    减少页面重绘,比如:不要在循环中改变元素外观,应该拼接好后,一次性的设置给元素,这样就只需要重绘一次

    尽量避免使用eval

    把全局域的变量缓存成为局部域的变量,全局变量其实是window对象成员,而局部变量是放在函数的栈里的,局部变量访问更快

    尽量避免对象的嵌套查询,比如:obj1.obj2.obj3这样的表达式就会引起多次查找,应该把各个对象用局部变量缓存起来,这样后续使用就直接使用

    当需要将数字转换成字符时,采用如下方式:“” + 数字的方式最快

    当需要将浮点数转换成整型时,应该使用Math.floor()或者Math.round().而不是使用parseInt(),Math是内部对象,速度是最快的

    尽量让代码简洁,比如变量名、方法名在不影响语意的情况下尽量简单

    连加多个字符串的,可以使用数组,把要连接的字符串放到数组中,然后使用数组的join方法,形如:var str = myArr.join("")

    尽量用JSON格式来创建对象,而不是var obj = new Object(),因为前者是直接复制,而后者需要调用构造器

    尽量使用JSON来创建数组,即直接使用:[param,param,param...],而不是采用new Array(param,param,param...)这种语法。因为使用JSON格式的语法是引擎直接解释的。而后者则需要调用Array的构造器

    尽量使用正则表达式来操作字符串,例如替换、查找等。因为JS的循环速度比较慢,而正则表达式的操作是用C写成的API,性能比较好

    对于比较大的JS对象,因为创建时时间和空间的开销都比较大,因此应尽量缓存

    避免使用document.wirte,可以使用innerHTML来向页面添加对象

    避免使用setTimeOut方法,应用setInterval,setTimeOut每次要重置定时器

    避免with语句,with会创建自己的作用域,会增加其中执行代码的作用域长度

    尽量减少对DOM的操作,避免回流,引起回流的操作常见的有:

    改变窗体大小
    更改字体
    添加移除stylesheet块
    内容改变哪怕是输入框输入文字
    CSS虚类被触发如:hover
    更改元素的className
    当对DOM节点执行新增或者删除操作或内容更改时
    动态设置一个style样式时
    当获取一个必须经过计算的CSS值时,比如访问offsetWidth、clientHeight等
    避免回流、建议:
    1.在对DOM进行操作之前,尽可能把多次操作内容准备好,然后精良1次操作完成
    2.在对DOM操作之前,把药操作的元素,先从当前DOM结构中删除,等处理好过后再添加回到DOM中。从DOM中。从DOM中删除元素的方法有:
    A:通过removeChild()或者replcaeChild()实现真正意义上的删除
    B:设置该元素的display样式为"none"
    3.对获取的那些会触发回流操作的属性,比如offsetWidth等缓存起来
    4.尽量避免通过style属性对元素的外观进行修改,因为会触发回流操作:
    A:使用更改className的方式替换style.xxx=xxx的方式
    B:使用style.cssText = '';一次写入样式
    C:避免设置过多的行内样式
    5.添加的结构外元素精良设置他们的位置为fixed或absolute
    6.避免使用表格来布局
    7.避免在CSS中使用JavaScript表达式
    

    对局部使用的JS,采用异步装载,按需装载JS的方式,比如使用JQuery的:

    jQuery.getScript('t.js',function(){t1();})
    这个是没有缓存的js的,要缓存的话,如下:
    jQuery.ajax{(
        url:"t.js",
        dataType:"script",
        cache:true
    )}.done(function(){
        t1();
    });
    

    其他优化事项

    尽量避免重定向,尤其是一些不必要的重定向,如对Web站点子目录的后面添加个"/",就能有效避免一次重定向

    避免Http 404错误

    尽可能的减少系统中的时序约束

    尽量实现无状态,尽可能在浏览器端维护会话,采用Cookie

    尽量利用分布式缓存来存放状态,且要避免:

    避免某些功能要求关联到某个服务器
    不要使用状态或者会话复制
    不要把缓存放在执行操作的系统上,应该是公共的
    

    合理利用页面缓存,比如varnish

    合理利用对象或者数据缓存,如memercached

    尽可能使用异步通信,通常下面这些都应该是异步的:

    调用外部api,或者是第三方的应用
    长时间运行程序
    容易出错的,或者频繁更改的方法
    没有时间约束的方法,比如发邮件
    

    相关文章

      网友评论

          本文标题:JavaScript的常见优化

          本文链接:https://www.haomeiwen.com/subject/aingkqtx.html