仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 590|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA网站制作之分享我优化 JavaScript 的办法及代码

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:06:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,GregoryBaker,GMail软件工程师和ErikArvidsson,GoogleChrome软件工程师必要的履历:JavaScript相干事情常识GregoryBaker,GMail软件工程师和ErikArvidsson,GoogleChrome软件工程师
必要的履历:JavaScript相干事情常识
客户端剧本能让你的使用加倍地震态和活泼,可是扫瞄器对代码的剖析大概形成效力成绩,而这类功能差别在客户端之间也不尽不异。这里我们会商和给出一些优化你的JavaScript代码的提醒和最好理论。
利用字符串
字符串联接操纵会对InternetExplorer6和7的渣滓搜集带来很年夜的影响。只管这个成绩在InternetExplorer8内里失掉办理--字符串联接在IE8和别的非IE扫瞄器(如Chrome)中略微更无效率一点--假如你的用户中有很年夜一部分在利用InternetExplorer6或7,你就必要十分注重你构建字符串的体例了。
有以下示例代码:
以下为援用的内容:
varveryLongMessage=
Thisisalongstringthatduetoourstrictlinelengthlimitof+
maxCharsPerLine+
charactersperlinemustbewrapped.+
percentWhoDislike+
%ofengineersdislikethisrule.Thelinelengthlimitisfor+
stylepurposes,butwedontwantittohaveaperformanceimpact.+
Sothequestionishowshouldwedothewrapping?;


比升引毗连的体例,实验利用join():
以下为援用的内容:
varveryLongMessage=
[Thisisalongstringthatduetoourstrictlinelengthlimitof,
maxCharsPerLine,
charactersperlinemustbewrapped.,
percentWhoDislike,
%ofengineersdislikethisrule.Thelinelengthlimitisfor,
stylepurposes,butwedontwantittohaveaperformanceimpact.,
Sothequestionishowshouldwedothewrapping?
].join();


类似的,用毗连的体例在前提语句和轮回中构建字符串是很低效的。毛病的体例:
以下为援用的内容:
varfibonacciStr=前20个斐波那契数;
for(vari=0;i<20;i++){
fibonacciStr+=i+=+fibonacci(i)+
;
}


准确的办法:
以下为援用的内容:
varstrBuilder=[前20个斐波那契数:];
for(vari=0;i<20;i++){
strBuilder.push(i,=,fibonacci(i));
}
varfibonacciStr=strBuilder.join();

构建经由过程帮助函数天生的字符串
经由过程传送字符串构建器(能够是数组大概帮助类)到函数中构建长字符串,以免呈现寄存一时了局的字符串。
比方,假定buildMenuItemHtml_必要用笔墨串和变量构建一个字符串,而且会在外部利用一个字符串构建器,与其利用:
以下为援用的内容:
varstrBuilder=[];
for(vari=0;i<menuItems.length;i++){
strBuilder.push(this.buildMenuItemHtml_(menuItems[i]));
}
varmenuHtml=strBuilder.join();
不如用:
varstrBuilder=[];
for(vari=0;i<menuItems.length;i++){
this.buildMenuItem_(menuItems[i],strBuilder);
}
varmenuHtml=strBuilder.join();


界说类的办法
上面的代码效力不高,由于每次机关baz.Bar的实例时,城市为foo创立一个新函数和闭包(closure):
以下为援用的内容:
baz.Bar=function(){
//机关函数代码
this.foo=function(){
//办法代码
};
}
保举的体例为:
baz.Bar=function(){
//机关函数代码
};
baz.Bar.prototype.foo=function(){
//办法代码
};


用这类体例,不管机关了几个baz.Bar实例,只会创立一个函数给foo,同时不会创立任何闭包。
初始化实例变量
将带有值范例(非援用的)的初始化值(比方范例为数字,布尔值,null,undefined或字符串的值)的变量声明/初始化代码间接放在prototype原型中。这能够制止每次挪用机关函数时不用要地运转初始化代码。(这个办法没法使用到初始化值由机关器参数决意或机关时形态不断定的实例变量上。)
比方,比起写:
以下为援用的内容:
foo.Bar=function(){
this.prop1_=4;
this.prop2_=true;
this.prop3_=[];
this.prop4_=blah;
};
不如写:
foo.Bar=function(){
this.prop3_=[];
};
foo.Bar.prototype.prop1_=4;
foo.Bar.prototype.prop2_=true;
foo.Bar.prototype.prop4_=blah;


