技术标签: 边缘计算 前端 javascript
前端渲染方式随着前端技术的演进而不断革新,边缘计算的出现使前端渲染从 SSR(Node)时代开始迈入边缘渲染(ESR)时代。本文主要介绍前端渲染的发展演进,以及边缘渲染的原理、优势及应用场景。主要内容如下:
- 前端渲染的发展
- 边缘渲染的原理和优势
- 应用场景举例
- 总结和展望
在讲前端边缘渲染之前,我们有必要先了解一下前端渲染的发展历史以及前端各项性能指标优化是如何被提上议程的,之后我们再反观边缘渲染(ESR)的出现就会发现也是水到渠成。
其实整个前端渲染方式是随着前端技术的演进而不断革新的,大致可以分为如下历程。
最早期的前端渲染(2005年 Ajax 推出之前)都是和后端混写的,比如 JSP、PHP 等写法。但是前后端写法杂糅在一起导致开发效率低下,比如改个样式还要重新编译一遍,并且页面也会写的很重。
后面有了 Ajax 技术之后,再加上通过 CDN 缓存静态资源之后,前端 SPA + CSR 渲染有了飞跃式的发展,这种模式下前端处理所有逻辑、内容填充和路由,数据加载部分通过 Ajax 从后端获取,因此很好的解决了前后端分工开发的问题。其具体请求时间线可参见下图。
但是由于请求是全异步的,其一是对 SEO 不利,其二是需要 HTML + JS 处理数据拼接才能在前端完成渲染,其首屏白屏时间会较长,特别在一些低端机型上体验更是堪忧。
再后来随着 Node 引领的全栈技术的发展,前端又回到了当初的 SSR 路上,只不过这次的回归是一次螺旋式的上升。
首先是前后端全是 JS 语法,大部分代码都是可复用的,其次是 SEO 场景友好,服务端渲染好后直接返回最终的 HTML,减少了白屏等待时间,过多异步请求导致的性能问题可以下放到服务端解决,也能有效避免多次的数据获取、内容填充,浏览器只绑定相关的 JS 逻辑、事件即可。其具体请求时间线可参见下图。
后面随着边缘计算的发展,由于边缘计算节点距离用户更近,有更短网络延时的优势,我们可以将页面进行动静拆分,将静态内容缓存在 CDN 先快速返回给用户,然后在边缘计算节点上发起动态内容的请求,之后将动态内容与静态部分以流的形式进行拼接,从而进一步提高了用户的首屏加载时间,尤其在边缘地区或者弱网环境也有能拥有很好的用户体验,此外还减少原先 SSR 服务器压力。
刚才也提到了,边缘渲染就是借助边缘计算能力,将返回的内容进行静态+动态部分拆分并以流的形式返回,最终实现渲染提速。其中,静态部分依托 CDN 的缓存能力,优先返回给用户,随后在边缘计算节点上继续发起动态数据请求,并拼接在静态部分之后,继续流式返回。因此,其优势也是显而易见:
总体而言,相对于传统中心渲染,边缘渲染具有节点分布较广,距离用户更近等优势,让用户可以在更短的时间获取到网站资源进行渲染,同时可以减少中心服务的请求压力,从而达到渲染提速+分散算力的效果。
03 应用场景举例
直接将 SSR 服务搬到边缘部署,具体流程如下图。
SSR 服务部署在中心,边缘流式返回 HTML 内容(利用 HTTP Transfer-Encoding: chunked 分块传输机制),需要分离静态与动态部分,具体流程如下图。
以一个 Demo 网站为例,顶部导航可以视为静态部分缓存在边缘 CDN,下面的卡片是动态部分回源到中心服务获取数据。
通过 Demo 对比,可发现边缘渲染(ESR) 比 SSR 的有着明显优势,其静态顶导首先绘出,后面动态数据也比 SSR 的返回要快。
此外,结合如下的埋点统计,边缘渲染(ESR)的优势更加得以印证。
@RequestMapping(value = "/download") public void download(HttpServletRequest request,HttpServletResponse response) throws Exception { PageData pd = this.getPageData(); pd = printm...
转载提示:这是一篇旧文最近一直忙于面试,人事推给了我一份简历,职位是算法工程师,年龄是 46 岁,我揉了揉眼睛后再看看,确实是 46 岁。抱着忐忑的心,我电话面试一番后,还是不觉得他和我们的团队很适合。人都会有同理心,尤其是这么大岁数的程序员还是为了生计来找工作,心还是会隐隐触痛。年龄是多数程序员的天敌,之前没有概念因为生活中样本较少,现在来了一个鲜明的例子,并且还需要自己亲手关闭一扇...
经过断断续续近一个月的学习,总算跟着b站黑马程序员的视频入门了Vue,对前端框架有了一个新的认识接下来总结一下:课程主要分为四个板块,Vue基础,本地应用,网络应用,综合应用Vue基础:导入Vue,准备html结构,把Vue挂载上去,再在里面准备data和methods本地应用:实现计数器,图片切换,记事本的制作网络应用:结合axios,和准备好的接口综合开发;制作天知道-天气查询页面...
如何验证邮箱是否存在前面我们做了一个AJAX练习,就是验证用户名是否存在,现在回到我们的图书管理系统,来写一个如何验证邮箱是否存在的。还是接着之前图书管理后台和前台这个项目,现在是在register.jsp的页面的邮箱验证。1. 项目环境准备之前我们是在一个单独的AJAX web项目里做的用户名是否存在的验证,现在我们需要把js中获取创建XMLHttpRequest对象的js代码复制过来。这个图书...
经历了两年多,我的著作终于和大家见面了,写书是一件很磨练人耐力的事情,从打算写一本书开始后,心里无时不刻有一块大石头压在头顶。一来要保证专业性,二来要保证质量,同时还要兼具备怎么表达,才能让别人明白所说的意思。所以看起来没有那么简单。近年来,直播,短视频行业相关业务发展迅猛。Android音视频开发门槛相对高些,很多有特色或者核心模块基本都是NDK开发,而NDK开发很多实际上都是C/C++写的Co...
我正在尝试在Red Hat 7上启动mysql.我按照以下说明删除了maria db并安装了mysql:> service mysql startRedirecting to /bin/systemctl start mysql.servicescreen hangs here...^C[[email protected] mysql]# service mysql statusRedirecting to...
本文转载自MSDN作者:Stephen Cleary原文地址:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx大多数有关 async/await 的在线资源假定您正在开发客户端应用程序,但在服务器上有 async 的位置吗?可以非常肯定地回答“有”。本文是对 ASP.NET 上异步请求的概念性概述,并提供了对最佳在线资源的引用...
传送门大意:向三维空间中加点,询问一个三维区间中点的个数。解题思路:带修改CDQ,将修改和询问一起插入CDQ分治询问。(询问可以由8个前缀和加减操作实现)其中第一层CDQ维护x有序。第二层CDQ维护y有序并且将z离线处理完更新答案。注意要将原数组的辅助数组推入第二层CDQ否则会将顺序毁坏。代码: 1 #include<cstdio> ...
这也是一个面向对象的问题,作为实例对象的你需要一步一步去攻城拔寨。待各处插满了自己的旗帜,回过头来,你会感谢一路走来的自己!一、入门 面向对象编程基础(类和继承,变量和方法的作用域,MVC基本概念,分类)方法和函数(消息,类定义和属性,与C/C++的混合编程)内存管理(strong/weak, ARC自动引用计数,自动释放对象)代码设计模式(Block块语句,Target/a...
点击上方 "程序员小乐"关注,星标或置顶一起成长每天凌晨00点00分,第一时间与你相约每日英文Smile. Let everyone knows that t...
安装armbian我购买了OrangePi zero puls H5 ,他里面预装的安卓系统,启动要一分钟,我是服的。所以我想给他安装armbian。我首先去下载了armbian对应的镜像,并且烧录到了sd卡中。出现以下问题U-Boot 2017.11-armbian (Jan 25 2018 - 08:05:45 +0100) Allwinner TechnologyCPU: A...