[转载] 全方位提升网站打开速度:前端、后端、新的技术 (4)

如果可以的话,请使用 HTTP/2。它附带服务器推送,能为单个请求传输多个资源;头压缩来减小请求和响应的大小;并请求流水线和多路复用通过单个连接发送任意并行请求。使用服务器推送,你的服务器可以发送你的 html ,紧接着推送网站所需的 CSS 和 JS,而无需等待实际请求。

为你的静态资源(CSS,JS,静态图像如 logo)设置显式的缓存头。这样,你可以告诉浏览器需要将这些资源缓存多长时间以及何时重新验证。缓存可以节省大量的往返和需要下载的字节。如果没有设置明确的缓存头,浏览器会做 启发式缓存,这比不缓存好,但远不是***。

使用内容分发网络(CDN)来缓存图像、CSS、JS 和 HTML。这些分布式缓存网络可以显著地减少与用户的距离,从而更快地提供资源。它们还加速了你的初始连接,因为你与附近的 CDN 节点进行 TCP 和 TLS 握手,而这些节点会依次建立热的和持久的后端连接。

建议你使用一个小的初始页来创建单页应用程序,这个初始网页会异步地加载其它组件。这样,你可以使用可缓存的 HTML 模板,在小请求中加载动态数据,并在导航(navigation)期间只更新页面的各个部分。

总而言之,当涉及到网络性能时,有一些要做的(do) 和不要做的(don\'t),但限制因素总是往返次数与物理网络延迟的结合。克服这种限制的唯一有效方法是使数据更接近客户端。最先进的网络缓存状态的确如此,但这仅适用于静态资源。

对于 Thinks,我们遵循上述准则,使用 Fastly CDN 和主动的浏览器缓存,甚至对动态数据使用一种新的  来使得缓存数据保持一致。

[转载] 全方位提升网站打开速度:前端、后端、新的技术

 重复加载,来显示浏览器缓存覆盖率

对于重复网页加载的请求,浏览器缓存没有提供的内容(参见上图)包括:对 Google 分析的 API 的两个异步调用,以及从 CDN 处获取的初始 HTML 请求。因此,对于重复的网页加载,页面能够做到立即加载。

后端性能

对于后端性能,我们需要同时考虑延迟和吞吐量。为了实现低延迟,我们需要将服务器的处理时间最小化。为了保持高吞吐量和应对负载尖峰,我们需要采用一种水平可扩展的架构。我们不会谈到太多细节,因为设计决策对性能的影响空间是巨大的,这些是需要去寻找的最重要的组件和属性:

[转载] 全方位提升网站打开速度:前端、后端、新的技术

可扩展的后端技术栈组件:负载均衡器,无状态应用服务器,分布式数据库

首先,你需要负载均衡(例如 Amazon ELB 或 DNS 负载均衡)将传入的请求分配给你的一个应用服务器。它还应该实现自动调节功能,在需要时生成其他应用服务器,以及故障转移功能,以替换损坏的服务器并将请求重新路由到正常服务器。

应用服务器应将共享状态最小化,从而保持协调最少,并使用无状态会话处理来启用***的负载均衡。此外,服务器应该有高效的代码和 IO,使得服务器处理时间最小。

数据库需要承受负载尖峰,并尽可能减少处理时间。同时,它们需要具有足够的表达性,以根据需要建模和查询数据。有大量的可扩展数据库(尤其是 NoSQL),每个都有自己的 trade-off。详细信息请参考我们关于该主题的调查和决策指南:

NoSQL 数据库:一份调查和决策指南
与我们在汉堡大学的同事一起,我们是:Felix Gessert, Wolfram Wingerath, Steffen…medium.baqend.com

Thinks 网上商城搭建在 Baqend 上,使用了如下的后端技术栈:

[转载] 全方位提升网站打开速度:前端、后端、新的技术

Baqend的后端技术栈:MongoDB 作为主数据库,无状态应用服务器,HTTP 缓存层次结构,REST 和 web 前端的 JS SDK

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjxwp.html