在很多时候,我们在web前端技术中用到JavaScript中的字符串连接操作,一般都会用“+”运算符,如:
var stra="abc";
stra+="def";
上面的代码执行的步骤如下:
(1) 创建存储”abc”的字符串。
(2) 创建存储”def”的字符串。
(3) 创建存储连接结果的字符串。
(4) 把str的当前内容复制到结果中。
(5) 把”def”复制到结果中。
(6) 更新stra,使它指向结果。
每次完成字符串连接都会执行步骤2到6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚至几千次,就会造成性能问题。
能不能就像java里面,字符串通连接常都不用“+”运算符,而用StringBuffer类中的append方法来达到性能上的优化,事实也证明在java里面,后者要比前者在性能方面得到很大的提高。于是利用JavaScript仿造java中的StringBuffer类,用Array对象存储字符串,然后用join()方法(参数是空字符串)创建最后的字符串。想像用下面的代码代替前面的代码:
var arr = new Array();
arr.push("abc");
arr.push("def");
var str = arr.join("");
这样,无论在数组中引入多少字符串都不成问题,因为只在调用join()方法时才会发生连接操作。此时,执行的步骤如下:
(1) 创建存储结果的字符串。
(2) 把每个字符串复制到结果中的合适位置。
总结: 如何程序中需要多次进行字符串连接,最好使用Array的join方法.
下面我把这个功能封成一个类:
function StringBuffer(){
this._strings=new Array;
}
StringBuffer.prototype.append=function(str){
this._strings.push(str);
}
StringBuffer.prototype.toString=function(){
returnthis._strings.join("");
}
这是在《javascript高级程序设计》一书中作者所提倡的,并且用如下代码来测试这个类与“+”运算来进行字符串连接的性能:
//使用 "+=" 拼接字符串
var d=new Date();
var str="";
for(var i=0;i<10000;i++){
str+="test";
}
var d2=new Date();
document.writeln(d2.getTime()-d.getTime());
//使用 StringBuffer
var sd = new Date();
var str2 = new StringBuffer();
for(var i=0;i<10000;i++){
str2.append("test");
}
var res = str2.toString();
var ed = new Date();
document.writeln(ed.getTime()-sd.getTime());
(进行了小部分修改)
在作者当时的情况下作者得出的多次测试结果看来:
使用StringBuffer可以节省50%以上的时间。
我在网上也查了n多关于javascript字符串的连接优化的网文,即使到现在还有很多网友像追风一样,对作者这个结果深信无疑,但我今天亲自测试了一下,结果让我大吃一惊:
当然IE6及IE7上作者的结果是正确的,性能方面StringBuffer可以节省50%以上的时间。
当在火狐FF3.5上,Opera浏览器上,chrome浏览器上结果却刚好相反,“+”运算明显要高于我们写的StringBuffer方法,而且也是50%的差距,这里左下修改,发布这篇文章后有人提醒,我这里只循环10000次,如果把循环次数加到一百万(1000000)次,结果就不会令我吃惊了,确实当循环次数达到一百万的时候,测试出来的结果如作者说的一样,StringBuffer运算要快,但与”+=”运算的时间相差不大,当我用Google测试的时候,发现问题不对,结果相反,用”+=”比用StringBuffer运算要快得多。再用一千万(10000000)测试,google浏览器还是”+=”运算比用StringBuffer运算要快得多,从10000次开始,我比较下了火狐和google浏览器的连接字符串的运算速度,明显的火狐运算速度比google浏览器要快很多,随着循环的次数加大,很明显这样的运算速度火狐要比google快n倍。
最后我感觉,当我们处理javascript字符串的连接优化的时候,是不是要考虑到浏览器的问题。特别是字符串链接很多的时候。出现这种情况,可能是随着浏览器版本的提高,JavaScript的版本更新,对“+”运算进行了很多的优化而导致“+”运算明显要高于我们前面说写的StringBuffer方法。
web前端工程师,是我追求的,很久以来,我感觉淘宝整个站点的设计都非常棒,自己很想知道他们在面试web前段工程师的时候都会出一些什么样的面试题,于是在网上搜索了下,下面是有关招聘UED的面试题:
2007年考题:
1、javascript方面:
小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述可以得到以下对象:
function Dog() {
this.wow = function() {
alert(’Wow’);
}
this.yelp = function() {
this.wow();
}
}
小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请根据描述,按示例的形式用代码来实现(提示关键字: 继承,原型,setInterval)。
请先自行研究下该怎么下,参考答案见附件。
阅读全文…
在平凡中改变自己,发掘自己的潜能,会发现原来改变自己便是一种成功.
很快一个礼拜过去了,迎来了新的一个周,上礼拜六礼拜天在宿舍待着,盯着电视屏幕,频道一个接一个的换来换去,脑子在想是不是该充充电,看看有关书籍了,为辞职之后好找工作,身边的同事都在自己的床上开着自己的笔记本,上着网,而我独自在客厅看着电视,我不想打开电脑,每天都盯着,心里厌烦了。好像自己看电视也没有集中注意力,脑子里很混乱,有一种想自虐的倾向,呵呵。
回想这工作的2年多来,我实在是没有做成什么东西来,最多的也就是做了个对政府门户网的二次开发,虽说这次开发对我来说在某些方面认识更深了一点,但由于自己基础实在不行,也就是按别人的思路在做着开发着,并没有自己的一点主见,这并不是我想要的,大多时候都是在复制粘贴,呵呵。当时是我们有三个人,到现在回想,那个时候的经历值得回味,最紧张的时候是早上七点半起床,晚上三四点睡,为了赶进度,三人的精力在那时候特别旺盛,过的也很充实,有说有笑的,每晚都会上零食店买些小零食一起共享,乐此不疲。
这个项目做完回到总公司,去年的这个时候,公司的领导们还是挺有想法的,也想把公司从亏损中带出来,在一次邀请的浙大教授来我们公司演讲之后,公司定位做网校,当前教育这块市场可以说是很肥的,做起来的话就有得赚了,接下来的时间也为这个想法进行调查研究,但是作为我们开发人员,我们要的是一个很好的团队,要求聘请一些牛人,最好是懂这方面的,因为我们面临的是公司转型,可是由于公司财政亏空,不可能花大价钱去聘请牛人,就这样,到了今年年初公司正式上班,我们就一度忙着网校的研讨,领导和我们开发人员一起开会研讨怎么来进行网校的建设,各自发表意见,但始终我个人感觉到最后也没有把网校的人群定位定好,很盲目看不到希望就进行开发了,从网上down了一个免费java论坛,进行二次开发,项目经理负责开发一个数据录入系统,期间还有一个cms系统也自主开发,自从网站进行开发的几个月后,一种消极懒散的气息蔓延公司,人员同事不断的离开,最后领导对此项目也不再过问,就我们开发组在折腾。
进入今年的6月份,公司所剩员工不多,总公司的进来就像一个空架子,人员稀少,副总也开始离开她的职位,就这样,压抑的气氛继续笼罩着,人心已经懒散,各自都在谋出路。
现在已经是九月份了,我们开发组的经理一撒手也走了,还剩下三个人,加美工一个,开发组一个同事也提出了辞职,过几天也就离开了,网站的开发已经形同虚设了,我也懒得管了,而我现在想的是上完还剩今年下半年半期的网络本科,也就没什么可值得留下的了,所以这是我的一个借口,可以让自己为自己辩护自己为什么还继续留在公司的借口,呵呵,也许到最后,项目组就剩我和一个美工了,公司也就我两还在大厅里面对电脑了,哈,那是多壮观。
在用Eclipse做开发的时候,用到了svn版本控制器,这天当我打开Eclipse的时候,发现项目里面的所有文件前的版本号以及状态图标都不显示了,即所有的svn图标不显示了,这是怎么回事,关掉Eclipse重新启动了一遍,还是不凑效。
可以确认的是当进行文件的更新提交的时候都可以正常进行,但就是不显示文件svn的版本号及状态图标,经过摸索 ,解决方法如下:
如果没有汉化是英文版的话,在菜单栏中:windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项,最后应用确认之后,文件的版本号及状态图标应该就显示出来了.
翻译成中文,就是在菜单栏中:窗口 ->首选项->常规->外观->标签装饰 勾选其中的 SVN 项,最后应用确认之后,文件的版本号及状态图标应该就显示出来了.
很多像SVN检出的文件夹不显示SVN的状态图标和Eclipse中SVN图标不显示的问题也就解决了。呵呵
在网上看到一有关于提高 wordpress 博客排名的文章,作者翻译的很好,也很实用,在这里把作者的文章链接附上:
-
[WordPress SEO] 提高博客排名的权威指南 1
-
[WordPress SEO] 提高博客排名的权威指南 2
-
[WordPress SEO] 提高博客排名的权威指南 3
-
[WordPress SEO] 提高博客排名的权威指南 4
-
[WordPress SEO] 提高博客排名的权威指南 5
-
[WordPress SEO] 提高博客排名的权威指南 6
先看下面两段js程序,先是定义式函数写法:
<script type="text/javascript">
function myfunc(){
alert("第一次调用");
};
myfunc(); //得出的是 第二次调用
function myfunc() {
alert("第二次调用");
};
myfunc(); //得出的是 第二次调用
</script>
接下来是变量式函数写法:
<script type="text/javascript">
var myfunc = function (){
alert("第一次调用");
};
myfunc(); //得出的是 第一次调用
myfunc = function () {
alert("第二次调用");
};
myfunc(); //得出的是 第二次调用
</script>
阅读全文…
评论这块不注意的话,有人就会随意发广告,整天管理员就会花大量时间来处理这些垃圾评论,这是很头疼的问题,所以在wordpress中,解决防止垃圾评论这个是很有必要的,当然,在wordpress中,早就想了N多的方法来防止垃圾评论,如网上提到的Akismet插件,用的人很多都说效果不是很理想。而且我用这个的时候,提示您必需 输入一个 WordPress.com API key来使其工作。而我去网站注册的时候,老是注册不上,网站N久都打不开,想想算了,反正现在评论也没有,呵呵。
但最后想想,还是要有一个办法来解决,Google 一下‘WordPress 反垃圾评论插件’可以查出N多来,最后看了看,还是搞个算术验证码吧,呵呵,其中有一款是算术验证插件:Math Comment Spam Protection 网上评价也挺好的,但看了看我安装的插件,已经很多了,想想还是改写源代码吧,网上提供的方法也有的是,下面就是一种(来自www.fufuok.com): 阅读全文…
从同事那得知他面试一个题目,题目为java中怎么处理比long型还大的整数?
真的没点头绪,看了网上的一些解答,都没有给出实际的解答,网上很多的表示用数组来处理这个比long型还大的整数,到底怎么来实现运算,我也不知道,呵呵,曾今看过一篇文章,银行计算金额的时候,用的是bigdecimal类型,这种类型没有位数限制,是不是我们也可以利用这个来处理比long型还大的整数,答案是可以的,下面是计算方法:
//使用BigDecimal进行加、减、乘、除
void TestBigDecimal()
{
//别忘了导入java.math.BigDecimal
BigDecimal a=new BigDecimal(new String("123453243455535634535252345234677576252241234123523453664563634"));
BigDecimal b=new BigDecimal(new String("123453243455535634535252345234677576252241234123523453664563634"));
String c=a.add(b).toString();//加
String d=a.subtract(b).toString();//减
String e=a.multiply(b).toString();//乘
String f=a.divide(b).toString();//除
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
不过从还是从网上看到了一篇用string型来处理的比long型还大的整数运算,下面是具体运算类: 阅读全文…
今天在结束迅雷的时候,笔记本卡了,调出任务管理器结束迅雷进程,还有一些无响应的程序,然后桌面消失了,碰到这种问题,要恢复桌面,解决办法如下:
- 按Ctrl+Alt+Del组合键调出任务管理器,选择“进程”选项卡,先结束掉进程里面的“explorer.exe”(也有可能是大写的Explorer.EXE)。
- 点击任务管理器菜单栏上的“文件”——>“新建任务(运行…)”——>在打开的“创建新任务”对话框中输入explorer.exe”——>点击“确认”按钮,桌面就显示出来了。
上面的步骤中,要注意就是在新建explorer.exe进程的时候,先查看进程中存在explorer.exe进程不,存在就把之前的explorer.exe进程给结束掉,不然你直接新建explorer.exe进程是起不到作用的。
这是XP桌面消失后恢复桌面的办法。
Recent Comments