zoukankan      html  css  js  c++  java
  • 《javascript实战》Part1——1

    早期Javascript缺陷:

    1.浏览器不兼容(直到2007年左右被解决)

      浏览器嗅探技术(启用或者禁用某些功能)

    2.性能和内存占用

      1)同样的javascript代码片段在不同浏览器中执行的性能不完全相同,有时会差异很大    2)现代javascript引擎的性能仍然有很多有待完善的地方
      3)不能有效利用内存,内存泄露很普遍。(引擎、浏览器自身和开发人员)|
      实际上javascript是有内存管理的语言

    3.开发人员自身问题

      需要知道什么好用什么不好用,自己努力找出比较好的方法。

      比如java语言中字符串拼接(+)是坏事,字符转缓冲区是好办法,但javascript中无字符串缓冲区,不能理所当然认为改用+拼接,在IE下就完蛋了。
      再比如编写函数调用的代码,不传递多个参数,而是传递某些集合,可能会是传入一个值对象或者类似的东西。
      还有变量作用域(javascript中所有东西都是在全局作用域下的,缺乏块级作用域)

      合理的变化:认识到javascript是面向对象的;外部化是开发人员进化的一个方法

      缺乏经验的开发人员:只做客户端表单验证不做服务器端表单验证、图像轮转功能没有预先载入图片(每次鼠标事件都导致怪异的网络流量)……

      开发人员的进化的一部分是认识到那些酷炫的特效应该先放在一边,那些东西是降低效率的,且很多时候是让人分散注意力和生厌的,(特效的意义在于真正提高用户感受)

    4.javascript开发人员进化

      代码要易于维护。代码结构:

      1)使用函数
      2)外部化javascript(易阅读、便于重用、提升性能(浏览器缓存了一个js文件,如果另外一个页面里用到了这个文件,浏览器就会少发出一个请求))

      开发的好习惯(如代码格式化、注释和逻辑代码结构)在javascript环境必须重新学习,使javascript越来越专业。

    5.终极进化:专业的javascript

    归功于javascript的趋势:
    1)浏览器
    javascript基本兼容,不需要写分支代码,不需要嗅探浏览器重定向。
    有时也需要针对浏览器做性能优化(如做字符串拼接,IE里还需做一些调整)
    在兼容性上仍然存在问题的是DOM(DOM没有标准化)。例如:

    处理按键事件(在当前的文档上挂一个keyDown的事件钩子):
    IE下:document.onkeydown = keDown;
      (参数e没有传递进去,因为IE使用了一个叫事件冒泡的事件模型。要在IE里获取该event对    象,需要引用window对象的event属性)
    Firefox下:document.captureEvents(Event.KEYDOWN);
       (参数e是传递给函数的描述按键事件的event对象)
    两个浏览器的基本keyDown()函数的原型都是:function keyDown(e){}

    一些兼容性代码变得越来越没有必要,因为浏览器也逐步开始尽量做到DOM标准兼容了;
    性能和内存使用方面也大步提升;

    垃圾收集算法进步大,使得在一段时间内用的内存更少。javascript引擎自身写的更好,本身就少用一些内存。目前内存泄露几乎是因为开发人员造成的。

    2)面向对象的javascript

    原型(prototype)。所有javascript对象都可以通过其原型来扩展,且这个功能允许他们创建自定义类!(下一章提到有助于编写更专业的javascript代码风格——不要“污染”全局变量)

    使用全局变量被认为是一个坏习惯,因为不在局部作用域里就意味着它们可以再程序的任何部分被修改,导致全局依赖和难以定位。

    好的代码:

    function NumberFunction(){
        var answer = 0;
    }
    NumberFunction.prototype.addNumbers = function(num1,num2){
        this.answer = num1 + num2;
    }
    NumberFunction.prototype.substractNumbers = function(num1,num2){
        this.answer = num1 - num2;
    }
    NumberFunction.prototype.mulNumbers = function(num1,num2){
        this.answer = num1 * num2;
    }
    NumberFunction.prototype.toString = function(){
        return this.answer;
    }
    var nf = new NumberFunction();
    nf.addNumbers(1,2);
    alert(nf);
    nf.substractNumbers(3,10);
    alert(nf);
    nf.mulNumbers(2,49);
    alert(nf);

    以上代码的优点:
    1)没有全局作用域污染,因为有NumberFunctions函数,变量在函数内用var声明,所以不能从类的外部访问,只有NumberFunctions的函数可以修改它;
    2)所有函数实际上都是NumberFunctions类的成员,关系清晰;
    3)最基本的面向对象:数据和操作数据的函数都封装的很好

    3)柔性衰减

    针对某个版本的浏览器设计的网页英爱对旧一些的浏览器版本采取柔性衰减的策略

    不唐突的javascript、让javascript提升网页浏览的体验、合适的错误处理、各种浏览器插件和扩展


     

  • 相关阅读:
    团队协议
    C++ 多继承和虚继承的内存布局(转)
    轻量级的.Net ORM框架介绍
    EF下CodeFirst、DBFirst与ModelFirst分析
    JDK方式
    JSON
    事务的ACID特性
    数据库查询
    Assets
    内部文件存储
  • 原文地址:https://www.cnblogs.com/guoguo0607/p/3240150.html
Copyright © 2011-2022 走看看