2008-03-24 09:08:31
推荐TAG: Ajax  |   正则表达式  |   prototype  |   FSO  |   Drag  |   Menu  |   对象
转自:http://looxiaohu.javaeye.com/blog/205601

 随着网络的发展,网速和机器速度的提高,越来越多的网站用到了丰富客户端技术。而现在Ajax则是最为流行的一种方式。javascript是一种解释型语言,所以能无法达到和C/Java之类的水平,限制了它能在客户端所做的事情,为了能改进他的性能,我想基于我以前给JavaScript做过的很多测试来谈谈自己的经验,希望能帮助大家改进自己的JavaScript脚本性能。

  语言层次方面

  循环

  循环是很常用的一个控制结构,大部分东西要依靠它来完成,在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用。for(;;)和while循环的性能应该说基本(平时使用时)等价。

  而事实上,如何使用这两个循环,则有很大讲究。我在测试中有些很有意思的情况,见附录。最后得出的结论是:

  如果是循环变量递增或递减,不要单独对循环变量赋值,应该在它最后一次读取的时候使用嵌套的++或—操作符。

  如果要与数组的长度作比较,应该事先把数组的length属性放入一个局部变量中,减少查询次数。

  局部变量和全局变量

  局部变量的速度要比全局变量的访问速度更快,因为全局变量其实是全局对象的成员,而局部变量是放在函数的栈当中的。

  不使用Eval

  使用eval相当于在运行时再次调用解释引擎对内容进行运行,需要消耗大量时间。这时候使用JavaScript所支持的闭包可以实现函数模版(关于闭包的内容请参考函数式编程的有关内容)

  减少对象查找

  因为JavaScript的解释性,所以a.b.c.d.e,需要进行至少4次查询操作,先检查a再检查a中的b,再检查b中的c,如此往下。所以如果这样的表达式重复出现,只要可能,应该尽量少出现这样的表达式,可以利用局部变量,把它放入一个临时的地方进行查询。

  这一点可以和循环结合起来,因为我们常常要根据字符串、数组的...

阅读全文...

About MediaPlayer

[ 2008-06-16 by CNLei ]
Player.playState
0
Undefined
Windows Media Player is in an undefined state.

1 Stopped
Playback of the current media item is stopped.

2 Paused
Playback of the current media item is paused. When a media item is paused, resuming playback begins from the same location.

3 Playing
The current media item is playing.

4 ScanForward
The current media item is fast forwarding.

5 ScanReverse
The current media item is fast rewinding.

6 Buffering
The current media item is getting additional data from the server.

7 Waiting
Connection is established, but the server is not sending data. Waiting for session to begin.

8 MediaEnded
Media item has completed playback.

9 Transitioning
Preparing new media item.

10 Ready
Ready to begin playing.

11 Reconnecting
Reconnecting to stream.

Player.openState
// 0(Undefined) 8(MediaChanging) 9(MediaLocating) 10(MediaConnecting) 11(MediaLoading)
// 12(MediaOpening) 13(MediaOpen) 20(MediaWaiting) 21(OpeningUnknownURL)
...

阅读全文...

更新手记

[ 2008-06-04 by CNLei ]
2008-06-04
版本编号:
lJSF v1.0.1.20080604.1.rar
修改细节:
改进lAJAX类,主修改如下:
1.更改run方法为queue,并加以改进,修正了旧版中延时的问题.
实现: 多url,多回调函数,顺序执行
2.新增加group方法,同样是顺序请求多个URL,与queue方法的主要区别在于回调函数
实现: 多url,单一回调函数,顺序执行
3.为load方法新参加了一个参数,用于设置dataType,onError,onLoad参数.
dataType默认为:HTML,允许值:HTML,JSON,JSHTML,XML
若onError/onLoad为非Function类型则默认为回调函数(即第二个参数)
4.修改func方法,消除内存泄漏的隐患(旧版存在:DOM对象被返回的匿名函数所引用).
-------------------------------------------------------------------
2008-6-17
版本编号:
lJSF v1.0.1.20080617.1.rar
新增内容:
lSTB类,实现二维DOM表格排序,主要方法:
.build()  :创建可排序DOM表格
.sort()  :排序函数
-------------------------------------------------------------------
2008-6-20
版本编号:
lJSF v1.0.1.20080620.1.rar
新增内容:
lDRAG类,实现拖动效果(包括iframe),属核心代码.
>> lDRAG类方法:
.$()  :类似于document.getElementById的缩写
.init()   :类初始化,主要用于初化类实例的.config属性并调整.dXY属性值
.build()  :创建可拖动DOM对象,可指定拖动方向(水平/垂直/任意(默认值))
.start():拖动开始
.drag():拖动执行
.end():拖动结束
.move(): 任意移动
.moveX(): 水平移动
.moveY(): 垂直移动
>> lDRAG类实例属性:
.config  : ...

阅读全文...
测试文件:
http://www.cnlei.com/lab/lTREE/index.big.html
HTML文件大小: 260.03 KB (266,274 字节)
结点总个数: 3073 个
分类结点(分枝): 536 个
数据结点(叶子): 2537 条

源码下载及详细介绍请参见:
http://www.cnlei.org/blog/article.asp?id=520

