[译] 用 Workers 让静态网站动态化

news/2024/5/9 20:10:12/文章来源:https://blog.csdn.net/qq_36320160/article/details/101377406
  • 原文地址:Using Workers To Make Static Sites Dynamic
  • 原文作者:Guest Author
  • 译文出自:掘金翻译计划
  • 本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO1/using-workers-to-make-static-sites-dynamic.md
  • 译者:MeFelixWang
  • 校对者:Park-ma

以下是 Gambling.com 集团首席开发人员 Paddy Sherry 的客座文章。他们使用 Cloudflare 为全球受众提供服务,构建绩效营销网站和工具。Paddy 是一位网站性能狂热爱好者,且对无服务器计算很感兴趣。

选择在大型站点网络上使用的技术是必须正确的关键架构决策。我们构建静态网站,但需要找到一种方法让它们动态地执行地理定位、访问限制和 A/B 测试等操作。这篇文章分享了我们在使用 Workers 解决这些挑战时学到的经验。

我们的背景

在 Gambling.com 集团,我们在所有网站上都使用 Cloudflare,因此我们对 Workers 的好奇心水平高于大多数人。我们是静态网站的忠实粉丝,因为没有什么比纯 HTML 更快。我们一直在寻找这样的技术并应用于部分测试计划,因此是最先获得该功能的人之一。

我们如此热衷于试验 Workers 的原因是,对于任何运行静态站点的人来说,99% 的时间都可以满足产品要求,但总有一次需要进行一些计算而不是发回静态响应。

直到最近,最合适的选择是添加一些在页面加载后触发的 JavaScript,并改变 UI 或从端点获取数据。这样做的缺点是用户在加载后会看到页面移位,即使脚本是异步加载的。闪烁的页面可能令人愤怒,没有什么比尝试点击链接但打开了别的东西更令人恼火,因为 DOM 在中途改变了。

一个常见的解决方法是隐藏页面内容,直到所有 JavaScript 都已处理完毕,但这会让你停留在一个缓慢加载的脚本,而且用户在浏览器完成下载之前会看到一个空白页。即使所有脚本都迅速下载,也会有网速较慢或远离数据中心的用户可以响应他们的请求。

输入 Cloudflare Workers。开发人员可以处理这些请求,并在它们到达服务器之前动态响应。没有延迟加载计算,Workers 在后台响应非常快,过渡基本不可见。

我们的 Workers 用例

自使用 Workers 以来,我们一直在尝试各种方法,在不改变我们为网站网络提供的所有智能技术的前提下使我们的静态网站更加动态化。

地理定位

我们以多种语言在全球运营静态网站,并使用 Cloudflare 为其提供服务。用户通过谷歌搜索或点击互联网上其他地方的链接到达网站。通常,他们登陆的网站可能和兴趣不完全匹配,因为他们点击的链接并未指向最佳位置。例如,加拿大的用户登陆英国网站,看到英镑而不是加拿大元的价格,或者意大利的一个人登陆美国网站看到的是英文内容而不是意大利文。

静态网站的难题在于页面加载速度异常快,一旦到达站点,我们就无法根据用户的偏好定制体验了。

有了 Workers,我们可以通过读取边缘的请求报头来解决这个问题。Cloudflare 检测传入请求的原始 IP,并将两个字母的国家代码附加到名为 “Cf-Ipcountry” 的报头中。我们可以编写一个简单的 worker 来读取此报头,检查国家代码,然后重定向到相应的站点版本(如果存在的话)。

addEventListener('fetch', event => {event.respondWith(fetchAndApply(event.request))
})async function fetchAndApply(request) {const country = request.headers.get('Cf-Ipcountry').toLowerCase() let url = new URL(request.url)const target_url = 'https://'   url.hostname   '/'   countryconst target_url_response = await fetch(target_url)if(target_url_response.status === 200) {return new Response('', {status: 302,headers: {'Location': target_url}})     } else {return response}
}

