注意分离:

  • 通过将CSS关闭来测试页面是否仍然可用,内容是否依然可读;
  • 将JavaScript关闭来测试页面仍然可以执行正常功能;所有连接是否正常工作;所有的表单是否可以正常工作;
  • 不使用内联处理器(onclick之类)和内联样式属性,因为这些不属于内容层;
  • 使用语义上有意义的HTML元素;

DOM脚本

  • DOM访问: //DOM访问的代价是昂贵的 ;

    • 避免在循环中使用DOM访问;
    • 在可能的情况下使用selector API;  /尽可能使用id,getElementById是最便捷的查找方法;
    • 在HTML容器中重复使用时,缓存重复的次数;
    • 将DOM引用分配给局部变量,并使用这些局部变量;
    • 例子:
      for (var i = 0; i < 100; i += 1) {
      document.getElementById('result').innerHTML += i + ' ,';
      } //优化
      var i, content = ' ';
      for(i = 0; i < 100; i +=1) {
      content += i + ' ,';
      }
      document.getElementById('result1').innerHTML += content; --------------------------------
      var padding = document.getElementById('result').style.padding,
      margin = document.getElementById('result').style.margin;
      //优化
      var style = document.getElementById('result').style,
      padding = style.padding,
      margin = style.margin; ----------------------------
      //更好的获取节点 ,IE8以上
      document.querySelector();
      document.querySelectorAll();
  • 操纵DOM:更新DOM会导致浏览器重新绘制屏幕;所以尽量减少更新DOM;当需要创建相对比较大的子树时,采用文档碎片;
    • 创建文档时例子:

      //反模式,在创建时立即添加节点
      var p,t;
      p = document.createElement('p');
      t = document.createTextNode('first paragraph');
      p.appendChild(t);
      document.body.appendChild(p); p = document.createElement('p');
      t = document.createTextNode('second paragraph');
      p.appendChild(t);
      document.body.appendChild(p);
      //优化,
      var p ,t , frag;
      frag = document.createDocumentFragment(); p = document.createElement('p');
      t = document.createTextNode('first paragraph');
      p.appendChild(t);
      frag.appendChild(p); p = document.createElement('p');
      t = document.createTextNode('second paragraph');
      p.appendChild(t);
      frag.appendChild(p); document.body.appendChild(frag);  
    • 更新文档时例子:
      //cloneNode
      var oldnode = document.getElementById('result');
      clone = oldnode.cloneNode(true);
      //处理克隆对象
      var t = document.createTextNode('new text');
      clone.appendChild(t);
      //replaceChild
      oldnode.parentNode.replaceChild(clone, oldnode);

事件:

  • 事件处理:

    • 最简单地使用事件函数;//不要使用内联
    • 最好使用监听器;
  • 事件授权:利用事件冒泡,可以减少事件监听器的数量
    <div id='click-wrap'>
    <button>Click me:0</button>
    <button>Click me too:0</button>
    <button>Click me three:0</button>
    </div> var target = document.getElementById('click-wrap');
    target.addEventListener('click',function(e){
    var src = e.target;
    if(src.nodeName.toLowerCase() !== 'button') return;
    alert(0);
    },false);

    //注意以上实际情况中使用要考虑浏览器的兼容性;  

长期运行脚本

//js没有线程,用其他方法模拟

  • 使用setTimeout;
  • 使用web workers  (html5)
var ww = new Worker("test.js");
ww.onmessage = function(event) {
document.body.innerHTML += "<p>message :" + event.data + "</p>";
} //test.js var end = 1e8, tmp = 1; postMessage("hello");
//Web Workers做了1e8次简单的计算
while(end) {
end -= 1;
tmp += end;
if(end === 5e7) {
postMessage('halfway there, `tmp` is now ' + tmp);
}
}
postMessage("all done");

  

