JavaScript最經常使用的55個經典技巧

1. oncontextmenu="window.event.returnValue=false" 將完全屏蔽鼠標右鍵
<table border oncontextmenu=return(false)><td>no</table> 可用於Table
2. <body onselectstart="return false"> 取消選取、防止複製
3. onpaste="return false" 不許粘貼
4. oncopy="return false;" oncut="return false;" 防止複製
5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址欄前換成本身的圖標
6. <link rel="Bookmark" href="favicon.ico"> 能夠在收藏夾中顯示出你的圖標
7. <input style="ime-mode:disabled"> 關閉輸入法
8. 永遠都會帶着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm爲框架網頁
// --></script>
9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>
10. 網頁將不能被另存爲
<noscript><*** src="/*.html>";</***></noscript>
11. <input type=button value="/查看網頁源代碼
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">
12.刪除時確認
<a href=""javascript :if(confirm("確實要刪除嗎?"))location="boos.asp?&areyou=刪除&page=1"">刪除</a>
13. 取得控件的絕對位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>
//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"獲得控件的位置"
end function
--></script>
14. 光標是停在文本框文字的最後
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
15. 判斷上一頁的來源
javascript :
document.referrer
16. 最小化、最大化、關閉窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> 
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> 
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" value="/Close"></OBJECT>
<input type=button value="/最小化 onclick=hh1.Click()>
<input type=button value="/blog/最大化 onclick=hh2.Click()>
<input type=button value=關閉 onclick=hh3.Click()>
本例適用於IE
17.屏蔽功能鍵Shift,Alt,Ctrl
<script>
function look(){ 
if(event.shiftKey) 
alert("禁止按Shift鍵!"); //能夠換成ALT CTRL
}
document.onkeydown=look; 
</script>
18. 網頁不會被緩存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">
19.怎樣讓表單沒有凹凸感?
<input type=text"border:1 solid #000000">

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:
1 solid #000000"></textarea>
20.<div><span>&<layer>的區別?
<div>(division)用來定義大段的頁面元素,會產生轉行
<span>用來定義同一行內的元素,跟<div>的惟一區別是不產生轉行
<layer>是ns的標記,ie不支持,至關於<div>
21.讓彈出窗口老是在最上面:
<body onblur="this.focus();">
22.不要滾動條? 
讓豎條沒有: 
<body style="overflow:scroll;overflow-y:hidden">
</body> 
讓橫條沒有: 
<body style="overflow:scroll;overflow-x:hidden">
</body> 
兩個都去掉?更簡單了 
<body scroll="no"> 
</body>
23.怎樣去掉圖片連接點擊後,圖片周圍的虛線?
<a href="#" onFocus="this.blur()"><img src="/logo.jpg" border=0></a>
24.電子郵件處理提交表單
<form name="form1" method="post" action= mailto:****@***.com 
enctype="text/plain"> 
<input type=submit>
</form>
25.在打開的子窗口刷新父窗口的代碼裏如何寫?
window.opener.location.reload()
26.如何設定打開頁面的大小
<body onload="top.resizeTo(300,200);">
打開頁面的位置<body onload="top.moveBy(300,200);">
27.在頁面中如何加入不是滿鋪的背景圖片,拉動頁面時背景圖不動 
<STYLE> 
body 
{background-image:url(/logo.gif); background-repeat:no-repeat; 
background-position:center;background-attachment: fixed} 
</STYLE>
28. 檢查一段字符串是否全由數字組成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
29. 得到一個窗口的大小
document.body.clientWidth; document.body.clientHeight
30. 怎麼判斷是不是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有漢字");
else alert("全是字符");
31.TEXTAREA自適應文字行數的多少
<textarea rows=1 name=s1 cols=27 onpropertychange
="this.style.posHeight=this.scrollHeight">
</textarea>
32. 日期減去天數等於第二個日期
<script language=Javascript>
function cc(dd,dadd)
{
//能夠加上錯誤處理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>
33. 選擇了哪個Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then 
window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="/style" checked>Style
<INPUT name="radio1" type="radio" value="/blog/barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>
34.腳本永不出錯
<SCRIPT LANGUAGE="JavaScript"> 
<!-- Hide 
function killErrors() { 
return true; 

window.onerror = killErrors; 
// --> 
</SCRIPT>
35.ENTER鍵可讓光標移到下一個輸入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
36. 檢測某個網站的連接速度:
把以下代碼加入<body>區域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0> www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0> www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0> www.cctv.com"
function butt(){
***("<form name=autof>")
for(var i=1;i<autourl.length;i++)
***("<input type=text name=txt"+i+" size=10 value="/測試中……> =》<input type=text 
name=url"+i+" size=40> =》<input type=button value="/blog/GO 
onclick=window.open(this.form.url"+i+".value)><br>")
***("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="/連接超時"}
else
{document.forms[0]["txt"+b].value="/blog/時間"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)***("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 
onerror=auto("http://"+autourl+"")>")}
run()</script>
37. 各類樣式的光標
auto :標準光標
default :標準箭頭
hand :手形光標
wait :等待光標
text :I形光標
vertical-text :水平I形光標
no-drop :不可拖動光標
not-allowed :無效光標
help :?幫助光標
all-scroll :三角方向標
move :移動標
crosshair :十字標
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize
38.頁面進入和退出的特效
進入頁面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出頁面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">  
這個是頁面被載入和調出時的一些特效。duration表示特效的持續時間,以秒爲單位。transition表示使用哪一種特效,取值爲1-23:
  0 矩形縮小 
  1 矩形擴大 
  2 圓形縮小
  3 圓形擴大 
  4 下到上刷新 
  5 上到下刷新
  6 左到右刷新 
  7 右到左刷新 
  8 豎百葉窗
  9 橫百葉窗 
  10 錯位橫百葉窗 
  11 錯位豎百葉窗
  12 點擴散 
  13 左右到中間刷新 
  14 中間到左右刷新
  15 中間到上下
  16 上下到中間 
  17 右下到左上
  18 右上到左下 
  19 左上到右下 
  20 左下到右上
  21 橫條 
  22 豎條 
  23 以上22種隨機選擇一種
39.在規定時間內跳轉
<META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">
40.網頁是否被檢索
<meta name="ROBOTS" content="屬性值">
  其中屬性值有如下一些:
  屬性值爲"all": 文件將被檢索,且頁上連接可被查詢;
  屬性值爲"none": 文件不被檢索,並且不查詢頁上的連接;
  屬性值爲"index": 文件將被檢索;
  屬性值爲"follow": 查詢頁上的連接;
  屬性值爲"noindex": 文件不檢索,但可被查詢連接;
  屬性值爲"nofollow": 文件不被檢索,但可查詢頁上的連接。
4一、email地址的分割
把以下代碼加入<body>區域中
<a href="mailto:webmaster@sina.com">webmaster@sina.com</a>
4二、流動邊框效果的表格
把以下代碼加入<body>區域中
<SCRIPT>
l=Array(6,7,8,9,'a','b','b','c','d','e','f')
Nx=5;Ny=35
t="<table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)*16)+"><tr>"
for(x=Nx;x<Nx+Ny;x++)
t+="<td width=16 id=a_mo"+x+"> </td>"
t+="</tr><tr><td width=10 id=a_mo"+(Nx-1)+"> </td><td colspan="+(Ny-2)+" rowspan="+(Nx)+"> </td><td width=16 id=a_mo"+(Nx+Ny)+"></td></tr>"
for(x=2;x<=Nx;x++)
t+="<tr><td width=16 id=a_mo"+(Nx-x)+"> </td><td width=16 id=a_mo"+(Ny+Nx+x-1)+"> </td></tr>"
t+="<tr>"
for(x=Ny;x>0;x--)
t+="<td width=16 id=a_mo"+(x+Nx*2+Ny-1)+"> </td>"
***(t+"</tr></table>")
var N=Nx*2+Ny*2
function f1(y){
for(i=0;i<N;i++){
c=(i+y)%20;if(c>10)c=20-c
document.all["a_mo"+(i)].bgColor=""""#0000"+l[c]+l[c]+"'"}
y++
setTimeout('f1('+y+')','1')}
f1(1)
</SCRIPT>
4三、JavaScript主頁彈出窗口技巧
窗口中間彈出
<script>
window.open("http://www.cctv.com","","width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2);
</script>
============
<html>
<head>
<script language="LiveScript">
function WinOpen() {
    msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
    msg.***("<HEAD><TITLE>哈羅!</TITLE></HEAD>");
    msg.***("<CENTER><H1>酷斃了!</H1><h2>這是<B>JavaScript</B>所開的視窗!</h2></CENTER>");
}
</script>
</head>
<body>
<form>
<input type="button" name="Button1" value="Push me" onclick="WinOpen()">
</form>
</body>
</html>
==============
1、在下面的代碼中,你只要單擊打開一個窗口,便可連接到賽迪網。而當你想關閉時,只要單擊一下便可關閉剛纔打開的窗口。
  代碼以下: 
  <SCRIPT language="JavaScript"> 
  <!-- 
  function openclk() { 
  another=open('1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0> http://www.ccidnet.com','NewWindow'); 
  } 
  function closeclk() { 
  another.close(); 
  } 
  //--> 
  </SCRIPT> 
  <FORM> 
  <INPUT TYPE="BUTTON" NAME="open" value="/打開一個窗口" onClick="openclk()"> 
  <BR> 
  <INPUT TYPE="BUTTON" NAME="close" value="/blog/關閉這個窗口" onClick="closeclk()"> 
  </FORM> 
  2、上面的代碼也太靜了,爲什麼不來點動感呢?若是能給頁面來個降落效果那該多好啊! 
  代碼以下: 
  <script> 
  function drop(n) { 
  if(self.moveBy){ 
  self.moveBy (0,-900); 
  for(i = n; i > 0; i--){ 
  self.moveBy(0,3); 
  } 
  for(j = 8; j > 0; j--){ 
  self.moveBy(0,j); 
  self.moveBy(j,0); 
  self.moveBy(0,-j); 
  self.moveBy(-j,0); 
  } 
  } 
  } 
  </script> 
  <body onLoad="drop(300)"> 
  3、討厭不少網站老是按照默認窗口打開,若是你能爲所欲爲控制打開的窗口那該多好。 
  代碼以下: 
  <SCRIPT LANGUAGE="JavaScript"> 
  <!-- Begin 
  function popupPage(l, t, w, h) { 
  var windowprops = "location=no,scrollbars=no,menubars=no,toolbars=no,resizable=yes" + 
  ",left=" + l + ",top=" + t + ",width=" + w + ",height=" + h; 
  var URL = "http://www.80cn.com"; 
  popup = window.open(URL,"MenuPopup",windowprops); 
  } 
  // End --> 
  </script> 
  <table> 
  <tr> 
  <td> 
  <form name=popupform> 
  <pre> 
  打開頁面的參數<br> 
  離開左邊的距離: <input type=text name=left size=2 maxlength=4> pixels 
  離開右邊的距離: <input type=text name=top size=2 maxlength=4> pixels 
  窗口的寬度: <input type=text name=width size=2 maxlength=4> pixels 
  窗口的高度: <input type=text name=height size=2 maxlength=4> pixels 
  </pre> 
  <center> 
  <input type=button value="打開這個窗口!" onClick="popupPage(this.form.left.value, this.form.top.value,this.form.width.value,
this.form.height.value)"> 
  </center> 
  </form> 
  </td> 
  </tr> 
  </table>你只要在相對應的對話框中輸入一個數值便可,將要打開的頁面的窗口控制得很好。
4四、頁面的打開移動
把以下代碼加入<body>區域中
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
for (t = 2; t > 0; t--) {
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(0,-x);
   }
}
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(0,x);
   }
}
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(x,0);
   }
}
for (x = 20; x > 0; x--) {
for (y = 10; y > 0; y--) {
parent.moveBy(-x,0);
     }
   } 
}
//-->
//   End -->
</script>
4五、顯示我的客戶端機器的日期和時間
<script language="LiveScript">
<!-- Hiding
   today = new Date()
   ***("如今時間是: ",today.getHours(),":",today.getMinutes())
   ***("<br>今天日期爲: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
// end hiding contents -->
</script>
4六、自動的爲你每次產生最後修改的日期了: 
<html>
<body>
This is a simple HTML- page.
<br>
Last changes:
   <script language="LiveScript">
   <!--   hide script from old browsers
     ***(document.lastModified)
   // end hiding contents -->
   </script>
</body>
</html>
4七、不能爲空和郵件地址的約束:
<html>
<head>
<script language="JavaScript">
<!-- Hide
function test1(form) {
   if (form.text1.value == "")
     alert("您沒寫上任何東西,請再輸入一次 !")
   else { 
    alert("嗨 "+form.text1.value+"! 您已輸入完成 !");
   }
}
function test2(form) {
   if (form.text2.value == "" || 
       form.text2.value.indexOf('@', 0) == -1) 
         alert("這不是正確的 e-mail address! 請再輸入一次 !");
   else alert("您已輸入完成 !");
}
// -->
</script>
</head>
<body>
<form name="first">
Enter your name:<br>
<input type="text" name="text1">
<input type="button" name="button1" value="輸入測試" onClick="test1(this.form)">
<P>
Enter your e-mail address:<br>
<input type="text" name="text2">
<input type="button" name="button2" value="輸入測試" onClick="test2(this.form)">
</body>
4八、跑馬燈
<html>
<head>
<script language="JavaScript">
<!-- Hide
var scrtxt="怎麼樣 ! 很酷吧 ! 您也能夠試試."+"Here goes your message the visitors to your 
page will "+"look at for hours in pure fascination...";
var lentxt=scrtxt.length;
var width=100;
var pos=1-width;
function scroll() {
   pos++;
   var scroller="";
   if (pos==lentxt) {
     pos=1-width;
   }
   if (pos<0) {
     for (var i=1; i<=Math.abs(pos); i++) {
       scroller=scroller+" ";}
     scroller=scroller+scrtxt.substring(0,width-i+1);
   }
   else {
     scroller=scroller+scrtxt.substring(pos,width+pos);
   }
   window.status = scroller;
   setTimeout("scroll()",150);
   }
//-->
</script>
</head>
<body onLoad="scroll();return true;">
這裏可顯示您的網頁 !
</body>
</html>
4九、在網頁中用按鈕來控制前頁,後頁和主頁的顯示。
<html>
<body>
<FORM NAME="buttonbar">
      <INPUT TYPE="button" VALUE="Back" onClick="history.back()">
      <INPUT TYPE="button" VALUE="JS- Home" onClick="location='script.html'">
      <INPUT TYPE="button" VALUE="Next" onCLick="history.forward()">
</FORM>
</body>
</html>
50、查看某網址的源代碼
把以下代碼加入<body>區域中
<SCRIPT>
function add()
{
var ress=document.forms[0].luxiaoqing.value
window.location="view-source:"+ress;
}
</SCRIPT>
輸入要查看源代碼的URL地址:
<FORM><input type="text" name="luxiaoqing" size=40 value="http://"></FORM>
<FORM><br>
<INPUT type="button" value="查看源代碼" onClick=add()>
</FORM>
5一、title顯示日期
把以下代碼加入<body>區域中:
<script language="JavaScript1.2">
<!--hide
var isnMonth = new
Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");
var isnDay = new
Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");
today = new Date () ;
Year=today.getYear();
Date=today.getDate();
if (document.all)
document.title="今天是: "+Year+"年"+isnMonth[today.getMonth()]+Date+"日"+isnDay[today.getDay()]
//--hide-->
</script>
5二、顯示全部連接
把以下代碼加入<body>區域中
<script language="JavaScript1.2">
<!--
function extractlinks(){
var links=document.all.tags("A")
var total=links.length
var win2=window.open("","","menubar,scrollbars,toolbar")
win2.***("<font size='2'>一共有"+total+"個鏈接</font><br>")
for (i=0;i<total;i++){
win2.***("<font size='2'>"+links[i].outerHTML+"</font><br>")
}
}
//-->
</script>
<input type="button" onClick="extractlinks()" value="顯示全部的鏈接">
5三、回車鍵換行
把以下代碼加入<body>區域中
<script type="text/javascript">                
function handleEnter (field, event) {
   var keyCode = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;
   if (keyCode == 13) {
    var i;
    for (i = 0; i < field.form.elements.length; i++)
     if (field == field.form.elements[i])
      break;
    i = (i + 1) % field.form.elements.length;
    field.form.elements[i].focus();
    return false;
   } 
   else
   return true;
}      
</script>
<form>
<input type="text" onkeypress="return handleEnter(this, event)"><br>
<input type="text" onkeypress="return handleEnter(this, event)"><br>
<textarea>回車換行
5四、確認後提交
把以下代碼加入<body>區域中
<SCRIPT LANGUAGE="JavaScript">
<!--
function msg(){
if (confirm("你確認要提交嘛!"))
document.lnman.submit()
}
//-->
</SCRIPT>
<form name="lnman" method="post" action="">
   <p>
     <input type="text" name="textfield" value="確認後提交">
   </p>
   <p>
     <input type="button" name="Submit" value="提交" onclick="msg();">
   </p>
</form>
5五、改變表格的內容
把以下代碼加入<body>區域中
<script ***script>
var arr=new Array()
arr[0]="一一一一一";
arr[1]="二二二二二";
arr[2]="三三三三三";
</script>
<select onchange="zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]">
   <option value=a>改變第一格</option>
   <option value=a>改變第二格</option>
   <option value=a>改變第三格</option>
</select>
<table id=zz border=1>
   <tr height=20>
     <td width=150>第一格</td>
<td width=150>第二格</td>
<td width=150>第三格</td>
   </tr>
</table>
5六、使數字從右邊輸出。
<input style="text-align:right;」>
 
JavaScript性能優化(一)
1、避免出現腳本失控 

不論什麼腳本,在任什麼時候間、任何瀏覽器上執行,都不該該超過100毫秒。若是實際執行的時間長於這個底限,必定要將進程分解成若干更小的代碼段。 

腳本失控基本上有如下四個方面的緣由: 

1. 在循環中執行了太多的操做 

    解決這個問題的訣竅就是用下面這兩個問題來評估每一個循環: 
    1. 這個循環必需要同步執行麼? 
    2. 循環裏面的數據,必需要按順序執行麼? 

    若是1和2均可以否認,那麼建議使用setTimeout方式將循環體切分紅小塊進行異步處理 

    將循環中的定義變量及初始化操做放到循環外。參見:http://www.w3cgroup.com/article.asp?id=111 

2. 臃腫的函數體 

    在JavaScript中,咱們應該儘量的用局部變量來代替全局變量! 

    理解JavaScript做用域鏈。參見:http://www.jslab.org.cn/?tag=ScopeChainAndClosure 

    理解原型鏈。參見:http://www.jslab.org.cn/?tag=prototypeChain 

3. 過多的遞歸 

    使用迭代方式替代遞歸,採用memoization技術優化遞歸 

    斐波那契數列的遞歸算法優化,參見:http://www.jslab.org.cn/?tag=Memoization 

4. 過多的DOM調用 

    在Web開發中,JavaScript的一個很重要的做用就是對DOM進行操做。可你知道麼?對DOM的操做是很是昂貴的,由於這會致使瀏覽器執行迴流(reflow)操做。而執行了過多的迴流操做,你就會發現本身的網站變得愈來愈慢了。咱們應該儘量的減小DOM操做。 

    迴流操做主要會發生在幾種狀況下: 

        * 改變窗體大小 
        * 更改字體 
        * 添加移除stylesheet塊 
        * 內容改變哪怕是輸入框輸入文字 
        * CSS虛類被觸發如 :hover 
        * 更改元素的className 
        * 當對DOM節點執行新增或者刪除操做或內容更改時。 
        * 動態設置一個style樣式時(好比element.style.width="10px")。 
        * 當獲取一個必須通過計算的尺寸值時,好比訪問offsetWidth、clientHeight或者其餘須要通過計算的CSS值(在兼容DOM的瀏覽器中,能夠經過getComputedStyle函數獲取;在IE中,能夠經過currentStyle屬性獲取)。 


    解決問題的關鍵,就是限制經過DOM操做所引起迴流的次數: 

        1.在對當前DOM進行操做以前,儘量多的作一些準備工做,保證N次建立,1次寫入。 

        2.在對DOM操做以前,把要操做的元素,先從當前DOM結構中刪除: 
            1. 經過removeChild()或者replaceChild()實現真正意義上的刪除。 
            2. 設置該元素的display樣式爲「none」。 
            修改操做完成後,將上面這個過程反轉過來,建議使用第2種方式。 

        3.CSS部分 
            另一個常常引發迴流操做的狀況是經過style屬性對元素的外觀進行修改,如element.style.backgroundColor = "blue"; 
            每次修改元素的style屬性,都確定會觸發迴流操做,要解決這個問題能夠: 
            1.使用更改className的方式替換style.xxx=xxx的方式。 
            2.使用style.cssText = '';一次寫入樣式。 
            3. 避免設置過多的行內樣式 
            4. 添加的結構外元素儘可能設置它們的位置爲fixed或absolute 
            5. 避免使用表格來佈局 
            6. 避免在CSS中使用JavaScript expressions(IE only) 

        4.將獲取的DOM數據緩存起來。這種方法,對獲取那些會觸發迴流操做的屬性(好比offsetWidth等)尤其重要。 

        5.當對HTMLCollection對象進行操做時,應該將訪問的次數儘量的降至最低,最簡單的,你能夠將length屬性緩存在一個本地變量中,這樣就能大幅度的提升循環的效率。 


2、避免大字符串字面量對象操做,如 字符串.lenth,儘可能轉換爲new String(字符串)後再進行操做 


3、在作字符查找替換等操做時善用正則表達式 

快速掌握ECMAScript正則表達式。參見:http://www.w3cgroup.com/article.asp?id=202 


4、減小語句,利用運算符優先級實現if else表達式,使用三元表達式,使用連續表達式(看狀況,將損失程序可讀性) 


利用運算符優先級實現if else表達式參見:http://www.w3cgroup.com/article.asp?id=131 


5、將CSS,JS文件合併到一個文件(非BT愛好者仍是不要玩了^_^) 

參見:http://www.w3cgroup.com/article.asp?id=29 


6、避免Javascript事件綁定出現內存泄漏 

"These memory leaks often occur as a result of circular references between JavaScript objects and objects within IE’s DOM (document object model)." Microsoft GPDE Team Blog 

參見:http://www.w3cgroup.com/article.asp?id=207 


7、使用WEB Workers技術(支持html5的瀏覽器) 

Web Workers爲JavaScript提供了一種能在後臺進程中運行的方法,Web Workers進程可以在不影響用戶界面的狀況下處理任務。 

參見:http://www.w3cgroup.com/article.asp?id=242 

 
JavaScript性能優化 (二)
首屏儘可能不要出現JS文件 
   用戶打開頁面時,首先看到就是首屏的內容,所以首屏可否快速顯示,直接影響到用戶體驗的好壞。
JS文件的下載與解析會阻塞其它請求的下載(支持並行下載的JS除外)。 若是把JS放到首屏中,將下降首屏性能。
所以,咱們建議把JS文件放到首屏以後。而通常來講,這也是能夠作到的,若是有非要在首屏中出現的JS代碼, 那麼咱們建議把這部分JS代碼作爲內聯代碼放到html文檔中。
支持並行下載 
   在傳統瀏覽器中(firefox-3.1b及以上版本例外),下載JS文件會阻塞後面文件的下載,這時瀏覽器會由並行下載變成串行下載。所以如何讓JS文件與其它文件並行下載便變得頗有意義。這裏有6種方法可使JS文件與其餘資源並行下載:
    * XHR eval -- 經過XHR(XMLHttpRequest對象)下載script,而後用eval方法執行XHR的responseText。
    * XHR Injection -- 經過XHR下載script,而後創建一個script標籤並把它插入文檔中(body或者head標籤內),接着把script標籤的text屬性設置爲XHR的responseText的值。
    * XHR in Iframe -- 把script標籤放到一個iframe裏,經過iframe下載它。
    * Script DOM Element -- 建立script標籤並把它的src屬性指向你的腳本地址。
    * Script Defer -- 添加script標籤的defer屬性,這個在ie和firefox3.1中有效。
    * 使用document.write方法在頁面中寫入<script src="">,這個只在ie裏有效。
本規則將檢查全部不能並行下載的JS文件,並給出警告。注意:若是某個JS請求是頁面中的最後一個請求, 那麼該JS文件將一樣被視爲可並行的,緣由是把JS文件放到頁面末尾,一樣不會阻塞其它請求下載,起到的做用其實跟並行JS是同樣的。
 
JS文件不宜過大 
    JS文件下載會阻塞其它請求的下載(支持並行下載的JS除外), 過大的JS文件則會進一步加重這種阻塞,同時也會對瀏覽器的解析效率形成很大的影響。
所以咱們建議精簡js代碼,去掉不須要的庫代碼及無用函數,並讓JS文件支持並行下載。
這裏咱們的標準是JS文件壓縮前不要超過30KB,超過30KB將被認定爲過大。
 
精簡JS代碼 
   精簡JS代碼是指除去沒必要要的字節,好比多餘的空格、換行、縮進以及註釋等等。精簡JS代碼不只能夠節約流量,加快代碼下載,還能加快瀏覽器的加載和執行。
下面是三個經常使用的精簡JS代碼的工具 
    *  Closure Compiler
    * JSMin
    * YUI Compressor
 
JS文件很少於8個 
  前面在JS文件不宜過大中說過, 咱們建議將過大的JS文件拆分到多個可支持並行下載的較小的文件中,然而若是JS文件過多,將會產生過多的RTT(Round-Trip Time,往返時延),也會影響頁面性能。
好的開發者在設計Web程序的時候都注重模塊化和可重用性,將不一樣模塊的代碼放入不一樣的文件中在軟件工程的角度來說毫無疑問是很是好的選擇。可是這種作法將大大增長頁面加載的時間。 首先,對於沒有cache的瀏覽器來說,瀏覽器須要對每個JS文件發出一個HTTP請求,一次HTTP請求就會增長一次往返時間。其次,大部分的瀏覽器 在JS(支持並行下載的JS除外)加載和解析的過程當中,會阻止頁面其它部分的加載。 
然而在實際的web開發中,也有其它的因素會決定最終JS文件的個數。首先,對那些不須要在頁面加載時就執行的JS,可讓其支持並行下載和進行延遲加載。 其次,部分代碼須要常常進行更新,維護多個版本,在這種狀況下一般須要將這部分代碼獨立出來。最後,可能有一些JS文件是放在你不能控制的域名中, 好比廣告、數據統計、用戶跟蹤等。
 
用gzip壓縮JS文件 
   大部分的如今瀏覽器都支持對HTML代碼、CSS、Javascript的壓縮,這就容許數據在傳送過程當中使用更加緊湊的方式,從而明顯地減小下載的時間。
建議用gzip壓縮JS文件。使用gzip壓縮JS文件能夠減小約2/3的網絡傳輸。
本規則將檢查沒有采用gzip壓縮的JS文件。
 
CSS優化功能詳解
*  CSS文件不宜過大
    * 沒有多餘CSS代碼
    * 最多隻有一個CSS文件
    * 用 gzip壓縮CSS文件
    * 避免使用CSS表達式
    * 把CSS放到 head中

CSS文件不宜過大 
    通常頁面的樣式表代碼不可能太大,咱們的建議是CSS文件壓縮前不要超過20K。若是超過20K,請查看規則沒有多餘CSS代碼,檢查是否有多餘的CSS代碼。

沒有多餘CSS代碼 
    該規則將在全部內聯(inline)CSS代碼和外部CSS文件中找出沒有被當前頁面用到的樣式塊。

最多隻有一個CSS文件 
    咱們認爲一個頁面中的CSS代碼徹底能夠放到一個文件中。若是CSS文件多於一個,請合併到一個文件中。

用gzip壓縮CSS文件 
    建議用gzip壓縮CSS文件。使用gzip壓縮CSS文件能夠減小約2/3的網絡傳輸。

避免使用CSS表達式 
    CSS表達式只能應用於IE5~IE7瀏覽器中,其它瀏覽器都不支持CSS表達式。 使用CSS表達式會下降瀏覽器的渲染速度,用其它方式來代替CSS表達式將提升IE的渲染速度。

把CSS放到head中 
    把內聯的CSS代碼和<link>元素(外部CSS文件)從body中移到head中將提高渲染性能,這是由於:
    * 首先,瀏覽器將阻塞直到全部的外部CSS文件下載完後纔開始渲染。
    * 其次,內聯的CSS代碼可能會使內容從新渲染,致使內容產生「漂移」或「閃爍」。
所以,把<link>和<style>標籤都放到head中便變得有意義,不只能夠避免以上問題,還可使到瀏覽器對頁面進行逐步渲染。
 
圖片優化功能詳解
 *  指定圖片尺寸
    * 最小化圖片
    * 小圖片請求不該過多
    * 控制圖片數量
    * 圖片文件不宜過大
    * 圖片至少來自 2個域名

指定圖片尺寸 
    圖片是一種可代替的頁面元素,瀏覽器能夠在圖片下載完成以前就開始渲染頁面,前提是它知道圖片的尺寸,這樣才能爲周圍那些不可代替的頁面元素佈局。若是圖片沒有指定尺寸,或者指定尺寸與真實圖片不符合, 那麼在圖片下載完成以後,瀏覽器將須要從新佈局和重繪。因此,爲了不重複重複渲染,須要爲頁面中全部圖片指定高度和寬度。

最小化圖片 
    通常圖片製做完成後,可能會包含多餘的信息。頁面中的圖片也可能出現真實尺寸大於頁面中的指定尺寸(這時圖片其實被扭曲了)。
本規則將對以上2種狀況進行優化:
    * 壓縮圖片,在不影響圖片質量的前提下,對圖片進行最小化壓縮。
    * 檢查圖片真實尺寸是否與頁面中指定的尺寸一致。

小圖片請求不該過多 
     頁面請求過多將延長用戶下載頁面的時間。對於多個小圖片請求,能夠經過Image Maps或CSS Sprites等技術來合併圖片, 而且若是小圖片數量不少,建議採用分屏合併的方法,按前後屏的順序合併,若干屏合成一個圖,這樣既經過小圖片合併減小了頁面請求數,又不會產生過大的圖片而影響到首屏的性能。
在本規則是針對首屏的,小於5K的圖片將被認爲是小圖片。若是首屏中小圖片數超過20個將會被認爲過多。

控制圖片數量 
    過多的圖片請求將延長用戶下載頁面的時間。本規則將進行如下3個方面的檢查:
    * 圖片總數是否過多。這裏將根據頁面高度來評判圖片數量,若是圖片數大於20+6h/800,其中h爲頁面高度,將認爲過多。
    * 來自mat和img域名的圖片是否過多。
    * 小圖片是否過多

圖片文件不宜過大 
    本規則將針對通常網頁上的圖片進行檢查(本規則不適用於評判高清大圖),主要有如下3個方面:
    * 50K以上的圖片都將認爲過大。
    * 15K~50K的圖片,若是圖片面積(即寬像素 x 高像素)小於(圖片文件大小 * 1.25),將認爲該圖片過大。
    * 10K~15K的圖片,若是圖片面積小於11440(130 x 88,這個值取自「積木標準項目-圖片規範.doc」中10K圖片文件的最小面積),將認爲該圖片過大。

圖片至少來自2個域名 
    圖片通常分爲素材圖片和內容圖片兩種,這兩種圖片分別來自不一樣的域名。所以若是發現全部圖片只來自同一個域名,則可能某些圖片放錯了域名。
 
服務器端優化功能詳解 
    * 設置瀏覽器緩存
    * 相同的資源從同一URL獲取
    * 減小 DNS查找
    * 把靜態資源放到無cookie的域名中
    * 避免重定向
    * 避免 404錯誤
    * 減小 cookie大小

設置瀏覽器緩存 
    爲靜態資源設置緩存可讓瀏覽器下次訪問該頁面時直接從本地磁盤直接獲取頁面資源。頁面中的JS、 CSS、圖片、flash等都視爲可緩存資源。
本規則將檢查如下幾種狀況:
    * 沒有指定緩存時間的可緩存資源。
    * 頭部用Vary頭。IE會禁止緩存任何使用了Vary頭部的資源,所以要避免使用Vary頭部。
    * 指定的緩存時間不夠長。通常圖片和flash指定一年以上的緩存時間,CSS和JS文件指定一週以上的緩存時間。
    * URL衝突。在Firefox中,磁盤緩存所用的哈希函數對於相差很小的URL會產生衝突。

相同的資源從同一URL獲取 
本規則檢查頁面中是否有重複資源:即兩個資源,內容同樣,可是URL不一樣。

減小DNS查找 
本規則將檢查如下2種狀況:
    * 對於整個head及body的前10%中出現的script標籤,若是這些標籤的域名跟頁面URL的域名不一樣,則認爲違法規則。 理由是出如今前部(這裏限定爲整個head及body的前10%)的JS請求原本就會阻塞後面請求的下載(除非採用了JS文件可並行下載的方法), 若是這些JS文件的URL跟頁面URL不一樣,則爲了獲取這些JS文件還需再這以前進行DNS查找。這將會對頁面的逐步渲染形成較大影響。
    * 對於只存放了一個資源的域名,也會進行提示,緣由是通常是能夠作到一個域名存放多個資源的, 若是一個域名只存放一個資源,則引發的DNS查找就顯得過於浪費了。

把靜態資源放到無Cookie的域名中 
    靜態資源如圖片、flash、CSS和JS文件是不須要Cookie的,若是把這些文件放到有Cookie的域名中,則會產生多餘的Cookie流量。
本規則將檢查並提示是否有靜態資源放在有Cookie的域名中。

避免重定向 
重定向將產生額外的請求。
本規則將檢查頁面中的重定向請求。

避免404錯誤 
產生404錯誤的緣由是服務器找不到對應的url請求,這實質上也是產生了額外的請求。
本規則將檢查頁面中是否出現返回404的請求。

減小cookie大小 
Cookie不必也不宜過大。
本規則將檢查如下2種狀況:
    * 若是某個Cookie超過1K,則認爲該Cookie過大。
    * 若是全部Cookie的平均大小超過400個字節,則認爲平均Cookie過大。
 
其它優化功能詳解 
    * 首屏高度是否合適
    * 避免使用iframe

首屏高度是否合適 
首屏高度過大或太小都將影響用戶體驗。
本規則以900像素爲準來判斷首屏高度是否合適,並列出首屏內的全部請求。

避免使用iframe 
iframe會增長額外的請求,應儘可能避免iframe的使用。
本規則將找出頁面中的全部iframe。
 
JavaScript性能優化 (三)
前端性能優化徹底是一個技術話題,可是對於項目的用戶體驗有很是大的影響,若是你的網站打開要等待三五秒或者等到瀏覽器提示沒法鏈接,那網站哪來的流量,哪來的品牌影響和用戶忠誠度,掙錢就算了。 
3s,做爲判斷一個用戶忍受你網站速度的限度,若是超過3s,用戶已經對這個網站產生了負面的抵觸心理。 
前端性能優化和web標準有什麼關係,接着第一篇悟道web標準——統一思想,遵循標準,這是對你遵循web標準的一個補償或者是對標準的一個承認。 
引用:
引用
    落後的頁面工程師體系,美工代勞的頁面代碼,惟獨IE才能瀏覽的頁面代碼,不須要寫代碼用圖形工具直接導出的頁面代碼,大量的流量消耗的頁面代碼,速度慢的像蝸牛的頁面代碼,程序員看到就頭大發麻的頁面代碼,每次改版修改都要打動干戈,重複產生的頁面代碼,一種讓頁面工程師和民工同樣的頁面代碼。


    咱們固然要革命它,取代他,創造全新的頁面工程師體系和頁面質量,獨立的頁面工程師完成的頁面代碼,跨越平臺的頁面代碼,只要能解析頁面的設備都可以訪問和瀏覽,手寫的頁面代碼,整齊劃一,井井有條,最低流量消耗的頁面代碼,程序員喜歡的頁面代碼,訪問速度超快的頁面代碼,改版可重複利用的頁面代碼,讓頁面工程師擡起頭來,驕傲的稱本身是工程師,書寫的也是計算機代碼的頁面代碼。 

前端優化正好給Web標準提供了一個檢驗的機會,用「實踐是檢驗真理的惟一標準」來判斷標準化到底好很差,對不對。 
前端性能優化了解yahoo性能優化N條的同窗應該不會陌生,安裝一個YSlow評分並對照着優化就能夠了,可是有沒有想過爲何要這麼作就能夠提高速度,這些與Web標準有沒有某種關聯或者因果呢。 

我把這些個條目分紅三類,服務端運算優化,傳輸優化,客戶端運算優化: 

第一類,服務器端優化 
服務器端就是對你的網站的動態語言的執行(asp,php),數據庫查詢,存儲等速度,總的來講就是輸入/輸出的運算。這些跟前端不要緊,可是影響着前端。YSlow裏面沒有,鬼知道你網站的服務器性能如何,看不出來,就自行優化服務器性能,數據庫性能,多買點服務器擴容。 
yslow有一條儘早刷新 Buffer (Flush the Buffer Early),貌似是不等html完成生成就傳輸。 
提升域名的DNS解析速度。減小DNS的解析個數。這個很差歸類,暫時放到這裏吧。 

第二類,傳輸優化 
這類是大頭,很煩,首先是字節,字節越小越好,怎麼能小下來,最有效的方式就是google的方案,把首頁作的極其精簡,圖片,html,靜態文件都很小,再就是緩存,把文件放到本地緩存區讀取。還有http請求數,減小文件傳輸中的排隊等待。 

字節優化: 
1. 減小冗餘html,結構化,語義化的html來實現,行爲,表現,結構分離,獨立的html文件將變得很小。 
2. 壓縮文本文件,css,html,js去掉註釋、空格、換行等。 
3. 下降圖片字節,選擇合適的圖片類型,png-8是一個好東西,再用工具將圖片進行壓縮去掉,好比png-8的壓縮工具。用合適的圖片尺寸,不要把大圖控制一下寬高就用上了。 
4. gzip壓縮一下,減少服務器端傳輸到客戶端時候的字節。 
6. flash文件和flash+xml的動態flash也減少字節 

緩存: 
服務器端配置一下,提升緩存的命中率和把不常常修改的文件緩存了。 
Add Expires headers、Etags、ajax使用get方式便於緩存。 
把能分離出來的css,js分離成外部文件便於緩存。 
使flash和xml文件可緩存。 
打通不一樣運營商的限制 
CDN提升不一樣類型運營商的網絡傳輸速度,電信,網通,鐵通,教育網通通搞定。 

請求數: 
減小文件請求數,能合併到一塊兒的合併一下,css,js,圖片等,減少排隊等待和服務器端開銷。 
分域提升同時加載數,優化排隊等待。 
避免404無效請求數。 
避免重定向。 

延遲加載和預載: 
把暫時不用的文件等主體頁面加載完了再加載,把用戶稍後要看瀏覽的內容預先加載進來,相冊瀏覽就是很好的例子,先用小圖片放大再把大圖展現出來,看本張圖片時把下一張預載進來等等。 

第三類:客戶端優化 
1. 討厭的IE的濾鏡和CSS expressions少用,當心把瀏覽器搞掛,CUP 100%死機。 
2. CSS放到前面,js能放到後面的放在代碼後面。將頁面儘早展現給用戶。 
3. 減小iframe的使用,避免CPU扛不住。 
4. 減小DOM個數,減低瀏覽器解析壓力。 
5. 使用 <link> 而不是@importChoose <link> over @import,在 IE 中 @import 指令等同於把 link 標記寫在 HTML 的底部。而這與第一條相違背。 
6. 提升js的執行效率,話題太大不提了 
7. 縮小 Cookie,針對 Web 組件使用域名無關性的 Cookie (Use Cookie-free Domains for Components) 
8. 還有小圖片的repeat背景會提升瀏覽器的CPU佔用。 
9. 合理的DOM排序,把重要的內容代碼前置,優先加載。 

再就是些沒對號入座的雅虎性能優化的條目。至此能夠檢驗到頁面工程師不是蓋的,須要對代碼、文件,http協議,緩存,服務器等精準的學習和控制,達到提供用戶最最基本的體驗——訪問速度的體驗。 
Web標準的分離思想和結構化語義化html促成了以上不少條的實施,這是美工時代所不能比擬的。
 
Web開發流程規範的五個要點
開發流程及規範:Web 開發的分散性和交互性,決定了 Web 開發必須聽從必定的開發規範和技術約定。
只有每一個開發人員都按照一個共同的規範去設計、溝通、開發、測試、部署,才能保證整個開發團隊協調一致的工做,從而提升開發工做效率,提高工程項目質量。
1、 項目的角色劃分  
若是不包括前、後期的市場推廣和產品銷售人員,開發團隊通常能夠劃分爲項目負責人、程序員、美工三個角色。
  項目負責人在咱們中國習慣稱爲"項目經理",負責項目的人事協調、時間進度等安排,以及處理一些與項目相關的其它事宜。程序員主要負責項目的需求分析、策劃、設計、代碼編寫、網站整合、測試、部署等環節的工做。美工負責網站的界面設計、版面規劃,把握網站的總體風格。若是項目比較大,能夠按照三種角色把人員進行分組。
角色劃分是Web項目技術分散性甚至地理分散性特色的客觀要求,分工的結果還能夠明確工做責任,最終保證了項目的質量。分工帶來的負效應就是增長了團隊溝通、協調的成本,給項目帶來必定的風險。因此項目經理的協調能力顯得十分重要,程序開發人員和美工在項目開發的初期和後期,都必須有充分的交流,共同完成項目的規劃和測試、驗收。
2、 開發工具的選取
不象C/S結構程序開發,能夠一門語言從頭至尾,你用Delphi,就是Delphi程序員,你用VC++,你就是VC程序員。B/S結構的 Web開發工做,工具的選擇是一件痛苦的事情。從Windows到Linux,從IIS到 Apache,從J2EE到 .NET,從COM到.NET到EJB組件......還有Asp、Asp.net、Jsp、Php、Perl、Javascript、Vbscript......
美工也輕鬆不了多少,什麼"網頁三劍客" "新網頁三劍客"、FrontPage、Photoshop、CorelDraw......誰都說本身是最強大的!
咱們的經驗是,選用工具時最好是統一的,好比美工統一用DreamwaverMX製做網頁,程序員所有用文本編輯器書寫代碼。統一工具的好處是能夠保持同一個項目文檔的一致性,便於開發人員的交流和文檔的保存。
可是也沒必要刻意強求一致,好比美工可使用任何本身熟悉的圖形處理軟件,只要最後能生成瀏覽器支持的圖片就能夠了。正是Web開發工具的多樣性,才成就了今天互聯網多姿多彩的局面。
只要程序員的純Html和Javascript 代碼的功夫足夠過硬,就能勝任最後的網站整合工做。
3、 項目開發流程
若是項目真正談下來了,就須要正式肯定前階段的需求分析,該補充的步驟必須補上。而後進行詳細的整體設計,其實也基本是前階段工做的重複和完善。
產生各欄目文件夾的結構圖(一些公共文件夾如images、scripts、 styles等須要固定存放,共同調用)。
而後由美工根據內容表現的須要,設計靜態網頁和其它動態頁面界面框架,該切分的圖片要根據尺寸切割開來。給須要程序動態實現的頁面預留頁面空間。制定字體、字號、超級連接等CSS樣式等。
在美工設計頁面的同時,程序員着手開發後臺程序代碼,作一些必要的測試。
美工界面完成後,由程序員添加程序代碼,整合網站。
由項目組共同聯調測試,發現bug,完善一些具體的細節。
製做幫助文檔、用戶操做手冊。向用戶交付必要的產品設計文檔。
而後進行網站部署、客戶培訓。
最後進入網站維護階段。這一階段也能夠不包括在該項目中,而做爲公司的服務內容。
以上的每一部都會產生一些階段性成果,項目經理須要及時進行監督、審覈,發現問題及時糾正。
爲了控制項目的進度,應當實施填寫"項目進度表"制度,即天天填寫工做日誌,記錄當天的工做細目和工做量,以及須要解決和已經解決的問題。
4、 一些技術規則
1, 數據庫命名約定(參考了"匈牙利命名法")
數據庫(Database):格式 [db]_[ desc]。
表(Table):格式 [tab]_[desc]。表名長度不能超過30個字符,單詞首寫字母大寫,多個單詞間不用鏈接符號。
字段(Field or Column):格式f_[type]_[desc]。f:代表這是一個字段名稱;type:可選,代表字段類型,字符型爲c,整型爲i,邏輯型爲b,貨幣類型爲m,浮點型爲f,日期型爲d,時間型爲t,二進制爲bl。若是類型爲字符型,能夠省略。desc:對字段屬性的有意義的描述,能夠用英語單詞、單詞縮寫、漢語拼音、字段實際含義的拼音縮寫等,單詞之間能夠用單詞首字母大寫軟分割(推薦),也能夠用"_"隔開。
舉例:
f_name (姓名)
f_c_ UserInfo 或 f_c_ User_Info
f_xm (姓名)
f_grp_id (組標識)
索引(Index):格式 [idx]_[desc]。
視圖(View):格式 [View]_[表A]_[表B]_[表C]...,其中View表示"視圖"。這個視圖由幾個表產生就用連字符"_"鏈接幾個表的名,若是表過多能夠將表名適當簡化。
存儲過程:格式 [sp]_[表名]_[存取過程名(縮寫)],好比sp_User_Delete。
觸發器(Trigger):格式 [trg]_[d][i[_[desc]。trg 表明觸發器;d,i,u代表觸發器類型(Delete,Insert,Update)定義,書寫順序爲d、i、u;desc是表的名稱,代表觸發器所在的表。
數據庫設備(Database Device):格式 [dev]_[desc]。
約束(Constraint):格式 [cns]_[desc]。
2, SQL語句書寫規範
SQL語句中,SQL關鍵字所有大寫,其它的遵守"數據庫命名約定"。
例如:
SELECT * FROM tabNewsInfo WHERE f_UserName='' ORDER BY f_i_autoid
3, 文件夾命名約定
公共文件夾:
  /images 公共圖片
  /styles 樣式表
  /scripts 腳本
  /ftps 下載
  /doc 網站相關素材、文檔
  /readme.txt 網站說明文檔
  /helps.htm 網站幫助文檔
  /mylogs.txt 網站維護記錄
其它欄目的命名,能夠用拼音首字母簡稱,也能夠用英文單詞。所有文件夾的含義在readme.txt文件中說明。
4,對象及變量命名約定:每一個變量名必須先定義,再使用。
在ASP文件的最開頭添加語句<%Option Explicit%>能夠強制變量定義。代碼塊必須採用縮進格式。每一個函數前必須標明函數的功能、輸入參數、返回值的相關信息。
變量類型 縮寫前綴
  String str 或 s
  Integer Int
  Date Dt
  Object obj或 o
  Boolean bol或 b
  Byte Byt
  Double Dbl
  Error Err
  Long Lng
  Single Sng
5,圖形對象約定
圖片的格式:最後生成 jpg,gif,png,swf 格式的圖形文件。
圖片的字節大小:最大不能超過30k。
圖片的尺寸:根據須要肯定,最好使用小圖片,大的圖片必須切割成小圖片使用。
圖片的留白:圖片的邊界不能留白,圖片只包含有效的色彩元素。
6,媒體對象約定
流媒體的格式: asf,wmv,wma,rm,不建議使用 avi 格式的動畫文件。
7,頁面佈局的基本約定
中文段落必須有2個漢字的縮進。字間距採用默認大小。行間距爲16pt~20pt。文字佈局必須留有"天""地""左""右",不能把版面佔滿。
頁面佈局必須保持色彩平衡。
注意上下、左右的呼應。注意頁面的總體協調。提倡畫面和文字的融合,而不是畫面和文字的明顯分離。
要按照設計廣告的要求來設計網頁頁面 ,特別是一些產品展現性的頁面。
5、 一些經驗和教訓
1,能用靜態網頁表現的內容,儘可能不用程序代碼動態實現。
2,設計階段,必須和用戶進行充分的交流,徹底、準確的瞭解用戶的需求。
既不能歪曲用戶的意思,也不能一味迎合用戶的非正當需求,也不能對本身沒有把握的技術甚至不可能實現的技術誇下海口。需求分析是一個溝通、交流、引導、教育、鬥爭、妥協的過程。需求分析結果要有文字資料存檔。
3,技術參數必須瞭解準確。
好比用戶的軟件平臺是linux系列,那你的系統就要考慮用Java或者 Php 加MySQL開發了,這時候你的ASP.NET技術就用不上了。
4,最好讓用戶對已經肯定的需求內容簽字,蓋章。
5,任何交流,必須有書面記錄。
對一些喜歡"健忘"-其實是懶惰的開發人員,要求他必須天天花10分鐘寫工做日誌。
6,每一個項目的有關文檔,所有、統一集中歸檔。
 

來自javascript

相關文章
相關標籤/搜索