美文网首页
性能优化、面向对象、引用

性能优化、面向对象、引用

作者: z_j_r | 来源:发表于2017-11-10 19:35 被阅读0次

    前言:

    现在不玩命,将来命玩你,现在不努力,未来不给力

    --------------------------------正文---------------------------------

    性能优化

      原因:
          1.稳定
          2.扩展
          3.性能
      包含:
          网络性能
          执行性能
    
    1、网络性能(要用到第三方工具)
        Chrome      NetWork       需要经验支撑分析。
    
        Firefox     YSLow(http://yslow.org/)
            插件版:  必须先安装     Firebug
                步骤:进入YSLow官网
                      点击Firefox
                      点击Add to Firefox
    
                一定要在选项中把自动运行勾选
    
            书签版
                步骤:进入YSLow官网
                      点击install
                      把yslow按钮拖放到书签栏
                      重启浏览器
                    书签版不能检测https
    
                有问题了。
    
    网络性能优化方法
         1.减少http请求
               1个文件=一次连接+一次请求+一次等待+一次响应
               100个文件=100连接+100请求+100等待+100响应
         2.合并文件
               a).减少http请求
               b).让资源更小
                    4KB一个单位,不足4KB按照4KB算
         3.压缩代码
               让文件更小
         4.使用CDN加速
         5.使用GZIP压缩
         6.使用DNS
         7.懒加载
    

    更多搜索:雅虎军规

    2、执行性能
         1.尽量不使用全局变量       (变量不回收)
         2.尽量少使用闭包           (使用后变量不一定会被回收)
         3.减少DOM操作              (属性太多,找的时候浪费)
         4.少使用定时器             (定时器不稳定)
         5.尽量使用正则操作字符串    (简单)
         6.尽量不使用属性           (找起来麻烦)
         7.尽量使用CSS3             (性能高)
    
             尽量不使用属性
               eg:  var len = arr.length;
                    for(var i=0;i<len;i++){
                }
    
                字符串本身不可更改
    

    面向对象(OOP)(不知道原理,但是不影响使用)

        类       Class       泛指一类事物
        对象     Object      某一个具体的东西
    
    对象的组成
        属性——特征
        方法——行为
    
        什么是属性:变量和属性一样
                   属性是属于某个对象的
                   变量是自由的
        什么是方法:函数和方法一样
                   方法是属于某个对象的
                    函数是自由的
    
    创建一个类
         构造函数:因为是创建对象的
      eg:
            //构造函数
            function Person(name,age,gender){
                //工厂模式
                //原料
                var obj = new Object();
                //加工
                obj.name = name;
                obj.age = age;
                obj.gender = gender;
                obj.showName = function(){
                    return this.name;
                };
                obj.showAge = function(){
                    return this.age;
                };
                obj.showGender = function(){
                    return this.gender;
                };
                //出厂
                return obj;
            }
            var p1 = Person('老王',40,'男');
            var p2 = Person('李四',22,'男');
            document.write(p1.showName==p2.showName);          // false
    

    出现两个问题:
    1、没有new
    2、同一个类的方法,不相等

        加new
            1.开头加new Object();
            2.结尾加return this;
    
        加方法不能直接在构造里写。   
            给构造的原型加
                构造函数的原型:Person.prototype
    
        属性给构造的this加
        方法给构造的原型加
      eg:
            //构造函数
            function Person(name,age,gender){
                this.name = name;
                this.age = age;
                this.gender = gender;
            }
            Person.prototype.showName = function(){
                return this.name;
            };
            Person.prototype.showAge = function(){
                return this.age;
            };
            Person.prototype.showGender = function(){
                return this.gender;
            };
            var p1 = new Person('老王',40,'男');
            document.write('我叫'+p1.showName()+',今年'+p1.showAge()+'岁,性别'+p1.showGender());
            var p2 = new Person('韩梅梅',30,'女');
            alert(p1.showName==p2.showName);               // true
    

    this?

        不看定义,只看调用
        方法是谁的,this就是谁
        优先级:
            高   
                new              Object
                定时器            window
                方法、事件        对象本身
                正常调用          window\undefind
            低
        如果函数不止一层,那函数只管一层、this只看最后一次调用
        this永远只看最后一次调用
    
    面向对象三大特性
        封装      抽出核心封装
        继承      子继承父.父类有的,子类一定有。子类有的,父类不一定有。父类改变,子类跟着变
        多态      多种状态、多重继承
    
    继承
        属性
        方法
    
        Person  人类
            属性:name age gender
            方法:showName() showAge() showGender()
        Worker  工人类 
            属性:name age gender job
            方法:showName() showAge() showGender() showJob()
    
        矫正this指向
            fn.call(this指向谁,arg1,arg2....);
            或者
            fn.apply(this指向谁,[arg1,arg2,arg3...]);
    
        属性继承
            function 子类(a,b){
                父类.call(this,a,b);
                或者
                父类.apply(this,arguments);
            }
        方法继承
            a).
            子类.prototype = 父类.prototype;
            问题:
                子类的私有方法,父类也有
                原因:
                    引用
            b).
            for(var key in 父类.prototype){
                子类.prototype[key] = 父类.prototype[key];
            }
            问题:
                子类的实例,不属于父类
            c).
            子类.prototpye = new 父类();
            瑕疵:
                子类实例.constructor 等于父类
            d).
            子类.prototype = new 父类();
            子类.prototype.constructor = 子类;
    

    万物皆对象

       eg:
            function Person(name,age,gender){
                this.name = name;
                this.age = age;
                this.gender = gender;
            }
            Person.prototype.showName = function(){
                return this.name;
            };
            Person.prototype.showAge = function(){
                return this.age;
            };
            Person.prototype.showGender = function(){
                return this.gender;
            };
    
            function Worker(name,age,gender,job){
                // arguments  实参参数集合
                // call  apply  改变this指向
                Person.apply(this,arguemnts);
                this.job = job;
            }
            Worker.prototype = new Person();
            Worker.prototype.constructor = Worker;
            Worker.prototype.showJob = function(){
                return this.job;
            };
    

    检测

    typeof              检测基本数据类型     Array、Date也是Object
    instanceof          检测复合类型         检测是否是Array、Date,但检测不出这两项和Object的区别
    constructor         检测构造函数         检测是否是Object,区分Array、Date和Object
    

    原型链

    先在当前实例身上找,如果没有找构造类,如果类没有找父类原型,一级一级往上找,直到找到Object的原型。如果没有就是undefined

    相关文章

      网友评论

          本文标题:性能优化、面向对象、引用

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