用户现在正在获取该网站的本地化版本,这能更好地为他们的兴趣服务,并且跳出率更低,因为内容是根据他们的位置定制的。

限制对内容的访问

对于大多数网站,有时页面需要在线但不向公众开放。例如,代理商在最终获准之前向客户展示的新登陆页。

在某些情况下,公司可能需要多层安全措施来保护其知识产权并避免在准备就绪之前让用户看到某些内容,但对于大多数情况而言,只需要隐藏信息并不需要军事级别的安全性。

使用内容管理系统,这很容易做到,但静态站点很难实现。使用 Workers,我们能够拼凑一个简单的解决方案阻止访问页面,除非请求中存在某个也可以用于查找参数的报头。

addEventListener('fetch', event => {event.respondWith(fetchAndApply(event.request))
})async function fetchAndApply(request) {  var ua = request.headers.get('user-agent');let url = new URL(request.url);if (ua.indexOf('MY-TEST-STRING')) {return fetch(request)} else {return new Response('Access Denied',{ status: 403, statusText: 'Forbidden' })}
}

现在可以向公众隐藏页面,而无需对安全性或身份验证技术进行大量投入,但对于需要进行这些限制的人来说仍然很容易访问。

A/B 测试

优化流量的重要工具需要从 A/B 测试中领悟。虽然不缺乏功能强大的 A/B 测试工具,但大多数都需要添加一个在页面加载后改变 UI 的 JavaScript。在最佳条件下,这可能是肉眼无法察觉的,但并非所有用户都具有最佳的网速,并且有些用户在页面加载后会经历闪烁。如上所述,这是一种带有负面后果的糟糕经历。

我们能够通过调用 A/B 测试脚本 URL 的 Worker 来解决这个问题,在将更改后的响应发送给用户之前获取代码并重新绘制 UI。结果是用户在页面加载时看到变体,并且在第一个像素渲染后不会有任何移动。

为什么 Workers 为我们消除了障碍

Workers 允许我们让静态网站变得动态化。当然,我们可以通过延迟加载 JavaScript 完成此操作,但用户的体验会很差。

第二种选择是迁移到服务器渲染的站点,但即使有这样的架构转换,也很难在全球拥有足够的服务器来为所有位置的用户提供相同的体验。进行这样的改变也是一项重大的 IT 投资。

另一方面,Workers 可以插入到我们的架构顶部,无需安装或添加。这是一个单击 Cloudflare 仪表板中的按钮并立即访问 Worker 乐园的问题。在探究任何新技术或供应商时所造成的臭名昭著的时间浪费并没有发生在商定试验或建立开发环境时。

为什么我们选择 AWS Lambda 上的 Workers

值得注意的是,Workers 不是无服务器计算的唯一选择,因为这是行业普遍的发展方向。虽然 AWS Lambda 是一个强有力的竞争者,但我们选择了 Workers,因为 Lambda 需要与更多 AWS 服务集成才能启动,而最近的性能测试表明 Workers 比 Lambda 更快。

虽然我们可能因为不同需求选择了 AWS,但 Workers 仍然更容易启动,且运行迅速。

我们希望看到的改进

尽管我们获得了压倒性的批准,但我们还是希望看到一些额外的东西。

除非你有企业计划,否则账户当前可以访问单个 Worker 脚本。这意味着许多不相关的代码存放在一个文件中,虽然这本身并不罕见,但是 Worker 只能触发单个 URL 模式。如果想要只在一些页面上触发功能,这可能会有限制,并且意味着你的 Worker 代码中会有一系列 if 语句,用于确定何时触发它。这不是不可行的,但也不是理想的场景。

随着 Worker Recipe 交换的增长,以及 Cloudflare 继续构建出更多内容,我们期待文档随着更多真实世界的示例而增长。

结论

我们刚刚开始与 Cloudflare Workers 合作。随着团队知识的增长,我们可以在适当的时候使用它来满足我们的产品要求,并且在没有延迟加载 JavaScript 的情况下执行以前不可能的更高级的事情。Workers 仍处于起步阶段,还可以做出改进。我们将密切关注这些并尝试在新功能发布时找到使用它们的方法。

