用例
- 我有一个Excel在DAM包含预定义的10列。
- 行从3000到10000不等。没有PI SPI数据涉及今天或未来。
- 我们需要在最终用户输入搜索词匹配excel列a的页面上显示结果
- 它可以更复杂,如-给我那些行,其中用户输入存在于列A + C + d
- 这种搜索方式与典型的"搜索"在AEM -优化搜索API,索引等
Design-1
- 有一个查找组件
- 将基于资源的servlet绑定到组件资源。
- 读取整个excel服务器端(servlet)并生成JSON。
- 在dispatcher上缓存整个JSON
- 对于每个即将到来的请求,JSOn从缓存中提供,并在excel数据发布中无效。
- 让客户端拥有完整的JSON并实现搜索逻辑以显示相关结果。
优点-优化和高效-服务器上的点击率较低,整个数据(这不是巨大的)被加载到内存DOM中,以便快速直观地返回搜索结果。
缺点-搜索逻辑是业务逻辑,是在客户端实现的。在未来,如果有一个用例,做一些像JCR查找在excel中匹配的值,那么它必须为整个数据集做JSON返回所有这样的字段。
in - memory DOM如何知道数据在后端被刷新了?在发布时,调度程序将使JSON响应无效,但是浏览器DOM如何知道并更新自己呢?
设计2
- 有一个查找组件
- 将基于资源的servlet绑定到组件资源。
- 读取整个excel服务器端(servlet),实现搜索逻辑并生成结果JSON 在dispatcher上,JSON被缓存,选择器作为搜索词。
- 如果相同的请求有相同的搜索词,那么只有缓存的结果将被传递,否则请求将击中服务器(AEM Publisher)。
- 前端JS只获取JSON的搜索结果,并简单地显示它。
优点—搜索逻辑是业务逻辑,在服务器端实现。更安全的。数据转换逻辑驻留在服务器端。透视数据量不大
缺点-效率较低-服务器上更多的点击(缓存包含json与搜索词作为选择器-所以搜索词需要匹配json从缓存返回),每次搜索页面刷新。
你更喜欢哪种设计?或者你有没有其他更好的设计?
我会选择选项a。解析Excel文件是昂贵的,可能会增加1-2秒的延迟(无论你要使用哪种Java电子表格API: Apache POI等)。
10K行不是很多,可以在客户端加载。
in - memory DOM如何知道数据已在后端刷新?在发布时,调度程序将使JSON响应无效,但是浏览器DOM如何知道并更新自己呢?
这取决于你的实现。您可以在每次用户搜索时获取电子表格JSON,也可以只获取一次并缓存到DOM中。对于后一种情况,在刷新之前数据将是实时的。