



靜態(tài)頁(yè)面生成是常用的提升性能手段,將一些高并發(fā)、變化頻率低、對(duì)延遲容忍度高的頁(yè)面生為靜態(tài)頁(yè)面,在電商場(chǎng)景中首頁(yè)、商品詳情頁(yè)、幫助中心頁(yè)、專題頁(yè)都是符合特征的頁(yè)面。通過(guò)生成靜態(tài)頁(yè)直接輸出給瀏覽器,能夠有效的減少數(shù)據(jù)庫(kù)及cpu的負(fù)載。
一般說(shuō)來(lái),靜態(tài)頁(yè)的生成和展示有如下幾個(gè)裝置:
總體分為三大類:頁(yè)面的生成,頁(yè)面的存儲(chǔ)和頁(yè)面的讀取,其難點(diǎn)分析如下:
注:本文均以javashop電商系統(tǒng)中的解決方案為例
頁(yè)面生成難點(diǎn)
一、SEO問(wèn)題
頁(yè)面的生成方案可能是多樣的,主要是看是否采用了前后端分離的設(shè)計(jì),如果采用了前后端分離,如果直接使用前端框架的源碼會(huì)存在seo失效的問(wèn)題,因?yàn)閿?shù)據(jù)是rest api返回的,前端框架o(如vue)需要將這些數(shù)據(jù)在瀏覽器中渲染后才會(huì)形成用戶能看到的效果,而對(duì)于seo的爬蟲來(lái)講,他不會(huì)執(zhí)行vue的渲染過(guò)程,所以seo爬蟲看到的是沒(méi)有數(shù)據(jù)填充的html代碼,導(dǎo)致seo幾無(wú)效。
在javashop電商系統(tǒng)的7.0版本中已經(jīng)采用了前后端分離技術(shù),相應(yīng)的解決方案是采用nodejs的服務(wù)器端渲染,網(wǎng)頁(yè)生成裝置通過(guò)httpclient先去nodejs服務(wù)中抓取vue渲染過(guò)的html(已經(jīng)填充好數(shù)據(jù) 了),再存入存儲(chǔ)裝置。
在javashop電商系統(tǒng)的6.x版本中沒(méi)有前后端分離技術(shù),頁(yè)面生成是通過(guò)freemarker解析模板來(lái)生成的,沒(méi)有seo問(wèn)題,這和常見(jiàn)的生成沒(méi)有什么區(qū)別,在這里不再贅述。
二、頁(yè)面同步
當(dāng)頁(yè)面內(nèi)容發(fā)生變化時(shí),相應(yīng)的頁(yè)面生成裝置要被觸發(fā),javashop電商系統(tǒng)中在相應(yīng)業(yè)務(wù)中有比較齊全的異步消息發(fā)送,比如商品信息的變更,首頁(yè)樓層的變化等(javashop使用的是rabbitmq),在頁(yè)面生成模塊中對(duì)這些消息做了響應(yīng),觸發(fā)相應(yīng)的頁(yè)面生成動(dòng)作。
頁(yè)面存儲(chǔ)的分布式難點(diǎn)
頁(yè)面存儲(chǔ)有多種選擇如硬盤、內(nèi)存、緩存甚至云端。如果采用硬盤或內(nèi)存都存在分發(fā)和更新的一致性問(wèn)題,綜合考慮,javashop電商系統(tǒng)中采用的Redis緩存做存儲(chǔ)頁(yè)面方案。
頁(yè)面讀取高并發(fā)難點(diǎn)
在由Redis中讀取時(shí),可以選擇通過(guò)java讀取通過(guò)tomcat等輸出給瀏覽器,這種方式大多是要再由nginx等代理輸出,中間層較多,對(duì)于并發(fā)優(yōu)化,參數(shù)調(diào)優(yōu)要求也就過(guò)高。
javashop電商系統(tǒng)中采用nginx+lua腳本直接讀取redis并輸出的方案,這樣減少了中間層,還可以在Nginx中做本地緩存提高性能。
頁(yè)面展示動(dòng)靜結(jié)合
在電商場(chǎng)景中,商品詳細(xì)頁(yè)面中庫(kù)存數(shù)據(jù)是有時(shí)時(shí)性要求的,且是高并發(fā)的。javashop在商品詳細(xì)靜態(tài)頁(yè)中會(huì)通過(guò)異步請(qǐng)求庫(kù)存api來(lái)時(shí)時(shí)獲取庫(kù)存,為了提供較高的并發(fā)能力,庫(kù)存是存儲(chǔ)在redis中的。
頁(yè)面中其它時(shí)時(shí)數(shù)據(jù),如會(huì)話狀態(tài)、購(gòu)物車bar等都可以通過(guò)此方案來(lái)解決。
以上是基于Javashop7.0電商系統(tǒng)中靜態(tài)頁(yè)架構(gòu)總的一套生成及顯示方案,在具體實(shí)現(xiàn)細(xì)節(jié)中還要注意緩存可能被穿透、lua連接池、頁(yè)面壓縮(redis傳輸?shù)陌^(guò)大會(huì)大幅降低性能)、nginx參數(shù)優(yōu)化等問(wèn)題。
當(dāng)然在不同的業(yè)務(wù)場(chǎng)景下實(shí)現(xiàn)的方案是多種多樣的,僅以此方案拋磚引玉,供大家參考。
【版權(quán)聲明】:本站內(nèi)容來(lái)自于與互聯(lián)網(wǎng)(注明原創(chuàng)稿件除外),供訪客免費(fèi)學(xué)習(xí)需要。如文章或圖像侵犯到您的權(quán)益,請(qǐng)及時(shí)告知,我們第一時(shí)間刪除處理!謝謝!
售后服務(wù):13534259410 (7×24小時(shí))
在線 Q Q:253849310 (售前咨詢)
深圳無(wú)雙科技,專注于深圳網(wǎng)站建設(shè)、深圳網(wǎng)站設(shè)計(jì)、深圳網(wǎng)站制作。
服務(wù)客戶超3000家,一站式網(wǎng)站建設(shè)及推廣營(yíng)銷解決方案提供商。
我們的價(jià)值觀:誠(chéng)信、坦誠(chéng)、盡責(zé)、創(chuàng)新。期待與您合作!