Ajax優於JSF的幾個原因討論

來源:互聯網
上載者:User

Sun為什麼會搞出一個JSF,JSF為什麼會是現在這個樣子,我想原因是這樣的:首先,基於組件的Web開發將來會是一個趨勢。自包含的組件便於IDE的處理,可以提高開發效率。

就是說JSF優於Struts/WebWork這類MVC架構的優勢,在於它可以與IDE結合來自動產生代碼。而傳統的純手工編寫的MVC架構,影響了開發效率。因為Java技術在用戶端並沒有明顯的優勢。Applet已經被拋棄掉,Java的強項在伺服器端。Sun不可能跑去使用JavaScript,因為在傳統開發人員眼裡,JS只配做一點很瑣碎的任務。

於是在他們設計的這個架構中,所有的使用者事件都放在了伺服器端來處理,這個決策造成了JSF致命的缺點。它把事件處理模型綁死在伺服器上,限制了響應性更加靈敏的互動設計。隨之而來的網路延遲會毀掉軟體的可用性。這也是Ajax在JSF的架構中無法充分發揮作用的原因。

JSF的設計思路有點模仿VB,組件化的開發這個方向是沒錯的,Ajax開發將來也會走這條路。但是JSF與VB最大的差別是VB的事件模型都是位於本地來處理的。這是一種本質上的差別,所以如果JSF確實想模仿VB,那也是東施效顰。而且在JSF的設計階段,同步的請求/響應是主流,他們的思路仍然牢牢束縛在基於頁面的開發方式上。根本就沒有思考過其他的可能。

非同步請求/響應是Ajax與傳統開發方式最大的差別,非同步帶來了更好的互動設計。

GoogleMaps中當使用者滾動地圖時,擷取新的地圖圖片,由於是非同步請求的,因此不會打斷使用者的操作流程。而在傳統的地圖服務,每次滾動可能都需要重新整理頁面。用一下微軟的那個地圖服務就可以感覺到明顯的差距,它甚至根本就不允許使用者滾動地圖。

以前我說GoogleMaps不是Ajax,因為沒有使用XMLHttpRequest,這樣說看來理解有些狹隘。GoogleMaps請求地圖的圖片,採用的是修改動態建立的img元素的src屬性的方式,這樣的請求不會打斷使用者的操作,因此就是非同步。我們在AjaxinAction中看到作者將GoogleMaps當作Ajax應用,而在PragmaticAjax中作者說GoogleMaps不是嚴格意義上的Ajax,兩種說法都有道理。

JSF其實如果和Applet結合,可能更好些。Applet是多線程的,可以捕獲使用者的操作事件,採用非同步方式發送到伺服器。這樣就不會打斷使用者的操作了。但是這樣一來設計的這個架構就複雜了。而且Applet是已經決定拋棄的東西。JSF和JavaWebStart結合也可以,不過JWS設計用來建造一類完全不同的Web應用,即RichClient,而不是設計用來建造運行於瀏覽器之內的RIA應用。所以JSF最多隻是一種過渡方案,在Ajax/Flash的競爭下早已風光不在。

未來基於瀏覽器的RIA開發,Ajax、Flash是兩種最有前途的技術。

按照澤欣的判斷可能是三分天下,Ajax、Flash/Flex/Laszlo、還有M$的Atlas。Atlas是M$開發的類似於Flash的一種技術,目前還只是一個vaporware,沒有看到其廬山真面目。JavaWebStart相比之下只能局限於一些內部應用。

相關文章:

相關文章】

  • Ajax:Web開放的重要武器
  • JSF與WEB之完美組合 提升開發效率
  • J2EE基礎:使用JSF技術開發Web應用程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.