




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要千禧年后,Twitter開(kāi)始進(jìn)入中國(guó),引發(fā)了一代新流行。緊接著微博就憑借它的立即互動(dòng)特性快速成為新興的大眾信息交流平臺(tái)。隨著微博的熱潮,人們由以前的傳統(tǒng)媒體純獲取信息的身份轉(zhuǎn)換為信息的發(fā)布者和獲取者,在傳統(tǒng)媒體時(shí)期,大多是人民群眾只能是被動(dòng)的獲取信息,可以說(shuō)微博的興起是人民發(fā)聲的一大轉(zhuǎn)折點(diǎn)。微博系統(tǒng)作為新媒體的代表,自然也需要先進(jìn)的解決思路和方案,本文結(jié)合當(dāng)今中小型企業(yè)中廣泛使用的技術(shù)以及實(shí)際應(yīng)用,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于Node.js的微博系統(tǒng)。我的畢業(yè)設(shè)計(jì)主要做到了微博的基礎(chǔ)和特色功能,比如常規(guī)的發(fā)布微博、上傳圖片、回復(fù)微博、關(guān)注感興趣的用戶(hù)、@他人來(lái)提醒別人看微博,等等。在系統(tǒng)的后臺(tái)主要采用了koa2的框架進(jìn)行開(kāi)發(fā),在數(shù)據(jù)庫(kù)上選擇了目前中小型企業(yè)中使用最廣的關(guān)系型數(shù)據(jù)庫(kù)mysql,使用session完成登錄,在前端頁(yè)面上使用EJS后端模板引擎結(jié)合CSS,此外還使用了Redis作為緩存數(shù)據(jù)庫(kù)。基于node.js的微博系統(tǒng)具有輕量型且易部署的特點(diǎn),該系統(tǒng)適合于想要推出自己的微博網(wǎng)站的用戶(hù)進(jìn)行使用。本文的主要工作包括:簡(jiǎn)單的介紹微博的背景和意義以及微博的發(fā)展現(xiàn)狀以及所使用的相關(guān)技術(shù),對(duì)系統(tǒng)進(jìn)行需求分析并根據(jù)架構(gòu)設(shè)計(jì)進(jìn)行基于Node.js的微博系統(tǒng)的編碼實(shí)現(xiàn)和測(cè)試。關(guān)鍵詞:微博系統(tǒng)Node.jskoa2mysqlsessionEJSRedis
AbstractAfterthemillennium,TwitterbegantoenterChina,triggeringanewgenerationofpopularity.Thenweiboquicklybecameanemergingpublicinformationexchangeplatformwithitsimmediateinteractivecharacteristics.Withtheupsurgeofmicro-blog,peoplehavechangedfromthepreviousstatusofpureinformationacquisitionbytraditionalmediatothatofinformationpublisherandacquirer.Intheperiodoftraditionalmedia,mostpeoplecanonlypassivelyobtaininformation.Itcanbesaidthattheriseofmicro-blogisaturningpointforpeopletomaketheirvoicesheard.Asarepresentativeofnewmedia,microblogsystemnaturallyalsoneedsadvancedsolutionsandsolutions.Inthispaper,amicroblogsystembasedonnode.jsisdesignedandimplementedbasedonthetechnologieswidelyusedintoday'ssmallandmedium-sizedenterprisesandpracticalapplications.Mygraduationprojectmainlyaccomplishedthebasicandcharacteristicfunctionsofweibo,suchasregularreleaseofweibo,uploadpictures,replytoweibo,followinterestedusers,@otherstoremindotherstoreadweibo,andsoon.Inthebackgroundofthesystem,koa2frameworkismainlyusedfordevelopment.Inthedatabase,mysql,themostwidelyusedrelationaldatabaseinsmallandmedium-sizedenterprises,isselected.Sessionisusedtocompletelogin.Themicro-blogsystembasedonnode.jsislightweightandeasytodeploy.Thesystemissuitableforuserswhowanttolaunchtheirownmicro-blogwebsite.Themainworkofthispaperincludes:brieflyintroducingthebackgroundandsignificanceofweibo,thedevelopmentstatusofweiboandtherelatedtechnologiesused,analyzingtherequirementsofthesystem,andimplementingandtestingthenode.js-basedweibosystemaccordingtothearchitecturaldesign.Keywords:weibosystemNode.jskoa2mysqlsessionEJSRedis目錄第一章緒論 31.1研究的背景與意義 31.1.1研究的背景 31.1.2研究的意義 31.2研究現(xiàn)狀 4第二章相關(guān)技術(shù)研究 52.1Node.js簡(jiǎn)介 52.2koa2框架 62.3mysql關(guān)系型數(shù)據(jù)庫(kù) 62.4session登錄技術(shù) 72.5EJS后端模板引擎 72.6Redis緩存 7第三章系統(tǒng)需求分析 93.1可行性分析 93.1.1技術(shù)可行性 93.1.2經(jīng)濟(jì)可行性 93.1.2開(kāi)發(fā)可行性 93.2功能需求分析 103.3非功能性需求分析 113.3.1性能需求分析 113.3.2安全性需求分析 123.4業(yè)務(wù)流程分析 12第四章系統(tǒng)設(shè)計(jì) 134.1系統(tǒng)架構(gòu)設(shè)計(jì) 134.2功能結(jié)構(gòu)設(shè)計(jì) 164.3系統(tǒng)詳細(xì)設(shè)計(jì) 164.4功能設(shè)計(jì) 184.5數(shù)據(jù)庫(kù)設(shè)計(jì) 254.5.1數(shù)據(jù)庫(kù)的概念設(shè)計(jì) 254.5.2數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì) 26第五章系統(tǒng)編碼實(shí)現(xiàn) 285.1核心功能模塊的實(shí)現(xiàn) 285.1.1注冊(cè) 285.1.2MD5加密 295.1.3schema格式校驗(yàn) 295.1.4上傳圖片 305.1.5@功能 315.1.6加載更多分頁(yè) 325.1.7預(yù)防XSS攻擊 325.1.8廣場(chǎng)頁(yè)(redis緩存) 335.2系統(tǒng)頁(yè)面展示 33第六章系統(tǒng)測(cè)試 376.1安全測(cè)試 376.2功能測(cè)試 38結(jié)論 39參考文獻(xiàn) 40致謝 41廣東東軟學(xué)院本科畢業(yè)設(shè)計(jì)(論文)第一章緒論本章主要通過(guò)從不同的角度分析微博系統(tǒng)的背景與意義,以及從歷史的不同媒體的演變來(lái)展示研究現(xiàn)狀,從而開(kāi)啟項(xiàng)目的緒論。讓大家能夠更好的了解微博系統(tǒng)的發(fā)展和意義,從而明確本項(xiàng)目的研究意義所在。1.1研究的背景與意義1.1.1研究的背景數(shù)百年前,我們的祖祖輩輩通常忙于生計(jì),并無(wú)多少休閑娛樂(lè)的時(shí)間,他們的快樂(lè)大多來(lái)源于田地或者大自然所給予的點(diǎn)點(diǎn)滴滴。所獲取到的信息也僅僅局限于大小村落。從報(bào)紙到雜志、小說(shuō),又發(fā)展到廣播,在我們的生活中,他們都潛移默化的產(chǎn)生著巨大的影響。它們不僅是人們的娛樂(lè)通道,更是官方的輿論宣傳工具,民國(guó)時(shí)期,各個(gè)黨派、團(tuán)體都盡量創(chuàng)建廣播電臺(tái)以利用其作為自己的宣傳工具。因此廣播事業(yè)在民國(guó)時(shí)期客觀(guān)上具有一定發(fā)展[1]。它的優(yōu)勢(shì)十分明顯,但劣勢(shì)也不容忽略,所有的廣播內(nèi)容隨著聲音消散在空氣之中,遇到不感興趣的內(nèi)容無(wú)法跳過(guò),只能順序收聽(tīng),如果語(yǔ)言不通,那么收聽(tīng)會(huì)變得十分困難。隨著科技的發(fā)展,電視逐漸走入大眾的視野。它憑借著動(dòng)態(tài)的影像和聲音以及豐富而真實(shí)的資料,運(yùn)用手段高超的表現(xiàn)藝術(shù),不僅能夠吸引人的眼球,還能夠激發(fā)人的學(xué)習(xí)情緒[2]。我們?cè)诓恢挥X(jué)中已經(jīng)從聽(tīng)覺(jué)轉(zhuǎn)向了視覺(jué),非常自然的開(kāi)始從屏幕上獲取眾多的信息。但電視上的信息除非重播,否則也是播過(guò)就很難回顧查詢(xún)的。千禧年后,互聯(lián)網(wǎng)技術(shù)蓬勃發(fā)展,日新月異的更新速度把微博客這一即時(shí)信息傳遞的媒體方式推向大眾,曾經(jīng)在報(bào)紙或者雜志上能得到的新聞或者優(yōu)惠信息在微博上一樣能獲取到。而且人們可以通過(guò)進(jìn)入個(gè)人空間瀏覽到往期的信息,發(fā)布在微博上的信息很好的避免了廣播或者電視的時(shí)效性問(wèn)題,極大的方便了人們進(jìn)行信息的回顧與查閱。在傳統(tǒng)媒體時(shí)期,大多數(shù)人民群眾只能是信息的獲取者,而微博的興起使這一現(xiàn)象發(fā)生了歷史性的改變,所有用戶(hù)都可以成為信息的發(fā)布者、傳播者以及獲取者。1.1.2研究的意義作為超新媒體的微博擁有其他傳統(tǒng)的媒體身上沒(méi)有的優(yōu)勢(shì):1.微博散播消息的速度非常迅速。2.內(nèi)容短小精悍,你可以在任何地方任何時(shí)間立刻將心中所想的寫(xiě)發(fā)布在微博上,甚至還可以根據(jù)自己的想法插入圖片或者@自己想提醒的人來(lái)看微博。3.老人小孩上手快,便捷易理解的操作方式。4.可以及時(shí)互動(dòng),有別于其他傳統(tǒng)媒體的無(wú)法互動(dòng),微博可以通過(guò)@迅速通知另一個(gè)用戶(hù)或者回復(fù)對(duì)象,極大的提高了信息傳播的及時(shí)性。5.影響力有時(shí)超乎想象,一條微博,有時(shí)候石沉大海,但只要被大量轉(zhuǎn)發(fā),會(huì)產(chǎn)生超乎想像的影響力,廣泛收到社會(huì)的關(guān)注??梢詭椭行枰娜巳哼M(jìn)行發(fā)聲以解決許多實(shí)際的問(wèn)題,方便了很多求助無(wú)門(mén)的人群。6.交友便利,用戶(hù)可以極為簡(jiǎn)單的建立自己的聽(tīng)眾群,形成自己的愛(ài)好圈子,和同好們一起收獲快樂(lè)。微博系統(tǒng)作為新媒體的代表,自然也需要先進(jìn)的解決思路和方案,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于node.js的微博系統(tǒng),主要實(shí)現(xiàn)發(fā)布微博、發(fā)布圖片、回復(fù)微博、用戶(hù)之間相互關(guān)注、@關(guān)注對(duì)象、主頁(yè)微博內(nèi)容發(fā)布即更新等功能。該系統(tǒng)主要采用了koa2的框架進(jìn)行開(kāi)發(fā),在數(shù)據(jù)庫(kù)上選擇了關(guān)系型數(shù)據(jù)庫(kù)mysql,使用session完成登錄,在前端頁(yè)面上使用ejs后端模板引擎,使用redis作為緩存數(shù)據(jù)庫(kù)。基于node.js的微博系統(tǒng)具有輕量型且易部署的特點(diǎn),適合于想要推出自己的微博網(wǎng)站的用戶(hù)進(jìn)行使用。1.2研究現(xiàn)狀微博作為媒體傳播快速發(fā)展的一個(gè)重要特征,正越來(lái)越受到關(guān)注[3]。微博的興起,改寫(xiě)了傳統(tǒng)媒體對(duì)突發(fā)事件的報(bào)道方式,它既是信息的提供者、事件的圍觀(guān)者,又與突發(fā)事件的發(fā)展過(guò)程緊密相關(guān),成為事態(tài)發(fā)展的影響者、參與者和推動(dòng)者,在突發(fā)事件的報(bào)道和輿論傳播中扮演著十分重要的角色[4]。
第二章相關(guān)技術(shù)研究本章主要介紹了基于node的微博系統(tǒng)所使用的相關(guān)技術(shù),包括系統(tǒng)所用的技術(shù)、框架、數(shù)據(jù)庫(kù)等。2.1Node.js簡(jiǎn)介Nodejs是RyanDahl在2009年開(kāi)發(fā)的基于ChromeV8引擎的JavaScript運(yùn)行環(huán)境[5],而ChromeV8引擎執(zhí)行JavaScript具有異常快的速度以及非常優(yōu)秀的性能。因?yàn)镃hromeV8引擎使用的是非常先進(jìn)的編譯技術(shù),他可以使JavaScript這樣的腳本語(yǔ)言編寫(xiě)的程序與C等高級(jí)語(yǔ)言編寫(xiě)的程序擁有差不多的性能。同時(shí)Nodejs使得JavaScript煥發(fā)新的活力,它可以使JS搖身一變成為服務(wù)端語(yǔ)言。Nodejs的編寫(xiě)可以理解為使用JavaScript語(yǔ)言去利用Nodejs的API庫(kù)進(jìn)行服務(wù)器端開(kāi)發(fā)[6]。與Python等動(dòng)態(tài)語(yǔ)言相比較,JavaScript的性能突出,且它的匿名函數(shù)和閉包都特別適合Nodejs的事件驅(qū)動(dòng)以及異步編程,這也在無(wú)形之中提高了Nodejs的性能[7]。Node的優(yōu)點(diǎn):1.提供包含各類(lèi)實(shí)用函數(shù)的模塊。Node.js使用Module模塊(類(lèi)似C語(yǔ)言的類(lèi)庫(kù))劃分出不同的功能,每個(gè)模塊都提供了相關(guān)功能的各類(lèi)實(shí)用函數(shù)。比如,最常使用的HTTP庫(kù),可以直接調(diào)用它的函數(shù)來(lái)快速創(chuàng)建HTTP服務(wù)器。2.支持高并發(fā)。傳統(tǒng)的Web服務(wù)技術(shù)是每個(gè)請(qǐng)求到來(lái)都創(chuàng)建一個(gè)新的線(xiàn)程,系統(tǒng)為每個(gè)線(xiàn)程分配內(nèi)存,最終會(huì)因?yàn)閮?nèi)存不夠而透支,假設(shè)每創(chuàng)建一個(gè)線(xiàn)程系統(tǒng)為它分配2M內(nèi)存,在一臺(tái)8G內(nèi)存的系統(tǒng)上它的最大并發(fā)數(shù)是4000[8],這是使用傳統(tǒng)Web服務(wù)技術(shù)的場(chǎng)景。但反觀(guān)Node.js,就會(huì)發(fā)現(xiàn)其可擴(kuò)展性遠(yuǎn)遠(yuǎn)超過(guò)傳統(tǒng)認(rèn)知。單線(xiàn)程工作的Node.js使用非阻塞I/O調(diào)用,這就讓他能夠承受上萬(wàn)的并發(fā)連接!3.運(yùn)用事件循環(huán)來(lái)解決大規(guī)模的HTTP請(qǐng)求。Node.js雖然是單線(xiàn)程、單進(jìn)程的,但它采用了事件驅(qū)動(dòng)機(jī)制和異步編程風(fēng)格(提供的API基本都是異步風(fēng)格且基于事件的),使用“事件循環(huán)”的架構(gòu)來(lái)編寫(xiě)出可擴(kuò)展性高的服務(wù)器[9]。當(dāng)出現(xiàn)大規(guī)模HTTP請(qǐng)求時(shí),Node.js會(huì)產(chǎn)生事件循環(huán)隊(duì)列,剔除掉那些多線(xiàn)程資源的占用以及上下文切換,Node.js可以理解為單純的為數(shù)據(jù)庫(kù)和文件等的資源提供了接口,簡(jiǎn)化了對(duì)慢資源的訪(fǎng)問(wèn)。事件循環(huán)和異步提高了Node.js的性能,也降低了開(kāi)發(fā)復(fù)雜度。Node.js從發(fā)布伊始就受到很多前端工程師的熱愛(ài),它是一個(gè)用于開(kāi)發(fā)高性能并發(fā)程序的框架,這些程序不依賴(lài)于主流的多線(xiàn)程方法,而是使用異步I/O和事件驅(qū)動(dòng)的編程模型[10]。作為前端開(kāi)發(fā)者邁入全棧工程師的重要過(guò)程,其應(yīng)用場(chǎng)景十分廣泛,比如:網(wǎng)站的搭建、即時(shí)聊天軟件、前端構(gòu)建工具(比如我們熟知的webpack)、操作系統(tǒng)(NodeOS)、跨平臺(tái)打包工具(比如NW.js)、命令行工具(比如Cordova)、編輯器(VSCode)等。但同時(shí)由于其特殊的機(jī)制,Node.js并不適用于解決大規(guī)模的計(jì)算問(wèn)題(CPU密集型操作)[11]。2.2koa2框架使用過(guò)Express的同學(xué)應(yīng)該對(duì)koa框架有所耳聞,畢竟他們是“一母同生”,可以說(shuō)koa是Express的升級(jí)版,很多語(yǔ)法上有共同之處,學(xué)習(xí)過(guò)Express再去接觸koa將會(huì)發(fā)現(xiàn)極容易上手,非常友好。而koa又有兩個(gè)不同的版本,現(xiàn)在來(lái)看直接上手koa2是最好的,因?yàn)樗腔贓S7規(guī)則誕生的產(chǎn)物,完全支持Promise的async來(lái)進(jìn)行編碼。這無(wú)疑是我們丟掉可怕的回調(diào)函數(shù)的好機(jī)會(huì)!對(duì)比express框架后,最終我決定使用koa2框架。雖然Express的API很簡(jiǎn)單,但是它始終是“過(guò)時(shí)”了,畢竟是基于ES5的產(chǎn)物。想要通過(guò)它實(shí)現(xiàn)異步就只有一條路可走——回調(diào)。而回調(diào)對(duì)于編程來(lái)說(shuō)是十分繁瑣的,特別是對(duì)js的異步編程來(lái)說(shuō),如果異步嵌套層次過(guò)多,那么就會(huì)形成可怕的回調(diào)地獄。所以從js的異步編程的角度來(lái)看,express這個(gè)框架就會(huì)被排除掉。幾年前,express的團(tuán)隊(duì)基于express和他的中間件模型又重新開(kāi)發(fā)出koa2這個(gè)框架。koa2是原生支持asyncawit異步編程的。在目前看來(lái)(或者未來(lái)三五年內(nèi)),它是支持js異步開(kāi)發(fā)最好的方式。2.3mysql關(guān)系型數(shù)據(jù)庫(kù)Mysql應(yīng)該是所有程序員的入門(mén)數(shù)據(jù)庫(kù)了。目前企業(yè)中應(yīng)用最廣泛也是成本最低的關(guān)系型數(shù)據(jù)庫(kù),對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),Mysql提供的功能已經(jīng)綽綽有余,而且由于Mysql是開(kāi)放源碼軟件,因此可以大大降低使用總體擁有成本。雖然mongodb也是常用于和node進(jìn)行搭配的數(shù)據(jù)庫(kù),但mongodb在企業(yè)中(特別是中大型企業(yè)中)的應(yīng)用絕對(duì)沒(méi)有mysql這么廣泛。而在中大型企業(yè)中中,數(shù)據(jù)庫(kù)的部分是有專(zhuān)門(mén)的團(tuán)隊(duì)進(jìn)行運(yùn)維的,他們對(duì)mysql的熟悉程度和數(shù)據(jù)管理都遠(yuǎn)超過(guò)mongodb。因此我最終選擇了Mysql作為幫我存儲(chǔ)數(shù)據(jù)的好幫手。
2.4session登錄技術(shù)說(shuō)到登錄自然會(huì)聯(lián)想到cookie,而cookie的不安全自然讓我聯(lián)想到session。session是目前使用最廣泛的登錄技術(shù),它比較適合用于“頁(yè)面統(tǒng)一,有時(shí)候可能運(yùn)用后端模板引擎”這樣比較集中的websever的項(xiàng)目。而本次開(kāi)發(fā)的微博頁(yè)面就比較統(tǒng)一,所以我們會(huì)在項(xiàng)目的koa2框架中使用session的第三方中間件koa-session來(lái)記錄請(qǐng)求者的身份。koa-session使得我們可以很方便地做驗(yàn)證登錄,它內(nèi)部幫我們做了信息的加密和解密,在瀏覽器中看到的信息是一串類(lèi)似uuid的亂碼,安全性極好。還有一個(gè)比較流行的登錄技術(shù)——jwt,jwt雖然也是我們?nèi)粘?huì)使用的登錄技術(shù),但論廣泛程度還是不如session,特別是在websever系統(tǒng)中。2.5EJS后端模板引擎我剛開(kāi)始學(xué)習(xí)后端的時(shí)候就聽(tīng)過(guò)一句話(huà)——“學(xué)習(xí)后端一定要掌握EJS模板。”使用下來(lái)確實(shí)發(fā)現(xiàn)了他的美妙之處。“E”代表“可嵌入(Embedded)”,也可以是“高效(Effective)”、“優(yōu)雅(Elegant)”或者是“簡(jiǎn)單(Easy)”。EJS沒(méi)有如何組織內(nèi)容的教條,也沒(méi)有再造一套迭代和控制流語(yǔ)法,可以理解為它只是我們熟知的JavaScript代碼而已。相比于vue或者react等前端框架來(lái)說(shuō),后端模板引擎更加方便快捷。分工合作時(shí),我喜歡前后端分離。但倘若是個(gè)人開(kāi)發(fā),那么在后端開(kāi)發(fā)時(shí)我更傾向一個(gè)簡(jiǎn)單的服務(wù)端渲染技術(shù),很顯然,ejs就是本次系統(tǒng)設(shè)計(jì)中我所需要的。2.6Redis緩存用到mysql不禁聯(lián)想到另一個(gè)數(shù)據(jù)存儲(chǔ)的絕佳選手,她很好的彌補(bǔ)了mysql所做不到的事情,那就是Redis。Redis可以對(duì)關(guān)系型數(shù)據(jù)庫(kù)起到很不錯(cuò)的補(bǔ)充作用,且Java、C、C++、Python等很多語(yǔ)言都支持Redis[12]。不能說(shuō)Redis是一個(gè)純粹的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),他其實(shí)是一個(gè)數(shù)據(jù)結(jié)構(gòu)類(lèi)型的數(shù)據(jù)庫(kù),通過(guò)Redis存儲(chǔ)你內(nèi)容是二進(jìn)制安全的,也就是說(shuō)數(shù)據(jù)是使用二進(jìn)制形式進(jìn)行傳輸?shù)模@保證了數(shù)據(jù)的安全性(比如加密)[13]。Redis支持存儲(chǔ)的類(lèi)型十分多,我們常見(jiàn)的字符串(string)、鏈表(list)、集合(set)、有序集合(sortedset)和哈希表(hash)都是支持的[14]。什么都接納的Redis加上他的特性,就特別適合作為系統(tǒng)公共信息的存儲(chǔ)處。并且在實(shí)際的情況下,往往我們無(wú)法使用單臺(tái)極其來(lái)保證系統(tǒng)一直安全的運(yùn)行,因?yàn)橛布系墓收虾蛙浖系膯?wèn)題都有可能使系統(tǒng)無(wú)法使用。因此Redis的另一個(gè)優(yōu)勢(shì)就顯示出來(lái)了,它能夠很好的支持?jǐn)?shù)據(jù)庫(kù)的集群搭建,而一個(gè)高性能、高可用的內(nèi)存數(shù)據(jù)庫(kù)集群正是生產(chǎn)中所必需要有的。正是如此,目前考慮到緩存數(shù)據(jù)庫(kù)我們可以毫無(wú)疑問(wèn)選擇Redis,他并沒(méi)什么比較強(qiáng)的競(jìng)爭(zhēng)對(duì)手。
第三章系統(tǒng)需求分析本章將對(duì)基于node的微博系統(tǒng)進(jìn)行詳細(xì)的分析,包括可行性分析、功能需求分析、非功能性需求分析、數(shù)據(jù)庫(kù)需求分析四個(gè)部分。3.1可行性分析可行性分析在項(xiàng)目中是非常必要的,如果不經(jīng)過(guò)可行性分析,就有可能導(dǎo)致軟件在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)某些方面不可行而失敗。所以我將在本節(jié)中通過(guò)技術(shù)、經(jīng)濟(jì)已經(jīng)開(kāi)發(fā)可行性三個(gè)角度來(lái)剖析改項(xiàng)目的可行性。3.1.1技術(shù)可行性Node.js是在2009年就已經(jīng)完成的,多年以來(lái)都是Github上最受歡迎的語(yǔ)言,貢獻(xiàn)度也占據(jù)著第一的位置。同時(shí)Node.js的技術(shù)棧一直在急速發(fā)展之中,我能接觸到的相關(guān)項(xiàng)目十分豐富,所以技術(shù)上肯定沒(méi)問(wèn)題。Mysql和Redis都已經(jīng)是相當(dāng)成熟的數(shù)據(jù)庫(kù),從書(shū)本到實(shí)戰(zhàn)都有豐富的參考資料。并且他們可以互為補(bǔ)充,所以使用Mysql和Redis來(lái)提供數(shù)據(jù)層面的保障是可行的。Koa2框架是幾年前由express的團(tuán)隊(duì)基于express和他的中間件模型又重新開(kāi)發(fā)的,它原生支持asyncawit異步編程的,在目前看來(lái)(或者未來(lái)三五年內(nèi)),它是支持js異步開(kāi)發(fā)最好的方式。而且?guī)啄晗聛?lái)她已經(jīng)發(fā)展的相對(duì)完備,具有不少參考資料,所以使用Koa2進(jìn)行開(kāi)發(fā)是完全可行的。session是目前使用最廣泛的登錄技術(shù),它比較適合用于“頁(yè)面統(tǒng)一,有時(shí)候可能運(yùn)用后端模板引擎”這樣比較集中的websever的項(xiàng)目。而本次開(kāi)發(fā)的微博頁(yè)面就比較統(tǒng)一,所以我們?cè)陧?xiàng)目中使用session的第三方中間件koa-session來(lái)記錄請(qǐng)求者的身份是完全可行的。3.1.2經(jīng)濟(jì)可行性本人在開(kāi)發(fā)該項(xiàng)目時(shí)使用的是普通的筆記本電腦,可以滿(mǎn)足一般的要求。單純用作學(xué)習(xí)和研究來(lái)說(shuō),一個(gè)普通的筆記本電腦就可以了。所以經(jīng)濟(jì)上是完全可行的。3.1.2開(kāi)發(fā)可行性Node.js是基于JavaScript語(yǔ)言的,Redis和Mysql操作都不難,所以綜合來(lái)說(shuō)只需要學(xué)習(xí)koa2框架的使用并且精通JavaScript即可,這些都是單人就可以完成的操作。由于本人在往期實(shí)際項(xiàng)目開(kāi)發(fā)中對(duì)JavaScript的研究最為深入,所以開(kāi)發(fā)基于node的微博系統(tǒng)是完全沒(méi)有問(wèn)題的。綜上所述,開(kāi)發(fā)完全可行。3.2功能需求分析本人在進(jìn)行了大量國(guó)內(nèi)外文檔的閱讀和實(shí)際的使用后,將功能需求進(jìn)行分析,主要是發(fā)布微博、回復(fù)微博、刪除微博、@好友、發(fā)布圖片、關(guān)注與粉絲等。由于基于node的微博系統(tǒng)的輕量化特性要求,本項(xiàng)目主要實(shí)現(xiàn)注冊(cè)、登錄、個(gè)人信息修改、微博的發(fā)布、刪除、評(píng)論等功能,支持用戶(hù)@好友進(jìn)行微博的發(fā)布以及回復(fù),支持關(guān)注別的用戶(hù),支持發(fā)布圖片。注冊(cè)眾所周知,一個(gè)系統(tǒng)逃不開(kāi)的就是注冊(cè)。本項(xiàng)目采用的是用戶(hù)名和密碼的方式進(jìn)行注冊(cè),不允許相同用戶(hù)名重復(fù)注冊(cè),對(duì)已注冊(cè)的用戶(hù)名會(huì)進(jìn)行檢測(cè)后給出相關(guān)提示。登錄用戶(hù)可以拿用戶(hù)名和密碼登錄本系統(tǒng),系統(tǒng)對(duì)輸入的用戶(hù)名和密碼進(jìn)行校驗(yàn)后判斷成功與否。登錄后方可進(jìn)行微博的發(fā)布、轉(zhuǎn)發(fā)等操作。微博列表用戶(hù)發(fā)出的微博需要立即顯示在列表中,而這個(gè)列表會(huì)根據(jù)不同的需求展示在首頁(yè)、廣場(chǎng)頁(yè)、個(gè)人主頁(yè)等不同頁(yè)面上。發(fā)布微博作為微博系統(tǒng)最重要的功能之一,發(fā)布微博內(nèi)容至關(guān)重要,因?yàn)楸仨毾扔杏脩?hù)發(fā)布了微博,才會(huì)產(chǎn)生數(shù)量龐大的微博列表以供瀏覽。微博被發(fā)布之后會(huì)立即顯示在微博列表頂端。本系統(tǒng)不允許游客進(jìn)行微博發(fā)布,游客必須通過(guò)注冊(cè)登錄后才能進(jìn)行微博發(fā)布。如果游客并未登錄,系統(tǒng)會(huì)提示先登錄后再進(jìn)行微博發(fā)布。微博的發(fā)布有單帖字?jǐn)?shù)限制。刪除微博對(duì)于不想要的微博,用戶(hù)可以進(jìn)行刪除處理。插入圖片不同于傳統(tǒng)的文字描述,用戶(hù)可上傳自己喜歡的圖片來(lái)搭配展示自己的微博。關(guān)注關(guān)注其他用戶(hù)是微博系統(tǒng)的特點(diǎn)之一。也就是說(shuō),用戶(hù)可以通過(guò)關(guān)注和自己有共同愛(ài)好的用戶(hù)群來(lái)最快的獲取最大程度上的信息與快樂(lè)。當(dāng)然,也有“取消關(guān)注”的功能,用戶(hù)可以隨時(shí)隨地的選擇自己是否要繼續(xù)關(guān)注另一個(gè)用戶(hù)。關(guān)注其他用戶(hù)的前提條件是必須先進(jìn)行登錄,游客狀態(tài)下是無(wú)法進(jìn)行關(guān)注的。@其他用戶(hù)在發(fā)布或者轉(zhuǎn)發(fā)微博時(shí)可以使用@其他用戶(hù)的用戶(hù)名,這樣其他用戶(hù)就會(huì)即時(shí)收到提醒,以便及時(shí)準(zhǔn)確的查看。當(dāng)然,用戶(hù)只能@她所關(guān)注的用戶(hù),這樣一來(lái)可以防止@錯(cuò)人,二來(lái)也可以減少惡意騷擾的可能性。轉(zhuǎn)發(fā)微博除了發(fā)布自己的微博,用戶(hù)還可對(duì)別人的微博進(jìn)行轉(zhuǎn)發(fā),達(dá)到快速傳播的效果。回復(fù)如果只能發(fā)布微博就顯得過(guò)于自?shī)首詷?lè)了,長(zhǎng)期以往肯定會(huì)打消用戶(hù)的積極性,此時(shí)回復(fù)功能就顯得至關(guān)重要了。用戶(hù)可以對(duì)微博的原始發(fā)布者進(jìn)行回復(fù),也可以對(duì)其他評(píng)論者進(jìn)行回復(fù),但本系統(tǒng)不允許游客進(jìn)行微博回復(fù),用戶(hù)需要登錄才能進(jìn)行回復(fù)。如用戶(hù)在游客狀態(tài)下就去點(diǎn)擊回復(fù)按鈕,那么系統(tǒng)將自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面。用戶(hù)登錄后會(huì)自動(dòng)跳回剛剛訪(fǎng)問(wèn)的頁(yè)面。單次回復(fù)有字?jǐn)?shù)限制。設(shè)置導(dǎo)航欄中的“設(shè)置”可以進(jìn)行用戶(hù)個(gè)人信息的修改,包括昵稱(chēng)、城市以及頭像,還可以修改密碼。為提高用戶(hù)使用感受,本系統(tǒng)支持通過(guò)點(diǎn)擊用戶(hù)頭像來(lái)訪(fǎng)問(wèn)“設(shè)置”來(lái)進(jìn)行個(gè)人信息的查看與修改。敏感詞處理用戶(hù)在發(fā)布微博和回復(fù)微博之前,系統(tǒng)會(huì)進(jìn)行敏感詞處理,如果包含敏感詞就會(huì)給出提示,不允許繼續(xù)發(fā)布或者回復(fù)。3.3非功能性需求分析雖然非功能性需求并不會(huì)影響系統(tǒng)的邏輯,但在一定情況下會(huì)影響系統(tǒng)的功能需求,所以本人將所有和業(yè)務(wù)功能無(wú)關(guān)的需求分為兩個(gè)部分進(jìn)行分析——性能需求和安全性需求。3.3.1性能需求分析隨著科技極速發(fā)展,各種技術(shù)也在不斷的更新?lián)Q代,所以我們必須考慮使得整個(gè)系統(tǒng)的復(fù)用性能,要求在設(shè)計(jì)系統(tǒng)時(shí)多使用能跟得上技術(shù)發(fā)展的工具或者框架。比如本次系統(tǒng)設(shè)計(jì)中我所使用的koa2框架,他是基于ES7開(kāi)發(fā)的,良好的支持了Promise+async來(lái)實(shí)現(xiàn)異步。而ES7必定是未來(lái)的趨勢(shì),所以早一步下手一定有利于提高系統(tǒng)的可復(fù)用性。另外還要考慮到多用戶(hù)并發(fā),微博系統(tǒng)的特性導(dǎo)致了在某些時(shí)間段可能會(huì)產(chǎn)生大量用戶(hù)一起登錄的情況,那么系統(tǒng)就必須保證維持穩(wěn)定且不會(huì)過(guò)于卡頓的訪(fǎng)問(wèn)。本人在該項(xiàng)目中使用的Node.js就是支持高并發(fā)的,他的工作是單線(xiàn)程的,又使用的是非阻塞I/O調(diào)用,所以能夠承受上萬(wàn)的并發(fā)連接。綜上所訴,本人通過(guò)各種途徑很好的保證了性能上的需求。安全性需求分析作為web程序,系統(tǒng)一定會(huì)和另一端的服務(wù)器進(jìn)行持續(xù)的信息交流,所以必須保證系統(tǒng)不受外部攻擊,也就是說(shuō)系統(tǒng)的安全性不可避免的成為重中之重。在本系統(tǒng)中采用了koa-session來(lái)做驗(yàn)證登錄,它內(nèi)部幫我們做了信息的加密和解密,以二進(jìn)制形式傳遞,在瀏覽器中看到的信息是一串類(lèi)似uuid的亂碼,保證了安全性。3.4業(yè)務(wù)流程分析在充分結(jié)合系統(tǒng)的各個(gè)功能需求后,本人將普通用戶(hù)的業(yè)務(wù)總流程圖繪制如下圖3-1所示,此圖中涵蓋了本系統(tǒng)普通用戶(hù)的所有核心功能。圖3-1業(yè)務(wù)流程分析圖
第四章系統(tǒng)設(shè)計(jì)4.1系統(tǒng)架構(gòu)設(shè)計(jì)我將微博系統(tǒng)分為了三個(gè)不同的層次——用戶(hù)界面層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪(fǎng)問(wèn)層。架構(gòu)設(shè)計(jì)模型如下圖4-1所示。圖4-1系統(tǒng)架構(gòu)設(shè)計(jì)圖(1)用戶(hù)界面層用戶(hù)界面層也就是系統(tǒng)用戶(hù)所能看到的界面,本系統(tǒng)中采用EJS模板來(lái)使得普通的JavaScript代碼生成最終的HTML頁(yè)面展示給用戶(hù)。(2)業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層只搭理路由相關(guān)的數(shù)據(jù)處理,對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)操作是一概不管。處理好的數(shù)據(jù)被傳入該層后會(huì)統(tǒng)一為一種格式。往細(xì)了說(shuō),路由其實(shí)也不能分到業(yè)務(wù)邏輯層中,但我考慮到他是溝通用戶(hù)界面層和業(yè)務(wù)邏輯層的橋梁,故我也將其放在此層中。(3)數(shù)據(jù)訪(fǎng)問(wèn)層數(shù)據(jù)訪(fǎng)問(wèn)層處于系統(tǒng)底部,它與數(shù)據(jù)庫(kù)直接相鄰,通過(guò)該層可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪查改并將數(shù)據(jù)通過(guò)接口提供給業(yè)務(wù)邏輯層。我主要用redis+mysql來(lái)支持?jǐn)?shù)據(jù)訪(fǎng)問(wèn)層。除設(shè)計(jì)模型外還從網(wǎng)絡(luò)的角度出發(fā)繪制了網(wǎng)絡(luò)架構(gòu)圖來(lái)闡述本系統(tǒng)的架構(gòu)設(shè)計(jì),如下圖4-2所示。圖4-2網(wǎng)絡(luò)架構(gòu)圖我希望通過(guò)系統(tǒng)模塊包圖更加清晰的展示各個(gè)包之間的關(guān)系,故通過(guò)該系統(tǒng)的架構(gòu)設(shè)計(jì)做出了系統(tǒng)模塊包圖,如下圖4-3所示。圖4-3系統(tǒng)模塊包圖
由包圖擴(kuò)展出的系統(tǒng)架構(gòu)類(lèi)圖,如下圖4-4所示,可以通過(guò)該圖觀(guān)察到系統(tǒng)架構(gòu)中的靜態(tài)結(jié)構(gòu)圖,它體現(xiàn)了每個(gè)類(lèi)相互的靜態(tài)聯(lián)系。大致表現(xiàn)出了每一個(gè)類(lèi)所包含的功能要點(diǎn)。圖4-4系統(tǒng)架構(gòu)類(lèi)圖歸納了系統(tǒng)架構(gòu)類(lèi)之后,本人將通過(guò)系統(tǒng)架構(gòu)類(lèi)的交互圖來(lái)闡述系統(tǒng)的工作流程,系統(tǒng)架構(gòu)類(lèi)的交互圖如圖4-5所示。圖4-5系統(tǒng)架構(gòu)類(lèi)的交互圖在此基礎(chǔ)上進(jìn)一步細(xì)化得出系統(tǒng)邊界圖如下圖4-6所示,通過(guò)系統(tǒng)邊界圖可以幫我們進(jìn)一步明確整個(gè)微博系統(tǒng)中對(duì)象與用例之間的關(guān)系。圖4-6系統(tǒng)邊界圖4.2功能結(jié)構(gòu)設(shè)計(jì)本微博系統(tǒng)所實(shí)現(xiàn)的眾多功能基本都通過(guò)功能結(jié)構(gòu)圖展示出來(lái)了,如下圖4-7所示。圖4-7系統(tǒng)的功能結(jié)構(gòu)圖4.3系統(tǒng)詳細(xì)設(shè)計(jì)微博系統(tǒng)的用戶(hù)可以進(jìn)行注冊(cè)、登錄、個(gè)人信息的修改、微博的發(fā)布、轉(zhuǎn)發(fā)、刪除、回復(fù)。也支持在發(fā)布或者回復(fù)又或者轉(zhuǎn)發(fā)時(shí)可以@其他用戶(hù)。同時(shí)可以對(duì)自己感興趣的用戶(hù)可以進(jìn)行關(guān)注,能看到關(guān)注自己的粉絲用戶(hù)。用戶(hù)的用例如圖4-8所示。圖4-8普通用戶(hù)的用例圖
4.4功能設(shè)計(jì)注冊(cè)本系統(tǒng)采用的是用戶(hù)名和密碼的方式進(jìn)行注冊(cè),不允許同一用戶(hù)名進(jìn)行重復(fù)注冊(cè)。用戶(hù)信息使用mysql+redis中session來(lái)進(jìn)行存儲(chǔ),mysql中的users表用于存儲(chǔ)用戶(hù)的相關(guān)信息。具體的注冊(cè)流程如下圖4-10所示。圖4-10注冊(cè)流程圖
登錄用戶(hù)可使用自己的用戶(hù)名和密碼登錄本系統(tǒng),系統(tǒng)會(huì)對(duì)輸入的用戶(hù)名和密碼進(jìn)行校驗(yàn)來(lái)判斷是否登錄成功。如果redis中的session并未過(guò)期,可以從中獲取相關(guān)信息,則可直接判斷為已登錄。如過(guò)redis中拿不到相關(guān)數(shù)據(jù),則到mysql中查詢(xún)?cè)撚脩?hù)是否存在,存在則加入到redis中并設(shè)置一個(gè)過(guò)期時(shí)間。具體流程如下圖4-11所示。圖4-11登錄流程圖
微博列表我將微博列表通過(guò)mysql的“blogs”表進(jìn)行保存。當(dāng)用戶(hù)未登錄時(shí)顯示的是廣場(chǎng)頁(yè)所有人最新的微博組成的列表,用戶(hù)登錄后則顯示用戶(hù)自己的微博和他所關(guān)注的用戶(hù)的微博組成的列表。用戶(hù)下滑到一定位置時(shí),如果后面還有數(shù)據(jù),則顯示“查看更多”按鈕,點(diǎn)擊可繼續(xù)查看下一頁(yè)微博列表。具體流程如下圖4-12所示。圖4-12微博列表流程圖
發(fā)布微博發(fā)布的微博信息也存儲(chǔ)在mysql的“blogs”表中。操作之前需要先檢測(cè)用戶(hù)是否登錄,未登錄的提示并跳轉(zhuǎn)登錄頁(yè)面,登錄則允許輸入微博內(nèi)容,發(fā)布前檢查是否合法(140字以?xún)?nèi)并不含關(guān)鍵字/敏感詞)。具體流程如下圖4-13所示。圖4-13發(fā)布微博流程圖
關(guān)注、取消關(guān)注關(guān)注和取消關(guān)注的按鈕只在他人用戶(hù)界面顯示,默認(rèn)顯示關(guān)注按鈕,如果是已關(guān)注的用戶(hù)則出現(xiàn)“取消關(guān)注”按鈕。點(diǎn)擊按鈕后我會(huì)先檢測(cè)用戶(hù)是否已登錄,游客狀態(tài)下是無(wú)法進(jìn)行這兩個(gè)行為的。具體流程如下圖4-14所示。圖4-14關(guān)注/取消關(guān)注流程圖
轉(zhuǎn)發(fā)微博轉(zhuǎn)發(fā)的微博存儲(chǔ)在mysql的“blogs”表中,只是“isShared”字段做出修改,并提示分析成功,一樣只有登錄用戶(hù)才可進(jìn)行相關(guān)操作。具體流程如下圖4-15所示。圖4-15轉(zhuǎn)發(fā)微博流程圖
回復(fù)微博回復(fù)前需檢測(cè)用戶(hù)是否登錄,未登錄的提示并跳轉(zhuǎn)登錄頁(yè)面,登錄則允許輸入回復(fù)內(nèi)容,回復(fù)前檢查是否合法(140字以?xún)?nèi)并不含關(guān)鍵字/敏感詞),如合法則提示發(fā)布成功。具體流程如下圖4-16所示。圖4-16回復(fù)微博流程圖
4.5數(shù)據(jù)庫(kù)設(shè)計(jì)4.5.1數(shù)據(jù)庫(kù)的概念設(shè)計(jì)在本系統(tǒng)中,我選擇了mysql來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)。根據(jù)系統(tǒng)的設(shè)計(jì)所繪制出的E-R模型圖如下圖4-17所示:圖4-17數(shù)據(jù)庫(kù)E-R圖根據(jù)系統(tǒng)的功能需求,將數(shù)據(jù)庫(kù)的E-R圖進(jìn)行細(xì)化后得到各個(gè)對(duì)象的實(shí)體屬性圖。用戶(hù)實(shí)體屬性如下圖4-18所示。圖4-18普通用戶(hù)的實(shí)體屬性圖微博的實(shí)體屬性如下圖4-20所示。圖4-19微博的實(shí)體屬性圖4.5.2數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)本系統(tǒng)使用mysql數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)管理,使用到的主要數(shù)據(jù)表有users表、blogs表、atRelations表、userRelations表、comments表。(1)users表主要用于存儲(chǔ)和用戶(hù)相關(guān)的一些數(shù)據(jù),比如昵稱(chēng)、用戶(hù)名、密碼、頭像、城市,并設(shè)置id為主鍵。如下表4-1所示。表4-1users表字段名稱(chēng)字段類(lèi)型大小允許為空備注idINT11否主鍵userNameVARCHAR255否passwordVARCHAR255否nickNameVARCHAR255是pictureVARCHAR255是cityVARCHAR255是(2)blogs表主要用于存儲(chǔ)和微博相關(guān)的數(shù)據(jù),比如微博id、作者id、微博內(nèi)容、附加圖片、發(fā)布時(shí)間、是否刪除。如下表4-2所示。表4-2blogs表字段名稱(chēng)字段類(lèi)型大小允許為空備注idINT11否主鍵userIdINT11否外鍵,對(duì)應(yīng)users表的idcontentTEXT280否單帖最多140個(gè)漢字imageVARCHAR255是圖片地址createAtDATETIME255否isDelTINYINT1否(3)atRelations表主要用于存儲(chǔ)微博@用戶(hù)的關(guān)系的相關(guān)數(shù)據(jù),包括是否已讀等。如下表4-3所示。表4-3atRelations表字段名稱(chēng)字段類(lèi)型大小允許為空備注idINT11否主鍵userIdINT11否外鍵,對(duì)應(yīng)users表的idblogIdINT11否外鍵,對(duì)應(yīng)blogs表的idisReadTINYINT1否是否已讀(4)userRelations表主要用于存儲(chǔ)用戶(hù)之間的關(guān)注關(guān)系,如下表4-4所示。表4-4userRelations表字段名稱(chēng)字段類(lèi)型大小允許為空備注idINT11否主鍵userIdINT11否外鍵,對(duì)應(yīng)users表的id,用戶(hù)idfollowerIdINT11否外鍵,對(duì)應(yīng)users表的id,被關(guān)注用戶(hù)的id(5)comments表主要用于存儲(chǔ)和評(píng)論相關(guān)的數(shù)據(jù),比如微博id、作者id、微博內(nèi)容、附加圖片、發(fā)布時(shí)間、是否刪除。如下表4-5所示。表4-5comments表字段名稱(chēng)字段類(lèi)型大小允許為空備注idINT11否主鍵userIdINT11否外鍵,對(duì)應(yīng)users表的idblogIdINT11否外鍵,對(duì)應(yīng)blogs表的idcontentTEXT280否單帖最多140個(gè)漢字imageVARCHAR255是圖片地址createAtDATETIME255否isDelTINYINT1否
第五章系統(tǒng)編碼實(shí)現(xiàn)5.1核心功能模塊的實(shí)現(xiàn)5.1.1注冊(cè)注冊(cè)時(shí)3次判斷用戶(hù)名是否已存在。第一次在前端:后端提供isExist方法給前端,前端通過(guò)ajax請(qǐng)求到/api/user/isExist去判斷用戶(hù)是否存在來(lái)給出提示,如下圖5-1所示:圖5-1前端代碼第二次在后端:注冊(cè)的業(yè)務(wù)邏輯中,注冊(cè)到數(shù)據(jù)庫(kù)之前先通過(guò)service層的getUserInfo方法來(lái)判斷用戶(hù)名是否已存在,如果存在就不允許進(jìn)行注冊(cè),如下圖5-2所示:圖5-2后端代碼第三次在數(shù)據(jù)庫(kù):在db-model-User.js中,設(shè)計(jì)數(shù)據(jù)模型時(shí)就規(guī)定了userName的唯一性,如果不唯一數(shù)據(jù)庫(kù)就會(huì)直接拋出錯(cuò)誤,如下圖5-3所示:圖5-3數(shù)據(jù)庫(kù)代碼5.1.2MD5加密在增加數(shù)據(jù)庫(kù)信息之前,即注冊(cè)的業(yè)務(wù)邏輯中(controller-user.js),先使用md5進(jìn)行密碼加密,如下圖5-4所示:圖5-4md5加密方法5.1.3schema格式校驗(yàn)除了前端做出一些格式提示和限制,當(dāng)數(shù)據(jù)從頁(yè)面?zhèn)鞯絩outes層時(shí),我們還會(huì)進(jìn)行數(shù)據(jù)的格式校驗(yàn),不符合規(guī)則的數(shù)據(jù)直接不往后傳遞,不再等到數(shù)據(jù)庫(kù)才判斷格式是否符合要求,提高用戶(hù)體驗(yàn)。在這我們使用ajv庫(kù)和jsonschema進(jìn)行格式校驗(yàn),執(zhí)行jsonschema校驗(yàn)的通用函數(shù)如下圖5-5所示:圖5-5格式校驗(yàn)5.1.4上傳圖片(1)限定大小在路由層使用formidable-upload-koa工具將文件存儲(chǔ)在服務(wù)器的某個(gè)臨時(shí)文件夾中,在移動(dòng)到指定的文件夾之前判斷文件大小,過(guò)大則刪除該文件并返回錯(cuò)誤提示信息,符合大小要求才能移動(dòng)到指定的文件夾,核心代碼如下圖5-6所示:圖5-6限定大?。?)防止重名符合大小要求的文件加上時(shí)間戳重命名文件名后再移動(dòng)到指定文件夾,核心代碼如下圖5-7所示:圖5-7防止重名(3)前后端限定格式規(guī)定能夠通過(guò)文件上傳進(jìn)行提交的文件類(lèi)型為圖片,前端核心代碼如下圖5-8所示,后端核心代碼如下圖5-9所示:圖5-8前端限定格式圖5-9后端限定格式5.1.5@功能前端使用at.js庫(kù),后端通過(guò)getAtList路由返回可@人列表,后端格式化將@用戶(hù)轉(zhuǎn)為鏈接形式,核心代碼如下圖5-10所示:圖5-10格式化將@用戶(hù)轉(zhuǎn)為鏈接形式
5.1.6加載更多分頁(yè)在前端點(diǎn)擊“加載更多”時(shí),就將“下一頁(yè)的頁(yè)數(shù)”通過(guò)路由動(dòng)態(tài)參數(shù)傳遞給后端。后端再通過(guò)調(diào)用controller層的函數(shù)去調(diào)用service層的函數(shù)去進(jìn)行分頁(yè)的連表查詢(xún),最后再一路返回到路由層,將微博列表渲染為html字符串后返回給前端渲染在頁(yè)面。service層通過(guò)findAndCountAll函數(shù)實(shí)現(xiàn)分頁(yè)的連表查詢(xún),核心代碼如下圖5-11所示:圖5-11service層findAndCountAll函數(shù)5.1.7預(yù)防XSS攻擊在創(chuàng)建微博時(shí),使用xss工具的xss函數(shù)幫助過(guò)濾尖括號(hào)(轉(zhuǎn)譯特殊字符),然后再將微博內(nèi)容存儲(chǔ)到數(shù)據(jù)庫(kù)中,核心代碼如下圖5-12所示:圖5-12預(yù)防XSS攻擊5.1.8廣場(chǎng)頁(yè)(redis緩存)廣場(chǎng)頁(yè)是每個(gè)人都能進(jìn)行訪(fǎng)問(wèn)的,而且訪(fǎng)問(wèn)到的內(nèi)容都一樣,所以可以通過(guò)redis緩存微博列表數(shù)據(jù)來(lái)減少請(qǐng)求,優(yōu)化代碼。核心代碼如下圖5-13所示:圖5-13service層findAndCountAll函數(shù)5.2系統(tǒng)頁(yè)面展示(1)注冊(cè)頁(yè),如下圖5-14所示:圖5-14注冊(cè)頁(yè)(2)登錄頁(yè),如下圖5-15所示:圖5-15登錄頁(yè)(3)首頁(yè),如下圖5-16所示:圖5-16首頁(yè)(4)個(gè)人空間,如下圖5-17所示:圖5-17個(gè)人空間別人的個(gè)人空間,如下圖5-18所示:圖5-18別人的個(gè)人空間(6)設(shè)置頁(yè),如下圖5-19所示:圖5-19設(shè)置頁(yè)(7)廣場(chǎng)頁(yè),如下圖5-20所示:圖5-20廣場(chǎng)頁(yè)
第六章系統(tǒng)測(cè)試6.1安全測(cè)試測(cè)試XSS攻擊:如果在輸入框輸入會(huì)帶出敏感信息的js代碼并成功存儲(chǔ)到數(shù)據(jù)庫(kù)后,前端讀取時(shí)就會(huì)在彈框中帶出cookie的信息,所以使用帶敏感信息的js代碼進(jìn)行測(cè)試,如下圖6-1所示:圖6-1測(cè)試XSS攻擊在數(shù)據(jù)庫(kù)中可看到blogs表中存儲(chǔ)的內(nèi)容經(jīng)過(guò)了轉(zhuǎn)譯,通過(guò)安全測(cè)試,blogs表如下圖6-2所示:圖6-2數(shù)據(jù)庫(kù)blogs表
6.2功能測(cè)試對(duì)各個(gè)功能進(jìn)行了測(cè)試,具體測(cè)試用例如下表6-1所示:表6-1測(cè)試用例序號(hào)用例名稱(chēng)用例操作預(yù)期結(jié)果測(cè)試結(jié)果1用戶(hù)注冊(cè)輸入用戶(hù)名、密碼輸入正確符合預(yù)期2用戶(hù)登錄輸入用戶(hù)名、密碼輸入正確的用戶(hù)名和密碼可進(jìn)入微博系統(tǒng),輸入錯(cuò)誤的用戶(hù)名或密碼則給出提示符合預(yù)期3發(fā)布微博在輸入框內(nèi)寫(xiě)入微博內(nèi)容,點(diǎn)擊“發(fā)表”按鈕符合字?jǐn)?shù)要求且不包含敏感詞匯則成功發(fā)布,否則給出提示符合預(yù)期4上傳圖片點(diǎn)擊“插入圖片”,選擇圖片成功上傳圖片,格式錯(cuò)誤則給出提示符合預(yù)期5修改個(gè)人信息輸入昵稱(chēng)、城市并上傳頭像,點(diǎn)擊“保存”按鈕符合要求則成功修改,不符合要求則給出提示符合預(yù)期6修改密碼輸入當(dāng)前密碼、新密碼、確認(rèn)密碼,點(diǎn)擊“提交”按鈕當(dāng)前密碼與新密碼不同,且新密碼與確認(rèn)密碼相同,則成功修改,否則給出提示符合預(yù)期7退出登錄點(diǎn)擊“退出登錄”按鈕成功退出登錄符合預(yù)期8關(guān)注用戶(hù)點(diǎn)擊“關(guān)注”按鈕成功關(guān)注,關(guān)注列表中顯示關(guān)注用戶(hù)符合預(yù)期9@用戶(hù)發(fā)布微博時(shí)@用戶(hù),點(diǎn)擊“發(fā)表”按鈕被@用戶(hù)的收到提示信息符合預(yù)期10轉(zhuǎn)發(fā)微博點(diǎn)擊“轉(zhuǎn)發(fā)”按鈕成功轉(zhuǎn)發(fā)微博符合預(yù)期11刪除微博點(diǎn)擊“刪除”按鈕成功刪除微博符合預(yù)期12評(píng)論微博點(diǎn)擊“評(píng)論”按鈕,輸入評(píng)論內(nèi)容,點(diǎn)擊“發(fā)表”按鈕符合字?jǐn)?shù)要求且不包含敏感詞匯則成功評(píng)論,否則給出提示符合預(yù)期
結(jié)論在本次微博系統(tǒng)的開(kāi)發(fā)中,我從多方面考慮了系統(tǒng)的性能和安全。在密碼的存儲(chǔ)、傳遞中,本人充分考慮了cookie的弊端,采取session存儲(chǔ)用戶(hù)信息,并使用md5對(duì)密碼進(jìn)行加密。在數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)之前就在路由層面進(jìn)行schema格式校驗(yàn),不符合規(guī)則的數(shù)據(jù)不運(yùn)行往后傳遞,改變了以往要等到數(shù)據(jù)庫(kù)才判斷格式是否符合要求再返回錯(cuò)誤提示的局面,在一定程度上提高了用戶(hù)體驗(yàn)。在圖片上傳的功能上,我不僅限制了圖片大小,還從前端、后端和數(shù)據(jù)庫(kù)3個(gè)層面進(jìn)行格式篩選,最大程度上保證了文件格式的需求。在存儲(chǔ)之前還給圖片名加上了時(shí)間戳防止重名的情況發(fā)生。在廣場(chǎng)頁(yè)的開(kāi)發(fā)中我采用了redis來(lái)緩存公共信息,減少請(qǐng)求,提高性能。在安全方面,我還考慮到XSS攻擊的預(yù)防,輸入框中內(nèi)容在存儲(chǔ)到數(shù)據(jù)庫(kù)前先對(duì)其進(jìn)行特殊字符的轉(zhuǎn)譯,保證數(shù)據(jù)的安全。雖然我已經(jīng)竭盡全力的做到盡善盡美,但本系統(tǒng)還存在不足之處,前端的頁(yè)面并沒(méi)有做到特別完美,系統(tǒng)安全也沒(méi)有考慮的特別充足,只是在自己的能力范圍內(nèi)努力,接下來(lái)有時(shí)間還是希望可以完善前端并補(bǔ)足其他功能。
參考文獻(xiàn)[1]朱鶯.民國(guó)時(shí)期廣播事業(yè)發(fā)展?fàn)顩r研究[J].求索,2004(3):240-242.[2]程輝.讓電視成為歷史教學(xué)的好幫手[J].華章,2014(16).[3]袁靂.淺談微博時(shí)代的娛樂(lè)節(jié)目互動(dòng)[J].科技與企業(yè),2013(14):252.[4]楊淑君.淺析微博時(shí)代的突發(fā)事件報(bào)道[J].中國(guó)經(jīng)貿(mào),2013(18):26-27.[5][EB/OL].Node.js中文網(wǎng)[6]黃丹華等.《Node.js開(kāi)發(fā)實(shí)戰(zhàn)詳解》[M].清華大學(xué)出版社:北京,2014:1.[7]張煜.一種使用Node.js構(gòu)建的分布式數(shù)據(jù)流日志服務(wù)系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013(02):70-73.[8]MichaelAbernethy.JustwhatisNodejs?[M].BMdeveloperworks,2011:78-92[9]TomHughes-Croucher,MikeWilson.nodeUpandRunning[M]USA:OReillyMedia,Inc,2012:58-67[10]TilkovS,VinoskiS.Node.js:UsingJavaScripttoBuildHigh-PerformanceNetworkPrograms[J].IEEEInternetComputing,2010,14(6):80-83.[11]樸靈.《深入淺出Node.js》[M].人民郵電出版社:北京,2013:23-26.[12]TiagoMacedo,FredOliveria.RedisCookbook[M].USA:O'ReillyMedia,Inc,2011:54-62[13]曾超宇,李金香.Redis在高速緩存系統(tǒng)中的應(yīng)用[J].微型機(jī)與應(yīng)用,2013,32(12):11-13[14]GaoXiaobo,FangXianmeiHighperformancedistributedcachearchitecturebasedonredis[J].LectureNotesinElectricalEnginering,2013,270(1):105-111
致謝經(jīng)過(guò)小半年的努力學(xué)習(xí),在今天終于完成了畢業(yè)設(shè)計(jì)的微博系統(tǒng)和畢業(yè)論文。回憶初選題時(shí)的心情,最感謝的是我的指導(dǎo)老師,謝謝她在我躊躇不決時(shí)給我建議,最感謝的是在開(kāi)題報(bào)告后我發(fā)現(xiàn)題目不好發(fā)揮時(shí),指導(dǎo)老師給了我修改題目的機(jī)會(huì),這才有了本次畢業(yè)設(shè)計(jì)——基于nodejs的微博系統(tǒng)的誕生。在疫情期間,一切關(guān)于畢業(yè)的事情都打的我措手不及,好在指導(dǎo)老師在網(wǎng)課之余還抽時(shí)間耐心回答我的每一個(gè)問(wèn)題,幫助我梳理時(shí)間線(xiàn),提醒我需要做的事情。在畢業(yè)論文的修改中,導(dǎo)師總是非常仔細(xì)的幫我劃出易錯(cuò)格式和不準(zhǔn)確的關(guān)鍵詞。最后,真的非常感謝所有在畢業(yè)設(shè)計(jì)期間幫助過(guò)我的老師、同學(xué)以及支持我的家人和朋友!
怎樣提高電腦系統(tǒng)運(yùn)行速度WindowsXP的啟動(dòng)速度比Windows2000要快30%左右,但相對(duì)于Windows98仍然要慢了不少,不過(guò),我們可以通過(guò)優(yōu)化設(shè)置,來(lái)大大提高WindowsXP的啟動(dòng)速度。加快系統(tǒng)啟動(dòng)速度主要有以下方法:盡量減少系統(tǒng)在啟動(dòng)時(shí)加載的程序與服務(wù);對(duì)磁盤(pán)及CPU等硬件進(jìn)行優(yōu)化設(shè)置;修改默認(rèn)設(shè)置,減少啟動(dòng)等待時(shí)間等。這些方法大部分既可減少系統(tǒng)啟動(dòng)的時(shí)間,又可以節(jié)省系統(tǒng)資源,加快電腦運(yùn)行速度。1.加快系統(tǒng)啟動(dòng)速度WindowsXP的啟動(dòng)速度比Windows2000要快30%左右,但相對(duì)于Windows98仍然要慢了不少,不過(guò),我們可以通過(guò)優(yōu)化設(shè)置,來(lái)大大提高WindowsXP的啟動(dòng)速度。加快系統(tǒng)啟動(dòng)速度主要有以下方法:盡量減少系統(tǒng)在啟動(dòng)時(shí)加載的程序與服務(wù);對(duì)磁盤(pán)及CPU等硬件進(jìn)行優(yōu)化設(shè)置;修改默認(rèn)設(shè)置,減少啟動(dòng)等待時(shí)間等。這些方法大部分既可減少系統(tǒng)啟動(dòng)的時(shí)間,又可以節(jié)省系統(tǒng)資源,加快電腦運(yùn)行速度。(1)MsconfigWindowsXP的啟動(dòng)速度在系統(tǒng)安裝初期還比較快,但隨著安裝的軟件不斷增多,系統(tǒng)的啟動(dòng)速度會(huì)越來(lái)越慢,這是由于許多軟件把自己加在了啟動(dòng)程序中,這樣開(kāi)機(jī)即需運(yùn)行,大大降低了啟動(dòng)速度,而且也占用了大量的系統(tǒng)資源。對(duì)于這樣一些程序,我們可以通過(guò)系統(tǒng)配置實(shí)用程序Msconfig將它們從啟動(dòng)組中排除出去。選擇“開(kāi)始”菜單中的“運(yùn)行”命令,在“運(yùn)行”對(duì)話(huà)框中鍵入“Msconfig”,回車(chē)后會(huì)彈出“系統(tǒng)配置實(shí)用程序”對(duì)話(huà)框,選擇其中的“啟動(dòng)”選項(xiàng)卡(如圖1),該選項(xiàng)卡中列出了系統(tǒng)啟動(dòng)時(shí)加載的項(xiàng)目及來(lái)源,仔細(xì)查看每個(gè)項(xiàng)目是否需要自動(dòng)加載,否則清除項(xiàng)目前的復(fù)選框,加載的項(xiàng)目越少,啟動(dòng)的速度就越快。設(shè)置完成后需要重新啟動(dòng)方能生效。(2)BootvisBootvis是微軟提供的一個(gè)啟動(dòng)優(yōu)化工具,可提高WindowsXP的啟動(dòng)速度。用BootVis提升WindowsXP的啟動(dòng)速度必須按照正確的順序進(jìn)行操作,否則將不會(huì)起到提速的效果。其正確的操作方法如下:?jiǎn)?dòng)Bootvis,從其主窗口(如圖2)中選擇“工具”菜單下的“選項(xiàng)”命令,在“符號(hào)路徑”處鍵入Bootvis的安裝路徑,如“C:\ProgramFiles\Bootvis”,單擊“保存”退出。從“跟蹤”菜單中選擇“下次引導(dǎo)”命令,會(huì)彈出“重復(fù)跟蹤”對(duì)話(huà)框,單擊“確定”按鈕,BootVis將引導(dǎo)WindowsXP重新啟動(dòng),默認(rèn)的重新啟動(dòng)時(shí)間是10秒。系統(tǒng)重新啟動(dòng)后,BootVis自動(dòng)開(kāi)始運(yùn)行并記錄啟動(dòng)進(jìn)程,生成啟動(dòng)進(jìn)程的相關(guān)BIN文件,并把這個(gè)記錄文件自動(dòng)命名為T(mén)RACE_BOOT_1_1。程序記錄完啟動(dòng)進(jìn)程文件后,會(huì)重新啟動(dòng)BootVis主界面,在“文件”菜單中選擇剛剛生成的啟動(dòng)進(jìn)程文件“TRACE_BOOT_1_1”。窗口中即會(huì)出現(xiàn)“CPU>使用”、“磁盤(pán)I/O”、“磁盤(pán)使用”、“驅(qū)動(dòng)程序延遲”等幾項(xiàng)具體圖例供我們分析,不過(guò)最好還是讓BootVis程序來(lái)自動(dòng)進(jìn)行分析:從“跟蹤”菜單中選擇“系統(tǒng)優(yōu)化”命令,程序會(huì)再次重新啟動(dòng)計(jì)算機(jī),并分析啟動(dòng)進(jìn)程文件,從而使計(jì)算機(jī)啟動(dòng)得更快。(3)禁用多余的服務(wù)WindowsXP在啟動(dòng)時(shí)會(huì)有眾多程序或服務(wù)被調(diào)入到系統(tǒng)的內(nèi)存中,它們往往用來(lái)控制Windows系統(tǒng)的硬件設(shè)備、內(nèi)存、文件管理或者其他重要的系統(tǒng)功能。但這些服務(wù)有很多對(duì)我們用途不大甚至根本沒(méi)有用,它們的存在會(huì)占用內(nèi)存和系統(tǒng)資源,所以應(yīng)該將它們禁用,這樣最多可以節(jié)省70MB的內(nèi)存空間,系統(tǒng)速度自然也會(huì)有很大的提高。選擇“開(kāi)始”菜單中的“運(yùn)行”命令,在“運(yùn)行”對(duì)話(huà)框鍵入“services.msc”后回車(chē),即可打開(kāi)“服務(wù)”窗口。窗口的服務(wù)列表中列出了系統(tǒng)提供的所有服務(wù)的名稱(chēng)、狀態(tài)及啟動(dòng)類(lèi)型。要修改某個(gè)服務(wù),可從列表雙擊它,會(huì)彈出它的屬性對(duì)話(huà)框(如圖3),你可從“常規(guī)”選項(xiàng)卡對(duì)服務(wù)進(jìn)行修改,通過(guò)單擊“啟動(dòng)”、“停止”、“暫?!?、“恢復(fù)”四個(gè)按鈕來(lái)修改服務(wù)的狀態(tài),并可從“啟動(dòng)類(lèi)型”下拉列表中修改啟動(dòng)類(lèi)型,啟動(dòng)類(lèi)型有“自動(dòng)”、“手動(dòng)”、“已禁用”三種。如果要禁止某個(gè)服務(wù)在啟動(dòng)自動(dòng)加載,可將其啟動(dòng)類(lèi)型改為“已禁用”。WindowsXP提供的所有服務(wù)有36個(gè)默認(rèn)是自動(dòng)啟動(dòng)的,實(shí)際上,其中只有8個(gè)是必須保留的(見(jiàn)下表),其他的則可根據(jù)自己的需要進(jìn)行設(shè)置,每種服務(wù)的作用在軟件中有提示。4)修改注冊(cè)表來(lái)減少預(yù)讀取,減少進(jìn)度條等待時(shí)間WindowsXP在啟動(dòng)過(guò)程中會(huì)出現(xiàn)一個(gè)進(jìn)度條,我們可以通過(guò)修改注冊(cè)表,讓進(jìn)度條只跑一圈就進(jìn)入登錄畫(huà)面。選擇“開(kāi)始”菜單中的“運(yùn)行”命令,在“運(yùn)行”對(duì)話(huà)框鍵入“regedit”命令后回車(chē),即可啟動(dòng)注冊(cè)表編輯器,在注冊(cè)表中找HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\PrefetchParameters,選擇其下的EnablePrefetcher鍵,把它的鍵值改為“1”即可。(5)減少開(kāi)機(jī)磁盤(pán)掃描等待時(shí)間當(dāng)Windows日志中記錄有非正常關(guān)機(jī)、死機(jī)引起的重新啟動(dòng),系統(tǒng)就會(huì)自動(dòng)在啟動(dòng)的時(shí)候運(yùn)行磁盤(pán)掃描程序。在默認(rèn)情況下,掃描每個(gè)分區(qū)前會(huì)等待10秒鐘,如果每個(gè)分區(qū)都要等上10秒才能開(kāi)始進(jìn)行掃描,再加上掃描本身需要的時(shí)間,會(huì)耗費(fèi)相當(dāng)長(zhǎng)的時(shí)間才能完成啟動(dòng)過(guò)程。對(duì)于這種情況我們可以設(shè)置取消磁盤(pán)掃描的等待時(shí)間,甚至禁止對(duì)某個(gè)磁盤(pán)分區(qū)進(jìn)行掃描。選擇“開(kāi)始→運(yùn)行”,在運(yùn)行對(duì)話(huà)框中鍵入“chkntfs/t:0”,即可將磁盤(pán)掃描等待時(shí)間設(shè)置為0;如果要在計(jì)算機(jī)啟動(dòng)時(shí)忽略?huà)呙枘硞€(gè)分區(qū),比如C盤(pán),可以輸入“chkntfs/xc:”命令;如果要恢復(fù)對(duì)C盤(pán)的掃描,可使用“chkntfs/dc:”命令,即可還原所有chkntfs默認(rèn)設(shè)置,除了自動(dòng)文件檢查的倒計(jì)時(shí)之外。2.提高系統(tǒng)運(yùn)行速度提升系統(tǒng)運(yùn)行速度的思路與加快啟動(dòng)的速度類(lèi)似:盡量?jī)?yōu)化軟硬件設(shè)置,減輕系統(tǒng)負(fù)擔(dān)。以下是一些常用的優(yōu)化手段。(1)設(shè)置處理器二級(jí)緩存容量WindowsXP無(wú)法自動(dòng)檢測(cè)處理器的二級(jí)緩存容量,需要我們自己在注冊(cè)表中手動(dòng)設(shè)置,首先打開(kāi)注冊(cè)表,找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\”,選擇其下的“SecondLevelDataCache”,根據(jù)自己所用的處理器設(shè)置即可,例如PIIICoppermine/P4Willamette是“256”,AthlonXP是“384”,P4Northwood是“512”。(2)提升系統(tǒng)緩存同樣也是在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\”位置,把其下的“LargeSystemCache”鍵值從0改為1,WindowsXP就會(huì)把除了4M之外的系統(tǒng)內(nèi)存全部分配到文件系統(tǒng)緩存中,這樣X(jué)P的內(nèi)核能夠在內(nèi)存中運(yùn)行,大大提高系統(tǒng)速度。通常來(lái)說(shuō),該優(yōu)化會(huì)使系統(tǒng)性能得到相當(dāng)?shù)奶嵘?,但也有可能?huì)使某些應(yīng)用程序性能降低。需要注意的是必須有256M以上的內(nèi)存,激活LargeSystemCache才可起到正面的作用,否則不要輕易改動(dòng)它。(3)改進(jìn)輸入/輸出性能這個(gè)優(yōu)化能夠提升系統(tǒng)進(jìn)行大容量文件傳輸時(shí)的性能,不過(guò)這只對(duì)服務(wù)器用戶(hù)才有實(shí)在意義。我們可在中新建一個(gè)DWORD(雙字節(jié)值)鍵值,命名為IOPageLockLimit。一般情況下把數(shù)據(jù)設(shè)置8~16MB之間性能最好,要記住這個(gè)值是用字節(jié)來(lái)計(jì)算的,例如你要分配10MB的話(huà),就是10×?1024×1024,也就是10485760。這里的優(yōu)化也需要你的機(jī)器擁有大于256M的內(nèi)存。(4)禁用內(nèi)存頁(yè)面調(diào)度在正常情況下,XP會(huì)把內(nèi)存中的片斷寫(xiě)入硬盤(pán),我們可以阻止它這樣做,讓數(shù)據(jù)保留在內(nèi)存中,從而提升系統(tǒng)性能。在注冊(cè)表中找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\”下的“DisablePagingExecutive”鍵,把它的值從0改為1即可禁止內(nèi)存頁(yè)面調(diào)度了。(5)關(guān)閉自動(dòng)重新啟動(dòng)功能當(dāng)WindowsXP遇到嚴(yán)重問(wèn)題時(shí)便會(huì)突然重新開(kāi)機(jī),可從注冊(cè)表將此功能取消。打開(kāi)注冊(cè)表編輯器,找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\”將AutoReboot鍵的Dword值更改為0,重新啟動(dòng)后設(shè)置即可生效。(6)改變視覺(jué)效果WindowsXP在默認(rèn)情況下啟用了幾乎所有的視覺(jué)效果,如淡入淡出、在菜單下顯示陰影。這些視覺(jué)效果雖然漂亮,但對(duì)系統(tǒng)性能會(huì)有一定的影響,有時(shí)甚至造成應(yīng)用軟件在運(yùn)行時(shí)出現(xiàn)停頓。一般情況下建議少用或者取消這些視覺(jué)效果。選擇桌面上“我的電腦”圖標(biāo),單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“屬性”命令,打開(kāi)“系統(tǒng)屬性”對(duì)話(huà)框。選擇“高級(jí)”選項(xiàng)卡,在其中的“性能”欄中單擊“設(shè)置”按鈕,會(huì)彈出“性能選項(xiàng)”對(duì)話(huà)框(如圖4),可選擇“調(diào)整為最佳性能”單選框來(lái)關(guān)閉所有的視覺(jué)效果,也可選擇“自定義”然后選擇自己需要的視覺(jué)效果。(7)合理設(shè)置頁(yè)面虛擬內(nèi)存同樣也是在“性能選項(xiàng)”對(duì)話(huà)框中,選擇“高級(jí)”選項(xiàng)卡,在其中的“虛擬內(nèi)存”欄中單擊“更改”按鈕,接下來(lái)選擇虛擬內(nèi)存為“自定義大小”,然后設(shè)置其數(shù)值。一般情況下,把虛擬設(shè)為不小于256M,不大于382M比較合適,而且最大值和最小值最好一樣。(8)修改外觀(guān)方案WindowsXP默認(rèn)的外觀(guān)方案雖然漂亮,但對(duì)系統(tǒng)資源的占用也多,可將其改為經(jīng)典外觀(guān)以獲得更好的性能。在桌面空白位置單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇“屬性”命令,會(huì)打開(kāi)“顯示屬性”對(duì)話(huà)框,在“主題”選項(xiàng)卡選擇主題為“Windows經(jīng)典”,即可將外觀(guān)修改為更為經(jīng)濟(jì)的Windows經(jīng)典外觀(guān)。(9)取消XP對(duì)ZIP支持WindowsXP在默認(rèn)情況下打開(kāi)了對(duì)zip文件支持,這要占用一定的系統(tǒng)資源,可選擇“開(kāi)始→運(yùn)行”,在“運(yùn)行”對(duì)話(huà)框中鍵入“regsvr32/uzipfldr.dll”,回車(chē)確認(rèn)即可取消XP對(duì)ZIP解壓縮的支持,從而節(jié)省系統(tǒng)資源。(10)關(guān)閉Dr.WatsonDr.Watson是WindowsXP的一個(gè)崩潰分析工具,它會(huì)在應(yīng)用程序崩潰的時(shí)候自動(dòng)彈出,并且在默認(rèn)情況下,它會(huì)將與出錯(cuò)有關(guān)的內(nèi)存保存為DUMP文件以供程序員分析。不過(guò),記錄DUMP文件對(duì)普通用戶(hù)則毫無(wú)幫助,反而會(huì)帶來(lái)很大的不便:由于Dr.Watson在應(yīng)用程序崩潰時(shí)會(huì)對(duì)內(nèi)存進(jìn)行DUMP記錄,將出現(xiàn)長(zhǎng)時(shí)間硬盤(pán)讀寫(xiě)操作,要很長(zhǎng)一斷時(shí)間程序才能關(guān)閉,并且DUMP文件還會(huì)占用大量磁盤(pán)空間。要關(guān)閉Dr.Watson可打開(kāi)注冊(cè)表編輯器,找到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug”分支,雙擊其下的Auto鍵值名稱(chēng),將其“數(shù)值數(shù)據(jù)”改為0,最后按F5刷新使設(shè)置生效,這樣就取消它的運(yùn)行了。同樣,我們可以把所有具備調(diào)試功能的選項(xiàng)取消,比如藍(lán)屏?xí)r出現(xiàn)的memory.dmp,可在“系統(tǒng)屬性”對(duì)話(huà)框中選擇“高級(jí)”選項(xiàng)卡,單擊“啟動(dòng)和故障恢復(fù)”欄中的“設(shè)置”按鈕,并在彈出的“啟動(dòng)和故障恢復(fù)”對(duì)話(huà)框中選擇“寫(xiě)入調(diào)試信息”為“無(wú)”(如圖5)。(11)啟動(dòng)硬盤(pán)/光驅(qū)DMA模式打開(kāi)“系統(tǒng)屬性”對(duì)話(huà)框,選擇“硬件”選擇卡中的“設(shè)備管理器”按鈕,打開(kāi)“設(shè)備管理器”窗口,在設(shè)備列表中選擇“IDEATA/ATAPI控制器”,雙擊“主要IDE通道”或“次要IDE通過(guò)”,在其屬性對(duì)話(huà)框的“高級(jí)設(shè)置”選項(xiàng)卡中檢查DMA模式是否已啟動(dòng),一般來(lái)說(shuō)如果設(shè)備支持,系統(tǒng)就會(huì)自動(dòng)打開(kāi)DMA功能,如果沒(méi)有打開(kāi)可將“傳輸模式”設(shè)為“DMA(若可用)”。(12)關(guān)掉不用的設(shè)備WindowsXP總是盡可能為電腦的所有設(shè)備安裝驅(qū)動(dòng)程序并進(jìn)行管理,這不僅會(huì)減慢系統(tǒng)啟動(dòng)的速度,同時(shí)也造成了系統(tǒng)資源的大量占用。針對(duì)這一情況,你可在設(shè)備管理器中,將PCMCIA卡、調(diào)制解調(diào)器、紅外線(xiàn)設(shè)備、打印機(jī)端口(LPT1)或者串口(COM1)等不常用的設(shè)備停用,方法是雙擊要停用的設(shè)備,在其屬性對(duì)話(huà)框中的“常規(guī)”選項(xiàng)卡中選擇“不要使用這個(gè)設(shè)備(停用)”。在重新啟動(dòng)設(shè)置即可生效,當(dāng)需要使用這些設(shè)備時(shí)再?gòu)脑O(shè)備管理器中啟用它們。(13)關(guān)閉錯(cuò)誤報(bào)告當(dāng)應(yīng)用程序出錯(cuò)時(shí),會(huì)彈出發(fā)送錯(cuò)誤報(bào)告的窗口,其實(shí)這樣的錯(cuò)誤報(bào)告對(duì)普通用戶(hù)而言幾乎沒(méi)有任何意義,關(guān)閉它是明智的選擇。在“系統(tǒng)屬性”對(duì)話(huà)框中選擇“高級(jí)”選項(xiàng)卡,單擊“錯(cuò)誤報(bào)告”按鈕,在彈出的“錯(cuò)誤匯報(bào)”對(duì)話(huà)框中,選擇“禁用錯(cuò)誤匯報(bào)”單選項(xiàng),最后單擊“確定”即可。另外我們也可以從組策略中關(guān)閉錯(cuò)誤報(bào)告:從“運(yùn)行”中鍵入“gpedit.msc”,運(yùn)行“組策略編輯器”,展開(kāi)“計(jì)算機(jī)配置→管理模板→系統(tǒng)→錯(cuò)誤報(bào)告功能”,雙擊右邊設(shè)置欄中的“報(bào)告錯(cuò)誤”,在彈出的“屬性”對(duì)話(huà)框中選擇“已禁用”單選框即可將“報(bào)告錯(cuò)誤”禁用。(14)關(guān)閉自動(dòng)更新“自動(dòng)更新”功能對(duì)許多WindowsXP用戶(hù)而言并不是必需的,可將其關(guān)閉以節(jié)省系統(tǒng)資源。在“我的電腦”上單擊鼠標(biāo)右鍵,從快捷菜單中選擇“屬性”命令,選擇“系統(tǒng)屬性”對(duì)話(huà)框中的“自動(dòng)更新”選項(xiàng)卡,勾選“關(guān)閉自動(dòng)更新,我將手動(dòng)更新計(jì)算機(jī)”單選框,單擊“確定”按鈕即可關(guān)閉自動(dòng)更新功能。如果在“服務(wù)”已經(jīng)將“AutomaticUpdates”服務(wù)關(guān)閉,“系統(tǒng)屬性”對(duì)話(huà)框中的“自動(dòng)更新”選項(xiàng)卡就不能進(jìn)行任何設(shè)置了。(15)去掉菜單延遲去掉菜單彈出時(shí)的延遲,可以在一定程度上加快XP。要修改的鍵值位置在“HKEY_CURRENT_USER\ControlPanel\Desktop”。修改其下的“MenuShowDelay”鍵,把默認(rèn)的400修改為0,按F5刷新注冊(cè)表即可生效。(16)清除預(yù)讀文件WindowsXP的預(yù)讀設(shè)置雖然可以提高系統(tǒng)速度,但是使用一段時(shí)間后,預(yù)讀文件夾里的文件數(shù)量會(huì)變得相當(dāng)龐大,導(dǎo)致系統(tǒng)搜索花費(fèi)的時(shí)間變長(zhǎng)。而且有些應(yīng)用程序會(huì)產(chǎn)生死鏈接文件,更加重了系統(tǒng)搜索的負(fù)擔(dān)。所以,應(yīng)該定期刪除這些預(yù)讀文件。預(yù)計(jì)文件存放在WindowsXP系統(tǒng)文件夾的Prefetch文件夾中,該文件夾下的所有文件均可刪除。(17)關(guān)閉自動(dòng)播放功能在WindowsXP中,當(dāng)往光驅(qū)中放入光盤(pán)或?qū)SB硬盤(pán)接上電腦時(shí),系統(tǒng)都會(huì)自動(dòng)將光驅(qū)或USB硬盤(pán)掃描一遍,同時(shí)提示你是否播放里面的圖片、視頻、音樂(lè)等文件,如果是擁有多個(gè)分區(qū)的大容量的USB硬盤(pán),掃描會(huì)耗費(fèi)很長(zhǎng)的時(shí)間,而且你得多次手動(dòng)關(guān)閉提示窗口,非常麻煩。這種情況下我們可以將WindowsXP的自動(dòng)播放功能關(guān)閉。運(yùn)行“組策略”程序。在組策略窗口左邊欄中,打開(kāi)“計(jì)算機(jī)配置”,選擇“管理模板”下的“系統(tǒng)”,然后在右邊的配置欄中找到“關(guān)閉自動(dòng)播放”并雙擊它,會(huì)彈出“關(guān)閉自動(dòng)播放屬性”對(duì)話(huà)框。在其中“設(shè)置”選項(xiàng)卡中選擇“已啟用”,“關(guān)閉自動(dòng)播放”下拉列表中選擇“所有驅(qū)動(dòng)器”(如圖6)。這樣以后就不用擔(dān)心WindowsXP的“自動(dòng)播放”功能帶來(lái)的麻煩了。如果你只是想禁止系統(tǒng)掃描某個(gè)驅(qū)動(dòng)器(如USB硬盤(pán))上的文件,可采用下面的方法。先連上你的USB硬盤(pán),讓系統(tǒng)將它識(shí)別出來(lái)。然后打開(kāi)“我的電腦”,選擇USB硬盤(pán)上的某個(gè)分區(qū),按鼠標(biāo)右鍵,會(huì)彈出磁盤(pán)屬性窗口,選取“自動(dòng)播放”選項(xiàng)卡,將所有內(nèi)容的類(lèi)型都選擇為不執(zhí)行操作。如果USB硬盤(pán)有多個(gè)分區(qū),對(duì)所有分區(qū)都進(jìn)行同樣的操作,這樣當(dāng)你將USB驅(qū)動(dòng)器拔掉再重新接上時(shí),系統(tǒng)會(huì)將USB硬盤(pán)識(shí)別出來(lái),而不會(huì)反復(fù)問(wèn)你是否播放USB硬盤(pán)中的文件了。3.加快關(guān)機(jī)速度WindowsXP的關(guān)機(jī)速度要慢于啟動(dòng)速度,特別有些任務(wù)還需要手工結(jié)束,更加延緩了關(guān)機(jī)速度。因此,要加快關(guān)機(jī)速度,首先要開(kāi)啟WindowsXP的自動(dòng)結(jié)束任務(wù)功能。具體步驟是:從注冊(cè)表中找到“HKEY_CURRENT_USER\ControlPanel\Desktop”,把“AutoEndTasks”的鍵值設(shè)置為1即可。然后再修改“HungAppTimeout”為“4000(或更小)”(預(yù)設(shè)為5000),該鍵值同樣也在“HKEY_CURRENT_USER\ControlPanel\Desktop”下;最后一步再找到“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\”,同樣把WaitToKillServiceTimeout設(shè)置為“4000”;通過(guò)這樣設(shè)置后的關(guān)機(jī)速度明顯要加快了。夠全面吧~~◆二、硬件優(yōu)化設(shè)置◆1、關(guān)掉不用的設(shè)備
在設(shè)備管理器中,將PCMCIA卡、調(diào)制解調(diào)器、紅外線(xiàn)設(shè)備、打印機(jī)端口(LPT1)或者串口(COM1)等不常用的設(shè)備停用,在要停用設(shè)備屬性對(duì)話(huà)框中的“常規(guī)”選項(xiàng)卡中選擇“不要使用這個(gè)設(shè)備(停用)”。當(dāng)需要使用這些設(shè)備時(shí)再?gòu)脑O(shè)備管理器中啟用它們?!?、內(nèi)存性能優(yōu)化
WindowsXP中有幾個(gè)選項(xiàng)可以?xún)?yōu)化內(nèi)存性能,它們?nèi)荚谧?cè)表下面位置:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
ManagerMemory
Management
1)禁用內(nèi)存頁(yè)面調(diào)度(Paging
Executive)
XP會(huì)把內(nèi)存中的片斷寫(xiě)入硬盤(pán),我們可以阻止它這樣做,讓數(shù)據(jù)保留在內(nèi)存中,從而提升系統(tǒng)性能。256M以上內(nèi)存才使用這個(gè)設(shè)置。把“DisablePagingExecutive”的值從0改為1就可以禁止內(nèi)存頁(yè)面調(diào)度了。
2)提升系統(tǒng)緩存
必須有256M以上的內(nèi)存,才激活它。把LargeSystemCache鍵值從0改為1,一般來(lái)說(shuō),這項(xiàng)優(yōu)化會(huì)使系統(tǒng)性能得到相當(dāng)?shù)奶嵘?,但也有可能?huì)使某些應(yīng)用程序性能降低。
3)輸入/輸出性能
內(nèi)存大于256M才更改這里的值,這個(gè)優(yōu)化只對(duì)server(服務(wù)器)用戶(hù)才有實(shí)在意義,它能夠提升系統(tǒng)進(jìn)行大容量文件傳輸時(shí)的性能。建一個(gè)DWORD(雙字節(jié)值)鍵值,命名為IOPageLockLimit,數(shù)值設(shè)8M-16M字節(jié)之間性能最好,具體設(shè)什么值,可試試哪個(gè)值可獲得最佳性能。這個(gè)值是用字節(jié)來(lái)計(jì)算的,比如你要分配12M,就是12×1024×1024,也就是12582912?!?、啟動(dòng)硬盤(pán)/光驅(qū)DMA模式
“系統(tǒng)屬性”-“硬件”-“設(shè)備管理器”,在設(shè)備列表中選擇“IDE
ATA/ATAPI控制器”,雙擊“主要
IDE
通道”或“次要
IDE
通道”,在其屬性對(duì)話(huà)框的“高級(jí)設(shè)置”選項(xiàng)卡中檢查DMA模式是否已啟動(dòng),一般來(lái)說(shuō)如果設(shè)備支持,系統(tǒng)就會(huì)自動(dòng)打開(kāi)DMA功能,如果沒(méi)有打開(kāi)可將“傳輸模式”設(shè)為“DMA(若可用)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)服務(wù)合同協(xié)議
- 基于農(nóng)業(yè)資源整合的現(xiàn)代農(nóng)業(yè)發(fā)展協(xié)議
- 項(xiàng)目進(jìn)度統(tǒng)計(jì)表-互聯(lián)網(wǎng)項(xiàng)目進(jìn)度監(jiān)控
- 公司前臺(tái)接待與咨詢(xún)工作表格
- 以科技創(chuàng)新推動(dòng)農(nóng)業(yè)現(xiàn)代化智能化發(fā)展的路徑探索
- 歷史文物保護(hù)修復(fù)技術(shù)考試試題集
- 山中訪(fǎng)友:六年級(jí)自然美文欣賞教案
- 員工培訓(xùn)與技能評(píng)估記錄表
- 醫(yī)院場(chǎng)地租賃合同
- 中國(guó)古詩(shī)詞故事的欣賞感受
- DB50T 441-2012 渝菜 毛血旺烹飪技術(shù)規(guī)范
- 2024年05月富德生命人壽保險(xiǎn)股份有限公司招考筆試歷年參考題庫(kù)附帶答案詳解
- 醫(yī)防融合培訓(xùn)
- 《電機(jī)能能效等級(jí)》課件
- 幼兒園課件之大班科學(xué)《四季的變化》
- 影視拍攝現(xiàn)場(chǎng)突發(fā)安全事件應(yīng)急預(yù)案
- DB37T 5096-2017 建設(shè)工程項(xiàng)目管理咨詢(xún)規(guī)范
- 雙方同意小孩改姓名協(xié)議書(shū)(2篇)
- 2023年私募股權(quán)投資基金基礎(chǔ)知識(shí)真題模擬匯編(共824題)
- 《小學(xué)科學(xué)實(shí)驗(yàn)教學(xué)探究的國(guó)內(nèi)外文獻(xiàn)綜述》2300字
- 2024解析:第十章 浮沉條件及應(yīng)用-講核心(原卷版)
評(píng)論
0/150
提交評(píng)論