审慎地利用闭包(closure)
闭包是JavaScript中一个壮大而有效的特征;可是,它们也有欠好的中央,包含:
它们是最多见的内存泄露泉源。
创立一个闭包比创立一个没有闭包的内联函数分明要慢,比起重用一个静态函数则更慢。比方:
以下为援用的内容:
functionsetupAlertTimeout(){
varmsg=要显现的动静;
window.setTimeout(function(){alert(msg);},100);
}
比上面的代码慢:
functionsetupAlertTimeout(){
window.setTimeout(function(){
varmsg=要显现的动静;
alert(msg);
},100);
}
更比上面的代码慢:
functionalertMsg(){
varmsg=要显现的动静;
alert(msg);
}
functionsetupAlertTimeout(){
window.setTimeout(alertMsg,100);
}

他们增添了感化域链(scopechain)的层级。当扫瞄器剖析属性时,感化域链的每个层级都必需被反省一次。鄙人面的例子中:
以下为援用的内容:
vara=a;
functioncreateFunctionWithClosure(){
varb=b;
returnfunction(){
varc=c;
a;
b;
c;
};
}
varf=createFunctionWithClosure();
f();

当f被挪用时,援用a比援用b慢,它们都比援用c要慢。
检察IE+JScriptPerformanceRecommendationsPart3:JavaScriptCodeinefficiencies取得更多有关在IE中利用闭包的信息。
制止利用with
在你的代码中制止利用with.它对功能有十分坏的影响,由于它修正了感化域链,让查找在别的感化域的变质变得价值奋发。
制止扫瞄器内存泄露
内存泄露对Web使用而言是个很广泛的成绩,它会带来严峻的功能成绩。当扫瞄器的内存利用上升时,你的Web使用,连同用户体系的其他部分,城市变慢。Web使用最多见的内存泄露缘故原由是:在JavaScript剧本引擎和扫瞄器DOM的C++对象完成间的轮回援用(比方,在JavaScript剧本引擎和InternetExplorer的COM基本架构间,大概JavaScript引擎和Firefox的XPCOM基本架构间)。
上面是制止内存泄露的一些履历法例:
利用一个事务体系来附加事务处置函数
最多见的轮回援用形式[DOM元素--》事务处置函数--》闭包感化域--》DOM]在这篇MSDN的Blog文章中会商过了。为制止这个成绩,可使用一个经由严厉测试的事务体系来附件事务处置函数,比方Googledoctype,Dojo,orJQuery.
别的,在IE中利用内联(inline)的事务处置函数会招致别的一类泄露。这不是一般的轮回援用泄露,而是内存中一时匿名剧本对象的泄露。概况请检察了解息争决IE泄露形式(UnderstandingandSolvingInternetExplorerLeakPatterns)的“DOM拔出按次泄露模子(DOMInsertionOrderLeakModel)”一节,别的在JavaScriptKit教程中另有一个例子。
制止利用扩大(expando)属性
扩大属性是附加到DOM元素上的恣意JavaScript属性,也是轮回援用的罕见缘故原由。你可以在利用扩大属性时不招致内存泄露,可是很简单不当心就引进一个泄露。这个泄露的形式是[DOM元素--》扩大属性--》两头对象--》DOM元素]。最好的办法就是制止利用它们。假如你要利用它们,就只利用复杂的值范例。假如你要非复杂的范例,那末在不再必要扩大属性时将它设为空(null)。拜见了解息争决IE泄露形式(UnderstandingandSolvingInternetExplorerLeakPatterns)中的“轮回援用(CircularReferences)”一节.

再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
爱飞 该用户已被删除
12#
 楼主| 发表于 2015-3-20 15:21:57 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
变相怪杰 该用户已被删除
11#
发表于 2015-3-13 06:41:57 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
小女巫 该用户已被删除
10#
发表于 2015-3-6 19:35:07 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
再见西城 该用户已被删除
9#
发表于 2015-2-21 04:38:46 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
莫相离 该用户已被删除
8#
发表于 2015-2-7 08:03:47 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
精灵巫婆 该用户已被删除
7#
发表于 2015-2-1 16:14:59 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
谁可相欹 该用户已被删除
6#
发表于 2015-1-28 17:42:15 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
老尸 该用户已被删除
5#
发表于 2015-1-24 16:51:05 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
地板
发表于 2015-1-24 13:54:31 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
简单生活 该用户已被删除
板凳
发表于 2015-1-19 16:16:56 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
深爱那片海 该用户已被删除
沙发
发表于 2015-1-18 21:39:30 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 04:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表