對Ajax的研究有了一段時間了,從最初的遠觀,到近看,再到實際動手實現,認識越來越深,想法也越來越多。特別是曾經有一陣子跑去研究web2.0,更是體會到AJax背後的偉大,暗自為其慶幸,也越來越看好Web。
不過AJax在我心中卻有些怎麼也擺脫不了的陰影。
忽如一夜春風來,AJax就這麼很突兀的就突然流行起來。同時流行的還有Web2.0,這些詞匯現在都無比的有鼓動力,任何事物,只要沾上這兩者的邊,便變得神秘無比,無法遏制。
但也有人說AJax是噱頭,因為他是新瓶裝舊酒。
其實Ajax之所以風行,就在於它新瓶裝舊酒。AJax所代表的3個概念,異步、Javascript、XML,應該說都不是新東西。
異步?在操作系統中我們早已經學過,那時的名字叫多線程。
Javascript?想當年的DHtml他就已經紅遍大江南北。
XML?瞧瞧那些名詞,SOAP、RSS、WAP等,這些名詞哪個離開得了XML?
這些名詞結合在一起之所以產生強大的力量,就在於他們的設計不同,而隱藏在設計背後的思想不同。
而這些名詞之所以可以紅火,就在於他們本身已經應用非常普遍,已經深入到世界中的每個角落。
即便是AJax中稍微新鮮點的XMLHttpRequest,之前也不是沒有替代品。IFrame時代我們就已經實現了同樣的功能,只是XMLHttpRequest可以比我們做的更好,幫助我們做的更多而已。
Javascript是將Ajax所有技術糅合在一起的黏著劑。所謂的AJax應用程序,其實就是一個運行在客戶端浏覽器環境中的應用程序。這個應用程序通過DOM操作Html將信息展示給用戶,通過事件機制相應用戶操作,通過XMLHttpRequest與服務器溝通,使用的協議是HTTP,數據的載體是XML,而這個應用程序就是由Javascript構成的。
Javascript是一種非常強大的語言,換句術語,是通用語言(general language)。Javascript有很多方便的並且強大的特性,使得我們可以開發功能豐富的產品。不過Javascript是腳本,還是腳本,這是他永遠逃不開的厄運。
腳本有很多的問題,比如本身不夠嚴格,執行緩慢的特點等,這裡只討論一下代碼重用問題。
當應用越來越復雜,代碼越來越多時,代碼重用就會變得很重要。最低級的代碼重用就是源代碼級的代碼重用,靈活,但卻代價很高。比較先進的平台,比如Java和.net都已經提供了更高級的代碼重用,中間代碼級的,甚至目標代碼級的。甚至,在.net平台,按照微軟的偉大設想,不同語言的代碼都可以統一起來,一起運行。可想而知,這會為.net平台帶來多大的戰斗力。不同語言,不同的平台的代碼都可以在這裡施展拳腳。整合是現在的主旋律,.Net有著更美好的未來(按照設想)。
相比之下,作為腳本的Javascript這方面就要差距好多。在我們之前應用程序規模不大時,沒有人會在意。但是,當我們實現大量的AJax應用時,當我們逐漸豐富我們的客戶端時,我們就會發現Javascript的硬傷,也就是腳本的硬傷。當然,我們可以改造Javascript,讓他適應我們的需求,但是那時,你會突然發現,Javascript(如果那個時候還叫這個名字的話)已經不再是腳本了。
換句話說,腳本的特點就是靈活,所以它是用來處理一些靈活,但是開發成本低的情況。而傳統的程序語言比較嚴格,開發成本高,但是他的運行和維護成本會低。
於是,當我們意識到Ajax背後是一種客戶段能力的提高,服務器端相應功能向客戶端轉移之時,我們便不得不重新審視一下Javascript在其中的尴尬位置。Javascript之所以在Ajax應用中如此受寵,便在於它的靈活。靈活的Javascript獲得大眾的喜愛,逐漸成為標准。Ajax采用Javascript才能迅速的得以應用,成為今天的寵兒。反過來說,正式因為Javascript的靈活,決定它注定無法大型化,也就決定了AJax的明天不會樂觀。(如果他還依靠Javascript,還叫AJax,而不是AC(#)ax的話。)
看看AJax背後的競爭者,micromedia的Flash,Java的web start,甚至.Net都有可能成為他的強大敵人。微軟在宣傳它下一代操作系統的時候,著重講到了他的表現層。想象一下,當所有的IE都支持微軟最新的表現層技術時,誰還用Javascript?誰還用AJax?
不過即使Ajax倒下,不過不要緊,它本身就是一個過渡性技術。不過,AJax所要做的,就是給我們洗腦:
AJax告訴我們,重視腳本,因為他們靈活。
AJax告訴我們,重視用戶,因為他們掏錢。
AJax告訴我們,重視交互,因為軟件就是服務。
AJax告訴我們,重視Web,因為方便比什麼都重要。
AJax告訴我們,摘下眼罩,換種方式思考問題吧。當你背過臉無視世界的變化時,是世界拋棄了你,而不是你以為的掩耳盜鈴。