閔 亮,薛格格,張玉欣,趙 彩
(西安交通大學(xué)城市學(xué)院計(jì)算機(jī)系,陜西西安 710018)
博客是一種由個(gè)人自己進(jìn)行管理、可以不定期更新文章內(nèi)容的網(wǎng)站,借助網(wǎng)絡(luò)為載體,進(jìn)而拉近人與人之間溝通的Internet 交流平臺(tái)[1-2]。一個(gè)典型的博客融合了文本信息、圖像、網(wǎng)站鏈接及其相關(guān)信息,可以讓讀者以互動(dòng)的方式留下意見(jiàn),是許多博客的重要要素。博客已經(jīng)是社交網(wǎng)絡(luò)的一部分,比較著名的有新浪、網(wǎng)易、CSDN 等博客[3-5]。隨著時(shí)代和技術(shù)的發(fā)展,代碼不斷地迭代更新,博客不再局限于特定的語(yǔ)言程序,而是從一開(kāi)始的C/C++到后來(lái)Java一枝獨(dú)秀,再到PHP[6-8]強(qiáng)勢(shì)崛起,再往后PHP 推出了超高性價(jià)比的WordPress、joomla 等。而目前博客所應(yīng)用到的程序按語(yǔ)言分類主要有:ASP、PHP、CGI、JSP、Python 等[9-11]。文中系統(tǒng)基于Node.JS 開(kāi)發(fā)平臺(tái)進(jìn)行博客系統(tǒng)搭建,并通過(guò)MVC 結(jié)構(gòu)管理代碼,從而對(duì)該領(lǐng)域進(jìn)行探索,并對(duì)程序的性能分析進(jìn)行評(píng)價(jià)[12-15]。與其他平臺(tái)相比,Node.JS 可以使瀏覽器端腳本語(yǔ)言JavaScript 通過(guò)Chrome 的V8 引擎在服務(wù)器端完美運(yùn)行,大大降低了開(kāi)發(fā)的成本和時(shí)間。這也是Java、GO、Python 和其他后端語(yǔ)言在解決高并發(fā)性問(wèn)題時(shí)面臨的巨大挑戰(zhàn)?;谶@兩個(gè)優(yōu)良特性,文中選擇Node.JS 來(lái)開(kāi)發(fā)一個(gè)擁有更好性能、更友好的用戶體驗(yàn)的博客系統(tǒng)[16]。
根據(jù)基于Node.JS 的博客系統(tǒng)的輕量化特性要求,該博客系統(tǒng)主要實(shí)現(xiàn)博客內(nèi)容的發(fā)布、刪除以及用戶登錄、注冊(cè)、查看個(gè)人中心等功能。
博客系統(tǒng)的具體功能需求如下:
1)前臺(tái)主要實(shí)現(xiàn)功能
即用戶登錄、注冊(cè);發(fā)表、刪除文章;分類管理;標(biāo)簽管理;友情鏈接等。
2)后臺(tái)主要實(shí)現(xiàn)功能
包括網(wǎng)站基本內(nèi)容管理、管理員修改密碼、輪播圖管理、管理員登錄、友情鏈接管理、圖片上傳功能、添加公告等。
在基于Node.JS 的博客系統(tǒng)中登錄分為兩種,分別是前臺(tái)用戶登錄和后臺(tái)管理員登錄。系統(tǒng)根據(jù)用戶的類型為其提供相應(yīng)的功能,流程如圖1所示。
圖1 用戶登錄流程分析圖
用戶登錄系統(tǒng)時(shí)首先需要判斷所處界面為前臺(tái)還是后臺(tái),即判斷要登錄的用戶為前臺(tái)用戶還是后臺(tái)管理員。
博客系統(tǒng)后臺(tái)管理模塊結(jié)構(gòu)框圖如圖2 所示,其主要采用HTML+CSS 對(duì)模塊頁(yè)面進(jìn)行渲染,采用AJAX 的數(shù)據(jù)傳輸方式,數(shù)據(jù)格式采用json 格式,通過(guò)數(shù)據(jù)庫(kù)MySQL 對(duì)數(shù)據(jù)信息進(jìn)行存儲(chǔ),使用ejs 工具包使HTML 頁(yè)面與Node.JS 交互。
圖2 后臺(tái)管理模塊結(jié)構(gòu)框圖
基本設(shè)置模塊使用MySQL 數(shù)據(jù)庫(kù)對(duì)信息進(jìn)行處理,主要功能包括修改網(wǎng)站基本信息、修改管理員密碼以及添加公告。管理員在登陸后可以直接選擇各個(gè)功能對(duì)頁(yè)面進(jìn)行更改。
1)修改網(wǎng)站信息功能
修改網(wǎng)站信息功能是在MySQL 數(shù)據(jù)庫(kù)中建立infos 數(shù)據(jù)表,用來(lái)存儲(chǔ)網(wǎng)站基本設(shè)置信息。數(shù)據(jù)結(jié)構(gòu)為{id,title,logo,keywords,description,person,tel,address,copyright,email}。
2)修改管理員密碼功能
修改管理員密碼功能是在MySQL 數(shù)據(jù)庫(kù)中建立admin 數(shù)據(jù)表,用來(lái)存儲(chǔ)管理員信息。數(shù)據(jù)結(jié)構(gòu)為{id,username,password,image}。為了確保管理員賬戶的安全性,修改管理員密碼時(shí)將自動(dòng)改為Hmac算法進(jìn)行加密。
3)添加公告功能
添加公告功能是在MySQL 數(shù)據(jù)庫(kù)中建立gods數(shù)據(jù)表,用來(lái)存儲(chǔ)公告信息。數(shù)據(jù)結(jié)構(gòu)為{id,url,image,description,sort,title}。
欄目是系統(tǒng)頻道某一類內(nèi)容的集合體,通過(guò)欄目可以將眾多文章內(nèi)容進(jìn)行分類整合,并且用戶根據(jù)自己查找的所需內(nèi)容,可以直接在不同欄目中進(jìn)行查找。欄目管理模塊使用MySQL 數(shù)據(jù)庫(kù)對(duì)信息進(jìn)行處理,主要功能包括添加欄目、查看欄目、修改或刪除欄目。
1)查看欄目功能
查看欄目功能與添加欄目功能共用MySQL 數(shù)據(jù)庫(kù)中建立的category 數(shù)據(jù)表。主要功能是將添加的欄目在頁(yè)面中顯示出來(lái),便于管理員進(jìn)行觀察,同時(shí)為修改或刪除提供接口。
2)修改或刪除欄目功能
欄目隨著網(wǎng)站的需求會(huì)隨時(shí)做出相應(yīng)的改變,欄目的修改和刪除主要功能是方便管理員隨時(shí)更改欄目信息,所用的數(shù)據(jù)庫(kù)表是category。
輪播管理模塊使用MySQL 數(shù)據(jù)庫(kù)對(duì)信息進(jìn)行處理,主要功能包括添加輪播圖、查看輪播圖、修改或刪除輪播圖。
1)添加輪播圖功能
添加輪播圖功能是在MySQL 數(shù)據(jù)庫(kù)中建立wheel 數(shù)據(jù)表,用來(lái)存儲(chǔ)輪播圖信息。數(shù)據(jù)結(jié)構(gòu)為{id,url,image,description,sort,title}。
2)查看輪播圖功能
查看輪播圖功能與添加功能共用MySQL 數(shù)據(jù)庫(kù)中建立的wheel 數(shù)據(jù)表。主要功能是將添加的輪播圖在頁(yè)面中顯示出來(lái),便于管理員進(jìn)行觀察,同時(shí)為修改或刪除提供接口。
3)修改或刪除輪播圖功能
輪播圖隨著網(wǎng)站的需求會(huì)隨時(shí)做出相應(yīng)的改變,輪播圖的修改和刪除主要功能是方便管理員隨時(shí)更改輪播圖信息,所用的數(shù)據(jù)庫(kù)表是wheel。
鏈接管理模塊使用MySQL 數(shù)據(jù)庫(kù)對(duì)信息進(jìn)行處理,主要功能包括添加鏈接、查看鏈接、修改或刪除鏈接。
1)添加鏈接功能
添加鏈接功能在MySQL 數(shù)據(jù)庫(kù)中建立links 數(shù)據(jù)表用來(lái)存儲(chǔ)鏈接信息。數(shù)據(jù)結(jié)構(gòu)為{id,catename,url,sort}。
2)查看鏈接功能
查看鏈接功能與添加功能共用MySQL 數(shù)據(jù)庫(kù)中建立的links 數(shù)據(jù)表。主要功能是將添加的鏈接在頁(yè)面中顯示出來(lái),便于管理員進(jìn)行觀察,同時(shí)為修改或刪除提供接口。
3)修改或刪除鏈接功能
鏈接隨著網(wǎng)站的需求會(huì)隨時(shí)做出相應(yīng)的改變,鏈接的修改和刪除主要功能是方便管理員隨時(shí)更改鏈接信息,所用的數(shù)據(jù)庫(kù)表是links。
熱門標(biāo)簽管理模塊使用MySQL 數(shù)據(jù)庫(kù)對(duì)信息進(jìn)行處理,主要功能包括添加標(biāo)簽、查看標(biāo)簽、修改或刪除標(biāo)簽。
1)添加標(biāo)簽功能
添加標(biāo)簽功能是在MySQL 數(shù)據(jù)庫(kù)中建立tags 數(shù)據(jù)表,用來(lái)存儲(chǔ)標(biāo)簽信息。數(shù)據(jù)結(jié)構(gòu)為{ id,title,entitle,description,sort}。
2)查看標(biāo)簽功能
查看標(biāo)簽功能與添加功能共用MySQL 數(shù)據(jù)庫(kù)中建立的tags 數(shù)據(jù)表。主要功能是將添加的標(biāo)簽在頁(yè)面中顯示出來(lái),便于管理員進(jìn)行觀察,同時(shí)為修改或刪除提供接口。
3)修改或刪除標(biāo)簽功能
標(biāo)簽隨著網(wǎng)站的需求會(huì)隨時(shí)做出相應(yīng)的改變,標(biāo)簽的修改和刪除主要功能是方便管理員隨時(shí)更改標(biāo)簽信息,所用的數(shù)據(jù)庫(kù)表是tags。
基于Node.JS 的博客系統(tǒng)采用MVC 開(kāi)發(fā)模式,數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層和表現(xiàn)層3 層可以完全分離。頁(yè)面通過(guò)HTTP 請(qǐng)求與后臺(tái)進(jìn)行數(shù)據(jù)的交互,即前臺(tái)頁(yè)面與后臺(tái)頁(yè)面無(wú)論是通過(guò)AJAX 與Node.JS 進(jìn)行異步交互,還是利用GET 表單提交,都要通過(guò)HTTP 請(qǐng)求,因而后臺(tái)只需提供足夠完成任務(wù)的接口,就可以實(shí)現(xiàn)系統(tǒng)功能。后臺(tái)接口設(shè)計(jì)如表1 所示,根據(jù)所設(shè)置的路由進(jìn)行數(shù)據(jù)訪問(wèn)、請(qǐng)求等。
表1 后臺(tái)接口設(shè)計(jì)表
博客系統(tǒng)前臺(tái)界面模塊結(jié)構(gòu)框圖如圖3 所示,實(shí)現(xiàn)了目前的主流功能,在主模塊app.js 中通過(guò)session 進(jìn)行數(shù)據(jù)傳輸。
圖3 前臺(tái)界面模塊結(jié)構(gòu)框圖
1)用戶登錄和注冊(cè)
用戶登錄和注冊(cè)模塊均采用單獨(dú)頁(yè)面,與主頁(yè)進(jìn)行區(qū)分,在數(shù)據(jù)庫(kù)MySQL 中建立數(shù)據(jù)表users 來(lái)存儲(chǔ)用戶信息,數(shù)據(jù)結(jié)構(gòu)為{id,username,password,nickname,avator}。
2)用戶退出登錄
用戶退出登錄模塊主要是通過(guò)銷毀session 來(lái)實(shí)現(xiàn)銷毀用戶信息。
3)用戶查看博客
用戶查看博客模塊首先訪問(wèn)詳情頁(yè)localhost:3000/show.html,并通過(guò)<%=需要展示的內(nèi)容%>對(duì)文章進(jìn)行展示。
4)用戶搜索博客
用戶搜索博客模塊通過(guò)在導(dǎo)航欄采用模糊查詢功能進(jìn)行搜索,在search.html 頁(yè)面展示搜索結(jié)果。
系統(tǒng)基本功能的測(cè)試方法主要采用黑盒測(cè)試和白盒測(cè)試。白盒測(cè)試主要針對(duì)系統(tǒng)的結(jié)構(gòu)和邏輯進(jìn)行測(cè)試,黑盒測(cè)試根據(jù)軟件已有功能,測(cè)試模塊是否正常工作。前臺(tái)功能測(cè)試范圍如表2 所示,后臺(tái)功能測(cè)試范圍如表3 所示。
表2 前臺(tái)功能測(cè)試范圍
表3 后臺(tái)功能測(cè)試范圍
服務(wù)器:阿里云推出的ECS服務(wù)器Windows Server 2008 標(biāo)準(zhǔn)版SP2 32 環(huán)境。
CPU:采用4 核Intel Xeon E5-2682 v4。
內(nèi)存:DDR4 內(nèi)存,內(nèi)存大小為2 GB。
硬盤容量:40 GB。
帶寬:1 M 帶寬,VPC 專有網(wǎng)絡(luò)。
瀏覽器:Chrome(谷歌)瀏覽器,IE9 以上運(yùn)行。
操作系統(tǒng):支持Windows10、Windows7、Windows XP。
系統(tǒng)性能穩(wěn)定、用戶體驗(yàn)優(yōu)劣均取決于后臺(tái)的響應(yīng)時(shí)間,而Node.JS 技術(shù)的最大特點(diǎn)是響應(yīng)時(shí)間快。系統(tǒng)測(cè)試響應(yīng)時(shí)間圖如圖4 所示,可以看出,系統(tǒng)單頁(yè)頁(yè)面的響應(yīng)時(shí)間大約是260 ms,即響應(yīng)時(shí)間是毫秒級(jí)的。
圖4 系統(tǒng)測(cè)試響應(yīng)時(shí)間圖
該系統(tǒng)采用1 M 帶寬的ECS 服務(wù)器,支持1000IP 同時(shí)進(jìn)行訪問(wèn),服務(wù)器響應(yīng)時(shí)間大約為5 s,滿足大部分網(wǎng)站的正常標(biāo)準(zhǔn)。
文中基于Node.JS 的Web 框架Express 開(kāi)發(fā)的中小型博客系統(tǒng),主要實(shí)現(xiàn)了用戶登錄、用戶注冊(cè)、文章發(fā)表、文章刪除、文章修改、查看文章、搜索文章、查看用戶、輪播圖管理、熱門標(biāo)簽管理、分類管理、熱門分布、友情鏈接管理、管理員賬戶登錄、密碼修改、圖片上傳等功能。主要采用黑盒測(cè)試技術(shù)對(duì)博客系統(tǒng)的性能進(jìn)行了測(cè)試,測(cè)試結(jié)果表明,該博客系統(tǒng)可以根據(jù)需求展示相應(yīng)的頁(yè)面,較流暢地執(zhí)行JavaScript 動(dòng)效。該博客系統(tǒng)至少支持500 人同時(shí)在線并發(fā),兼容IE8 及IE8 以上、Chrome 瀏覽器、火狐瀏覽器、360 瀏覽器、QQ 瀏覽器等常用瀏覽器,后臺(tái)功能滿足目前博客基本功能需求。博客系統(tǒng)采用AJAX 進(jìn)行數(shù)據(jù)傳輸,具有較高的用戶信息安全保障,可以自由地更換前臺(tái)需要展示的內(nèi)容。