zoukankan      html  css  js  c++  java
  • 读《JavaScript dom编程艺术(第2版)》笔记 5-6

    今天看了第五章,讲了许多我一直没有考虑过的内容:平稳退化、分离JavaScript、向后兼容性、性能考虑。引出这些问题的原因是:有的浏览器并不能支持js脚本,或者有的浏览器虽然可以支持js脚本,但是用户关闭了js解释功能,或者有的浏览器只能支持部分js脚本。如果没有考虑到这些情况,人们在访问我们的网站时就有可能遇到各种各样的麻烦,并因此不再来访问我们的网站。

    平稳退化:确保网页在没有JavaScript的情况下也能正常工作

    如果正确使用了JavaScript脚本,就可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览我们的网站,这就是所谓的平稳退化,就是说,虽然某些功能无法使用,但是最基本的操作仍能顺利完成。

    渐进增强:用一些额外的信息层去包裹原始数据。按照“渐进增强”原则创建出来的网页几乎都符合“平稳退化”原则

    分离JavaScript:把网页的结构和内容与JavaScript脚本的动作行为分开

    window.onload = function() {
      if (!document.getElementsByTagName) return false;
      var lnks = document.getElementsByTagName("a");
      for (var i=0; i<lnks.length; i++) {
        if (lnks[i].getAttribute("class") == "popup") {
          lnks[i].onclick = function() {
            popUp(this.getAttribute("href"));
            return false;
          }
        }
      }
    }
    
    function popUp(winURL) {
      window.open(winURL,"popup","width=320,height=480");
    }

    向后兼容性:确保老版本的浏览器不会因为你的JavaScript脚本而死掉

    对象检测:只要把某个方法打包在一个if语句里,就可以根据这条if语句的条件表达式的求值结果是true(这个方法存在)还是false(这个方法不存在)来决定应该采取怎样的行动。

    在使用对象检测时,一定要删除方法名后的圆括号,如果不删掉,测试的将是方法的结果,无论方法是否存在。

    function myFunction(){
      if(document.getElementById){
        statements using getElementById
      }
    }

    虽然只是一条简单的if语句,但是却可以确保那些“古老的”浏览器不会因为我的脚本代码而出问题,这么做是为了让脚本有良好的向后兼容性。

    浏览器嗅探技术:指通过提取浏览器供应商提供的信息来解决向后兼容问题。

    性能考虑:确定脚本执行的性能最优

    1、尽量少访问DOM和尽量减少标记

    2、合并和放置脚本

    减少请求数量通常都是在性能优化是时首先要考虑的。

    脚本在标记中的位置对页面的初次加载时间也有很大影响,根据HTTP规范,浏览器每次从同一个域名中最多只能同时下载两个文件。而在下载脚本期间,浏览器不会下载其他任何文件,即使是来自不同域名的文件也不会下载,所有其他资源都要等脚本加载完毕后才能下载

    3、压缩脚本

    请看这篇文章

     nodeName属性总是返回一个大写字母的值,即使元素在HTML文档里是小写字母

    最好不要用onkeypress事件处理函数,onclick事件处理函数已经能满足需要。虽然它的名字为“onclick”,但它对键盘访问的支持相当完美

     DOM由3部分组成:

      1.Core DOM:核心DOM,定义了一套标准的针对任何结构化文档的对象,包括HTML、XHTML、XML

      2.XML DOM:定义了一套标准的针对XML文档的对象

      3.HTML DOM:定义了一套标准的针对HTML文档的对象

    不得不说,从前我写网页文件,从来没有考虑过这些提高性能的问题,看了书之后受益匪浅啊!以后我会注意这方面的问题的,使自己的网站更完善,更完美!

  • 相关阅读:
    Oracle: 一个很让人纠结的sql问题,给自己长个记性
    TextInfo list of CultureInfo
    一个简单的面试题称粮食
    C++ 中什么是内联函数(zhuan)
    C/C++ 到 shellcode 过程
    常量指针与指针常量的区别(转帖)
    分清函数指针和指针函数
    如何编写自己的缓冲区溢出利用程序? (zz)
    动态获取API函数地址对抗win7 aslr安全机制(转)
    暴力搜索内存空间获得 Api 的线性地址
  • 原文地址:https://www.cnblogs.com/wyy725872/p/4439567.html
Copyright © 2011-2022 走看看