AEM的加速移动页面(AMP)策略/实施

时间:2016-08-23 08:50:18

标签: mobile aem amp-html

在AEM 6.1中为已经为桌面和移动设备渲染的响应式网站实施加速移动页面(https://www.ampproject.org/)的最佳方法/策略是什么?

最初的担忧是您要创建重复的内容页面。那么AMP和普通的html可以共享相同的内容吗? 如果移动设备,您是否总是会重定向到AMP?最好的方法是什么? 作者如何处理AMP和标准页面?

2 个答案:

答案 0 :(得分:3)

需要更多信息才能完全回答您的问题 -

  • 您对响应式设计的态度是什么(如果您支持桌面)?移动网站和桌面网站是否有所不同?
  • 您使用的是什么版本的AEM?
  

作者如何处理AMP和标准页?

创作不是特定于AMP的内容,AMP是您在发布实例而非作者上强制执行的功能/行为。但这取决于您对响应行为的态度 - 单个站点处理移动和桌面还是分开?

a)如果有单独的站点,那么您实际上可以通过为其创建不同的组件/资源类型和页面模板来满足作者的AMP行为(这是在处理AEM 5.6移动站点之前的方式)。 如果您遵循此方法,我可以提供更多详细信息

b)如果有单个站点,那么您应该仅在发布时配置它。

  

AMP和普通html是否可以共享相同的内容?

简而言之,取决于您设计组件的方式和/或您使用的AEM版本。在AEM 6.2中,Adobe引入了content fragments,允许与频道无关的内容管理,即更像资产。

如果您不使用AEM 6.2,即使这样,您也可以通过设计来允许可重用​​的内容。您可以创建包含内容片段的全局空间,然后使用参考组件在不同页面上关联/使用该内容(唯一的挑战是管理全文搜索,如果您的网站上有此内容)。

  

如果移动设备,您是否会始终重定向到AMP,以及最佳方式   这样做?

你采取a)或b)的方法(如第一个答案中所述),管理重定向/重写的本质是在请求中利用用户代理信息。 Apache / httpd允许处理用户代理信息并重写重定向。

对于方法a)您将在确定用户代理是移动用户代理后重定向到您的移动网站,并且方法b)您可以重写网址(而不是重定向)添加允许您使用AMP特定资源脚本的选择器呈现内容。 基于选择器的解决方案是实现网络和AMP的单一网站的一种可能方式

<强>更新

假设您需要缓存AMP版本和普通HTML标记,解决方案是使用特殊选择器来呈现标记的AMP版本。您可以设置组件层次结构 -

让我们说你的基页结构是在一个名为AbstractPageComponent的自定义组件中抽象出来的(这在大多数情况下是为项目需要而定制的基础/组件/页面的副本),并且所有页面组件都扩展了这个组件。你可以做的是创建另一个这样的组件,让我们说AMPAbstractPageComponent,设置这个页面结构类似于标准的抽象组件,即让它有自己的脚本头,正文,内容,页眉,页脚等副本。但请确保你将它们命名为与AbstractPageComponent中的约定不同,您可以通过预先放置的放大器来实现,例如amp-head.html,aem-body.html,amp-content.html。然后会有AMPAbstractPageComponent.html组件呈现脚本,它通过包含相关的AMP脚本和/或AbstractPageComponent脚本来构建页面。

这些脚本中的每一个都应该具有AMP特定的逻辑,并且您需要引用HTML逻辑包含/推迟AbstractPageComponent的脚本。

现在定义选择器脚本以确保AMP特定的再现,假设您的选择器为amp,然后在AbstractPageComponent中创建amp.htmlamp.jsp,并在此脚本中包含{ {1}}

注意:要实施的理想结构是AMPAbstractPageComponent.html - &gt; foundation Page - &gt; AbstractPageComponent - &gt; AMPAbstractPageComponent

我已指定Other page templatesAMPAbstractPageComponent的父级,假设您的网站已存在并且内容页面指的是现有结构。如果您的网站结构允许您在AbstractPageComponent - &gt;之间引入AMPAbstractPageComponent AbstractPageComponent然后你应该这样做,让Other page templates处理AMPAbstractPageComponent选择器。

我上面定义的是第一个更改级别,接下来您需要考虑具有AMP特定处理的组件包含。对于模板中包含的组件,您需要传递选择器amp,如果它进入URL,否则包含组件将呈现其默认脚本(模板中包含的组件而不是拖放组件)。拖放组件将自动尝试如果可用,则呈现amp脚本,如果不是,则默认为自己的脚本。

请注意,这是基于选择器分辨率的方法,对于执行AMP特定工作的实际实现,您可能还需要做其他事情,另一件事我没有包括管理组件渲染,即如果你普通的html包含一个解析器,而你的AMP实现中没有包含该脚本,你的组件将不会呈现。因此,您要么必须在AMP特定脚本中复制这些内容,要么必须包含AbstractComponent的脚本以包含此类组件

做一个小型PoC,我通过阅读你指定的链接,基于对AMP的作用的高级理解,给出了这种方法。

答案 1 :(得分:0)

我实际上正在考虑实现相同的目标,这是迄今为止布局的思路(未经测试):

  • 在foundation / components / primary / cq / page(在/ apps下覆盖它)添加名为Page.amp.jsp的新页面扩展处理程序<%@include file="proxy.jsp" %>内容
  • 将页面渲染器添加到您呈现html页面的同一位置的应用程序逻辑中

其余的应该由ootb sling URL resolution handler

完成