【正文】
clientside programming is that it allows an expert programmer to develop a new language and add that language to a browser without the permission of the browser manufacturer. Thus, plugins provide a “back door” that allows the creation of new clientside programming languages (although not all languages are implemented as plugins). languages Plugins resulted in an explosion of scripting languages. With a scripting language you embed the source code for your clientside program directly into the HTML page, and the plugin that interprets that language is automatically activated while the HTML page is being displayed. Scripting languages tend to be reasonably easy to understand and, because they are simply text that is part of an HTML page, they load very quickly as part of the single server hit required to procure that page. The tradeoff is that your code is exposed for everyone to see (and steal). Generally, however, you aren’t doing amazingly sophisticated things with scripting languages so this is not too much of a hardship. This points out that the scripting languages used inside Web browsers are really intended to solve specific types of problems, primarily the creation of richer and more interactive graphical user interfaces (GUIs). However, a scripting language might solve 80 percent of the problems encountered in clientside programming. Your problems might very well fit pletely within that 80 percent, and since scripting languages can allow easier and faster development, you should probably consider a scripting language before looking at a more involved solution such as Java or ActiveX programming. The most monly discussed browser scripting languages are JavaScript (which has nothing to do with Java。 Java 除了可解決傳統(tǒng)的程序設(shè)計問題以外,還能解決 World Wide Web(萬維網(wǎng) )上的編程問題。服務(wù)器一般為客戶瀏覽器產(chǎn)生靜態(tài)網(wǎng)頁,由后者簡單地解釋并顯示出來。用戶提交的信息通過所有 Web 服務(wù)器均能支持的 “通用網(wǎng)關(guān)接口 ”( CGI)回傳到服務(wù)器。最常見的行動是運(yùn)行位于服務(wù)器的一個程序。大多數(shù)語言都可用來編制這些程序,但其中最常見的是 Perl。 2. 插件 朝客戶端編程邁進(jìn)的時候,最重要的一個問題就是插件的設(shè)計。這些代碼的作用是告訴瀏覽器 “從現(xiàn)在開始,你可以進(jìn)行這些新活動了 ”(僅需下載這些插入一次)。但插件的編寫并不是一件簡單的任務(wù)。對客戶端程序設(shè)計來說,插件的價值在于它允許專業(yè)程序員設(shè)計出一種新的語言,并將那種語言添加到瀏覽器,同時不必經(jīng)過瀏覽器原創(chuàng)者的許可。 3. 腳本編制語言 插件造成了腳本編制語言的爆炸性增長。腳本語言一般都傾向于盡量簡化,易于理解。缺點(diǎn)是我們的代碼全部暴露在人們面前。 腳本語言真正面向的是特定類型問題的解決,其中主要涉及如何創(chuàng)建更豐富、更具有互動能力的圖形用戶界面( GUI)。你碰到的問題可能完全就在那 80%里面 。 目前討論得最多的腳本編制語言包括 JavaScript(它與 Java 沒有任何關(guān)系;之所以叫那個名字,完全是一種市場策略)、 VBScript(同 Visual Basic 很相似)以及Tcl/Tk(來源于流行的跨平臺 GUI 構(gòu)造語言)。 JavaScript 也許是 日 常用的,它得到的支持也最全面。除此以外,市面上講述 JavaScript 的書籍也要比講述其他語言的書多得多。當(dāng)然,如果你已經(jīng)有 Visual Basic 或者 Tcl/Tk的深厚功底,當(dāng)然用它們要簡單得多,起碼可以避免學(xué)習(xí)新語言的煩惱(解決 Web 方面的問題就已經(jīng)夠讓人頭痛了)。它不僅是一種功能強(qiáng)大、高度安全、可以跨平臺使用以及國際通用的程序設(shè)計語言,也是一種具有旺盛生命力的語言。 Java 通過 “程序片 ”( Applet)巧妙地解決了客戶端編程的問題。作為 Web 頁的一部分,程序片代碼會自動下載回來(這和網(wǎng)頁中的圖片差 不多)。程序片的一個優(yōu)點(diǎn)體現(xiàn)在:通過程序片,一旦用戶需要客 戶軟件,軟件就可從服務(wù)器自動下載回來。由于 Java 的設(shè)計原理,程序員只需要創(chuàng)建程序的一個版本,那個程序能在幾乎所有計算機(jī)以及安裝了 Java 解釋器的瀏覽器中運(yùn)行。例如,再也不必通過因特網(wǎng)傳送一個請求表單,再由服務(wù)器確定其中是否存在一個拼寫或者其他參數(shù)錯誤。這樣一 來,不僅速度和響應(yīng)的靈敏度得到了極大的提高,對網(wǎng)絡(luò)和服務(wù)器造成的負(fù)擔(dān)也可以明顯減輕,這對保障因特網(wǎng)的暢通是至關(guān)重要的。當(dāng)然在另一方面,反編譯 Java 程序片也并不是件難事,而且代碼的隱藏一般并不是個重要的問題。正如本書以前會講到的那樣,編譯好的 Java 程序片可能包含了許多模塊,所以要多次 “命中 ”(訪問)服務(wù)器以便下載(在 Java 中,這個問題得到了有效的改善 ——利用 Java 壓縮檔 ,即 JAR 文件 ——它允許設(shè)計者將所有必要的模塊都封裝到一起,供用戶統(tǒng)一下載)。這種程序一般都非常小,可有效減少對服務(wù)器的點(diǎn)擊數(shù)。不管你平時聽別人怎么說, Java 都不是一種十分容易便可學(xué)會的語言。由于 VBScript可以解決大多數(shù)典型的客戶機(jī)/服務(wù)器問題,所以一旦上手,就很難下定決心再去學(xué)習(xí) Java。 5. ActiveX 在某種程度上, Java 的一個有力競爭對手應(yīng)該是微軟的 ActiveX,盡管它采用的是完全不同的一套實現(xiàn)機(jī)制。經(jīng)過一家獨(dú)立的專業(yè)協(xié)會的努力, ActiveX 現(xiàn)在已具備了跨平臺使用的能力。所以, ActiveX 并沒有限制我們使用一種特定的語言。事實上, ActiveX 是在我們的 Web 頁中使用 “歷史遺留 ”代碼的最佳途徑。對于傳統(tǒng)的客戶機(jī)/服務(wù)器模式,我們面臨的問題是擁有多種不同類型的客戶計算機(jī),而且很難安裝新的客戶軟件。若一個信息網(wǎng)絡(luò)局限于一家特定的公司,那么在將 Web 技術(shù)應(yīng)用于它之后,即可稱其為 “內(nèi)聯(lián)網(wǎng) ”( Intra),以示與國際性的 “因特網(wǎng) ”( Inter)有別。說到培訓(xùn),一般只要人們理解了瀏覽器的常規(guī)概念,就可以非常 輕松地掌握網(wǎng)頁和程序片之間的差異,所以學(xué)習(xí)新型系統(tǒng)的開銷會大幅度減少。若程序是在因特網(wǎng)上運(yùn)行,由于無從知曉它會在什么平臺上運(yùn)行,所以編程時要特別留意,防范可能出現(xiàn)的編程錯誤。 但假如在內(nèi)聯(lián)網(wǎng)中運(yùn)行,面臨的一些制約因素就會發(fā)生變化。在內(nèi)聯(lián)網(wǎng)中,需要對自己代碼的質(zhì)量負(fù)責(zé)。除此以外,可能已 經(jīng)有了一些 “歷史遺留 ”的代碼,并用較傳統(tǒng)的客戶機(jī)/服務(wù)器方式使用那些代碼。浪費(fèi)在升級安裝上的時間是轉(zhuǎn)移到瀏覽器的一項重要原因。如果真的是牽涉到這樣的一個內(nèi)聯(lián)網(wǎng)中,最明智的方法是采用 ActiveX,而非試圖采用一種新的語言來改寫程序代碼。請總結(jié)出問題的全部制約因素,以及什么才是最快的方案。這是準(zhǔn)備面對程序開發(fā)中一些不可避免的問題時,我們可以 做出 的最佳姿態(tài)。如果向服務(wù)器發(fā)出一個請求,會發(fā)生什么事情?大多數(shù)時候的請求都是很簡單的一個 “把這個文件發(fā)給我 ”。向服務(wù)器發(fā)出的較復(fù)雜的請求通常涉及到對一個數(shù)據(jù)庫進(jìn)行操作 (事務(wù)處理 )。另外,有時需要在數(shù)據(jù)庫中注冊自己的名字(比如加入一個組時),或者向服務(wù)器發(fā)出一份訂單,這就涉及到對那個數(shù)據(jù)庫的修改。在傳統(tǒng)意義上,服務(wù)器端編程是用 Perl 和 CGI 腳本進(jìn)行的,但更復(fù)雜的系統(tǒng)已經(jīng)出現(xiàn)。