一起去看海

2010/04/15

【每日一技】JS性能优化

Filed under: Dian团队 — Tags: , — admin @ 21:57

CrazyDo

浏览器解释HTML时最耗时的部分是Reflow(回流),而当JS操作DOM的时候就会引发浏览器的Reflow,因此减少操作DOM的次数可以提高性能。

当需要操作DOM时,比如在一个div中添加n个div,我们可能这样操作:
[javascript]var ctrl = document.getElementById("mainContainer");
for (var i = 0; i < 100; i++) {
    var child = document.createElement("div");
    ctrl.appendChild(child);
}[/javascript]

或者
[js]var ctrl = document.getElementById("mainContainer");
var inner = ""
for (var i = 0; i < 100; i++) {
    inner += "<div></div>";
}[/js]

ctrl.innerHTML = inner;
乍一看,第一种方法直接操作DOM,省去了HTML->DOM的Parse过程,但是每次执行appendChild,就要Reflow一次,而第二种方法,相当于一次性操作DOM,只有一次Reflow,而且目前大部分浏览器对于Parse的过程都有优化,因此性能开销十分小。实测添加10000个div,第一种方法在160ms左右,第二中方法只要50ms左右。

———————————————–

spllot:如果我没记错的话,使用innerHTML,有些情况下是不怎么好的.能不能分析下使用innerHTML的好处与坏处

———————————————-

joehust:更复杂的情况呢?我比较喜欢用innerHTML直接设置,不过有人提醒过我说有一部分我写的代码太慢了,换成了分步的dom操作,

是否在所有情况下都是直接修改innerHTML更快呢?

———————————————

CrazyDo:一般来说,如果innerHTML里面嵌套关系过于复杂的时候建议先createElement创建儿子节点,然后在其中appendChild加入孙子节点,以此类推,最后将儿子节点加入父亲节点,这样在Firefox下也是一次Reflow,但是IE下似乎还是多次Reflow。

———————————————

joehust:很多时候再构造页面的时候其实是先将内容拼好,再append到某个节点下面去,在拼接过程中应该是不会有reflow的,这个时候用dom语句去构造就会省去parse html的过程,速度应当快些,如果是对已经呈现出来的页面进行修改的话可以考虑先将其hide,或者移除,等修改完成后再添加回去,这样可以避免修改的过程中发生reflow,从而提高效
率吧

2010/04/12

【每日一技】提高文件读取速度的NIO

Filed under: Dian团队, Java笔记 — Tags: , — admin @ 17:19

NIO即new io.主要是采用通道机制来提高文件读取速度。以下为一个简单的读取文本文
件的例子:

[java]public String readTxtFile(String path) throws IOException {

long start = System.currentTimeMillis();

//设置缓冲区的大小

final int BUFFER_SIZE = 0×900000;

String content = "";

// 创建一个文件输入流

FileInputStream fis = new FileInputStream(path);

// 获得该输入流的通道

FileChannel fc = fis.getChannel();

// 创建一个字节缓冲区

ByteBuffer bb = ByteBuffer.allocate(BUFFER_SIZE);

// 将字节序列从此通道读入给定的缓冲区

fc.read(bb);

// 反转此缓冲区。首先将限制设置为当前位置,然后将位置设置为 0

bb.flip();

// 获得缓冲区中剩余元素数,并创建相应的字节数组

byte[] bytes = new byte[bb.remaining()];

// 将缓冲区中的字节序列存放在字节数组里

bb.get(bytes);

// 将字节数组中的内容转换成字符串

content = new String(bytes);

long end = System.currentTimeMillis();

System.out.println(end – start);

return content;

}[/java]

我做了一个简单的测试,对于一般几K到几十K的文本文件,只需要几毫秒到20几毫秒
,对于一个好几M的文本文件,只需要200多个毫秒。希望有兴趣的同学可以进一步的研
究,共同探讨相关话题。

另外推荐一篇关于流的文章:http://www.ibm.com/developerworks/cn/java/j-io1/

———————————————————

henix: 那跟FileInputStream再套上BufferedInputStream有什么区别?

———————————————————

spllot:

我觉得一个很重要的区别是,NIO中的做法更灵活,操作起来比较简单.我写的小例子只是
其中的一角,还有像MappedByteBuffer等缓冲区,这些缓冲区都有清除、反转和重绕方法
,用以标记当前位置,以及将当前位置重置为前一个标记处.并且还定义了一系列用于将
数据移出或移入缓冲区的 get 和 put 方法,用于压缩、复制 和切片 缓冲区的方法,
以及用于分配新缓冲区和将现有数组包装到缓冲区中.

对于我写的那个小程序,确实给人的感觉是空间换时间.

就我写的那个程序来说,对于一个小的文件,缓冲区设置小一点是没有什么问题的,但是如
果是一个好几个M的文件,如果缓冲区设置的过小的话,会出现读出来的内容不完全的情况
.所以为了简单的引进NIO,我仅仅是做了一个示例.