本指南是一个高级概述。有关更深入的解释和代码片段,请查看 Cloudflare Workers 的这篇评论,其中详细解释了一些示例。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_851505.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精选:3个可以下载免费的高质量照片的网站

在您的照片库中加入成千上万张高品质的照片,涵盖各种主题和风格!下面列出的网站提供可用于任何项目的图像,没有限制。您不必担心因为一张小图片的版权而导致麻烦。通过这些网站可以改善你的设计项目,这些是网上提供免费的高质量图…

mouseout、mouseover和mouseleave、mouseenter区别

今天在使用鼠标事件时,用错了mouseout,于是做个测试总结。 结论: mouseenter:当鼠标移入某元素时触发。 mouseleave:当鼠标移出某元素时触发。 mouseover:当鼠标移入某元素时触发,移入和移出…

16个时髦的扁平化设计的 HTML5 CSS3 网站模板

创建网站最好办法之一是使用现成的网站模板或使用开源 CMS 应用程序。所以,今天这篇文章给大家带来的是16款基于 HTML5 & CSS3 的精美的扁平风格网站模板,大家可以借助这些优秀的网站模板创建自己的优秀网站。这些网站模板虽然是收费,但是…

经典网页设计:20个与众不同的国外 HTML5 网站

大家都都知道, HTML5 具备所有最新的技术和功能,帮助我们创造平滑过渡,花式图像滑块和动画。如果你正在考虑使用HTML5 来设计自己的网站,那么这个集合能够帮助你。 在过去的10年里,网页设计师使用 Flash、JavaScript 或…

你应该知道的10个奇特的 HTML5 单页网站

网页设计师努力寻找新的方式来展现内容。其中一个大的趋势是单页网站,现在被世界上的一些大的品牌广泛采用,使用它们来为用户提供一个快速,干净和简单的而且​​美丽的网站。 下面是10个令人惊叹的单页 H​​TML5 的网站,涵盖了简…

经典网页设计:20个创新的 HTML5 网站《上篇》

在过去的10年里,网页设计师使用 Flash、JavaScript 或其他复杂的软件和技术来创建网站。但现在你可以前所未有的快速、轻松地设计或创造互动的、有趣好看的网站。如何创建?答案是 HTML5 。 这篇文章向大家展示20个创新的 HTML5 网站。看看这些惊人的 HTM…

经典网页设计:25个华丽的 CSS 网站作品案例

CSS 是网页设计师和网页开发人员最喜欢的技术之一,因为它有大量新特性、新元素和新技术。创建一个基本的布局可能并不需要很多的时间或精力。但是,如果你想让您的设计脱颖而出,那么就真的需要花费一番功夫。今天,我向大家分享25个…

分享:一组免费的响应式 HTML5 CSS3 网站模板

HTML5 Up! 分享了一组响应式网站模板,这些网站都是基于 HTML5 & CSS3 制作的干净、简单、响应式的网站。每个网站都提供了在线演示并可以免费下载使用。需要注意的是,下载的时候需要 Follow 作者的 Twitter。 您可能感兴趣的相关文章Transit – 超平…

HTML5网站大观:10个精美的复古风格 HTML5 网站作品

本期的 HTML5 网站大观与大家分享 10 个精美的复古风格 HTML5 网站作品。作为下一代网页语言,HTML5 加入中众多的语义化标签,例如video、audio、section、article、header 和 nav 等,HTML5 正引领网页制作技术革命。希望下面清单中收集的这10…

HTML5网站大观:精美的 HTML5 商业网站设计案例

本期的 HTML5 网站大观与大家分享 10 个精美的 HTML5 商业网站设计案例。HTML5 增加了很多新标签以及新特性,正引领网页技术革命。希望这些优秀的 HTML5 网站案例能帮助大家更好的学习 HTML5 网站制作。 Sullivan NYC Fork CMS Nike – Paul Rodriguez V Elisa 3G …

