用事實(shí)說(shuō)話!AJAX應(yīng)用程序開(kāi)發(fā)七宗罪_.Net教程
推薦:Scott Mitchell ASP.NET 2數(shù)據(jù)控件嵌套除了靜態(tài)HTML和數(shù)據(jù)綁定語(yǔ)法,template也可以包含Web控件和用戶控件.這些控件的屬性可以通過(guò)聲明語(yǔ)法,數(shù)據(jù)綁定語(yǔ)法或在服務(wù)器端通過(guò)事件處理編程來(lái)設(shè)置. 通過(guò)將控件嵌入到template里,可以
AJAX bandwagon是個(gè)好去處。它帶給你更快、更高效、更強(qiáng)動(dòng)態(tài)的應(yīng)用。但它也有自身的缺陷。
初一看,具備一些常識(shí)似乎就能避免這些缺陷,在一定程度上,的確如此。但從DHTML起源來(lái)看,AJAX應(yīng)用程序充滿了結(jié)構(gòu)性差異。不論你在應(yīng)用程序開(kāi)發(fā)工作中掌握了多少常識(shí),從別人犯的錯(cuò)誤中吸取教訓(xùn)也是有好處的。我們稱這些錯(cuò)誤為“七宗死罪”,但它們不能代表全部的錯(cuò)誤。
事實(shí)上,在你犯這些致命過(guò)失之前,你可能首先犯了一些較輕的錯(cuò)誤。因此我們從這里著手。這是每個(gè)人都可能犯的錯(cuò)誤。這些錯(cuò)誤是多么普遍,通過(guò)Google搜索一下,你就可以發(fā)現(xiàn)大部分的錯(cuò)誤。
七宗輕罪
1.濫用Back按鈕—這是每個(gè)人都會(huì)犯的錯(cuò)誤。Back按鈕在很多網(wǎng)頁(yè)程序中已經(jīng)成為用戶的期望。很多AJAX研發(fā)新手在開(kāi)發(fā)AJAX應(yīng)用程序時(shí),出于多種原因都敏捷地使用著B(niǎo)ack按鈕。首先,JavaScript對(duì)于它來(lái)說(shuō)不是最友好的語(yǔ)言;其次,AJAX設(shè)計(jì)中需要一種全新的思考方式。
對(duì)于AJAX 研發(fā)新手“后退”顯然不是最好的選擇。“后退”是一種你更新頁(yè)面,或更常見(jiàn)的,你需要在特定情況下進(jìn)行“撤銷”時(shí)才用到的功能。在進(jìn)行編碼前應(yīng)認(rèn)識(shí)到這些,或者你可能重復(fù)做功。
2.忘記告訴用戶當(dāng)前發(fā)生的狀況—AJAX工作原理中的一部分是其不使用常規(guī)的網(wǎng)頁(yè)用戶界面加載程序。因此,你需要明確設(shè)計(jì)一些可視的提示,使用戶了解正在發(fā)生的狀況。
3.忽視鏈接—這也是AJAX的標(biāo)準(zhǔn)失誤:漏做了程序外部用戶可以剪貼的URL鏈接。我們都曾經(jīng)多少次復(fù)制過(guò)URL鏈接然后將其發(fā)送給別人?當(dāng)你在使用AJAX 時(shí),提供給你的用戶有用URL鏈接的唯一方法是,手動(dòng)提供給他們。為什么?因?yàn)樵贏JAX程序中,服務(wù)器不提供JavaScript動(dòng)態(tài)生成的這個(gè)頁(yè)面! 不要忽視你的用戶可能感興趣的這個(gè)網(wǎng)絡(luò)應(yīng)用中最普通的功能。既然服務(wù)器不支持,那你花點(diǎn)功夫?yàn)橛脩籼峁︰RLs。
4.用內(nèi)容控制替代控制—如果你正在尋找動(dòng)態(tài)的內(nèi)容控制,那么對(duì)傳統(tǒng)的客戶服務(wù)器交互作用的突破對(duì)你來(lái)說(shuō)可是件好事。但這也是一項(xiàng)罪過(guò):在重寫(xiě)一個(gè)頁(yè)面的某精確位置上的內(nèi)容以調(diào)整用戶的交互式體驗(yàn)時(shí)確實(shí)確實(shí)能夠很好的控制,但這也將使你的頁(yè)面不完整。通常,我們專注于處理頁(yè)面的某一部分,而忘記服務(wù)器不刷新頁(yè)面。這會(huì)導(dǎo)致頁(yè)面凌亂,用戶體驗(yàn)降低,當(dāng)他們察看頁(yè)面時(shí)可能看到過(guò)時(shí)的頁(yè)面!把你的注意力放在整個(gè)頁(yè)面; 確保出現(xiàn)動(dòng)態(tài)頁(yè)面的內(nèi)容都得到更新。
5.累死蜘蛛 –AJAX的優(yōu)勢(shì)在于無(wú)需重裝就可以提供給頁(yè)面的大量的文本;AJAX的缺陷在于無(wú)需重裝就可以提供給頁(yè)面的大量的文本。如果應(yīng)用被設(shè)置為對(duì)搜索引擎友好,那么,你能夠想象會(huì)出現(xiàn)什么情況。無(wú)論頁(yè)面中出現(xiàn)了什么,請(qǐng)務(wù)必在最上面植入足夠穩(wěn)定的文本,為蜘蛛們?nèi)ネ嫠0伞?/p>
產(chǎn)生亂碼文本—AJAX不支持很多字符集。這不是涉及生死的局限性,但忘記它能夠產(chǎn)生真的問(wèn)題。最基本的字符集是UTF-8。不論JavaScript發(fā)送什么,別忘記正確地編碼,并且根據(jù)內(nèi)容設(shè)置服務(wù)器端的字符集。
沒(méi)有為使用不支持JavaScript的瀏覽器的用戶提供提示--有些瀏覽器不支持JavaScript,用戶一時(shí)不能明白出了什么狀況。請(qǐng)給他們提供提示。
實(shí)話實(shí)說(shuō),其中大部分是常識(shí)性問(wèn)題。真正的問(wèn)題都很容易讓人忽視的。
造成內(nèi)存泄漏—任何長(zhǎng)期從事開(kāi)發(fā)工作的人都知道循環(huán)引用,并了解其給內(nèi)存管理帶來(lái)的危害。
AJAX所使用的JavaScript是內(nèi)存管理的語(yǔ)言。這意味著JavaScript具有內(nèi)置的信息包收集功能,因此能夠抽取不再有引用路徑使用的變量并重新分配這些變量所使用的內(nèi)存。
作為基本工作原理這很好,但是在模型對(duì)象和察看元素之間互相引用時(shí),由于這些循環(huán)引用,你就不能依靠這個(gè)功能來(lái)實(shí)現(xiàn)你的內(nèi)存使用最優(yōu)化。從原則上講,對(duì)象為零,則元素為零,但是如果這時(shí)從元素到對(duì)象的向后引用,那么信息包搜集器不會(huì)動(dòng)這些對(duì)象。
現(xiàn)在,問(wèn)題出來(lái)了:在文件對(duì)象模型中,任何文件樹(shù)中的DOM節(jié)點(diǎn)都可能被樹(shù)中的其它元素引用,不論其是否被其他對(duì)象所引用!因此任何在信息包收集器中經(jīng)過(guò)標(biāo)注的被DOM節(jié)點(diǎn)向后引用的對(duì)象,在這一方向必須為空,否則其內(nèi)存就會(huì)一直處于已分配狀態(tài)。
不了解“異步”的含義--異步很容易讓不熟悉它的用戶感到緊張。但是如果您為這些用戶所設(shè)計(jì)的網(wǎng)頁(yè)應(yīng)用程序?qū)儆谧烂鎽?yīng)用程序,那么他們肯定不會(huì)感到不安。這是一個(gè)至關(guān)重要的設(shè)計(jì)點(diǎn)。大部分網(wǎng)頁(yè)應(yīng)用功能與桌面副本非常類似。但是在網(wǎng)頁(yè)應(yīng)用中,用戶期望這種虛幻的特征導(dǎo)致他們截然不同。
用戶在與網(wǎng)頁(yè)瀏覽器打交道時(shí)會(huì)帶有非常不同的偏見(jiàn)和期望,而對(duì)于桌面應(yīng)用中他們并沒(méi)有這樣的行為。因此,盡管頁(yè)面與服務(wù)器之間頻繁的響應(yīng)會(huì)非常好,非常高效,頁(yè)面能夠同時(shí)對(duì)自身進(jìn)行修訂,但是這將會(huì)使用戶頭暈眼花。因此,您需要遵守兩條守則,要考慮到進(jìn)入用戶視覺(jué)范圍內(nèi)的每個(gè)變化:如果對(duì)于用戶來(lái)說(shuō)不是很迫切的更新,那么要使升級(jí)更為溫和,不會(huì)轉(zhuǎn)移;如果更新對(duì)于用戶與應(yīng)用的交互非常重要,那么更新要清楚而明顯。
使服務(wù)器在黑暗中—用戶端與服務(wù)器的交流減少是一大問(wèn)題,而以前并非如此。在以前,服務(wù)器端的應(yīng)用了解全部情況并且能夠看到全部狀況:每個(gè)例外,每次重新加載,每個(gè)事件多能被看到并記錄下來(lái),當(dāng)然服務(wù)器也知道客戶端是什么狀況,因?yàn)榉⻊?wù)器會(huì)記錄下屏幕上顯示的一切。
在AJAX應(yīng)用程序中,問(wèn)題不是這樣。當(dāng)有事件發(fā)生時(shí),這些事件是與服務(wù)器相互獨(dú)立的,也就是說(shuō),當(dāng)客戶端出現(xiàn)問(wèn)題時(shí),服務(wù)器端并不會(huì)馬上知道。在某個(gè)位置發(fā)現(xiàn)和記錄客戶端發(fā)生的事件以及例外,使服務(wù)器能夠盡快追蹤需要干涉的問(wèn)題。
用GET偷懶—GET用于重新找回?cái)?shù)據(jù);POST用于對(duì)GET設(shè)置。不要在不適當(dāng)?shù)臅r(shí)候使用GET,即使你認(rèn)為這樣做沒(méi)有危害。GET操作改變狀態(tài),改變狀態(tài)的鏈接會(huì)令用戶感到困惑;大部分都認(rèn)為鏈接的作用是導(dǎo)航,而不是功能。
不兼容數(shù)據(jù)類型--JavaScript不是.NET Framework框架中的一部分。盡管這的確令人傷心,但這呈現(xiàn)給我們一個(gè)我們可能會(huì)碰到的問(wèn)題:確定JavaScript能夠理解其運(yùn)行平臺(tái)上的數(shù)據(jù)類型,反之,對(duì)于.NET或其他都是如此。可能會(huì)有多種轉(zhuǎn)換器,你需要把它們找出來(lái)。例如,Ajax.NET Pro資料庫(kù),提供能夠轉(zhuǎn)換.NET 和 JavaScript對(duì)象符號(hào)的轉(zhuǎn)換器。
一些應(yīng)用程序不知道何時(shí)關(guān)閉--無(wú)需刷新頁(yè)面的內(nèi)容動(dòng)態(tài)生成如果沒(méi)有關(guān)閉時(shí)間將會(huì)非常糟糕。
你見(jiàn)過(guò)多少比美國(guó)國(guó)會(huì)議事錄還長(zhǎng)的網(wǎng)頁(yè)?如果網(wǎng)頁(yè)無(wú)限延長(zhǎng)無(wú)疑會(huì)是用戶的噩夢(mèng),只要想想用戶會(huì)怎么看待永不停止的應(yīng)用程序就知道了。讓您的網(wǎng)絡(luò)應(yīng)用具有動(dòng)態(tài)效果,但是一定要在可行的限度之內(nèi)。
保持你的JavaScript遠(yuǎn)離你的DOM—請(qǐng)記住AJAX建立在模型-視覺(jué)-控制(Model-View-Controller)結(jié)構(gòu)之上。請(qǐng)認(rèn)真地對(duì)待這點(diǎn)。JavaScript屬于模型層面,DOM屬于視覺(jué)層面,而控制器是他們的婚姻顧問(wèn)。保證讓你的網(wǎng)絡(luò)文件獨(dú)立于 JavaScript之外(這樣有利于不支持JavaScript的用戶)--除了當(dāng)內(nèi)容自身只在用戶使用JavaScript時(shí)才有意義及可操作性。在這種情況中,用JavaScript創(chuàng)建內(nèi)容。
分享:ASP.Net中無(wú)刷新執(zhí)行Session身份驗(yàn)證在寫(xiě)一個(gè)客戶的B/S結(jié)構(gòu)應(yīng)用程序時(shí),突然發(fā)現(xiàn)一個(gè)技巧,不知道是否是MS的一個(gè)BUG,給相關(guān)的有研究的朋友原先考慮寫(xiě)一個(gè)檢查Session的類,Session失效后,必須轉(zhuǎn)向登陸頁(yè)面,可每一個(gè)調(diào)用該類的頁(yè)
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- asp.net服務(wù)器端指令include的使用及優(yōu)勢(shì)介紹
- asp.net css控制打印功能
- 解析.Net Micro Framework中的線程
- 解析6種ASP.NET跨頁(yè)面?zhèn)髦档姆椒?/a>
- ASP.NET 2.0移動(dòng)開(kāi)發(fā)入門(mén)的使用樣式
- 組合.NET數(shù)據(jù)控件構(gòu)建強(qiáng)大用戶接口
- 怎樣使.NET命名空間符合標(biāo)準(zhǔn)
- 用SQL語(yǔ)句修復(fù)SQL Server數(shù)據(jù)庫(kù)
- ASP.NET備份恢復(fù)SqlServer數(shù)據(jù)庫(kù)
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索用事實(shí)說(shuō)話!AJAX應(yīng)用程序開(kāi)發(fā)七宗罪
- 教程說(shuō)明:
.Net教程-用事實(shí)說(shuō)話!AJAX應(yīng)用程序開(kāi)發(fā)七宗罪
。