对于文件比较大的情况,如果将缓冲区设置比较小的话,也是可以解决的,分块来读就行了
.NIO是按块来读的,从这点来看,就比传统的IO读起来会快很多.另外NIO是无阻塞的,传统
的IO读文件的时候,需要将数据读到缓冲区后,再等待处理,会浪费很多时间,但NIO则不需
要,通过通道来传输,减少了等待的时间,从而提高了读取速度.

P.S 我的毕业设计是桌面搜索引擎,其中会涉及到文件的读取,有可能文件是比较大的,并
且数量是比较多的,所以如何减少读取时间,提高索引速度是很重要的,因此我考虑到使用
NIO.有兴趣的同学可以和我一起研究.

—————————————————

转自Dian团队内部技术讨论。

2010/04/07

恢复到正常的学习生活

Filed under: Dian团队 — Tags: — admin @ 10:31

经过了团庆以及后续的收尾工作,一切又开始回到了正常的生活状态。团庆上真可谓是全民皆兵,全部在站队员都出动了还觉得人手不够,更多的人一直都是在默默无闻的工作,团庆的成功少不了任何一员。团庆上见到了很多老队员,感觉十分的温馨,真的有种家一样的感觉。很快自己也要离开团队了,这最后的时间争取为团队多做点事情吧。

晚会的照片有点模糊,不过还是来两张吧:

Dian团队8周年节目1

开场舞:逐日青春

Dian团队8周年节目2

华尔兹

Dian团庆8周年花絮

布场之后抓紧时间休息的队员

2010/03/28

4月4日团庆

Filed under: Dian团队 — Tags: — admin @ 13:26

最近没啥事,也没啥好写的,随便来点,免得有人认为偶不写博客了。

Dian团队的8周年团庆即将举行,最近天天在练舞,真的是腰酸腿疼。正好还有一周的时间,肯定会很精彩。

昨天居然收到信产部的电话,确认我是不是域名备案的本人,现在CN域名真的是半死不活的,每日一站的域名(dailysite.cn)用着很痛苦,但是丢了又可惜。

昨天拿电脑放音乐,放着放着居然莫名其妙的关机了,而且按电源键没反应,怎么都开不了机。华硕的本本号称坚若磐石,质量也不见得怎么样。在网上一搜才发现原来有那么多用华硕的人遇到过这个问题。把所有能拔的拔掉,能拆的拆下来,最近放个半天,重新插电源就又能开机了。。。。难道寝室小强太多了?

2010/03/19

我爱吃饭

Filed under: Dian团队, 生活点滴 — Tags: , — admin @ 19:49

今天终于找到了吃饭的感觉。学校的饭菜是越来越难吃了,导致偶的饭量越来越小,也越来越挑食了。今天一早起来去领驾照,8点出发,坐了两个小时的车到达目的地,然后又坐了两个小时车回来。到学校的时候将近12点了,12点半要排练节目,于是匆匆扒了两口饭,相当于没吃就出发了。

排练的节目是为团队的8周年团庆准备的,这老师也忒狠了点,一个半小时的训练比踢场球还累。当时真叫一个饿啊~~~还要不停地蹦来蹦去。下午回到寝室稍微吃了点东西,然后直接睡到了7点钟。起来到饭堂吃饭,都是些剩菜了,偶居然还添了两次饭,突然觉得学校的饭菜也不是那么难吃。看来以后还是得多运动运动了。

2010/02/04

回家了

Filed under: Dian团队, 生活点滴 — Tags: — admin @ 15:48

终于要回家了,下次见面就是虎年了!昨晚参加完团队的年终茶话会,节目十分精彩,今年可以说是众多新星闪耀啊,节目一个比一个要好看。苦苦等了一天,居然还没有人上传昨晚的照片,想拿几张出来分享一下都不行,可惜啊。

上午去看了电影《孔子》,也是团队组织的。电影的感觉还行,不过感觉去电影院看这类电影还是有点破费~~~倒是电影之后的自助餐吃的很Hi,吃得太饱了^_^

要回去了,将有一个月的时间不能上网。可能来访的朋友我无法及时回访了,留言也不能及时的话请见谅,过年回来加倍补上。

感觉自己越来越匆忙了,每次回去都有很多事情要做,有很多同学朋友要见,可是每次回去都只能见一部分人,而且都是来去匆匆。在家的时间也很短,不能好好陪陪老妈~~~看来下学期还得再找个机会回去一趟。

不扯那么多口水话了,收拾东西要紧。祝各位新年快乐!虎年吉祥!虎虎生威!

闪人了!明年见!

2009/12/16

Dian团队8周年专题网站上线

Filed under: Dian团队 — Tags: , — admin @ 23:51

团队的8周年团庆筹备火热进行中,为了更好的宣传团队,特推出Dian团队8周年团庆专题网站。第一次制作WordPress主题,再一次感受到WordPress的强大。可惜静态页面不是我设计的(我也设计不出来),下次自己也给自己的博客做个主题玩玩。

团队的论坛也上线了,可惜只对内部人员开放注册。

dian团队8周年网站

2009/12/14

上驾校了

Filed under: 生活点滴 — Tags: — admin @ 23:05

