千人千面的用户体验,从HTTP响应做起

发布时间:2023年12月25日

在目前这个崇尚个性化的时代,为用户提供量身定制的个性化体验,已经成为企业确立竞争优势,吸引和维系用户的关键。

如果已经开始借助Akamai EdgeWorkers提供的无服务器网络在边缘位置开展各项创新,那么如何能够让借此提供给用户的体验更加个性化,以便与更好地满足用户实际需求?为此不妨从Edge Worker为用户给出的HTTP响应做起。

一、如何实现个性化HTTP响应?

目前很多人在学习使用Akamai EdgeWorkers时,最主要的方式都是为每次访问提供一个唯一页面,页面上包含了有关Edge Worker的信息。然而是否可以通过类似的方式在原有网页上包含某些个性化信息?

这在具体实践中有很大价值,例如根据用户的地理位置或会员等级,在商品详情页上展示不同的折扣价格。

因而我们的问题就比较明确了:是否可以通过Edge Worker数据修改现有网页的HTML主体内容?

二、 Find-replace-stream帮我们实现

这是可以做到的!

EdgeWorkers开发团队提供了一种名为Find-replace-stream的帮助库,顾名思义,借助它我们就可以在HTTP响应的Body部分搜索特定内容并将其替换为其他数据,而替换的数据同样可以通过Edge Worker生成。相关文档、代码库以及范例可访问Edge Workers GitHub代码库。

接下来我们就通过一个实例,一起看看到底该如何实现。首先,准备一个范例页面,类似下图所示:

请注意图中框出来的区域,在这里,Edge Worker通过Edge Scape获取了用户的所在地信息,并将其展示在页面上。这是通过下列方式实现的:

首先我们使用Client Request()设置了一个属性变量USER_LOCATION,其中包含用户的所在国家/地区和城市信息(第61行)。为防止缓存了错误的位置,代码中还将位置信息添加到一个缓存键中(第63行)。

随后使用responseProvider()来实现我们的目的(第36行)。该函数可供我们构建自己的源,并将来自多个API或内容源的响应组合在一起。首先我们需要设置三个重要变量:

  • tosearchfor(第37行)——代表我们要替换掉的文字。本例中,我们要替换的是以硬编码形式写入网页中的“Maryland”字样。
  • newtext(第38行)——替换原内容的新内容,我们会将其设置为上文提到的那个属性变量的值。
  • howManyReplacements(第39行)——针对数据流执行该替换操作的次数。

随后我们针对源网页发起一个HTTP请求(第41行),随后create Response()将使用该请求返回修改后的主页。真正神奇的地方在第46-48行,这几行代码调用Find-replace-stream库将“Maryland”替换成了用户实际所在地。

除此之外,我们只需要额外执行如下几个操作就够了:

  • 在main.js中导入Find-replace-stream库(第10行):

  • 在我们自己的Bundle中包含find-replace-stream.js:
% tar cvzf bundle.tgz main.js bundle.json find-replace-stream.js

三、注意事项

这是一种非常简单的方法,但实际使用中还需要注意如下几个问题:

  • 仅限文本数据。Find-replace-stream在设计上仅限用于文本流,因此请在Property Manager中使用匹配条件,以确保只产生基于文本的响应主体。
  • 响应的大小。HTTP子请求的最大响应可达5MB,为确保成功,请务必让自己的响应主体不要超过这个限制。
  • 子请求的执行时长。response Provider()执行过程中,每个HTTP子请求最长可运行1秒,实际使用中可能很容易就会超出这个限制,导致Edge Worker失败。
  • 考虑使用故障转移技术。实践中发现,在大约40%的时间里,Edge Worker的HTTP子请求都会超时,针对这一问题,Josh Johnson写了一篇很棒的博客文章:在Property Manager中使用站点故障转移,我们可以通过这种方法在遇到此类失败后重新执行Edge Worker。

四、总结

很多现实案例需要使用从Edge Worker得到的数据修改原有网页的内容,Find-replace-stream库大幅简化了这一过程。在配合response Provider()一起使用后,即可获得极为强大的个性化响应能力。

文章来源:https://blog.csdn.net/AKAMAI_CHINA/article/details/135198402
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。