<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 警惕AJAX應(yīng)用開發(fā)中的輕罪和死罪

          警惕AJAX應(yīng)用開發(fā)中的輕罪和死罪

          ——
          作者: 時(shí)間:2007-10-19 來源:ZDNET 收藏
               bandwagon是個(gè)好去處。它能為您提供更快捷高效,動(dòng)態(tài)更強(qiáng)的應(yīng)用。但是它也有自己的缺陷。 

            乍看之下,具備一些常識(shí)似乎就能夠避免這些缺陷,在某種程度上來看,的確如此。但是從 應(yīng)用的DHTML起源來看,應(yīng)用中充滿了結(jié)構(gòu)性的差異。無論您在應(yīng)用開發(fā)工作中掌握了多少常識(shí),學(xué)習(xí)前人的教訓(xùn)都是有好處的。我們將這些錯(cuò)誤稱為我們的“七宗死罪”,但是這些錯(cuò)誤并不能代表全部的錯(cuò)誤。

            事實(shí)上,在您犯下任何一宗死罪之前,您都可能首先犯了一些較為輕微的錯(cuò)誤。因此,我們首先從這里著手。以下是每個(gè)人都可能會(huì)犯的一些錯(cuò)誤,這些錯(cuò)誤是如此常見,只要用Google搜索一下,就能找到大不部分的錯(cuò)誤。

            七宗輕罪

            1.濫用后退鍵-這是每個(gè)人都會(huì)犯的錯(cuò)誤。后退鍵在很多種Web應(yīng)用中已然成為用戶的期望。很多AJAX開發(fā)新手在開發(fā)AJAX應(yīng)用時(shí),出于多種原因都會(huì)使用后退鍵。首先,JavaScript對(duì)于它來說不是最友好的語言;其次,AJAX 設(shè)計(jì)需要一種全新的思考分析。

            對(duì)于AJAX新手來說很難接受“后退”不是最好選擇的思路。“后退”是更新頁面時(shí),或是在特定情況下進(jìn)行“撤消”時(shí)才需要的功能。在您進(jìn)行編碼時(shí)就要認(rèn)識(shí)到,否則您最后可能會(huì)重復(fù)做功。

            2.忘記告訴用戶當(dāng)前發(fā)生的狀況-AJAX的工作原理中一部分就是它不使用通常的網(wǎng)頁用戶界面加載程序。因此,您需要設(shè)計(jì)一些可視的提示,使用戶能夠了解正在發(fā)生的狀況。

            3.忘記鏈接-這也是標(biāo)準(zhǔn)的AJAX錯(cuò)誤:漏做了外部用戶能夠剪切和粘貼的URL鏈接。我們都曾經(jīng)復(fù)制過某個(gè)URL鏈接然后將其發(fā)送給別人。在我們使用AJAX時(shí),只有采用純手工輸入的方式才能把鏈接提供給他人。為什么?因?yàn)樵贏JAX應(yīng)用中,服務(wù)器不提供在JavaScript自動(dòng)生成的這個(gè)頁面。不要忽視您的用戶可能感興趣的這項(xiàng)在網(wǎng)絡(luò)應(yīng)用中最為常見的功能。請(qǐng)花點(diǎn)時(shí)間為用戶提供URL地址,因?yàn)榉?wù)器并不提供。

            4.用內(nèi)容控制替代頁面控制-如果您在尋求動(dòng)態(tài)的內(nèi)容控制,那么AJAX應(yīng)用對(duì)傳統(tǒng)的客戶端服務(wù)器交互方式的突破對(duì)您來說可算一份大禮。但是,這樣同時(shí)也會(huì)招來禍端:在重寫頁面上某精確位置上的內(nèi)容以調(diào)整用戶的交互體驗(yàn)時(shí)的確能夠進(jìn)行很好的控制,但是這可能將使您的頁面不再完整。

            在很多情況下,我們專注于處理頁面的某個(gè)部分,會(huì)忘記服務(wù)器不會(huì)刷新頁面。這樣可能導(dǎo)致頁面零亂,使用戶體驗(yàn)降低:當(dāng)他們查看頁面時(shí)看的可能是過時(shí)的頁面。請(qǐng)關(guān)注整個(gè)頁面;確保任何出現(xiàn)動(dòng)態(tài)內(nèi)容的頁面都得到更新。

            5.累死蜘蛛-AJAX的優(yōu)勢(shì)在于無需重裝就可以提供給頁面的大量文本;AJAX的缺陷也在于那些無需重裝就可以提供給頁面的大量文本。如果應(yīng)用被設(shè)計(jì)為對(duì)搜索引擎友好,那么您應(yīng)該能夠想到會(huì)出現(xiàn)什么狀況。無論頁面中出現(xiàn)了什么情況,請(qǐng)務(wù)必在最上面植入大量穩(wěn)定的文本,讓蜘蛛們?nèi)ネ姘伞?

            6.導(dǎo)致亂碼文本-AJAX不能支持多種字符集。這并不是什么涉及生死的局限性,但是如果忘記這點(diǎn)可能會(huì)導(dǎo)致真正的問題發(fā)生。最基本的字符集是UTF-8。無論JavaScript發(fā)送的是什么字符集,請(qǐng)不要忘了正確編碼,并根據(jù)內(nèi)容設(shè)置服務(wù)器端的字符集。  

            7.沒有為使用不支持JavaScript的瀏覽器的用戶提供提示。有些瀏覽器不支持JavaScript,這些用戶一時(shí)不能明白出了什么狀況。請(qǐng)給他們一些提示。

            以上都是一些很容易發(fā)現(xiàn)的錯(cuò)誤。真正的問題都是容易被人忽視的?! ?

            AJAX七宗死罪

            1.造成內(nèi)存泄露-任何長(zhǎng)期從事開發(fā)工作的人都知道什么是循環(huán)引用,并了解循環(huán)引用給內(nèi)存管理帶來的危害。AJAX 所使用的JavaScript是一種內(nèi)存管理語言。也就是說JavaScript具有內(nèi)置的信息包收集功能,因此能夠抽取不再有引用路徑使用的變量并重新分配這些變量所使用的內(nèi)存。

            作為基本工作原理來說,這樣并無不妥;但是在模型層對(duì)象與查看元素之間互相引用時(shí),由于這些循環(huán)引用,您就不能依靠這個(gè)功能來實(shí)現(xiàn)內(nèi)存使用的最優(yōu)化。從原則上來說,對(duì)象為零,則元素為零。但是如果這是從元素到對(duì)象的向后引用,那么信息包搜集器不會(huì)動(dòng)這些對(duì)象。

            現(xiàn)在,問題出來了:在文件對(duì)象模型中,任何文件樹中的DOM節(jié)點(diǎn)都可能被樹中存在的其他元素引用,而無論其是否被其他對(duì)象所引用!因此,任何在信息包收集器中經(jīng)過標(biāo)注的被DOM節(jié)點(diǎn)向后引用的對(duì)象在這一方向上都必須為零,否則它的內(nèi)存就會(huì)一直處于已分配狀態(tài)。

            2.不了解“異步”的含義-異步這個(gè)詞很容易讓不熟悉它的用戶感到緊張。但是如果您為這些用戶所設(shè)計(jì)的網(wǎng)頁應(yīng)用屬于桌面應(yīng)用,那么他們肯定不會(huì)感到不安。這是一個(gè)致關(guān)重要的設(shè)計(jì)點(diǎn)。大部分網(wǎng)頁應(yīng)用功能與桌面副本非常類似。但是在網(wǎng)頁應(yīng)用中,用戶期望這種虛幻的特征導(dǎo)致他們截然不同。

            用戶在與網(wǎng)頁瀏覽器打交道時(shí)會(huì)帶有非常不同的偏見和期望,而對(duì)于桌面應(yīng)用中他們并沒有這樣的行為。因此,盡管頁面與服務(wù)器之間頻繁的響應(yīng)會(huì)非常好,非常高效,頁面能夠同時(shí)對(duì)自身進(jìn)行修訂,但是這將會(huì)使用戶頭暈眼花。因此,您需要遵守兩條守則,要考慮到進(jìn)入用戶視覺范圍內(nèi)的每個(gè)變化:如果對(duì)于用戶來說不是很迫切的更新,那么要使升級(jí)更為溫和,不會(huì)轉(zhuǎn)移;如果更新對(duì)于用戶與應(yīng)用的交互非常重要,那么更新要清楚而明顯。

            3.使服務(wù)器變成瞎子-用戶端與服務(wù)器交流的減少是一大問題,而以前并非如此。在以前,服務(wù)器端的應(yīng)用了解全部情況并且能夠看到全部狀況:每個(gè)例外,每次重新加載,每個(gè)事件多能被看到并記錄下來,當(dāng)然服務(wù)器也道到底客戶端是什么狀況,因?yàn)榉?wù)器會(huì)記錄下屏幕上顯示的一起。

            在AJAX應(yīng)用中可不是這樣。當(dāng)有事件發(fā)生時(shí),這些事件是與服務(wù)器相互獨(dú)立的,也就是說,當(dāng)客戶端出現(xiàn)問題時(shí),服務(wù)器端并不會(huì)馬上知道。在某個(gè)位置發(fā)現(xiàn)和記錄客戶端發(fā)生的事件以及例外,使服務(wù)器能夠追蹤需要干涉的問題

            4.用GET偷懶-GET的作用是找回?cái)?shù)據(jù);POST的作用是對(duì)GET進(jìn)行設(shè)置。不要在不適當(dāng)?shù)臅r(shí)候使用GET,即使你認(rèn)為這樣做沒有危害也不要嘗試。GET的動(dòng)作會(huì)改變狀態(tài),會(huì)改變狀態(tài)的鏈接會(huì)使用戶感到困惑;大部分都認(rèn)為鏈接的作用是導(dǎo)航,而不是功能。

            5.數(shù)據(jù)類型不兼容-JavaScript并非.NET 框架中的一部分。盡管這有點(diǎn)讓人傷心,但是它的確為我們展示了一個(gè)我們可能會(huì)碰到的問題:確認(rèn)JavaScript能夠理解其運(yùn)行平臺(tái)上的數(shù)據(jù)類型,反之,對(duì)于.NET或其它也是如此??赡軙?huì)有多種轉(zhuǎn)換,您需要一一進(jìn)行。例如,Ajax .NET Pro 資料庫提供能夠轉(zhuǎn)換.NET和JavaScript對(duì)象符號(hào)的轉(zhuǎn)換器。

            6.有些應(yīng)用不知何時(shí)應(yīng)該關(guān)閉-無需刷新頁面的內(nèi)容動(dòng)態(tài)生成如果沒有關(guān)閉時(shí)間將會(huì)非常糟糕。How many Web pages hav你見過多少比美國(guó)國(guó)會(huì)議事錄還長(zhǎng)的網(wǎng)頁?如果網(wǎng)頁無限延長(zhǎng)無疑會(huì)是用戶的噩夢(mèng),只要想想用戶會(huì)怎么看待永不停止的應(yīng)用就知道了。讓您的網(wǎng)絡(luò)應(yīng)用具有動(dòng)態(tài),但是一定要在可行的限度之內(nèi)。

            7.JavaScript和DOM相互獨(dú)立-請(qǐng)記住AJAX是建立在“模型-視覺-控制器”(Model-View-Controller)結(jié)構(gòu)之上,請(qǐng)認(rèn)真對(duì)待這點(diǎn)。JavaScript屬于模型層,DOM屬于視覺層,而控制器是銜接他們的婚姻顧問。請(qǐng)確保您的網(wǎng)絡(luò)文件獨(dú)立于JavaScript之外(這樣對(duì)于不支持JavaScript的用戶比較有用) – 除非內(nèi)容自身只在用戶使用JavaScript才有意義。在這種情況下,用JavaScript來創(chuàng)建內(nèi)容。


          關(guān)鍵詞: AJAX

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();