前端优化总结--编码习惯(二)

近期主要研究前端优化方案,将网上各种前端优化技巧进行分类整理总结。
本次继续介绍一些好的编码习惯。

  • 最小化语句数
  • 减少页面重绘
  • 将CSS和JS放到外部文件中引用,CSS放头,JS放尾
  • 其他

最小化语句数

JS代码中的语句数量也会影响所执行的操作的速度,完成多个操作的单个语句要比完成单个操作的多个语句块快。故要找出可以组合在一起的语句,以减来整体的执行时间。这里列举几种模式
多个变量声明

      /**不提倡**/
      var i = 1;
      var j = "hello";
      var arr = [1,2,3];
      var now = new Date();
      /**提倡**/
      var i = 1,
          j = "hello",
          arr = [1,2,3],
          now = new Date();

插入迭代值

      /**不提倡**/
      var name = values[i];
      i++;
      /**提倡**/
      var name = values[i++];

使用数组和对象字面量,避免使用构造函数Array(),Object()

      /**不提倡**/
      var a = new Array();
      a[0] = 1;
      a[1] = "hello";
      a[2] = 45;
      var o = new Obejct();
      o.name = "bill";
      o.age = 13;
      /**提倡**/
      var a = [1, "hello", 45];
      var o = {
          name : "bill",
          age : 13
      };

减少页面重绘

减少页面重绘虽然本质不是JAVASCRIPT优化,但重绘往往是由JAVASCRIPT引起的,而重绘的情况直接影响页面性能。

     /**效率低**/
     var obj = document.getElementsByTagName("body");
     for(var i = 0; i < 100; i++){
         obj.innerHTML += str + i;
     }
     /**效率高**/
     var obj = document.getElementsByTagName("body");
     var arr = [];
     for(var i = 0; i < 100; i++){
         arr[i] = str + i;
     }
     obj.innerHTML = arr.join("");

将CSS和JS放到外部文件中引用,CSS放头,JS放尾

JavaScript是浏览器中的霸主,为什么这么说,因为在浏览器在执行JavaScript代码时,不能同时做其它事情,即< script>每次出现都会让页面等待脚本的解析和执行(不论JavaScript是内嵌的还是外链的),JavaScript代码执行完成后,才继续渲染页面。这个也就是JavaScript的阻塞特性。

  因为这个阻塞的特点,建议把JavaScript代码放到< /body>标签以前,这样既能有效的防止JavaScript的阻塞,又能使得页面的HTML结构能更快的释放。

  HTML规范清楚指出CSS要放包含在页面的< head>区域内,这里就不多解释了。

其他

数字转字符串

把数字转换成字符串。
- 应用1+"",效率是最高。
 - 性能上来说:+字符串>String()>.toString()>new String()。
  * String()属于内部函数,所以速度很快。
  * .toString()要查询原型中的函数,所以速度略慢。
  * new String()最慢。

慎用全局变量

全局变量

当一个变量被定义在全局作用域中,默认情况下JAVASCRIPT引擎就不会将其回收销毁。如此该变量就会一直存在于老生代堆内存中,直到页面被关闭。
缺点:使变量不易被回收
     多人协作时容易产生混淆
     在作用域链中容易被干扰。

局部变量

尽量选用局部变量而不是全局变量。
局部变量的访问速度要比全局变量的访问速度更快,因为全局变量其实是window对象的成员,而局部变量是放在函数的栈里的。

缓存重复使用的全局变量

在局部作用域中需要多次使用全局变量时,将全局变量缓存。
var option = {username:'caohang',age:23}
var doSomething = function(){
    var option = option;
    //使用option进行一系列操作
    /*
    code here
    */
}

用switch替换一系列if else

若有一系列复杂的if-else语句,可以转换成单个switch语句则可以得到更快的代码.
还可以通过将case语句按照最可能的到最不可能的顺序进行组织,来进一步优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值