陳小奎,方賢文
(安徽理工大學(xué) 理學(xué)院,安徽 淮南 232001)
Ajax的全稱是Asynchronous JavaScript and XML(異步JavaScript和XML)。它有別于傳統(tǒng)web開發(fā)中采用的同步的方式[1]。Ajax的原理簡(jiǎn)單說(shuō)來(lái)就是通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用javaScript來(lái)操作DOM而更新頁(yè)面數(shù)據(jù),達(dá)到不刷新整個(gè)頁(yè)面而更新了頁(yè)面數(shù)據(jù)的功能[2]。
Ajax的優(yōu)點(diǎn)主要是:
(1)頁(yè)面無(wú)刷新前提下實(shí)現(xiàn)了頁(yè)面內(nèi)與服務(wù)器通信,給用戶體驗(yàn)非常好[3]。
(2)使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力[4]。
(3)可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,減輕服務(wù)器的負(fù)擔(dān)[5]。
Ajax技術(shù)的缺點(diǎn)主要有:
(1)Ajax技術(shù)破壞了瀏覽器的后退機(jī)制[6]。
(2)Ajax技術(shù)建立了一個(gè)對(duì)企業(yè)數(shù)據(jù)的直接通道。暴露比傳統(tǒng)網(wǎng)頁(yè)更多的數(shù)據(jù)和服務(wù)器邏輯[7]。
(3)違背了URL的初衷。一個(gè)采用了Ajax技術(shù)URL地址下看到的內(nèi)容可能是不同的,這和統(tǒng)一資源定位的初衷是相背離的[8]。
當(dāng)使用Ajax技術(shù)來(lái)開發(fā)一個(gè)動(dòng)態(tài)網(wǎng)站系統(tǒng)時(shí),需要考慮Ajax的執(zhí)行效率、可靠性和可維護(hù)性等方面。當(dāng)前國(guó)內(nèi)外對(duì)Ajax技術(shù)的研究主要在討論該技術(shù)的優(yōu)點(diǎn)和定性的分析其性能指標(biāo)[9]。這也造成了Ajax技術(shù)濫用現(xiàn)象,很多開發(fā)人員不考慮實(shí)際需要盲目的將這項(xiàng)技術(shù)強(qiáng)加在網(wǎng)站系統(tǒng)中,加大了系統(tǒng)開發(fā)和維護(hù)的難度,增加了系統(tǒng)運(yùn)行的負(fù)擔(dān)[10]。本文設(shè)計(jì)一個(gè)實(shí)驗(yàn)網(wǎng)站,測(cè)定數(shù)據(jù)庫(kù)服務(wù)耗時(shí)和網(wǎng)絡(luò)響應(yīng)時(shí)間,建立數(shù)學(xué)模型定量的分析Ajax性能,嘗試給出網(wǎng)站開發(fā)各功能模塊中是否使用Ajax技術(shù)的建議,以構(gòu)建一個(gè)更高效系統(tǒng)。
Ajax技術(shù)在Web站點(diǎn)中的最常用的應(yīng)用方面是注冊(cè)賬號(hào)的時(shí)候檢測(cè)用戶名是否重復(fù),郵箱是否重復(fù),多級(jí)下拉菜單的讀取。本文主要針對(duì)檢測(cè)用戶名是否重復(fù)方面設(shè)計(jì)一個(gè)實(shí)驗(yàn)網(wǎng)站,并租用網(wǎng)絡(luò)空間發(fā)布該網(wǎng)站,以測(cè)得第一手?jǐn)?shù)據(jù)。
本文中實(shí)驗(yàn)采用當(dāng)前Web開發(fā)中較常用的JSP技術(shù),實(shí)驗(yàn)服務(wù)器環(huán)境Apache、Tomcat6.0、MySQL5.5數(shù)據(jù)庫(kù),開發(fā)工具采用MyEclipse6.5。并將項(xiàng)目發(fā)布到租用空間,實(shí)驗(yàn)多次用到數(shù)據(jù)庫(kù)操作,將數(shù)據(jù)庫(kù)封裝成DBLink.java類,其部分關(guān)鍵代碼如下:
檢驗(yàn)重復(fù)模塊實(shí)驗(yàn)從程序執(zhí)行時(shí)間設(shè)計(jì),共設(shè)計(jì)了三個(gè)實(shí)驗(yàn)。
實(shí)驗(yàn)一:計(jì)算數(shù)據(jù)庫(kù)添加操作執(zhí)行時(shí)間設(shè)計(jì),設(shè)計(jì)一個(gè)JSP頁(yè)面,在執(zhí)行程序前獲得當(dāng)前時(shí)間,在操作數(shù)據(jù)庫(kù)后測(cè)得結(jié)束時(shí)的當(dāng)前時(shí)間,用結(jié)束時(shí)間減去起始時(shí)間獲得數(shù)據(jù)庫(kù)操作所需時(shí)間,這段時(shí)間包含打開關(guān)閉數(shù)據(jù)庫(kù)時(shí)間和數(shù)據(jù)庫(kù)操作時(shí)間。所以,實(shí)驗(yàn)中設(shè)計(jì)了可以一次添加多條記錄,以總結(jié)出計(jì)算公式,部分關(guān)鍵代碼如下:
執(zhí)行實(shí)驗(yàn)一程序測(cè)得數(shù)據(jù)如表1所示。利用添加記錄數(shù)和平均耗時(shí)構(gòu)造成一系列離散點(diǎn),并擬合成一條直線,如圖1所示。
表1 數(shù)據(jù)庫(kù)更新操作時(shí)間測(cè)定實(shí)驗(yàn)數(shù)據(jù)表
圖1 MySQL數(shù)據(jù)庫(kù)更新操作耗時(shí)統(tǒng)計(jì)圖
由得到的直線方程可以計(jì)算出數(shù)據(jù)庫(kù)更新操作時(shí)打開和關(guān)閉數(shù)據(jù)庫(kù)時(shí)間和數(shù)據(jù)庫(kù)添加一條記錄的時(shí)間。實(shí)驗(yàn)二:測(cè)定查詢數(shù)據(jù)庫(kù)時(shí)間,在執(zhí)行查詢程序前獲得當(dāng)前時(shí)間,在操作數(shù)據(jù)庫(kù)后測(cè)得結(jié)束時(shí)的當(dāng)前時(shí)間,用結(jié)束時(shí)間減去起始時(shí)間獲得數(shù)據(jù)庫(kù)操作所需時(shí)間。部分關(guān)鍵代碼如下:
執(zhí)行實(shí)驗(yàn)二程序測(cè)得數(shù)據(jù)如表2所示。利用添加記錄數(shù)和平均耗時(shí)構(gòu)造成一系列離散點(diǎn),并擬合成一條直線,如圖2所示。
表2 數(shù)據(jù)庫(kù)查詢操作時(shí)間測(cè)定實(shí)驗(yàn)數(shù)據(jù)表
圖2 MySQL數(shù)據(jù)庫(kù)查詢操作耗時(shí)統(tǒng)計(jì)圖
由得到的直線方程可以計(jì)算出查詢操作時(shí)打開和關(guān)閉數(shù)據(jù)庫(kù)時(shí)間和查詢數(shù)據(jù)庫(kù)一條記錄的時(shí)間。
通過(guò)實(shí)驗(yàn)一和實(shí)驗(yàn)二測(cè)算出的數(shù)據(jù)是針對(duì)于特定的Web站點(diǎn)運(yùn)行環(huán)境的,網(wǎng)站開發(fā)人員可以依據(jù)項(xiàng)目實(shí)際運(yùn)行環(huán)境應(yīng)用這兩個(gè)實(shí)驗(yàn)方法測(cè)算出相應(yīng)數(shù)據(jù)。
在通過(guò)實(shí)驗(yàn)獲得了網(wǎng)站執(zhí)行效率的數(shù)據(jù)后,對(duì)傳統(tǒng)網(wǎng)頁(yè)和應(yīng)用了Ajax的網(wǎng)頁(yè)的程序流程進(jìn)行對(duì)比來(lái)建立數(shù)學(xué)模型。傳統(tǒng)網(wǎng)頁(yè)實(shí)現(xiàn)用戶注冊(cè)流程為用戶點(diǎn)擊注冊(cè)后打開數(shù)據(jù)庫(kù)后,遍歷記錄判斷用戶名是否重復(fù),若重復(fù)則提示重復(fù)返回注冊(cè)頁(yè)面重新輸入,不重復(fù)則直接添加用戶,然后關(guān)閉數(shù)據(jù)庫(kù)。流程如圖3所示。
應(yīng)用Ajax技術(shù)的網(wǎng)頁(yè)實(shí)現(xiàn)用戶注冊(cè)流程為用戶輸入用戶名后異步訪問(wèn)檢測(cè)頁(yè)面,打開數(shù)據(jù)庫(kù)后,遍歷記錄判斷用戶名是否重復(fù),重復(fù)則返回提示信息,不重復(fù)則提示用戶名可用信息,關(guān)閉數(shù)據(jù)庫(kù)。點(diǎn)擊添加按鈕確定時(shí)再次打開數(shù)據(jù)庫(kù)添加注冊(cè)信息,然后關(guān)閉數(shù)據(jù)庫(kù),流程如圖4所示。
圖3 傳統(tǒng)網(wǎng)頁(yè)注冊(cè)用戶流程圖
圖4 應(yīng)用Ajax技術(shù)的網(wǎng)頁(yè)注冊(cè)用戶流程圖
設(shè)傳統(tǒng)網(wǎng)頁(yè)服務(wù)器處理注冊(cè)時(shí)數(shù)據(jù)庫(kù)耗時(shí)為Tt,那么用戶名不重復(fù)時(shí)Tt=To+Ts+Ti+Tc;用戶名重復(fù)時(shí)Tt=To+Ts+Tc+Td。其中To為打開數(shù)據(jù)庫(kù)所需要時(shí)間,Ts為遍歷搜索輸入信息是否重復(fù)的時(shí)間,Ti為數(shù)據(jù)庫(kù)添加記錄的時(shí)間,Tc為數(shù)據(jù)庫(kù)關(guān)閉時(shí)間,Td為頁(yè)面重定向時(shí)間,Td可以由實(shí)驗(yàn)三測(cè)算出來(lái)。
實(shí)驗(yàn)三設(shè)計(jì)原理是在當(dāng)前頁(yè)面(current.jsp)中獲取到當(dāng)前時(shí)間,利用seesion對(duì)象將這個(gè)時(shí)間值傳遞到跳轉(zhuǎn)的目標(biāo)頁(yè)面(target.jsp),在跳轉(zhuǎn)的頁(yè)面中計(jì)算時(shí)間差。current.jsp中部分關(guān)鍵的代碼如下:
target.jsp中部分關(guān)鍵的代碼如下:
設(shè)應(yīng)用了Ajax技術(shù)網(wǎng)頁(yè)服務(wù)器處理注冊(cè)時(shí)數(shù)據(jù)庫(kù)耗時(shí)為Ta,那么用戶名不重復(fù)時(shí)Ta=2To+Ts+Ti+2Tc;用戶名重復(fù)時(shí)Ta=To+Ts+Tc。其中To為打開數(shù)據(jù)庫(kù)所需要時(shí)間,Ts為遍歷搜索輸入信息是否重復(fù)的時(shí)間,Ti為數(shù)據(jù)庫(kù)添加記錄的時(shí)間,Tc為數(shù)據(jù)庫(kù)關(guān)閉時(shí)間。
通過(guò)以上分析,在重復(fù)可能性較少時(shí),傳統(tǒng)網(wǎng)頁(yè)的服務(wù)器負(fù)擔(dān)更小,重復(fù)可能性較大時(shí),應(yīng)用Ajax技術(shù)則更有優(yōu)勢(shì)。我們假設(shè)重復(fù)率為h,那么傳統(tǒng)網(wǎng)頁(yè)處理注冊(cè)時(shí)服務(wù)器平均耗時(shí)
應(yīng)用了Ajax技術(shù)網(wǎng)頁(yè)服務(wù)器處理注冊(cè)時(shí)數(shù)據(jù)庫(kù)平均耗時(shí)
本文通過(guò)搭建JSP的實(shí)驗(yàn)平臺(tái)并通過(guò)兩個(gè)實(shí)驗(yàn)測(cè)算出服務(wù)器在處理數(shù)據(jù)庫(kù)添加和查詢時(shí)平均耗時(shí),分析傳統(tǒng)網(wǎng)頁(yè)與應(yīng)用了Ajax技術(shù)的網(wǎng)頁(yè)的程序流程,建立相應(yīng)的數(shù)學(xué)模型,提供了模型中所需要參數(shù)的計(jì)算方法和實(shí)驗(yàn)。本文中不足是注冊(cè)重復(fù)率的估算還不夠精確,應(yīng)用概率論知識(shí)測(cè)算重復(fù)率是我們進(jìn)一步研究的內(nèi)容。
[1]Mesbah A,Bozdag E,van Deursen A.Crawling AJAX by inferring user interface state changes[C]//Web Engineering,2008.ICWE'08.Eighth International Conference on.IEEE,2008:122-134.
[2]Duda C,F(xiàn)rey G,Kossmann D,et al.AJAX crawl:making AJAX applications searchable[C]//Data Engineering,2009.ICDE'09.IEEE 25th International Conference on.IEEE,2009:78-89.
[3]Singh A K.Ajax Asynchronous Database Refresh[J].International Journal of Information,2012,2(8):669-703.
[4]裴生雷.Ajax+JSP開發(fā)模式的研究及應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(1):242-245.
[5]張濤,黃強(qiáng),毛磊雅,等.一個(gè)基于JSON的對(duì)象序列化算法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(15):98-100.
[6]Wusteman J,O'hlceadha P.Using Ajax to Empower Dynamic Searchinb[J].Information Technology and Libraries,2013,25(2):57-64.
[7]Zepeda J S,Chapa S V.From desktop applications towardsajax web applications[C]//Electrical and Electronics Engineering,2007.ICEEE 2007.4th International Conference on.IEEE,2007:193-196.
[8]譚力,楊宗源,謝瑾奎.Ajax技術(shù)的數(shù)據(jù)響應(yīng)優(yōu)化[J].計(jì)算機(jī)工程,2010,36(7):52-54.
[9]Stepien B,Peyton L,Xiong P.Framework testing of web applications using TTCN-3[J].International Journal on Software Tools for Technology Transfer,2008,10(4):371-381.
[10]Roest D,Mesbah A,van Deursen A.Regression testingAjax applications:Coping with dynamism[C]//Software Testing,Verification and Validation(ICST),2010 Third International Conference on.IEEE,2010:127-136.