電商系統中的靜態頁解決方案

来源:https://www.cnblogs.com/javashop-docs/archive/2019/09/06/11474906.html
-Advertisement-
Play Games

概述 靜態頁面生成是常用的提升性能手段,將一些高併發、變化頻率低、對延遲容忍度高的頁面生為靜態頁面,在電商場景中首頁、商品詳情頁、幫助中心頁、專題頁都是符合特征的頁面。通過生成靜態頁直接輸出給瀏覽器,能夠有效的減少資料庫及cpu的負載。 一般說來,靜態頁的生成和展示有如下幾個裝置: 頁面生成裝置 頁 ...


概述

靜態頁面生成是常用的提升性能手段,將一些高併發、變化頻率低、對延遲容忍度高的頁面生為靜態頁面,在電商場景中首頁、商品詳情頁、幫助中心頁、專題頁都是符合特征的頁面。通過生成靜態頁直接輸出給瀏覽器,能夠有效的減少資料庫及cpu的負載。

一般說來,靜態頁的生成和展示有如下幾個裝置:

  • 頁面生成裝置
  • 頁面寫入裝置
  • 頁面存儲裝置
  • 頁面讀取裝置
  • 頁面顯示裝置

 

 

總體分為三大類:頁面的生成,頁面的存儲和頁面的讀取,其難點分析如下:

註:本文均以javashop電商系統中的解決方案為例

 

難點與解決方案

頁面生成難點

 一、SEO問題

頁面的生成方案可能是多樣的,主要是看是否採用了前後端分離的設計,如果採用了前後端分離,如果直接使用前端框架的源碼會存在seo失效的問題,因為數據是rest api返回的,前端框架o(如vue)需要將這些數據在瀏覽器中渲染後才會形成用戶能看到的效果,而對於seo的爬蟲來講,他不會執行vue的渲染過程,所以seo爬蟲看到的是沒有數據填充的html代碼,導致seo幾無效。

在javashop電商系統的7.0版本中已經採用了前後端分離技術,相應的解決方案是採用nodejs的伺服器端渲染,網頁生成裝置通過httpclient先去nodejs服務中抓取vue渲染過的html(已經填充好數據 了),再存入存儲裝置。

在javashop電商系統的6.x版本中沒有前後端分離技術,頁面生成是通過freemarker解析模板來生成的,沒有seo問題,這和常見的生成沒有什麼區別,在這裡不再贅述。

二、頁面同步

當頁面內容發生變化時,相應的頁面生成裝置要被觸發,javashop電商系統中在相應業務中有比較齊全的非同步消息發送,比如商品信息的變更,首頁樓層的變化等(javashop使用的是rabbitmq),在頁面生成模塊中對這些消息做了響應,觸發相應的頁面生成動作。

 頁面存儲的分散式難點

頁面存儲有多種選擇如硬碟、記憶體、緩存甚至雲端。如果採用硬碟或記憶體都存在分發和更新的一致性問題,綜合考慮,javashop電商系統中採用的Redis緩存做存儲頁面方案。

頁面讀取高併發難點

在由Redis中讀取時,可以選擇通過java讀取通過tomcat等輸出給瀏覽器,這種方式大多是要再由nginx等代理輸出,中間層較多,對於併發優化,參數調優要求也就過高。

javashop電商系統中採用nginx+lua腳本直接讀取redis並輸出的方案,這樣減少了中間層,還可以在Nginx中做本地緩存提高性能。

 

 

頁面展示動靜結合

在電商場景中,商品詳細頁面中庫存數據是有時時性要求的,且是高併發的。javashop在商品詳細靜態頁中會通過非同步請求庫存api來時時獲取庫存,為了提供較高的併發能力,庫存是存儲在redis中的。

 

 

 

頁面中其它時時數據,如會話狀態、購物車bar等都可以通過此方案來解決。

以上是基於Javashop7.0電商系統中靜態頁架構總的一套生成及顯示方案,在具體實現細節中還要註意緩存可能被穿透、lua連接池、頁面壓縮(redis傳輸的包過大會大幅降低性能)、nginx參數優化等問題。

當然在不同的業務場景下實現的方案是多種多樣的,僅以此方案拋磚引玉,供大家參考。

易族智匯(javashop)原創文章

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式,它採用集中式存儲管理應用的所有組件的狀態,註意:使用前需要先載入vue文件才可以使用(在node.js下需要使用Vue.use(Vuex)來安裝vuex插件,在瀏覽器環境下直接載入即可,vuex會自行安裝) vuex的使用方法很簡單,首 ...
  • 在項目中常常需要用級聯地址,為了實現這個功能,大家肯定會瘋狂得找插件快速實現,但是博主就喜歡使用純js來實現。 首先建立一個二維數組,第一列存省,第二列存城市並用分隔符分隔 建立兩個一維數組,一個存省,一個存城市 創建兩個初始變數,一個存當前選中得省,一個存當前選中得城市 給省的select選擇框添 ...
  • 先貼一張圖片做個例子 看不清圖片的朋友可以右鍵圖片,在<新標簽頁中打開圖片>; 可以看到,由於內容過長,導致後面操作的增刪改要拉到最後才能操作. 在我們的FastAdmin中,目前我還沒找到可以調整列表大小的文檔,如果有,歡迎大家告知.下麵是我用來解決這個問題的方法 我們可以在生成的頁面好添加兩段代 ...
  • 1 2 3 4 5 Document 6 13 21 22 23 24 25 ...
  • 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style type="text/css"> 7 #div1{ 8 width: 200px; 9 ... ...
  • 上一篇我們主要講解了函數的執行過程和原理,本篇我們將介紹函數的另外兩個特殊表現:閉包和立即執行函數。 一 閉包 1, 閉包的形成 之前我們提到,函數執行完畢,馬上就會銷毀自己的AO對象。但是如果遇到下麵這種情況:有子函數的定義,並將子函數返回。它真的就完全銷毀了自己的AO對象嗎? 這將列印什麼呢?表 ...
  • extend是jQuery中一個比較核心的代碼,如果有查看jQuery的源碼的話,就會發現jQuery在多處調用了extend方法。 作用 1. 對任意對象進行擴展 2. 擴展某個實例對象 3. 對jquery本身的實例方法進行擴展 實現 基礎版本, 對簡單對象進行擴展 jQuery.prototy ...
  • 本架構主要目的是改進軟體開發中松耦合、增加模塊的重用性、提高開發效率。 在常規的模塊間方法直接調用式開發中,新增的功能對原有模塊代碼的穩定性、重用性破壞大,不利於軟體的後期維護,且開發效率低。 另外,在傳統的軟體開發方法中,如果新增的功能的邏輯在其它模塊需要重覆使用,則只能通過copy代碼或方法調用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...