emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks

          項目開發(fā)告一段落,喘口氣,總結(jié)一下。

          1 AJAX還是AJAH
          * AJAX的很多經(jīng)典應(yīng)用其實都是利用xmlhttp空間訪問后臺程序,后臺程序返回腳本用eval回調(diào)或者返回簡單數(shù)據(jù)的方式來開發(fā)。這樣的開發(fā)模式的好處是設(shè)計簡單輕巧,對熟悉dhtml的開發(fā)者來說上手會比較塊,跨瀏覽器問題也容易解決,做簡單的應(yīng)用也夠用。gmail,google suggest都是用這種方式。但是在我看來gmail已經(jīng)吧AJAH應(yīng)用到極限了,更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)用簡單數(shù)據(jù)和回調(diào)方式來組織就開始有點力不從心了。

          * 前AJAX的一種傳統(tǒng)做法是后臺返回完整的xml文件后用腳本(利用控件)解析xml后操作頁面的dom節(jié)點來動態(tài)生成頁面的一部分。這樣作的優(yōu)點是可以充分利用xml的強大表達能力傳輸各種數(shù)據(jù)結(jié)構(gòu),缺點是頁面的dom操作效率不高,而且IE在dom操作的API上bug多多。之所以叫“前AJAX”,因為我們在AJAX這個名詞出現(xiàn)前已經(jīng)這樣做了很多年了。

          * AJAX另一種傳統(tǒng)做法是后臺返回完整的xml文件后用腳本(利用控件)解析xml后生成html代碼再灌回頁面的層中。這樣的做法回避了頁面dom操作的一些問題,在生成的內(nèi)容比較多的時候利用一些字符串計算的優(yōu)化技巧(主要是數(shù)組和正則的應(yīng)用)可以相當高效的生成頁面。在我看來這是未來的發(fā)展趨勢。

          我現(xiàn)在的項目主要采用的是第三種方式,結(jié)合第二種。我使用的是自己的一個小巧的框架,模擬jsp的語法來生成html代碼,但是依賴于瀏覽器的xml解析API,因此難以跨瀏覽器。google的開源項目ajaxslt提供了一個純js的xslt解決方式,功能更強大,可以在頁面中局部的應(yīng)用xslt解析xml生成html或者其他形式的數(shù)據(jù),但是帶來了xslt這個技術(shù)門檻。sf上的ZK似乎也不錯,但是帶來的是xul這個技術(shù)門檻,同時后臺被綁定在了J2EE服務(wù)器上面。

          2 CACHE
          如果使用xmlhttp控件,在發(fā)起http請求的時候IE會包辦cache策略,很多時候更新了數(shù)據(jù)卻無法獲得更新后的數(shù)據(jù)。一開始試圖用傳統(tǒng)方式在URL后面加隨機數(shù)來強制更新,但是IE仍然距不發(fā)出新的請求。
          一個解決方法是在后臺寫expires: 0或者其他的禁止前臺cache的頭,但是這樣在數(shù)據(jù)沒有更新的時候又會帶來不必要的服務(wù)器壓力、響應(yīng)延遲和帶寬浪費。
          一個稍微好一點的解決方法是,前臺在提交數(shù)據(jù)以后,需要強制更新數(shù)據(jù)的時候:

          xmlhttp.setRequestHeader("If-Modified-Since","0");

          3 系統(tǒng)錯誤: -1072896748。
          用xmlhttp接收到數(shù)據(jù)的時候經(jīng)常是用xmldom.loadXML(xmlhttp.responseXML.xml)來判斷返回的數(shù)據(jù)的正確性,但是如果后臺送過來不正確的xml的時候有時回觸發(fā)-1072896748系統(tǒng)錯誤。這是因為xmlhttp.responseXML已經(jīng)沒有解析到東西了,我們還試圖訪問它的xml屬性而觸發(fā)的。
          解決的方法是在使用responseXML.xml 或者 responseText的時候要做try/catch:
          try{var tmp = xmlhttp.responseXML.xml}catch(ex){err=true;}
          有些人喜歡catch的時候判斷 exception.description=="系統(tǒng)錯誤: -1072896748。" , 如果客戶端不是簡體中文版的系統(tǒng)的時候就判斷不到了。其實這個地方只要有異常,都必須走異常處理流程了,不用區(qū)分的那么仔細。

          posted on 2005-11-22 10:24 emu 閱讀(8713) 評論(18)  編輯  收藏

          評論

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-22 11:01 eamoi
          emu好樣的。加油,希望看到后續(xù)更深入的文章。  回復(fù)  更多評論
            

          # 太忙了 2005-11-22 13:23 emu
          早就想做做些研究,在項目中多實踐一些新東西,和大家多分享一些東西,可是實在忙。上周基本上都是晚上11點后下的班,星期天好一點,6點多就回去了。疲于奔命,很多事情都做不了。有心想替公司挖幾個高手過來幫忙,可惜高手們都請不動。  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-22 14:45 huangyi
          我覺得用xsl把xml轉(zhuǎn)成html要方便許多 尤其xml復(fù)雜的時候  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-22 16:30 emu
          對熟悉xslt的開發(fā)人員來說當然是如此了。可是要把人家全部拉過來培訓(xùn)xslt阻力也不小啊,只能指望下面的項目能不能用上。  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-23 23:01 BlueO2
          公司既然不是做ajax產(chǎn)品框架,而是做應(yīng)用,為什么不應(yīng)用現(xiàn)有的框架呢?比如dwr  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-24 09:17 emu
          公司不做java的,DWR這樣的java后臺框架也確實支撐不起我們這樣龐大的后臺壓力。  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-28 11:43 Henri
          Writing AJAX web applications is definitly not a low cost job. And ZK(http://zk1.sourceforge.net) is aimed at making developing AJAX web applications as easy as developing a traditional desktop windows applications. There is no need to learn javascript and DOM and XMLHttpRequest. ZK hides all these away. XUL in that meaning is actually an easy to lean markup language to design rich GUI pages and you write all your control and data biding codes in pure java.

          However, ZK is expected to release next version which will support xhtml tags directly to enable those majority of html web page designers to write AJAX web applications.

          ZK is a java servlet-based presentation engine. All you need is a java servlet engine (e.g. Tomcat, Jetty, etc.). As for JavaEE, we do support it but you don't need the full set. ZK is made as thin as possible a presentation engine and it is only for presentation only. Therefore, you can use it with Spring, Strut, Hibernate, Jdbc, etc... without limitation.

          Here is the Live demo, maybe you want to give it a try. (http://www.potix.com/zkdemo/userguide)

          Henri  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-11-28 22:10 emu
          >>All you need is a java servlet engine

          當我還在做java的時候,我會覺得這是多么理所當然的要求啊,可惜從java世界走出來的時候才發(fā)現(xiàn),java并不總是最好的答案。  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-12-02 19:24 chenqj
          ajaxslt只支持ie6.0以上的版本,這點比較郁悶  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2005-12-03 15:43 emu
          不會吧,看來我得趕快去加入這個項目了  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2006-01-11 10:24 呵呵
          >>當我還在做java的時候,我會覺得這是多么理所當然的要求啊,可惜從java世界走出來的時候才發(fā)現(xiàn),java并不總是最好的答案

          有的時候答案好不好不是關(guān)鍵,關(guān)鍵是別人要這個答案 :)  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2006-05-25 20:10 pc
          http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=1106514212512 java線程的缺陷(上)
          http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=200644231255 Java反編譯的研究
          http://www.kpwang.com/pc/view.jsp?board_id=1&article_id=20064614542 Java實現(xiàn)ftp功能(源程序)  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2006-05-26 09:52 交流交流
          有沒有考慮用JSON格式來傳遞數(shù)據(jù)?我想,在web應(yīng)用中JSON比較高效些。  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2006-05-30 10:55 老鼠
          呵呵:)

          謝謝emu的經(jīng)驗共享:)

          我想把您這篇文章轉(zhuǎn)走,可以嗎?

          如果您有疑問,請在此留言或給我E-MAIL,謝謝:)

          cammy.sun@hotmail.com  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2006-07-13 09:18 unifly
          可以考慮下JSON;
          干嗎不用好的框架;
          建議看看Ajax in action;
          http://www-128.ibm.com/developerworks/cn/java/j-ajax2/;
            回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2006-07-15 14:39 emu
          呵呵,有用框架的高手、寫框架的高手和不用框架的高手的。
          json我通常直接通過script來引用,而不是通過xmlhttp(request)來獲取,這樣需要做的事情更少。這個話題上和meizz有過一些討論,不過這是另一個話題了,一篇日志中不可能什么都講的。  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2009-05-21 17:07 藏獒
          ajax,高級東西啊,我HTML都用不好會的哦.  回復(fù)  更多評論
            

          # re: 做了兩個月ajax,總結(jié)一些小經(jīng)驗 2009-05-21 17:07 魔獸世界私服
          學(xué)習(xí)了....  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 淳化县| 荥阳市| 台前县| 仪陇县| 若尔盖县| 景洪市| 芜湖县| 扬州市| 舟曲县| 仪陇县| 昌平区| 突泉县| 沾益县| 宜君县| 时尚| 漠河县| 襄汾县| 巩留县| 准格尔旗| 台安县| 广灵县| 柏乡县| 宜兰县| 靖远县| 新竹市| 自贡市| 松溪县| 彭阳县| 大余县| 井陉县| 盐边县| 和龙市| 旺苍县| 鞍山市| 汉源县| 玛多县| 宁武县| 扶余县| 正阳县| 习水县| 临潭县|