React服務端渲染之移動端實踐

隨著React服務端渲染越來越流行实抡,筆者也想嘗嘗鮮抡笼,經(jīng)過半個月的折騰,筆者把原先的客戶端渲染項目甜奄,通過結(jié)合 next.js 構(gòu)建了一個服務端渲染的同構(gòu)項目柠横。再加上開啟服務器頁面緩存,以及靜態(tài)資源CDN加速優(yōu)化贺嫂,最終使得網(wǎng)站首屏渲染時間在0.6秒(即:DOMContentLoaded 的時間)左右滓鸠,大大提高了頁面的響應速度,進一步提升用戶體驗第喳。

渲染截圖

ssr.png

項目線上地址

前端架構(gòu)源碼

架構(gòu)簡要說明

很顯然,這是移動端網(wǎng)站踱稍,選用了 React16 + next.js4 + antd-mobile2 + redux 的技術棧曲饱,算是筆者學習React 兩年來第一個服務端渲染的項目。由于愛折騰珠月,筆者喜歡自己動手搭腳手架扩淀,期間參考了各路大牛的源碼和想法,非常感謝啤挎!所以這次做下總結(jié)驻谆,如果恰好能幫到在React服務端渲染方面有困惑的同學,何樂而不為庆聘?

  • 目錄胜臊,具體參照源碼所示


    image.png
  • 代碼規(guī)范,本架構(gòu)通過 eslint 配備了完善了 React 語法規(guī)范檢查伙判。
  • 樣式象对,由于 next.js 目前的版本(v 4.2)并不建議配置loader(據(jù)說下個版本會支持),所以我們的樣式最好能提前編譯好宴抚,為此筆者額外配置了 webpack-handle-css.js 的文件勒魔,用于樣式的實時編譯和打包。同時引入了 antd-mobile 作為輔助UI庫菇曲,并且支持主題配置冠绢。當然,本站依然使用了rem布局常潮,至于字形圖標的使用請參閱這里弟胀。
  • next,next有自己的運行機制,你需要注意和遵守邮利,比如你的所有頁面都必須放到根目錄下的pages文件夾里弥雹,至于路由和文件路徑的關系,在 server.js 里有展示延届。另外剪勿,next 有自己的路由模塊,所以這里用不到 react-router方庭。更多詳情
  • 組件厕吉,可以復用的模塊要寫成組件;不能復用械念,但是邏輯比較復雜的模塊也應該寫成組件头朱。其余的,都寫在pages里就行了龄减。組件分為無狀態(tài)組件项钮,和有狀態(tài)組件,需要指出的是希停,在next.js的架構(gòu)中烁巫,如果你寫的是無狀態(tài)組件,可以不用引入 react宠能,如:
     export default ({ text }) => (
        <div className="h100 flex jc-center ai-center">
        <i className="i-loading rotate font32 c999" />&nbsp;
        <span>{text || '加載中...'}</span>
      </div>
    )
    
  • redux亚隙,初始化的redux數(shù)據(jù),統(tǒng)一寫在每個page的getInitialProps生命周期里违崇,它的特點是可以在服務端渲染和客戶端渲染中都能使用阿弃。更多細節(jié)都在源碼里,歡迎交流探討羞延。
  • 部署上線渣淳,這是個同構(gòu)項目,需要配置服務器node環(huán)境肴楷,在 server.js 文件里水由,筆者開啟了服務端頁面緩存,但對于有用戶數(shù)據(jù)的頁面則是選擇了關閉緩存赛蔫,避免串號問題砂客,另外在 next.config.js 文件里,通過設置 assetPrefix 呵恢,將所有靜態(tài)資源放入CDN中鞠值,進一步提高網(wǎng)站首屏渲染速度。CDN 中的靜態(tài)資源需要手動導出渗钉,運行 npm run export彤恶,資源將被打包到根目錄下的 outCDN 中钞钙。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市声离,隨后出現(xiàn)的幾起案子芒炼,更是在濱河造成了極大的恐慌,老刑警劉巖术徊,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本刽,死亡現(xiàn)場離奇詭異,居然都是意外死亡赠涮,警方通過查閱死者的電腦和手機子寓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笋除,“玉大人斜友,你說我怎么就攤上這事±” “怎么了鲜屏?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長国拇。 經(jīng)常有香客問我墙歪,道長,這世上最難降的妖魔是什么贝奇? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮靠胜,結(jié)果婚禮上掉瞳,老公的妹妹穿的比我還像新娘。我一直安慰自己浪漠,他們只是感情好陕习,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著址愿,像睡著了一般该镣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上响谓,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天损合,我揣著相機與錄音,去河邊找鬼娘纷。 笑死嫁审,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的赖晶。 我是一名探鬼主播律适,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捂贿?” 一聲冷哼從身側(cè)響起纠修,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厂僧,沒想到半個月后扣草,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡吁系,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年德召,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汽纤。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡上岗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕴坪,到底是詐尸還是另有隱情肴掷,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布背传,位于F島的核電站呆瞻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏径玖。R本人自食惡果不足惜痴脾,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梳星。 院中可真熱鬧赞赖,春花似錦、人聲如沸冤灾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韵吨。三九已至匿垄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間归粉,已是汗流浹背椿疗。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盏浇,地道東北人变丧。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像绢掰,于是被迫代替她去往敵國和親痒蓬。 傳聞我的和親對象是個殘疾皇子童擎,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容