javascript优化--13模式1(DOM和浏览器模式)的更多相关文章

  1. javascript优化--14模式2(DOM和浏览器模式)

    远程脚本 XMLHttpRequest JSONP 和XHR不同,它不受同域的限制: JSONP请求的可以是任意的文档: 请求的URL通常格式为http://example.js?calback=Ca ...

  2. 文档类型DTD,DOCTYPE和浏览器模式

    出处:http://blog.csdn.net/freshlover/article/details/11616563 浏览器从服务端获取网页后会根据文档的DOCTYPE定义显示网页,如果文档正确定义 ...

  3. 【IE】浏览器模式与文档模式 及其开发中处理方式

    原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...

  4. IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...

  5. DOM,浏览器,javascript,html之间的关系

    来源于:https://github.com/hucheng91/myBlog/blob/master/web/dom/dom.md DOM定义 DOM可以以一种独立于平台和语言的方式访问和修改一个文 ...

  6. javascript优化--07模式(对象)02

    沙箱模式: 解决空间命名模式的几个缺点: 命名空间模式中无法同时使用一个应用程序或库的两个版本运行在同一个页面中,因为两者需要相同的全局符号: 以点分割,需要输入更长的字符,解析时间也更长: 全局构造 ...

  7. <JavaScript>“浏览器模式”和“文档模式”之间的区别

    只有IE浏览器中才会有“浏览器模式”和“文档模式”,兼容性视图涉及两个重要的功能便是“浏览器模式[browser mode]”和“文档模式[document mode]”,在IE8/IE9中按F12键 ...

  8. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  9. 《高性能javascript》 领悟随笔之-------DOM编程篇

    <高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

随机推荐

  1. LDA(Linear discriminate analysis)线性判别分析

    LDA 线性判别分析与Fisher算法完全不同 LDA是基于最小错误贝叶斯决策规则的. 在EMG肌电信号分析中,... 未完待续:.....

  2. linux服务器部署svn常见错误处理→转载

    转载地址→http://blog.seweal.com/post/2013-02-04/svn-errors [开放svn端口] iptables -I INPUT -p tcp --dport 36 ...

  3. ABK (枚举)

    ABK Accepted : 24   Submit : 176 Time Limit : 1000 MS   Memory Limit : 65536 KB  题目描述 ABK是一个比A+B还要简单 ...

  4. java web dao 层和dao 实现层有什么好处

    接口是为了屏蔽不同数据库的JDBC实现差异而出现的. 以常见的系统组织结构为例,管理系统里有一个部门department表用于存放部门信息,因为部门下面可能有子部门所以表中的字段要定义成类似树形结构的 ...

  5. HDU 3998 Sequence(经典问题,最长上升子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3998 解题报告:求一个数列的最长上升子序列,并求像这样长的不相交的子序列最多有多少个. 我用的是最简单 ...

  6. [Effective JavaScript 笔记]第17条:间接调用eval函数优于直接调用

    eval函数不仅仅是一个函数.大多数函数只访问定义它们所在的作用域,而不能访问除此之外的作用域(词法作用域).eval函数具有访问调用它时的整个作用域的能力.编译器编写者首次设法优化js时,eval函 ...

  7. characterCustomezition的资源打包代码分析

    using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; class Creat ...

  8. Coursera台大机器学习技法课程笔记03-Kernel Support Vector Machine

    这一节讲的是核化的SVM,Andrew Ng的那篇讲义也讲过,讲的也不错. 首先讲的是kernel trick,为了简化将低维特征映射高维特征后的计算,使用了核技巧.讲义中还讲了核函数的判定,即什么样 ...

  9. 黑客逃避追踪,为什么要用虚拟机 + TOR + VPN 呢?

    为啥要使用虚拟机 使用虚拟机主要有俩原因. 第一个是为了好收拾,清理痕迹什么的.特别是MAC地址,系统指纹信息等等,这些一旦被收集到都可以作为呈堂证供.用虚拟机,干了坏事把快照恢复一下就好,省的清理c ...

  10. 【GoLang】GoLang 微服务、开源库等参考资料

    参考资料: GoLang书籍: https://github.com/dariubs/GoBooksGo名库: https://github.com/Unknwon/go-rock-libraries ...