協(xié)同管理
匯高OA辦公系統(tǒng)頁面刷新優(yōu)化AJAX
根據(jù)系統(tǒng)架構(gòu)的設(shè)計原則,應(yīng)盡量減少頁面與數(shù)據(jù)庫的交互以提高性能,其中,AJAX技術(shù)是最為普遍的技術(shù)之一。AJAX技術(shù)的存在,使得用戶不用手動刷新頁面,重新讀取數(shù)據(jù)庫中該頁面所有的數(shù)據(jù)元素,而是由系統(tǒng)自動刷新頁面上的某個元素或某個區(qū)域,只對必須刷新的數(shù)據(jù)進行讀取,從而最大程度的避免數(shù)據(jù)庫壓力。
緩存 Ajax“引擎”。Ajax“引擎”可以運行在客戶機而不是在服務(wù)器上,并且在最初加載頁面時進行下載。這個引擎包含大量應(yīng)用程序邏輯(以 JavaScript 代碼實現(xiàn))。盡管它包含了很多應(yīng)用程序邏輯和表示框架元素,但是如果經(jīng)過恰當(dāng)?shù)脑O(shè)計,它可以不包含任何業(yè)務(wù)數(shù)據(jù)或個性化內(nèi)容。應(yīng)用程序和表示都凍結(jié)在部署時。在典型的Web環(huán)境中,應(yīng)用程序資源可能幾個才會變更一次。
這意味著負(fù)責(zé)隔離應(yīng)用程序資源和數(shù)據(jù)資源的 Ajax 引擎是高度可緩存的。例如Dojo 提供了構(gòu)建工具來創(chuàng)建一個包含所有應(yīng)用程序邏輯、表示和風(fēng)格的壓縮 JavaScript 文件。由于它只是一個文件,因此 Web 瀏覽器可以對其進行緩存,這意味著第二次訪問啟用 Dojo 的 Web 應(yīng)用程序時,很可能就會從瀏覽器緩存中加載 Ajax,而不是從服務(wù)器上加載它。將這種情況與傳統(tǒng)服務(wù)器端 Web 應(yīng)用程序進行一下對比,后者每次請求都會導(dǎo)致大量的服務(wù)器處理,因為瀏覽器和網(wǎng)絡(luò)中介不能對緩存不斷變化的資源。另外,Ajax 應(yīng)用程序引擎只是一個文件,所以它是可以使用代理緩存的。在大型的單位內(nèi)部網(wǎng)中,只要有人曾經(jīng)下載過某個特定版本的應(yīng)用程序的 Ajax 引擎,其他任何人都可以從內(nèi)部網(wǎng)網(wǎng)關(guān)上上獲取一個緩存過的拷貝。因此,對于應(yīng)用程序資源來說,經(jīng)過良好定義的 Ajax 應(yīng)用程序引擎符合 REST 準(zhǔn)則,與服務(wù)器端 Web 應(yīng)用程序相比,它具有顯著的可伸縮性優(yōu)勢。
緩存 Ajax 數(shù)據(jù)。由于應(yīng)用程序邏輯和狀態(tài)都在瀏覽器上駐留并執(zhí)行,因此應(yīng)用程序與服務(wù)器的交互就與傳統(tǒng) Web 應(yīng)用程序的方式有很大的不同。不需要獲取混合的內(nèi)容頁面,只需要獲取業(yè)務(wù)數(shù)據(jù)即可。應(yīng)用程序是動態(tài)且高度個性化的 —— 但是卻不能緩存,也無法伸縮??紤]到這個操作在Ajax 版本的應(yīng)用程序中的情況。對于“最近查看的內(nèi)容” 并不需要進行處理。當(dāng)點擊某個鏈接時,這些在頁面上已經(jīng)存在的信息并不會消失。
Ajax 架構(gòu)風(fēng)格的另外一個優(yōu)點是它可以輕松處理服務(wù)器的故障。傳統(tǒng)有狀態(tài)服務(wù)器端 Web 應(yīng)用程序通常會在服務(wù)器上保存大量的用戶會話狀態(tài)。如果服務(wù)器發(fā)生了故障,會話狀態(tài)就丟失了,那么用戶就會體驗到非常奇怪的瀏覽器行為(自動返回主頁或購物車中的東西消失等)。在采用有狀態(tài)客戶機和無狀態(tài)服務(wù)的 Ajax 應(yīng)用程序中,服務(wù)器崩潰/重新啟動對于用戶來說都是完全透明的,因為服務(wù)器崩潰不會影響會話狀態(tài),這些都保存在用戶的瀏覽器中;無狀態(tài)服務(wù)的行為是冪等的,可以由用戶請求的內(nèi)容來單獨確定。