以下为测试结果:
-----------------------------------------------------------
IE 6.0
引用
初始化耗时: 1453 毫秒
结点总个数: 3073 个
分类结点(分枝): 536 个
数据结点(叶子): 2537 条
------------------------------------
AGT : mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1) ; .net clr 2.0.50727)
isW3C : true
isIE : true
isFF : false
isNS6 : false
isOP : false
isSF : false
isGecko : false
Firefox 3.0 Beta5
引用
初始化耗时: 240 毫秒
结点总个数: 3073 个
分类结点(分枝): 536 个
数据结点(叶子): 2537 条
------------------------------------
AGT : mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9b5) gecko/2008032620 firefox/3.0b5
isW3C : true
...

阅读全文...

[隐藏] [草稿]

[ 2008-05-24 by CNLei ]
你没有阅读此日志的权限.

    悲痛的泪流,已注入我们的内心。这是无须渲染的灾情,更是无须压抑的哭泣。今天起,号哭不是软弱,抚胸难掩悲怆。今天起,前仆之处后继,起死而后回生。
    地震专家称,震后第一天存活率90%,第二天50%-60%,第三天仅剩下20%-30%,此后存活就是奇迹。我们期待奇迹!为了这个奇迹,我们绝不言弃!

  震后被掩埋196小时的幸存者被抢救出——视频。[详细]

  老太太被埋195小时后获救——下雨的时候王老太太靠着雨水来维持身体所必须的水分,没有下雨时这两条大黄狗就不停的添王老太太的嘴唇,以此来帮王老太太补充水分。[详细]

  震后被掩埋180小时的幸存者被抢救出——视频。[详细]

  映秀镇男子被埋179小时后获救——他在下面的时候,双手和头部一起压在一起,这些天一滴水没有喝,下雨的雨水也到不了他那个地方。[详细]

164小时

  液压剪、切割机迅速清除幸存者上方的钢筋、铁条等物,搬除身上埋压的石板、水泥块,为幸存者开辟救生通道[详细]

160小时

  80多岁老人成功获救北川救出被困160小时61岁幸存者

150小时

  18日20时10分,映秀镇村民虞锦华被埋150小时后获救,救援人员对她的营救也长达56个小时。[

...

阅读全文...
两年前曾写了棵CSS无限级树形菜单:
http://www.cnlei.org/blog/article.asp?id=49
那时写的树存在一个致命弱点:数据量比较大时,很容易导致浏览器卡死.
这两天重写了一下代码,除了在CSS的写法上与前一次基本一样外,javascript代码部分可以说是脱胎换骨了,哈哈.
新写的树:
1.解决了大数量加载过慢的问题
2.改进应用接口,可扩展性更强

先看效果吧,回头再写相关的使用参数文档:)

实例演示:
http://www.cnlei.com/lab/lTREE/
http://www.cnlei.com/lab/lTREE/index.big.html (大数据量(3000结点)效果演示)
http://www.cnlei.com/lab/lTREE/lTREE.simple.html (简洁风格)
http://www.cnlei.com/lab/lTREE/lTREE.checkbox.html (结点内含有复选框,效果演示)

代码下载:
http://www.cnlei.com/lab/lTREE/lTREE.rar

使用说明:
待写中...

欢迎反馈您在使用过程所遇到的问题,以便我加以改进.E-Mail: CNLei.y.l@Gmail.com
转自:http://www.anti-cnn.com/forum/cn/thread-49095-1-1.html

(2008-05-13 12:34:09) 欲闻 (155098608)
群里的一个记者在地震抢救现场给我们上午做的直播
绮梦(360327959) 10:07:29
现场简直不能看了
绮梦(360327959) 10:08:33
年过花甲的总理已经哭得不成样子了
绮梦(360327959) 10:10:16
刚刚挖开的地方又塌方了
绮梦(360327959) 10:11:24
这倒霉天气还在下雨,现在一线的军人已经被下达死命令,必须冒雨解救
绮梦(360327959) 10:11:30
我就在现场
绮梦(360327959) 10:11:56
我现在是在都江堰市
绮梦(360327959) 10:13:24
交通已经瘫痪了,人员和物资很难运进去
绮梦(360327959) 10:13:47
汶川现在还不让我们去
绮梦(360327959) 10:15:21
汶川的交通完全封闭了,现场到底怎么样我不知道,不过早上总理指示军队不管有多大代价,必须进城
绮梦(360327959) 10:16:03
倒霉天气在下雨,飞机几次都不能降落,伞兵马上就要起飞了
绮梦(360327959) 10:17:36
飞机在汶川空投物资了
绮梦(360327959) 10:20:06
被压在废墟下的300多学生现在很危险啊,刚才一次的营救又失败了,现在总理在现场组织再次营救。
绮梦(360327959) 10:20:47
啊 总理摔到了,
绮梦(360327959) 10:21:35
照片我正在传给北京,不经过审核的是不允许发布的
绮梦(360327959) 10:22:21
我和几个同行现在开了9台电脑,同时在传消息
绮梦(360327959) 10:22:37
这个QQ在关键时候传的真慢
绮梦(360327959) 10:23:39
突击队又上了
绮梦(360327959) 10:25:04
如果你现在看见老爷子的样子,你马上就会哭的
绮梦(360327959) 10:26:40
老爷子的手臂受伤出血了,他把要给他包扎的医务人员推开了
绮梦(360327959) 10:27:09
好消息,发现一名学生了
绮梦(360327959) 10:28:00
总理跑到塌方点了,在帮忙呢
绮梦(360327959) 10:28:13
...

阅读全文...