首页 > 其他分享 >如何避免 Spartacus 重复发送 CMS page 请求

如何避免 Spartacus 重复发送 CMS page 请求

时间:2023-11-17 19:13:52浏览次数:41  
标签:Spartacus 渲染 CMS 应用程序 页面 数据 page 客户端

如下图所示,启用了 SSR 之后,Spartacus 在 CSR 模式下 re-hydration 时,会重复发送一次 CMS page 请求:

可以参考这个 StackOverflow 的讨论,通过下面的代码来阻止 CSR 模式下重复发送 page 请求:

provideConfig(<RoutingConfig>{      routing: { loadStrategy: RouteLoadStrategy.ONCE },    }),

The configured transfer state should work OOTB for some parts of the data, but not for everything. See the source code of cms-store.module.ts, product-store.module.ts and site-context-store.module.ts.

  • cms-store.module.ts
  • product-store.module.ts
  • site-context-store.module.ts

Spartacus服务器端渲染和状态传输

Spartacus是一种用于构建电子商务Web应用程序的Angular框架。服务器端渲染是一种将应用程序的初始渲染推移到服务器端的技术,有助于提高性能和搜索引擎优化。状态传输是服务器端渲染的一个关键方面,它确保客户端在加载时能够获取到与服务器渲染内容一致的应用程序状态。

状态传输在Spartacus中通常涉及到两个方面:页面初始化和数据预取。

页面初始化

页面初始化涉及到将页面的初始状态从服务器传递到客户端,以便客户端能够正确渲染页面。在Spartacus中,这通常包括以下步骤:

  1. 服务器端渲染: 当用户请求页面时,服务器会执行Angular应用程序,并将应用程序的初始状态一起渲染为HTML。

  2. 状态序列化: 服务器会将应用程序的状态序列化为一种数据格式,通常是JSON或类似的格式。

  3. 页面响应: 服务器将HTML响应发送给客户端,同时包含了序列化后的状态数据。状态数据通常嵌入在HTML中,可以在脚本中轻松提取。

  4. 客户端解析: 客户端接收到响应后,可以从HTML中提取状态数据并将其反序列化为客户端应用程序的状态。

下面是一个通用的示例,展示了状态传输的过程:

<!DOCTYPE html>
<html>
<head>
    <!-- 页面的一般标记 -->
</head>
<body>
    <!-- 页面内容 -->
</body>
<script>
    // 客户端脚本
    // 从HTML中提取状态数据
    const serializedState = `<!-- 序列化后的状态数据 -->`;
    const initialState = JSON.parse(serializedState);

    // 使用状态数据初始化客户端应用程序
    initializeApp(initialState);
</script>
</html>

数据预取

数据预取是确保在页面加载时获取所需数据的过程。这有助于减少初始渲染后的数据请求,提高性能。在Spartacus中,数据预取通常包括以下步骤:

  1. 路由匹配: 客户端应用程序根据页面的路由信息来确定需要哪些数据。

  2. 数据获取: 客户端应用程序使用路由信息来发出数据请求,这些请求可能是API请求或其他形式的数据获取。

  3. 数据预取: 客户端应用程序在初始渲染之前获取到数据,并将其存储在应用程序状态中。

下面是一个通用的示例,展示了数据预取的过程:

// 客户端应用程序代码

import { ActivatedRoute } from '@angular/router';
import { DataService } from './data.service';

// 在组件中获取路由参数并预取数据
class MyComponent {
    constructor(private route: ActivatedRoute, private dataService: DataService) {
        this.route.params.subscribe(params => {
            const productId = params.productId;
            this.dataService.getProductData(productId).subscribe(data => {
                // 将数据存储在应用程序状态中
                storeProductData(data);
            });
        });
    }
}

// 数据服务
class DataService {
    getProductData(productId: string) {
        // 发出API请求获取产品数据
        return apiService.getProduct(productId);
    }
}

标签:Spartacus,渲染,CMS,应用程序,页面,数据,page,客户端
From: https://www.cnblogs.com/sap-jerry/p/17839502.html

相关文章

  • PageOfficeV6.0在线打开excel文件给单元格填充数据
    转载:单元格填充数据单元格填充数据注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。PageOffice提供了Workbook对象来实现对Excel文件的数据填充功能,如果只是简单的填充一下数据,那么通过调用Sheet对象的openCell......
  • Pages.Instance is null when installing in subdirectory(ScrewTurn Wiki)
     “/”应用程序中的服务器错误。Pages.Instanceisnull说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.InvalidOperationException:Pages.Instanceisnull源错误:执......
  • 直播平台制作,ViewPager自动轮播,手指按住停止轮播
    直播平台制作,ViewPager自动轮播,手指按住停止轮播对viewpager做一个触摸监听即可。然后判断下up和down事件 //通过监听onTouch事件,设置一个标签isLoop;手指按下时isLoop=false,手指抬起后isLoop=true;    mViewPager.setOnTouchListener(newView.OnTouchListener(......
  • (原创)安卓快速使用简单的ViewPager
    原创声明:本文所有图片和代码皆由本人制作和编写。目录前言目标与效果4步走第一:在布局文件添加ViewPager组件第二:为ViewPager设计布局第三:创建适配器类第四:把布局文件和适配器跟主活动联系起来后记前言这学期刚开的安卓课程,为了写实验上网查资料,只想找简明扼要的教程来让我快速......
  • pbootcms 前台筛选功能扩展到任意字段
    上一篇中提到后台增加了自定义的筛选条件,选择的是author字段,在前台同样需要依据author内容筛选,默认的pboot:selectfield=*仅支持ext_抬头且是选择类型的字段,在前台如果用pboot:selectfield=author是无显示的。apps-home-controller-parsercontroller.php#995addliselect......
  • Spartacus 服务器端渲染(SSR)的 timeout 设置
    如下图所示,SpartacusSSRengine的几种timeout超时机制的设置:其中第122行的3_000写法,意思就是默认的3000毫秒超时时间。在官网能看到对于这些timeout字段的说明:timeout的设置是一个数字,指示SSR服务器在回退到CSR默认的渲染机制之前,尝试呈现页面的时间量(以毫秒......
  • 编译 Spartacus 6.0 时遇到的错误消息
    错误消息如下:CompilingwithAngularsourcesinIvypartialcompilationmode.projects/storefrontlib/shared/components/generic-link/generic-link.component.html:22:6-errorTS2322:Type'string|null'isnotassignabletotype'string|undefine......
  • Spartacus CSR 渲染模式下的 home page 网络请求
    SpartacusCSR渲染模式下的homepage网络请求如下,其中第一个请求就是baseSitesOCCAPI调用。Spartacus是一个开源的、响应式的电子商务前端框架,是基于Angular构建的,旨在帮助企业快速构建现代化的电子商务网站。OCC(OmniCommerceConnect)是Spartacus与后端电子商务平台(通常......
  • 如何给 Spartacus 的 CSR 和 SSR 配置不同的 OCC endpoint
    SAP官方文档里,对CommerceCloudComposableStorefront的occendpoint配置说明的例子如下:provideConfig(backend:{occ:{baseUrl:'https://some.baseUrl.com'},},}),那么如果想为SSR和CSR两种运行方式,配置不同的o......
  • 使用PageHelper.startPage时 net.sf.jsqlparser.parser.ParseException: Encountered
    使用PageHelper.startPage时net.sf.jsqlparser.parser.ParseException:Encountered解决方案对比代码:原来的写法:PageHelper.startPage(page,size,order);List<xxx>list=xxxMapperExt.selectxxx(id,type);修改之后:PageHelper.startPage(page,size);List<xxx>list=xxxM......