SAP UI渲染模式:客戶端渲染 VS 服務器端渲染

      網友投稿 629 2025-04-01

      我們團隊昨天收到了一個優先級為VERY HIGH的客戶incident.

      這個incident是客戶在使用SAP Spartacus并試圖啟用其服務器端渲染模式(Server Side Rendering,簡稱SSR)時,遇到了問題,因此我有機會回顧之前使用過的SAP UI開發技術里,關于客戶端渲染(Client Side Rendering,簡稱CSR)和服務器端渲染的知識點。

      回顧目錄

      SAP ABAP Webdynpro - 服務器端渲染

      SAP BSP / WebClient UI - 服務器端渲染

      SAP UI5 - 客戶端渲染

      SAP Commerce Cloud Accelerator UI - 服務器端渲染

      Jerry手頭正在處理的incident - SAP * Spartacus Angular UI - 客戶端渲染 & 服務器端渲染

      Jerry 2018年曾經寫過一篇文章,SAP UI和Salesforce UI開發漫談 ,對我曾經工作過的SAP產品里,所使用過的UI開發技術做了泛泛的介紹。

      而本文,則是對這些UI技術采用的頁面渲染方式做一個簡單的總結。

      客戶端渲染 VS 服務器端渲染

      這組概念的比較,在網上有眾多文章介紹。

      客戶端渲染,即客戶端發起HTML網頁請求時,服務器不做任何處理,直接返回靜態的HTML文件。客戶端收到后,執行JavaScript,生成DOM,插入HTML頁面,完成最終頁面的繪制。

      客戶端渲染模式里,視圖源代碼生成,頁面路由,以及應用的業務邏輯,全部放在客戶端實現和運行執。服務器只負責HTML頁面的持久化存儲,因此客戶端渲染應用又稱為胖客戶端應用(Rich Client Application).

      而服務器端渲染模式里,視圖源代碼生成,頁面路由,以及應用的業務邏輯均在服務器端完成,客戶端只負責接收到服務器端渲染好的HTML源代碼并解析。

      兩種渲染方式各有優缺點,及其應用場合。

      SAP ABAP Webdynpro - 服務器端渲染

      應用開發人員以所見即所得的方式開發ABAP Webdynpro的視圖,其源代碼存儲于ABAP系統的數據庫表里。ABAP Webdynpro的視圖同用戶的交互通過Action和Event完成,交互邏輯由ABAP實現,在ABAP服務器端執行。

      比如我開發了一個ABAP Webdynpro UI,在Input字段里輸入一個數字:

      點擊Create按鈕之后,能夠動態生成對應數量的Label和Text View控件:

      而這些UI的動態繪制,是通過服務器端的ABAP編程語言,實現在Create按鈕的事件處理函數里的。點擊Create按鈕,運行在服務器端的ABAP代碼即觸發,動態創建新的UI控件實例。

      SAP BSP / WebClient UI - 服務器端渲染

      SAP BSP的名稱Business Server Page已經告訴我們,這也是一種服務器端渲染技術。SAP WebClient UI基于SAP BSP,封裝了很多開發人員可以直接重用的標簽,提高了UI開發效率。

      舉個例子,下圖是一個典型的使用SAP WebClient UI實現的搜索頁面(searchFrame),第2行和第3行聲明了SAP標準元素庫thtmlb和chtmlb的引用,然后在第11行使用了thtmlb庫里的標簽searchFrame。

      短短29行代碼,就繪制出了如下圖的搜索界面:不僅支持通過下拉菜單更換搜索條件,也支持通過帶有 + 和 - 的圓形按鈕添加或者刪除搜索條件。

      如此一來,應用程序開發人員無需再去編寫原生的HTML代碼和CSS,只需重用searchFrame標簽,在運行時期,標簽對應的Render類會負責生成原生的HTML代碼。在下列高亮ABAP類的方法里設置斷點,就能調試searchFrame界面源代碼在服務器端渲染的明細。

      在Jerry這兩篇文章里,對SAP WebClient UI技術的工作原理有詳細的介紹:

      SAP UI和Salesforce UI開發漫談

      SAP UI 搜索分頁技術

      總結:SAP ABAP Webdynpro,SAP BSP和SAP WebClient UI,頁面源代碼的渲染發生在ABAP服務器端。如果需要調試這些頁面的源代碼生成邏輯,需要找到對應的ABAP類,在ABAP服務器端進行調試。

      SAP UI5 - 客戶端渲染

      Jerry之前的文章 深入學習SAP UI5框架代碼系列之二:UI5 控件的渲染器,對SAP UI5應用的頁面渲染 做過介紹。

      基于客戶端渲染的SAP UI5應用,如果要調試其頁面生成邏輯,需要在瀏覽器里調試JavaScript代碼的執行。

      正因為基于客戶端渲染的應用,其頁面通過JavaScript在瀏覽器的執行而動態生成,因此其內容無法被一般的網絡爬蟲收錄,不利于SEO(Search Engine Optimization,搜索引擎優化).

      Jerry出于好奇,搜索了OpenUI5的Github倉庫,沒有發現其對服務器端渲染模式支持的線索。

      SAP Commerce Cloud Accelerator UI - 服務器端渲染

      Accelerator UI采用和SAP BSP類似的JSP技術,服務器端渲染。

      根據SAP官方文檔,Accelerator UI最終會被SAP Spartacus所替代,所以本文不對Accelerator的JSP展開描述。

      對Accelerator UI JSP實現細節感興趣的朋友可以參考Jerry之前的文章:

      SAP UI和Salesforce UI開發漫談

      SAP Spartacus Angular UI - 客戶端渲染 & 服務器端渲染

      最后再說到Jerry最近手頭上使用的Angular. 作為一款單頁面應用(SPA,Single Page Application)開發框架,為了彌補客戶端渲染技術在搜索引擎優化方面表現不佳的缺陷,Angular也同時支持服務器端渲染模式。

      先看Angular常規的客戶端渲染模式。

      SAP Spartacus的index.html,幾乎就是一個空的HTML頁面:只包含一個空的自定義標簽cx-storefront:

      在客戶端渲染模式下,服務器返回給瀏覽器的第一個請求,包含的正是這個幾乎空白的index.html頁面:

      這個index.html頁面尺寸只有4kB,耗時309毫秒:

      SAP UI渲染模式:客戶端渲染 VS 服務器端渲染

      其后,我們團隊用TypeScript開發,然后編譯成的JavaScript代碼,在瀏覽器里執行,渲染出最終的HTML頁面:

      再看Spartacus的服務器端渲染的表現:服務器收到瀏覽器的頁面請求后,在服務器端即時渲染頁面,并將結果返回:

      在服務器端渲染模式下,第一個HTTP請求的響應數據里,包含了Spartacus home頁面的完整HTML源代碼:

      服務器端渲染模式的支持,為網絡爬蟲解析完整的網頁內容,掃清了障礙。

      我們使用命令行工具curl,模擬網絡爬蟲讀取SAP Spartacus首頁內容,在服務器端和客戶端渲染模式下,讀取到的內容大小比較如下圖所示:

      當然,Angular對服務器端渲染的支持,絕不是開箱即用的。除了引入@angular/platform-server和@nguniversal/express-engine之外,還需要對現有的基于客戶端渲染的應用做一些增強。

      此外,如之前Jerry 文章 Jerry在2020 SAP全球技術大會的分享:SAP Spartacus技術介紹的文字版 提及的,SAP Spartacus是以庫文件的方式發布給SAP合作伙伴使用的。二次開發人員使用Spartacus庫文件,開發出符合自己實際業務需要的Storefront應用,而二次開發過程中,合作伙伴自己編寫的前端代碼,理論上也可能會影響Angular應用服務器端渲染功能的開啟,比如Jerry和同事這次處理的這個優先級為VERY HIGH的客戶incident(具體原因還在分析中).

      希望通過本文舉出的SAP Spartacus的這個實際例子,讓大家對服務器端渲染和客戶端渲染的差異有一個直觀的感受,感謝閱讀。

      Angular HTML JavaScript Scala 渲染

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么在excel中設置列名為數字
      下一篇:HBase Quota的使用
      相關文章
      亚洲成a人片在线观看中文动漫| 亚洲精品无码永久在线观看你懂的| 久久久久久a亚洲欧洲aⅴ| 国产成人亚洲综合| 亚洲国产天堂久久久久久| 亚洲国产精品尤物yw在线| 国产AV日韩A∨亚洲AV电影| 亚洲欧美第一成人网站7777 | 亚洲色精品vr一区二区三区 | 永久亚洲成a人片777777| 亚洲中文字幕丝袜制服一区| 亚洲国产婷婷香蕉久久久久久| 国产亚洲精品美女2020久久| 午夜亚洲国产成人不卡在线| 亚洲成AV人在线观看网址| 亚洲男女内射在线播放| 久久久久久久亚洲精品| 亚洲欧洲精品无码AV| 亚洲av日韩av激情亚洲| 亚洲综合区图片小说区| 亚洲嫩草影院在线观看| 亚洲高清中文字幕免费| 亚洲国产精品嫩草影院| 国产成人综合亚洲绿色| 激情综合色五月丁香六月亚洲| 亚洲国产无套无码av电影| 亚洲av网址在线观看| 亚洲色图综合网站| 亚洲色欲色欲www| 亚洲成a∨人片在无码2023 | 天天综合亚洲色在线精品| 亚洲熟伦熟女新五十路熟妇| 亚洲精品字幕在线观看| 亚洲欧洲日产国码久在线观看 | 亚洲国产精品成人久久蜜臀 | 亚洲av最新在线网址| 亚洲精品白色在线发布| 亚洲乱码日产精品BD在线观看| 亚洲一本一道一区二区三区| 最新亚洲人成网站在线观看| 久久久久亚洲AV综合波多野结衣|