###判断是否支持css属性
转自判断浏览器是否支持指定css属性和指定值
1 | function isSupportCSS(name, value) { |
1 | if ('textShadow' in document.documentElement.style) { |
###动态插入ul>li*20到body最前
1 | var ul = document.createElement('ul'); |
###统计数组中的重复字符串最多的数量
1 | //将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数 |
###大数相加
1 | function add(a,b){ |
###事件绑定(兼容性)
1 | function addEvent(obj,type,handle){ |
ajax
1 | var xmlHttp; |
Public/Private Variables and Methods
- private variables are declared with the ‘var’ keyword inside the object, and can only be accessed by private functions and privileged methods.
- private functions are declared inline inside the object’s constructor (or alternatively may be defined via var functionName=function(){…}) and may only be called by privileged methods (including the object’s constructor).
- privileged methods are declared with this.methodName=function(){…} and may invoked by code external to the object.
- public properties are declared with this.variableName and may be read/written from outside the object.
- public methods are defined by Classname.prototype.methodName = function(){…} and may be called from outside the object.
- prototype properties are defined by Classname.prototype.propertyName = someValue
- static properties are defined by Classname.propertyName = someValue
两栏布局
- float+margin(一侧定宽,一侧自动)
2.position+margin(一侧定宽,一侧自动)
3.float+负margin(一侧定宽,一侧自动)
三栏布局:
1.float+margin(两侧定宽,中间自适应)
2.position+margin(两侧定宽,中间自适应)
3.float+负margin(两侧定宽,中间自适应)
4.float+position+margin(两侧自动,中间定宽)
5.position+margin(两侧自动,中间定宽)
等高布局:
1.float+margin+position(两列等高布局)
2.float+position(三列等高布局)
流式布局
1.float
2.position
两栏布局,三栏布局,等高布局,流式布局 - 小七丶 - 博客园
web优化
一、页面级优化
- 减少HTTP请求数
减少HTTP请求数的主要途径包括:
(1). 从设计实现层面简化页面
(2). 合理设置HTTP缓存
HTTP1.1协议中关于缓存策略的描述(http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html)
Fiddler HTTP Performance中关于缓存的介绍(http://msdn.microsoft.com/en-us/library/bb250442(VS.85).aspx)
(3). 资源合并与压缩
(4). CSS Sprites
(5). Inline Images
(6). Lazy Load Image
将外部脚本置底
异步执行inline脚本
Lazy Load Javascript
将CSS放在HEAD中
异步请求Callback
减少不必要的HTTP跳转
避免重复的资源请求
二、代码级优化
- Javascript
(1). DOM
DOM操作应该是脚本中最耗性能的一类操作,例如增加、修改、删除DOM元素或者对DOM集合进行操作。如果脚本中包含了大量的DOM操作则需要注意以下几点:
a. HTML Collection
b. Reflow & Repaint
除了上面一点之外,DOM操作还需要考虑浏览器的Reflow和Repaint,因为这些都是需要消耗资源的,具体的可以参加以下文章:
如何减少浏览器的repaint和reflow?
Understanding Internet Explorer Rendering Behaviour(http://blog.dynatrace.com/2009/12/12/understanding-internet-explorer-rendering-behaviour/)
Notes on HTML Reflow(http://www.mozilla.org/newlayout/doc/reflow.html)
(2). 慎用with
with(obj){ p = 1}; 代码块的行为实际上是修改了代码块中的执行环境,将obj放在了其作用域链的最前端,在with代码块中访问非局部变量是都是先从obj上开始查找,如果没有再依次按作用域链向上查找,因此使用with相当于增加了作用域链长度。而每次查找作用域链都是要消耗时间的,过长的作用域链会导致查找性能下降。
因此,除非你能肯定在with代码中只访问obj中的属性,否则慎用with,替代的可以使用局部变量缓存需要访问的属性。
(3). 避免使用eval和Function
每次 eval 或 Function 构造函数作用于字符串表示的源代码时,脚本引擎都需要将源代码转换成可执行代码。这是很消耗资源的操作 —— 通常比简单的函数调用慢100倍以上。
eval 函数效率特别低,由于事先无法知晓传给 eval 的字符串中的内容,eval在其上下文中解释要处理的代码,也就是说编译器无法优化上下文,因此只能有浏览器在运行时解释代码。这对性能影响很大。
Function 构造函数比eval略好,因为使用此代码不会影响周围代码;但其速度仍很慢。
此外,使用eval和Function也不利于Javascript压缩工具执行压缩。
(4). 减少作用域链查找
此外,要减少作用域链查找还应该减少闭包的使用。
(5). 数据访问
a. 对任何对象属性的访问超过1次
b. 对任何数组成员的访问次数超过1次
另外,还应当尽可能的减少对对象以及数组深度查找。
(6). 字符串拼接
关于Javascript优化的更详细介绍请参考:
Write Efficient Javascript(PPT)
Efficient JavaScript
- CSS选择符
在大多数人的观念中,都觉得浏览器对CSS选择符的解析式从左往右进行的,例如
#toc A { color: #444; }
这样一个选择符,如果是从右往左解析则效率会很高,因为第一个ID选择基本上就把查找的范围限定了,但实际上浏览器对选择符的解析是从右往左进行的。如上面的选择符,浏览器必须遍历查找每一个A标签的祖先节点,效率并不像之前想象的那样高。根据浏览器的这一行为特点,在写选择符的时候需要注意很多事项,有人已经一一列举了,详情参考此处。
- HTML
对HTML本身的优化现如今也越来越多的受人关注了,详情可以参见这篇总结性文章。
- Image压缩