javascript优化--13模式1(DOM和浏览器模式)
注意分离:
- 通过将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和浏览器模式)的更多相关文章
- javascript优化--14模式2(DOM和浏览器模式)
远程脚本 XMLHttpRequest JSONP 和XHR不同,它不受同域的限制: JSONP请求的可以是任意的文档: 请求的URL通常格式为http://example.js?calback=Ca ...
- 文档类型DTD,DOCTYPE和浏览器模式
出处:http://blog.csdn.net/freshlover/article/details/11616563 浏览器从服务端获取网页后会根据文档的DOCTYPE定义显示网页,如果文档正确定义 ...
- 【IE】浏览器模式与文档模式 及其开发中处理方式
原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...
- IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)
来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...
- DOM,浏览器,javascript,html之间的关系
来源于:https://github.com/hucheng91/myBlog/blob/master/web/dom/dom.md DOM定义 DOM可以以一种独立于平台和语言的方式访问和修改一个文 ...
- javascript优化--07模式(对象)02
沙箱模式: 解决空间命名模式的几个缺点: 命名空间模式中无法同时使用一个应用程序或库的两个版本运行在同一个页面中,因为两者需要相同的全局符号: 以点分割,需要输入更长的字符,解析时间也更长: 全局构造 ...
- <JavaScript>“浏览器模式”和“文档模式”之间的区别
只有IE浏览器中才会有“浏览器模式”和“文档模式”,兼容性视图涉及两个重要的功能便是“浏览器模式[browser mode]”和“文档模式[document mode]”,在IE8/IE9中按F12键 ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇
<高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
随机推荐
- 错误 X “X1”不包含“XX2”的定义,并且找不到可接受类型为“X1”的第一个参数的扩展方法“XX2”(是否缺少 using 指令或程序集引用?)
由于我是复制其他.cs文件的代码··· 出错了·搜了一下解决方法··· 但是不适用···· 个人出错原因: 忘了在.cs文件的刚开始(即:using xx:后) namespace aaa.bb { ...
- 一张图解释Hadoop IPC
基于hadoop2.6.2.... 一张图Server启动,Client访问..... RPC是IPC的一种,IPC还有另外一种LPC,相关请看参考中的3 使用hadoop ipc步骤: 1.定义RP ...
- 新一代 Tor发布,它牛在哪里?
导读 知名匿名搜索引擎Tor,最近发布了基于火狐浏览器45-ESR的6.0版本,增强了对HTML5的支持,并更新了用来保护加密流量及其更新机制的安全功能.火狐45-ESR版本的全称为Firefox E ...
- [BZOJ3343]教主的魔法
[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...
- [ruby on rails] 跟我学之(3)基于rails console的查增删改操作
本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...
- 【云计算】开源装机自动化系统 CloudBoot OSInstall 介绍
"CloudBoot"(OSinstall) 发布了. 产品更新及特点如下: 新增虚拟化操作系统适配:支持主流操作系统:RedHat.CentOS.SUSE.Ubuntu.Wind ...
- 通过关闭UseDNS和GSSAPIAuthentication选项加速SSH登录
引自:http://www.cnblogs.com/wjoyxt/p/3790537.html More:http://blogread.cn/it/article/4719 通常情况下我们在连接 O ...
- 2.7 编程之美--最大公约数的3种解法[efficient method to solve gcd problem]
[本文链接] http://www.cnblogs.com/hellogiser/p/efficient-method-to-solve-gcd-problem.html [题目] 求两个正整数的最大 ...
- codeforces A. Vasya and Digital Root 解题报告
题目链接:http://codeforces.com/problemset/problem/355/A 题目意思:找出某个经过最多四次dr(n)操作等于d的k位数. 千万不要想得太复杂,想得越简单 ...
- python 的类变量和对象变量
python是一种解释性的语言,任何变量可以在使用的时候才声明以及定义,也可以在程序运行的任何位置进行声明和定义新的变量. class Man(object): #直接定义的类的变量,属于类 #其中 ...