1,不要認為Struts已經過時了,也不要盲目的去追隨JSF以及更新的MVC架構,在目前Struts仍舊
是最為優秀的MVC架構,尤其是後來與Spring、Hibernate(或者Ibatis)的結合,使得Struts的應用得到了進一步的發展,也許你
認為Webwork2、SpringMVC或者JSF更為優秀和實用,那麼也沒有關係,其實只要對你或你的公司適用,那麼就可以了。
2,你知道Javascript中的typeof和instanceof操作嗎,如果不知道,勸你還是看看這方
面的知識吧,typeof返回的是對象的類型,例如string、number、object等等,而instanceof判斷的是一個對象是否是某個類
的執行個體,例如:
var arr=new Array();
var type=typeof(arr);//返回object
var flag=arr instanceof Array;//返回true
var flag2=arr instanceof Object;//返回true;
在實際使用過程中,你會發現instanceof是更為強大的,當然了許多時候typeof用起來很方便,但是對於複雜的場合typeof就不太適用了,尤其是對於自訂對象以及對象之間有著複雜的繼承關係時,使用instanceof可以方便的對這些進行判斷。
3,雖然你可能知道javascript中typeof的用法,但是如果你不能做對下面的題,說明你對typeof的理解還是不夠的,例如:
var a;
var rs=typeof(a);//請問rs的值是什嗎?
(A)object (B)variable (C)undefined (D) string (E)null (F)以上答案全不正確
如果你選擇A還算對JS有一些瞭解,如果選擇B則基本上是亂猜的,如果選擇D什麼也說明不了,如果選擇E則說明你對於Java和Javascript有些
東西還沒有分清楚,選擇F也是不正確的。答案是C,記住在Javascript之中,如果一個變數沒有初始化,那麼該變數的類型為undefined。
4,也許你一直在抱怨Javascript之中沒有列表、哈西表以及堆棧、隊列等資料結構,如果真的在抱怨,那麼也不是你的錯,畢竟包括我自己在內,我們對JS的瞭解太少了,其實在JS之中,數組對象自身完全支援上面的那些資料結構,例如:
var list=new Array();//列表
list[0]="a";
list[100]="b";
var map=new Array();//哈西表
map["001"]="a";
map["username"]="zhangsan";
var stack=new Array();//堆棧,即後進先出
stack.push("a");
stack.pop();
var queue=new Array();//隊列,即先進先出
queue.unshift("a");
queue.shift();
可見JS是非常強大的,關鍵是我們知道的太少了,關於Javascript對於數組的操作,你也可以參考《Javascript對數組的操作》。
5,作為一個web開發人員,我們不能指望美工在完成漂亮的之後,還要為我們將圖切分,最後產生html
檔案後再給我們,然後我們對這些html檔案,再修改轉換為jsp、asp或者php檔案。我一直認為的切分應該或者最好由我們程式員自己來做,因
為美工做的實際上是要應用到我們的產品或者項目中的,而具體的產品和項目,對中哪些部分是需要輸入文字的,哪些地方是需要背景的,哪些地方是
需要可以自動調整的,而哪些地方又是必須保證大小的,是有很嚴格的要求的,尤其是我們的產品或項目中如果使用了類似sitemesh等的模板技術,那麼切
圖的工作就更要由我們自己來做了。這樣並不是說美工不需要懂得html、css等技術,也不是說美工切出的圖,會不符合我們的要求,我們知道,一張效果
圖,可以有n種切法,但是要能夠滿足實際的需求,往往只有一種最合適的切法,而這個切法一般來說美工是不太清楚的,開發人員也是不清楚的,只有既是開發人
員,又懂得美工切圖的人,才能夠找到最為合適的切分方法,而這樣的人才是非常奇缺的!
6,不要過於癡迷Ajax技術,也不要過於追捧web2.0這個時髦的詞彙,並不是說什麼東西粘上ajax或者
web2.0,就能夠火起來或者對我們的實際發展有利的,如果你是做公網網站的,那麼要注意,不合適的ajax使用,會使得網站被搜尋引擎收錄的資訊大幅
度減少,但是ajax或者Flex2等技術對於使用者體驗而言,還是相當不錯的,因此是否使用ajax等技術,一要看對你們的解決方案宣傳是否有作用,另外
一點就是要看,它是否真正的改進了我們的應用。
7,對於ajax的post提交方式,可能你有些問題要問,例如post的方式是不是只要在open時指定
method就可以了,為什麼我將大資料放到url後面,而沒有被完全傳遞過去,為什麼我後台使用類似jsp中的request.getParamter
方法接收不到資料,我們通過一個例子看一下ajax發送/接受大資料的方式:
1)send.jsp:(我舉的例子使用的是Javascript開源架構JsJava的ajax類庫,該類庫對IE和Firefox等的
XMLHttpRequest等對象進行了易用性的封裝,不像prototype.js預設對傳遞的資料進行urlencode編碼)
var ajaxRequest=new AjaxRequest();
ajaxRequest.setRequestMethod("post");
ajaxRequest.setRequestURL("ajaxresponse.jsp");
ajaxRequest.setAsync(true);
ajaxRequest.setMethodOnSuccess(onSuccess,[ajaxRequest]);
ajaxRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
ajaxRequest.send("content=這是一篇幾千字的文檔...在此省略");
要注意設定發送方式為post,設定頭資訊的內容類型為application/x-www-form-urlencoded,charset是否設定要看內容的編碼情況,另外大資料就放到send之中,記住大資料不是放在url的參數之中的。
2)receive.jsp
InputStream stream=request.getInputStream();
InputStreamReader isr=new InputStreamReader(stream);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
System.out.println(str);
br.close();
要知道,對於ajax post方式提交的資料,在伺服器端如果是jsp不是簡單使用getParameter就能取得到的,需要從輸入資料流中去取,這和附件上傳有些類似的地方。當然要注意編碼和解碼的問題。
8,我們在介面中經常會通過setTimeout方法來實現定時或者非同步作業,例如:
setTimeout(myfunc,2000);//兩秒後執行myfunc函數
但是要注意setTimeout方法並不能阻止後面js代碼邏輯的執行,例如:
<script>
var a =8;
setTimeout(myfunc,3000);
document.write("wait...");
</script>
上面的代碼中,document.write("wait...");邏輯並不會等到3秒後才執行,而是立即執行的,其實這一點可能大部分開發人員都知道,但是如果不注意,就很容易犯下面的錯誤,如下面代碼所示:
var ajax2HasExecuted=false;
var ajaxRequest1;
function ajax1Func(){
if(!ajax2HasExecuted){
setTimeout(ajax1Func,200);
}
var text=ajaxRequest1.getResponseText();
...
}
var ajaxRequest2;
function ajax2Func(){
var text=ajaxRequest2.getResponseText();
...
ajax2HasExecuted=true;
}
上面的代碼是一個頁面中同時發送了兩個ajax非同步請求,分別有兩個對應的接收操作,而商務邏輯要求,這兩個操作是要有先後順序的,其中第一個接收操作,
需要等待第二個接收操作完成之後,才能進行處理,於是第一個操作中就採用setTimeout的方式,本意是在執行第一個操作的開始的地方,先判斷第二個
操作是否已經執行完畢,如果沒有執行完畢,則等待200毫秒後,重新執行第二個操作,然後由於setTimeout並不能組織後續的邏輯繼續執行,所以實
際上不管第二個操作是否完成,第一個操作都會一直往下執行下去,從而導致業務上的錯誤。解決方案要麼是在if後面加上else,或者在
setTimeout之後直接return,例如:
if(!ajax2HasExecuted){
setTimeout(ajax1Func,200);
return;
}
9,window.open和window.showModalDialog方法相信你已經用到過許多次了,但是總是出現這樣或那樣的問題,問題主要是以下幾個方面:
1)showModalDialog這個函數名經常被寫錯,例如經常被寫成showModelDialog,使得不能執行開啟視窗的操作。
2)控制開啟視窗的屬性,例如尺寸、捲軸、菜單、狀態列等,是我們經常會碰到的情況,但是我們經常會將這兩種開啟檔案的屬性名稱以及屬性之間的分隔字元混用,使得屬性執行不正確,例如我舉下面的例子,要求彈出一個寬200高300的視窗,你看哪些方式是對的?
(A) window.open("about:blank","","width=200,height=300");
(B) window.open("about:blank","","width:200,height:300");
(C) window.open("about:blank","","width=200;height=300");
(D) window.open("about:blank","","width:200;height:300");
(E) window.showModalDialog("about:blank","","dialogWidth:200px;dialogHeight:300px");
(F) window.showModalDialog("about:blank","","dialogWidth=200px;dialogHeight=300px");
(G) window.showModalDialog("about:blank","","dialogWidth:200;dialogHeight:300");
再多的選項就不寫了,正確答案是A和E,通過上面的問題我們需要記住一下幾點:
- window.open控制屬性之間的分隔字元是逗號“,”,屬性和值之間用等號"="串連
- window.showModalDialog控制屬性之間的分隔字元是分號“;”,屬性之間的用冒號“:”串連
- window.open控制屬性中長度和寬度尺寸可以直接寫數字,也可以加上度量,例如px,但是對於window.showModalDialog的長度和寬度則必須帶上px,否則尺寸無效,這一點是很重要的。
10,對於資料庫中的varchar型欄位,是有長度限制的,例如oracle10g中varchar2欄位的
最大長度為4000字元,在mysql中varchar最長為255字元,要注意這裡面的限制值是單位元組字元值,而漢字屬於雙位元組字元,因此對於漢字儲存
而言,varchar2欄位最多可以儲存2000個漢字,由此引申出來的一個問題,就是web開發過程中的表單提交驗證問題,因為對於中國使用者而言,輸入
的內容有可能是漢字和英文字元的組合,因此判斷輸入字串的長度需要注意,Javascript中判斷一個字串的長度的方法為:
var str="abcdef";
var length=str.length;
但是字串的這個屬性,計算的是獨立字元的長度,例如一個中文字元按長度1計算,因此如下:
var str="你好";
var length=str.length;
其長度的值為2,而不是4,那麼如何計算含有漢字或者說是雙位元組字元的真實長度呢?通過搜尋可以很快找到方法,就是先將雙子節字元替換為兩個單位元組字元,
然後計算替換後的字元的長度,當然了JsJava中提供了對於雙位元組字元串真實長度的計算支援,你可以查看其中的StringUtils類。
11,如果你不能默寫出常用顏色的英文表示值和16進位表示值,那麼說明你的HTML基本功還是需要練的,例如
白色是white,十六進位是FFFFFF,紅色是red,十六進位是FF0000,藍色是blue,十六進位是0000FF,紫色是purple,橙色
是orange,網頁中常用的灰色一般都是EEEEE,或者再淺一些EFEFEF,當然說這些並不是讓你去背大量的顏色和十六進位值,但掌握一些常用的,
還是很有必要的。
12,Javascript支援多維陣列,但是沒有建構函式可以直接產生多維陣列,例如一維數組可以通過Array產生,例如:
var arr=new Array(12);
產生多維陣列,雖然沒有建構函式支援,但是可以通過另外一種方式實現,例如實現一個12x5的二維數組:
var arr=new Array(12);
for(var i=0;i<arr.length;i++){
arr[i]=new Array(5);
}
另外,你可以直接使用JsJava的標準類MultiDimensionArrayUtils,支援產生二維和三維數組。
13,對於img標籤,我們知道它有一個align屬性,這個align是控制該圖片與臨近文本的位置關係,按
照MSDN的說法,該屬性的預設值是left,但是從實際的顯示效果來看,好像並非如此,我們可以一起來比較一下不寫align屬性和將align賦值為
left的情況,如果預設就是left,那麼不寫align和將align賦值left,其效果應該是一樣的,那我們來一下:
<img src="http://jsjava.sourceforge.net/images/logo.gif">JsJava是最優秀的Javascript類庫解決方案和介面應用開發支撐架構!
效果如下:
再看加入align=left的情況:
<img src=http://jsjava.sourceforge.net/images/logo.gif"
_fcksavedurl="http://jsjava.sourceforge.net/images/logo.gif""
_fcksavedurl="http://jsjava.sourceforge.net/images/logo.gif""
_fcksavedurl="http://jsjava.sourceforge.net/images/logo.gif""
_fcksavedurl="http://jsjava.sourceforge.net/images/logo.gif""
align="left">JsJava是最優秀的Javascript類庫解決方案和介面應用開發支撐架構!
如下:
從實際效果來看,img的預設align並非是left,好像應該是bottom,而且上面的情況在IE6.0和Firefox2.0上都實驗過,看來MSDN的說法是不太可信的,或者是自己理解錯了?你可以看一下MSDN中的描述:http://msdn2.microsoft.com/en-us/library/ms533066.aspx
14,在介面中添加事件的方式主要有如下幾種,例如當頁面載入之後,執行函數myfunc,幾種定義方式如下:
1)在<body/>標籤中加入onload事件,即:
<body onload="myfunc()"...>
2)在任何一個可以執行Javascript的地方定義window.onload,即:
window.onload=myfunc;
3)在<script/>標籤中定義,即:
<script for=window event=onload>
myfunc();
</script>
4)將事件加入到事件隊列中,即:
IE中 window.attachEvent("onload",myfunc)
Firefox中 window.addEventListener("load",myfunc,false)
建議大家使用第四種方式,因為只有第四種方式,可以避免將其它的同類事件覆蓋,第四種方式是將該事件加入到同類的事件的隊列之中,不會覆蓋其它的同類事
件,這在web開發過程種,是需要特別注意的,尤其我們自己定義一些介面架構或者組建的時候,經常需要定義onload事件,這個時候最好是使用第四種方
式,因為引用介面架構和組建的使用者,可能在頁面上也想使用onload邏輯,當然使用者自己使用第四種方式也不會有問題,但是做為一個負責任的介面高手,是
不應該這樣想得,我們應該嚴於律己,而寬以待人。
15,並不只是body(或者說window)有onload事件,<iframe/>中也可以定義onload事件,還有<img/>也可以定義onload事件,例如當圖片載入完畢後,在window的狀態列種顯示載入成功的字樣:
<img src=http://jsjava.sourceforge.net/images/logo.gif" onload="window.status='載入完畢!'">
當然了對於img,你最好深入研究一下其各個事件和屬性的用法,你會發現原來不知道的東西還有那麼多,當然肯定有不少開發人員,已經對這一點有所研究了,但是大多數開發人員還是缺乏對這方面知識的瞭解。
16,如何在HTML種加入一段保留格式化的文本,相信你會想到<pre></pre>標籤,例如:
<pre>
這是一段格式化文本,
裡面的文字直接將格式輸出
</pre>
顯示結果為:
這是一段格式化文本,
裡面的文字直接將格式輸出
對於一般情況而言,pre標籤就夠用了,但是pre標籤的不足之處,在於它不能將其中的html標籤也原樣輸出,而是進行瞭解析,例如:
<pre>
這是一段格式化文本,<font color="red">裡面的文字</font>直接將<br>格式輸出
</pre>
顯示結果為:
這是一段格式化文本,裡面的文字直接將
格式輸出
那麼如何才能將含有HTML的內容也原樣輸出呢?實際上在HTML規範種有<xmp/>標籤,可以實現這種效果,例如:
<xmp>
這是一段格式化文本,<font color="red">裡面的文字</font>直接將<br>格式輸出
</xmp>
顯示結果為:
這是一段格式化文本,<font color="red">裡面的文字</font>直接將<br>格式輸出
17,如何擷取某個對象地區的尺寸以及座標,是我們介面開發過程種經常會遇到的一個問題,一般我們都採用
getBoundingClientRect方法來擷取對象的地區,進而得到該地區的尺寸和座標,但是該方法只能在IE中使用,當然Firefox也有類
似的方法,相信大多數開發人員不知道,該方法就是getBoxObjectFor,為了不想為跨瀏覽器而操心,你可以直接下載JsJava,使用其中的
DocumentUtils類的getElementRectangle靜態方法,例如:
<script src="jsjava.js"></script>
<script>
var elemObj=document.getElementById("div1");//div1是一個div的id
var rect=DocumentUtils.getElementRectangle(elemObj);//返回的rect是JsJava中的Rectangle對象
var x=rect.getX();
var y=rect.getY();
var width=rect.getWidth();
var height=rect.getHeight();
</script>
JsJava的類和方法都是經過IE和Firefox測試的,使用起來很方便。
18,在介面中對象的位置的計算與理解是比較麻煩的一件事情,例如clientHeight、
clientTop、scrollHeight、scrollTop、offsetHeight、offsetTop,這些該怎麼區分,又分別代表什麼意
思,對位置屬性的深入理解,非常有助於對HTML介面布局本質的理解,是成為高手的必由之路,下面就簡單介紹一下:
1)clientHeight,代表對象地區的螢幕高度,不包含地區的border尺寸,但包含padding的尺寸
2)clientTop,對象地區offsetHeight與clientHeight的差的一半
3)scrollHeight,代表對象地區內容的底部距地區最上邊的距離
4)scrollTop,代表對象地區滾動部分的高度,即地區的最上邊距離該地區可見部分的最上邊的距離
5)offsetHeight,代表對象地區的螢幕高度,包含border和padding尺寸
6)offsetTop,代表對象地區距離上一個對象高度
上面的解釋如果沒有實際的經驗,多少會有些迷糊,沒有關係,我給你一個:
因此,scrollHeight並非總是大於或等於clientHeight,實際上確實有一些開發人員認為一個地區沒有滾動時scrollHeight
和clientHeight相等,有滾動時scrollHeight=clientHeight+scrollTop,這種認識是不對的或者說是不準確
的。
上面的圖的html源碼為:
<script>
function pos(){
debug(test1.clientHeight);
debug(test1.clientTop);
debug(test1.scrollHeight);
debug(test1.scrollTop);
debug(test1.offsetHeight);
debug(test1.offsetTop);
debug("--------------");
debug(test2.clientHeight);
debug(test2.clientTop);
debug(test2.scrollHeight);
debug(test2.scrollTop);
debug(test2.offsetHeight);
debug(test2.offsetTop);
debug("--------------");
}
function debug(str){
info.value+=str+"/n";
}
</script>
<body onclick="pos()">
<div id="test1" style="padding:5;border-width:15;border-color:black;border-
style:solid;background-color:red;height:100;width:200">地區1,高100</div>
<span id="test2" style="background-color:blue;height:50;width:200">地區2,高50</span>
<div id="test4" style="height:100;width:200;background-color:green">地區4,高100</div>
<textarea id="info" cols="50" rows="20"></textarea>
<body>
顯示結果為:
70
15
28
0
100
15
--------------
50
0
18
0
50
115
--------------
19,網上許多人都問,如何將一個RGB色彩轉換為HTML中的十六進位顏色,我看到了一些網友的實現,例如定
義一個長度為256的數組,並按照十六進位的規律將其全部初始化,還有的利用了HTML標籤的一些特點,不過有一定的局限性,其實我們只要理解了RGB顏
色的基本知識,轉換起來是很方便的,RGB分別代表紅(Red)、綠(Green)、藍(Blue)三種基色,其中每一種基色從淺到深又可以定義256
色,這樣RGB總共可以表示256x256x256種顏色,而對於十六進位顏色來說,其實就是用十六進位數字來表示RGB,例如FFFFFF代表rgb
(256,256,256),換算起來也很簡單,就是十進位與十六進位之間的表示方法的轉換,例如對於RGB顏色rgb(132,216,12),用十六
進位顏色表示的計算方式為:
132轉換為十六進位數字為84
216轉換為十六進位數字為D8
12轉換為十六進位數字為0C
因此rgb(132,216,12)的十六進位顏色就是84D80C,我們可以看一下兩者的效果:
<div style="background-color:rgb(132,216,12);width:50;height:50"></div>
<br>
<div style="background-color:#84D80C;width:50;height:50"></div>
顯示為:
那麼Javascript之中是否提供了十進位數與十六進位數的轉換呢,Javascript沒有提供內建的函數來進行這種轉換,不過你可以下載JsJava,使用其中Integer類的靜態方法:toHexString方法,例如
<script src="jsjava.js"></script>
<script>
var hex=Integer.toHexString(253);
document.write("<br>"+hex);//顯示為FD
</script>
或者你直接使用JsJava種的Color對象:
var color=new Color(132,216,12);
var hex=color.toHexValue();//hex的值為84d80c
20,web開發過程中,經常會遇到原頁面與彈出頁面之間進行互動的問題,如果只是簡單的變數傳遞,還是不難
的,而我們經常遇到的一個實際情境是:例如有一個使用者列表頁面,點擊“建立”按鈕,彈出一個建立使用者的頁面,填寫完資訊後要提交表單並關閉視窗,同時列表
頁面中要列出建立的使用者,這個時候我們一些開發人員喜歡使用的方式為:
userForm.submit();
opener.location.reload();//或者有些開發人員喜歡用opener.location=列表頁面的請求url
window.close();
上面的代碼有一個很明顯的問題,就是如果表單提交給後台,後台還在處理,而此時原頁面已經執行了重載,那麼等新使用者在後台儲存後了,也不會反映到列表頁面
中了,當然重新整理一個就有了,但是就達不到我們所要的效果了。下面給你介紹一種比較穩妥的方式(ajax方式就不介紹了):
先讓表單提交,提交後還是回到彈出的那個頁面,或者一個其它的頁面,然後在該頁面中做判斷,如果後台資訊處理成功,那麼就執行原頁面的重載,然後關閉視窗。
當然有些開發人員說,前面的那種方式,一直在項目中使用沒有發現什麼問題,那我告訴你,那是因為你比較幸運,幕後處理速度很快,列表重載的時候,後台已經處理完了,但是一旦幕後處理慢了,客戶就該找麻煩了。
21,介面問題是當前web開發領域(不要認為只是asp、jsp和或者php等的開發,大的說可以包括
ASP.NET以及J2EE等)最為棘手的問題之一,而且大部分開發人員,不懂得該如何去解決介面問題,而且經常會遇到一些不可思議的問題。其實我告訴
你,介面問題的確有一些是非常奇怪的,但是不要因為這樣,就不去深究問題的原因所在,我在這些年的開發中,遇到了不少的離奇的介面問題,包括自己碰到的和
別人讓我去解決的,不過我發現,在這些離奇的問題背後,體現的卻是我們大部分開發人員,在介面能力和素養方面的一些問題,例如有些人就是太粗心,而有些人
則是缺乏介面基礎知識等等。成為介面高手不是目的,培養解決介面問題的能力和素養才是最關鍵的。
22,在串連標籤中加入onclick操作是很常用的一種方式,例如:
<a href="#" onclick="window.open('yoururl')">人員管理</a>
一般情況,這種方式是沒有問題,但是如果頁面內容比較長,出現了上下捲軸的時候,這種方式就會出一些問題,主要是由於href的#造成的,我們知道錨的
作用就是讓頁面定位並移動到錨處,上面的代碼開發人員的意圖主要是想點擊的時候不要執行連結href,所以寫一個#,但是#對於滾動的頁面,會在執行
onclick的同時,頁面出現移動定位行為,這樣的使用者體驗是很不好,解決方式有如下幾種:
<a href="javascript:void 0" onclick="window.open('yoururl')">人員管理</a>
<a href="javascript:return" onclick="window.open('yoururl')">人員管理</a>
建議使用void 0方式,因為return方式,有時會影響click事件的傳播,尤其是return false的時候。
23,在Window XP系統中,我們經常奇怪為什麼我們使用的Javascript控制視窗尺寸和位置的一些操作,而IE竟然沒有全部支援呢,例如下面的代碼:
<script>
window.open("about:blank","","width=10000,height=15000");
</script>
按道理應該彈出一個10000x15000的大視窗,然後實際上IE給我們彈出的不過是一個和瀏覽器尺寸大小一致的視窗,為什麼會這樣呢?其實我們理解微
軟,如果不這樣限制,系統可能會因為大量的這種代碼而最終崩潰,當然微軟的IE也提供了配置入口,配置是否進行限制,具體入口為:
對一般網站類說,預設都是禁用的,只要開啟就可以了。
24,我們頁面中經常會以post方式提交表單資料,提交之後,如果我們重新整理頁面,IE中一般都會提示如所示的資訊:
如果避免這種提示出現,一種是編程上去解決,即表單提交後,不要從其它視窗對該視窗繼續執行location的reload方法等等,最好是使用
location的href屬性或者assign、replace等方法),在IE的進階選項中,也有一個條目可以設定重新導向表單提交時是否給出提示信
息,但是設定了之後,沒有什麼效果,因此也就不過多介紹了。
25,現在很流行div+css方式的布局,的確這樣做介面架構的靈活性大為增加,可以說什麼布局都能出的來,
而且目前的ajax方式的輕量級portal架構基本上都採用的是div+css的布局方式,但是也不要過度的使用,或者什麼場合下都使用,例如對於一個
中大型的項目而言,要考慮的不僅僅是布局這樣的事情,還要考慮介面架構的許多東西,在這種情況下,還是使用模板的方式比較好,事實上div+css是一種
布局,而模板是一種“架構”,兩者可以結合使用,至於能結合到什麼程度,就看你的實際本領了。
26,做為一個專案經理、產品經理或者是技術總監,你應該要重視介面方面的問題了,想想吧我們現在的開發人員,
大都能很快的完成後台邏輯的開發,但是到了介面展現卻是捉襟見肘,介面效果和易用性做的都不到位,介面方面都調整好了,需要的時間往往並不比後台邏輯開發
用的時間少多少,相信你見到過吧,為了調試一個介面中的奇怪的問題,往往會用掉一個人一兩天的時間,如果再不重視介面技術的學習和素養的培養,我們的路還
能走多遠。
又七七八八的為大家總結了一下我在web開發尤其是介面開發上的一些經驗,這些都是摸爬滾打出來的,可以算作是經驗,但不一定就特別的正確,許多東西還需
要你自己去實踐、檢驗和再總結,如果我寫的這些東西,對你而言哪怕只是有一點的用處,我都是很欣慰的,另外一點我需要說的,就是我們應該逐步走出大師崇拜
的陰影,不要再津津樂道于敏捷開發、極限編程等等,面對那些國外的大師,我們更為重要的是學習他們身上的精神和品質,而不是做一個忠實的傳道士,對於這些
精神和品質,我們中華民族實際上很早就有了,只是到現在已經少的可憐的,但並不是說我們就沒有希望了,看看當今科學界和各個行業的民族精英們,看看他們骨
子裡面的那種精神,是很值得我們崇敬和學習的。