□鄭冰
廣西網(wǎng)絡(luò)廣播電視臺(tái)自2009年開(kāi)始自主研發(fā)以來(lái),Web部署模式根據(jù)網(wǎng)絡(luò)、硬件等資源的投入進(jìn)行過(guò)多次調(diào)整。Web頁(yè)面由靜態(tài)化轉(zhuǎn)向動(dòng)態(tài)化就是其中的調(diào)整之一。2018年12月之前廣西網(wǎng)絡(luò)廣播電視臺(tái)一直沿用靜態(tài)頁(yè)為主、動(dòng)態(tài)頁(yè)為輔的部署模式,后經(jīng)過(guò)網(wǎng)站研發(fā)人員的整體評(píng)估,并經(jīng)過(guò)領(lǐng)導(dǎo)同意,將網(wǎng)站部署模式轉(zhuǎn)變成了動(dòng)態(tài)頁(yè)為主、靜態(tài)頁(yè)為輔的部署模式。
廣西網(wǎng)絡(luò)廣播電視臺(tái)自2018年12月之前一直沿用靜態(tài)化為主、動(dòng)態(tài)化為輔的開(kāi)發(fā)和部署模式。這主要是因?yàn)楫?dāng)時(shí)網(wǎng)站在網(wǎng)絡(luò)帶寬和服務(wù)器資源上投入力度不大,帶寬方面只有100M電信光纖(后擴(kuò)容到了300M電信光纖和100M聯(lián)通光纖實(shí)現(xiàn)了雙路主備),而100M的帶寬對(duì)于一個(gè)以視頻為主的網(wǎng)站來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,在服務(wù)器方面只有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器和一臺(tái)前端Web服務(wù)器,這些硬件資源在訪問(wèn)量不高的時(shí)候能夠勉強(qiáng)維持,一旦到了訪問(wèn)量激增的特殊時(shí)期,網(wǎng)站經(jīng)常會(huì)有打不開(kāi)或者打開(kāi)緩慢的情況,比如南寧國(guó)際民歌藝術(shù)節(jié)期間,網(wǎng)站上有視頻直播,在此期間網(wǎng)站打開(kāi)緩慢的情況格外明顯?;谝陨显?,網(wǎng)站研發(fā)人員對(duì)網(wǎng)站進(jìn)行了靜態(tài)化改造,保障了網(wǎng)站頁(yè)面的打開(kāi)速度和用戶(hù)體驗(yàn)。
靜態(tài)網(wǎng)頁(yè)是實(shí)際存在的,用戶(hù)在訪問(wèn)到某個(gè)靜態(tài)頁(yè)眼睛所能看到的文字、圖片等內(nèi)容在網(wǎng)頁(yè)的源代碼中是實(shí)實(shí)在在存在的,就好比我們看到某一篇文章里面的文字,都是已經(jīng)印刷到了紙上,而每一篇文章根據(jù)篇幅的長(zhǎng)短就會(huì)有相應(yīng)數(shù)量的張紙,所以我們所說(shuō)的靜態(tài)頁(yè)是除非人為改動(dòng),否則內(nèi)容不會(huì)發(fā)生變化的Web頁(yè)面。常見(jiàn)的靜態(tài)頁(yè)面有以.html或.htm為后綴名的Web頁(yè)面。
靜態(tài)頁(yè)面每一個(gè)頁(yè)面就存在一個(gè)實(shí)際的物理文件,所以靜態(tài)頁(yè)是多對(duì)多的關(guān)系。其優(yōu)點(diǎn)如下:
1.服務(wù)器在接收到用戶(hù)的請(qǐng)求后直接將頁(yè)面發(fā)送到用戶(hù)瀏覽器,不需要再經(jīng)過(guò)其他處理過(guò)程,能極大提高頁(yè)面訪問(wèn)速度。
2.因靜態(tài)頁(yè)面不需要與數(shù)據(jù)庫(kù)服務(wù)器交互,頁(yè)面與數(shù)據(jù)庫(kù)服務(wù)器之間沒(méi)有絕對(duì)的聯(lián)系,從而可降低數(shù)據(jù)庫(kù)服務(wù)器的負(fù)荷,并減少曝光的幾率,提高數(shù)據(jù)庫(kù)服務(wù)器的安全性。
3.因?yàn)樵L問(wèn)靜態(tài)頁(yè)的域名地址一般不帶任何參數(shù),對(duì)搜索引擎相對(duì)比較友好。
同樣,靜態(tài)頁(yè)面也存在著相應(yīng)的缺點(diǎn):
1.一篇文章就必須對(duì)應(yīng)至少一個(gè)靜態(tài)頁(yè),如果業(yè)務(wù)上有分頁(yè)的需求還會(huì)有一篇文章對(duì)應(yīng)多個(gè)靜態(tài)頁(yè)的情況。隨著網(wǎng)站數(shù)據(jù)越來(lái)越多,服務(wù)器上靜態(tài)頁(yè)的數(shù)量也會(huì)增多,這就要求服務(wù)器有足夠的存儲(chǔ)空間。
2.靜態(tài)頁(yè)不能訪問(wèn)數(shù)據(jù)庫(kù),在更新某篇文章后,靜態(tài)頁(yè)不能時(shí)時(shí)顯示修改后的內(nèi)容,必須進(jìn)行替換才可以讓用戶(hù)看到修改后的內(nèi)容。
3.每個(gè)靜態(tài)頁(yè)占用的空間很小,如果有非常大量的小文件保存于硬盤(pán)中,這種碎片化的文件會(huì)造成維護(hù)不便,甚至有可能會(huì)對(duì)硬盤(pán)造成損傷。
正因?yàn)殪o態(tài)頁(yè)是實(shí)際存在的物理文件,就好像書(shū)上的每一個(gè)頁(yè)面都需要印刷一樣,每次都需要進(jìn)行制作,但如果每次都需要人工制作的話將會(huì)產(chǎn)生非常龐大的工作量,所以要選擇智能化自動(dòng)生成靜態(tài)頁(yè)的方案。自動(dòng)生成靜態(tài)頁(yè)方案一般會(huì)有兩種方式:
1.使用Web Service實(shí)時(shí)生成靜態(tài)頁(yè)方式。編輯人員在新增、修改內(nèi)容后,程序?qū)崟r(shí)生成相應(yīng)的靜態(tài)頁(yè)。該方式的優(yōu)點(diǎn)是編輯人員提交信息后就能馬上觸發(fā)靜態(tài)頁(yè)生成事件,缺點(diǎn)是如果網(wǎng)絡(luò)卡頓、數(shù)據(jù)庫(kù)卡頓的話,有可能會(huì)生成失敗或者編輯人員需要等待靜態(tài)頁(yè)生成后才可以進(jìn)行下一步操作。
2.使用Window Service監(jiān)控生成靜態(tài)頁(yè)方式。使用該方式編輯人員只需要按照一般的方式對(duì)網(wǎng)站內(nèi)容進(jìn)行操作,Window Service對(duì)網(wǎng)站數(shù)據(jù)庫(kù)進(jìn)行監(jiān)聽(tīng),如發(fā)現(xiàn)數(shù)據(jù)庫(kù)發(fā)生新增、修改等操作,將生成新聞內(nèi)容靜態(tài)頁(yè)。該方式的優(yōu)點(diǎn)是網(wǎng)站編輯人員無(wú)需等待頁(yè)面的生成,交由Windows的服務(wù)去完成,如果生成失敗會(huì)再次嘗試。其缺點(diǎn)是如果一直生成失敗,則會(huì)一直停留在這篇靜態(tài)頁(yè)的生成上,其他內(nèi)容需要排隊(duì)等待。
經(jīng)過(guò)綜合考慮對(duì)比后,廣西網(wǎng)絡(luò)廣播電視臺(tái)使用Window Service監(jiān)控生成靜態(tài)頁(yè)方式,基本原理是先將制作好的動(dòng)態(tài)頁(yè)模板部署于靜態(tài)頁(yè)生成專(zhuān)屬服務(wù)器中,并使用Window Service對(duì)數(shù)據(jù)庫(kù)進(jìn)行監(jiān)聽(tīng),當(dāng)Window Service監(jiān)聽(tīng)到數(shù)據(jù)庫(kù)發(fā)生了新增、修改操作時(shí)獲取已經(jīng)部署好的動(dòng)態(tài)頁(yè)源碼另存為Html頁(yè)面,并對(duì)數(shù)據(jù)庫(kù)進(jìn)行生成狀態(tài)記錄。
靜態(tài)頁(yè)生成流程圖
Window Service代碼片段節(jié)選:
動(dòng)態(tài)化是跟靜態(tài)網(wǎng)頁(yè)相對(duì)的一種網(wǎng)頁(yè)編程技術(shù),是一對(duì)多的關(guān)系。我們可以把動(dòng)態(tài)頁(yè)理解為一個(gè)容器,比如一個(gè)杯子,當(dāng)需要喝水時(shí)可以用杯子裝水,當(dāng)需要喝酒時(shí)則可以用這個(gè)杯子裝酒。同樣的道理,當(dāng)我們需要頁(yè)面呈現(xiàn)什么樣的內(nèi)容,動(dòng)態(tài)頁(yè)就可以實(shí)時(shí)去裝什么內(nèi)容呈現(xiàn)給用戶(hù)。我們把實(shí)際的內(nèi)容信息存放在數(shù)據(jù)庫(kù)中,動(dòng)態(tài)頁(yè)通過(guò)唯一標(biāo)識(shí)(ID)到數(shù)據(jù)庫(kù)中查找相應(yīng)的內(nèi)容存放到容器中并顯示給用戶(hù),當(dāng)今主流動(dòng)態(tài)頁(yè)通常以.jsp、.php和.aspx為后綴名。
動(dòng)態(tài)網(wǎng)頁(yè)流程圖
既然動(dòng)態(tài)化與靜態(tài)化是相對(duì)的,那它們之間的優(yōu)缺點(diǎn)大部分也是相對(duì)的,在此就不再進(jìn)行贅述。
隨著領(lǐng)導(dǎo)對(duì)網(wǎng)站重視程度的提高,廣西網(wǎng)絡(luò)廣播電視臺(tái)在帶寬和硬件投入上也逐漸增加,已經(jīng)具備了實(shí)行動(dòng)態(tài)化為主、靜態(tài)化為輔的部署方式。經(jīng)過(guò)研發(fā)人員討論并經(jīng)領(lǐng)導(dǎo)同意后,著手實(shí)時(shí)了動(dòng)態(tài)化改造。下面介紹需要?jiǎng)討B(tài)化的幾個(gè)大概場(chǎng)景:
1.匯總頁(yè)需要?jiǎng)討B(tài)化。為了方便網(wǎng)友查找和閱讀,以及搜索引擎更加方便收錄網(wǎng)站內(nèi)容,幾乎所有網(wǎng)站都會(huì)有一些匯總性質(zhì)的頁(yè)面,比如列表頁(yè)和搜索頁(yè)。匯總頁(yè)因?yàn)閿?shù)據(jù)量非常龐大,特別是一些大型網(wǎng)站,稿件量動(dòng)輒上千萬(wàn),這么多數(shù)據(jù)在一個(gè)頁(yè)面上顯示的話,即使是靜態(tài)頁(yè)加載速度也會(huì)非常緩慢,如果用戶(hù)電腦性能差點(diǎn)還有可能導(dǎo)致死機(jī),所以這類(lèi)型的頁(yè)面通常需要使用分頁(yè)技術(shù)將所有文稿分到若干個(gè)頁(yè)面,每個(gè)頁(yè)面顯示若干條。如果使用靜態(tài)化開(kāi)發(fā),隨著稿件的增加,根據(jù)參數(shù)的不同,每操作一條稿件就需要重新生成所有可能的靜態(tài)頁(yè),這將耗費(fèi)大量時(shí)間和大量的服務(wù)器性能。
2.存在大量稿件并且服務(wù)器性能或者數(shù)量足夠的情況下建議動(dòng)態(tài)化。如果網(wǎng)站的文稿數(shù)量非常龐大,全部靜態(tài)化會(huì)給運(yùn)維造成不小的麻煩,特別是在需要進(jìn)行數(shù)據(jù)遷移和批量刪除數(shù)據(jù)的時(shí)候。廣西網(wǎng)絡(luò)廣播電視臺(tái)在實(shí)際的運(yùn)維過(guò)程中,曾經(jīng)出現(xiàn)過(guò)存儲(chǔ)故障導(dǎo)致需要遷移數(shù)據(jù)的問(wèn)題,以及根據(jù)領(lǐng)導(dǎo)的決定需要大批量修改文稿數(shù)據(jù)的情況,當(dāng)時(shí)網(wǎng)站總靜態(tài)頁(yè)數(shù)量超過(guò)百萬(wàn),加之網(wǎng)站進(jìn)行了防篡改同步設(shè)置,遷移完成后還需要重新同步所有頁(yè)面,經(jīng)過(guò)網(wǎng)站維護(hù)人員評(píng)估,這些文件全部遷移并重新同步完成大概需要五天時(shí)間。所以類(lèi)似于這種情況,建議使用動(dòng)態(tài)化開(kāi)發(fā)部署模式。
3.需要頻繁修改的情況下建議使用動(dòng)態(tài)化。正如上面所述,每一篇稿件最少對(duì)應(yīng)一個(gè)靜態(tài)頁(yè)面,如果模板頁(yè)需要經(jīng)常反復(fù)修改,每改動(dòng)一處就需要重新生成全部稿件頁(yè)面,這將耗費(fèi)大量時(shí)間和服務(wù)器性能資源。
動(dòng)態(tài)頁(yè)的基本步驟是,管理員將文稿、視頻、圖片通過(guò)CMS系統(tǒng)錄入到數(shù)據(jù)庫(kù)中,并將數(shù)據(jù)的唯一標(biāo)識(shí)發(fā)布到網(wǎng)站前臺(tái)展示,用戶(hù)根據(jù)唯一標(biāo)識(shí)即可獲取并查看信息。
動(dòng)態(tài)頁(yè)常見(jiàn)的地址格式,如http∶//news.gxtv.cn/News.aspx?id=211,用戶(hù)根據(jù)這個(gè)地址就可以訪問(wèn)到管理員發(fā)布的詳細(xì)信息,其中News.aspx是動(dòng)態(tài)頁(yè)地址,數(shù)字就是找到相應(yīng)信息的唯一標(biāo)識(shí)參數(shù)。
動(dòng)態(tài)詳情頁(yè)代碼片段節(jié)選:
一個(gè)大型網(wǎng)站的開(kāi)發(fā)和部署所需要考慮的并不僅僅是開(kāi)發(fā)人員的開(kāi)發(fā)能力,也不僅僅是能實(shí)現(xiàn)效果就可以了,在網(wǎng)站項(xiàng)目的實(shí)際開(kāi)發(fā)和部署過(guò)程中,盲目追求靜態(tài)化并不可取,需要綜合考慮各方面的因素。當(dāng)下在各大搜索引擎比如百度上搜索“靜態(tài)頁(yè)”“動(dòng)態(tài)頁(yè)”,查到的資料大多都是說(shuō)靜態(tài)化的優(yōu)點(diǎn)以及如何將頁(yè)面靜態(tài)化的方法等,往往忽略了靜態(tài)化相對(duì)于動(dòng)態(tài)化所存在的缺點(diǎn),靜態(tài)化和動(dòng)態(tài)化并不是兩個(gè)非黑即白的存在,在項(xiàng)目實(shí)際運(yùn)行中,我們會(huì)發(fā)現(xiàn)不論是動(dòng)態(tài)化還是靜態(tài)化都各有優(yōu)缺點(diǎn),所以就需要我們尋找“黑”與“白”之間的“灰”,需要做到動(dòng)靜結(jié)合。廣西網(wǎng)絡(luò)廣播電視臺(tái)除了一些需要頻繁訪問(wèn)數(shù)據(jù)庫(kù)的頁(yè)面例如網(wǎng)站首頁(yè)、各頻道首頁(yè)仍保留靜態(tài)化外,其他頁(yè)面全部進(jìn)行了動(dòng)態(tài)化改造,改造完成后的系統(tǒng)至今運(yùn)行穩(wěn)定,將來(lái)我們將繼續(xù)研究和探索動(dòng)態(tài)與靜態(tài)的比例,爭(zhēng)取達(dá)到速度、性能以及用戶(hù)體驗(yàn)上的最優(yōu)平衡。