早上六点钟爬起床,印象中这应该是我大二以来起得最早的一次了。只为了去上驾校的理论课,真是痛苦啊!武汉的早上还是有点冷的,到省博物馆又远,中途还要转车,而且两个人都不懂路。经了些波折,最终踩点进了教室。

这理论课还是蛮受用的,认真听下来还是学了不少东西(虽然我中途还测了一下能不能用手机在博客上发文章^_^)。中午自己一个人回来的,早上起太早,结果在公车上睡着了。醒过来的时候都不知道公车把我拉到哪去了……还好脑袋还在。灰溜溜下了车,又转了辆公车,还走了一大段冤枉路才回到学校。天还下着雨,真是折磨惨了。

团队的域名备案终于弄好了,最近查的蛮紧,不备案空间商死活不给绑定,还是备案一下下吧。近期团队将会推出Dian团队论坛和Dian团队8周年团庆的网站,敬请期待!

2009/11/16

wordpress 评论插件

Filed under: Dian团队, 博客站务 — Tags: , — admin @ 13:32

昨天接受zluyuer的建议,给种子杯的网站加上了WordPress评论插件wordpress thread comment。把种子杯的网站建好之后没怎么关心过,才发现使用的主题评论功能比较差,连回复都没有,只有发表新评论,可能主题的作者也是想着和评论插件wordpress thread comment 一起用的。wordpress thread comment可以将回复的评论嵌套显示,使得评论工整易读,是一个十分实用的插件。

我现在的博客也用的wordpress thread comment评论插件,原来的评论回复和引用功能被我删掉了。

附上插件的下载地址:http://wordpress.org/extend/plugins/wordpress-thread-comment/

2009/10/08

为团队主页分析一下关键词

Filed under: Dian团队 — Tags: , — admin @ 06:50

团队主页要改版,原来主页的宣传效果不是十分理想,于是想分析一下关键词。

团队主页:www.dian.org.cn

数据来源:

百度:http://www.baidu.com
google:http://www.google.cn
百度指数 http://index.baidu.com/
google趋势 http://www.google.com/trends?hl=zh-CN

一、关键词分析
1. 华中科技大学
google:前五页没有与Dian团队相关的网页出现
百度:同上

2. 点
google:前五页没有与Dian团队相关的网页出现
百度:同上

3. dian
百度:第一页第三条。
google:google将关键词“dian”默认为搜索“点”,因此找不到团队的相关内容。只有将关键词“dian”加上双引号才会得出与百度差不多的结果,但极少人会这样做。

4. dian团队
这个关键词无论是百度还是google都将团队的主页放在了第一位。

5. 种子杯:
主页 http://www.dian.org.cn/seedpk
种子杯的网站用js很多,不利于搜索引擎获取数据。果然在搜索引擎中的排名不是很好。
百度:位于第二页第二条,第一页前面几条基本都是与种子杯相关的其他媒体报导种子杯,也有一些参赛队员在自己博客中提到种子杯,但是都没有团队的链接。
google:位于第一页最后一条,第一页也有几条相关的内容。

总结:除了“dian团队”这个关键词之外,基本没有关键词可以找到团队的信息。而搜索“dian团队”的人基本上都是从别的渠道打听到团队的消息之后才来搜索,可见团队的网站并没有起到为团队宣传的作用。

二、趋势对比
1. 华中科技大学,华科大,dian团队
从百度指数给出的数据来看,“华中科技大学”日均查询量在3000+,“华科大”在100左右,“dian团队”基本为零,“dian”的日均查询量为1000左右,“启明学院”也为零。

三张图片的链接:

keyword_dian_1

—————————————————————————————————————

keyword_dian_2

—————————————————————————————————————

keyword_dian_3

从上面的数据看来,提升团队主页在关键词“华中科技大学”搜索结果页的排名是非常好的一个选择。“dian团队”和“启明学院”根本没有人会去搜索,即使排在第一位也没有什么意义。“dian”的查询量也不少,但是质量不高,就是说搜索“dian”的人大多不是冲着团队来的。

如果团队主页能够在关键词“华中科技大学”的搜索结果页上排到第一页,带来的流量是非常可观的。根据google的金三角,自然搜索结果排名前10位的信息受到被调查者关注的比例:
第1位 – 100%
第2位 – 100%
第3位 – 100%
第4位 – 85%
第5位 – 60%
第6位 – 50%
第7位 – 50%
第8位 – 30%
第9位 – 30%
第10位 – 20%
即使排在第7位,一天也会带来1500人的流量,效果相当于一个大型旅游团来参观了,对团队的宣传是有利无害,而且我们不需要投入人力去招待,去介绍。

提升团队主页在关键词“华中科技大学”搜索结果页的排名还能提高学校的名气。高考填志愿的时候是查询“华中科技大学”的高峰期,最高将近12000人次(从第三张图可以看到),这些都是对我们学校有兴趣甚至想报考我们学校的考生或者考生家长。如果同时给他们展示一下团队的风采,相信这些人对华科会有个更好的印象。

以上仅为个人的一些见解,欢迎拍砖。

Powered by WordPress