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