网站侧边功能导航栏--屏幕滚动效果

屏幕滚动效果&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title></title><style>ul,ol {list-style-type: none;}* {margin:0;padding:0;}html,body {width: 100%;height: 100…

node.js爬取网站数据【dom方式】

node.js爬取网站数据提醒&#xff1a;示例网站代码已失效[ 应用逻辑有效 ]第一步&#xff1a;准备工作&#xff1b;1. 选择目标地址URL&#xff1b;2. 确保 node.js 环境&#xff1b;3. CMd命令 &#xff1a;创建项目文件夹 &#xff1b;4. CMd窗口 &#xff1a;调用 npm init …

【技术贴】VS2005不能新建项目不能新建网站。提示Microsoft visual studio

出现这种现象的原因就是你是用了注册表垃圾清除软件&#xff0c;不用怀疑了&#xff0c;你肯定经常清理垃圾。 解决办法很简单&#xff0c;重装系统&#xff0c;重装vs2005&#xff0c;或者换成vs2008&#xff0c;2010也行。切记&#xff0c;千万别再清理注册表垃圾。不然你会死…

【技术贴】VS2005不能新建项目不能新建网站。提示Microsoft visual studio

出现这种现象的原因就是你是用了注册表垃圾清除软件&#xff0c;不用怀疑了&#xff0c;你肯定经常清理垃圾。 解决办法很简单&#xff0c;重装系统&#xff0c;重装vs2005&#xff0c;或者换成vs2008&#xff0c;2010也行。切记&#xff0c;千万别再清理注册表垃圾。不然你会死…

【转】极品免费网站空间申请:000webhost.com免费1.5G美国空间PHP+MySQL

极品免费网站空间&#xff1a;000webhost.com免费1.5G美国空间PHPMySQLFiled Under: 未分类 by rainlin2010四.22, 2010 www.000webhost.com是国外著名空间商Hosting24旗下的一个产品&#xff0c;号称“比收费虚拟主机更好用”,而确实如其所说的&#xff0c;该空间非常优质和稳…

20个专业在线配色网站分享

摘自http://www.websbook.com/yuanli/20gzyzxpswzfx_17814.html 现在专门用于配色的在线网站真不少&#xff0c;之前一片文章已经总结了18个配色网站&#xff0c;这次推荐的这20个配色网站也十分出色&#xff0c;而且网站本身的设计也十分精美&#xff0c;网页设计师可以参考使…

【技术贴】网站首页浏览量统计代码,适合.NET||网页浏览量计数器代码

【.NET】独家发布网页首页浏览量计数器&#xff0c;目前网上木有我这么简单的 设计的思路就是在本地路径下放一个txt存放初始值&#xff0c;然后每次刷新首页之后让.net去访问这个txt文件读取这个初始值并累加之后再写入这个文件&#xff0c;&#xff08;这样以后就能读取到总…

足球比赛集锦的在线网站

rel"File-List" href"file:///D:%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">www.partofthegame.tv Carlsberg web-tv&#xff0c;是嘉士伯最近提供的一个服务&#xff0c;在Partofthegame.tv上&#xff0c;是提供足球&#xff08;football&#xf…

微信PC端打开网站页面空白

重点 : 微信pc端的浏览器是IE内核,所以你懂的(PS:IE问题贼多) 解决 : 直接把链接丢到IE上,F12查看控制台,出现什么错误解决什么错误 , so

来自微软官方网站Windows Sysinternals的小工具Process Explorer(进程浏览器)

先上地址&#xff1a;https://docs.microsoft.com/zh-cn/sysinternals/ 当前网页如下&#xff1a;Sysinternals网站由Mark Russinovich于1996年创建&#xff0c;主持其先进的系统实用程序和技术信息。 无论您是IT专业人员还是开发人员&#xff0c;您都可以找到Sysinternals实用…