端架构,在过去的这一两年里,发生了很大的变化。
与后端相比,前端以开放、开源、共享而著称。这三个要素,促使前端的发展变得越来越快——完善的基础设施,多样性的前端构架,丰富的生态系统,以及正在快速形成的架构体系。
以我为例,在过去的这一年里,我使用了:
微应用化架构,即开发时分离,构建时合并。
前端微服务化架构,即开发时分离,构建独立的架构模式。
整洁架构,即将业务代码独立于框架的架构风格。
微件化架构,即每个业务构架作为独立的组件,融入到项目。
……
最近的最近,在与同事对于过去架构的反思和总结中,我们讨论出了一个新的架构模式:应用微化架构。由于它是一个反向的微应用化架构模式,所以从模式上来说,我们便将名字反向了一下。由于这一种架构模式,实施和设计相当的简单。所以,在进行详细的介绍之前,先了解一下我们遇到的问题。
应对于业务复杂的前端应用而言,我们都有一个共同的痛点是:代码太多,影响开发效率——影响 IDE 的响应,影响到系统的构建。为此,应对于这种情况,我们的第一反应就是,拆分代码库。在我们过去的一些场合里,我们做了相似的决定。
角色与权限,往往是阻碍前端系统拆分一个难点。不同的角色,不同的权限,可是呢,在后台系统中, 它们确拥有同样的界面,只是受限于权限原因,我们要拆分成多个系统。
在这个系统里,是由一个团队来维护的。为此在这个项目里,于是我们:
Ctrl + C / Ctrl + V 了一下、两下、三下,将它们变成了两个、三个、四个代码库。
运用软件工程来共享代码——通过 git submodule、npm 包、共用 CSS 等方式
……
好了,我们成功地拆分成了多个系统。可是呢,当我们收到一个新的业务需求,我们就需要:
修改公共部分的代码,并在多个项目中更新
在每个项目中,添加不同权限的代码
于是乎,每次更新的时候,我们都需要一个 Checklist 去一一更新每个代码库。
在随后的一个系统里,我们遇到的场景也是拆分。
稍有不同的是,系统有多个应用,而每个应用是由不同的团队来维护。这便是一个非常适合于使用微前端的系统。我们采用了微前端中的微应用化方案,来解决这个问题:
将代码拆分成多个应用,每个应用只在自己的目录编写代码。
在构建时,合并不同应用目录以变成一个完整的应用。
通过软件工程的方式,来在多个应用间共享代码。
一切都好,唯一的问题和之前相似:通过软件工程来共享代码仍然有很多坑。
应用微化架构,是一种开发时整体,构建时拆分,运行时分离的前端架构模式。即应用微化架构从一份代码中,构建出适用于不同环境的多套目标代码。实现上它是一种:
构建时拆分架构。
代码删除架构。笑,以删代码的方式,来形成每个前端应用。
微前端准备式架构。即,随时可以拆分为多个前端应用。
由于它与微应用化的相似性,我们将它与微应用化做一个对比。它与微应用化不同的是,应用微化是在构建时对应用进行拆分,而非在本地模式下对应用拆分。相似的是,它也是基于构建系统的应用拆分方式。
即:微应用化,是一个随时可合并式架构。而应用微化,则是一个随时可拆分式架构。
它不仅仅是一个适合于前端的架构模式,也是一适用于后端的架构模式。
为了方便后期我的查阅,我还是简单地写个相应架构的电梯演进。
关键因素 | 描述 |
---|---|
对于 | 想拆解单体前端应用的团队 |
我们的架构 | 应用微化 |
是一个 | 类微前端架构 |
它可以 | 在开发时是单一代码库,构建时拆分应用,运行时多个应用存在 |
但他不同于 | 代码库拆分 |
它的优势是 | 灵活库高、维护成本低 |
适用业务场景:
多权限系统的早期阶段。手疼,不废话。
微服务化的迁移时。适用于前后端,手疼,不废话。
以 Angular 框架为例,大致就流程便是:
准备好适用于不同环境的路由文件(需要配置为路由懒加载)
编写一个删除代码的脚本,诸如于 rm -rf / blog
(笑~)。
将这些 task
加到 pipeline 上。
相似的,对于 Spring Boot 构建的微服务也是类似的。
最近,代码敲多了,手疼得厉害,就先不写 DEMO 了——以后补上。
这个信息爆炸的时代,使用移动终端获取新鲜信息已经是大势所趋,但是移动网页浏览速度还有巨大的提升空间。据 Strangeloop Networks 统计,在同样的网络条件下,使用移动端访问相同网页平均会比 PC 端慢40%!然而另一方面,用户对网速的要求却步步紧逼。研究表明,网页响应时间可容忍的阀值是2秒,一旦超过3秒,会有40%的用户放弃浏览页面。
所谓天下武功,唯快不破!想要设计更快的网页优化速度,我们可以借鉴成功的优化经验,全球最大的CDN服务商Akamai(阿卡迈)针对移动体验的问题,提供了一套较为完整的解决方案,感兴趣的读者可以前往注册下载;与此同时,我们也可以采用直接的技术手段,本文从PC端优化经验、HTTP/2优化协议、优化蜂窝网络、以及智能的加载方案设计四个维度,总结了一些提升移动网页加载速度的方法和技巧。
一、PC 端网站优化方案
不论在 PC 还是在移动浏览器上,只有不到10%的时间是用来读取页面的 HTML 的。剩下的90%是用来加载额外的如样式表、脚本文件、或者图片这样的资源和执行客户端的程序。因此,许多在 PC 端的传统网页优化方案在移动端仍然可行。比如说:
1.1 减少每个页面的 HTTP 请求数
I. 将共用的 JavaScript 和 CSS 代码放在公共的文件夹中与多个页面共享。
II. 确保在一个页面中相同的脚本不会被加载多次。同时,将脚本中的 Click 事件改为 On Touch 事件来减少固有的300ms延迟。
III. 使用 CSS Sprites 来整合图像,将多张图片整合到一个线性的网状的大图片中。
IV. 使用 Cache-Control 或者 Expires 标记来实现浏览器缓存,从而减少不必要的服务器请求,尽可能地从本地缓存中获取资源。
1.2 减少每个请求加载的大小
I. 使用 gzip 这样的压缩技术来压缩图像和文本,依靠增加服务端压缩和浏览器解压的步骤,来减少资源的负载。
II. 整合并压缩 CSS 与 JavaScript,删除不必要的字符与变量。
III. 动态地调整图片大小或者将图片替换为移动设备专用的更小的版本。
IV. 分段加载和隐藏加载等手段,可以将不可见区域的内容延迟加载或暂时不需要的脚本进行延时读取
二、采用更优的 HTTP/2 协议
2.1 多路复用技术带来的请求-响应加速
I. HTTP/2 采用多路复用的技术,允许同时通过单一的 HTTP/2 连接发起多重的请求响应消息,从而大大的加快了网页加载时间。
2.2 更节省空间的二进制头部数据嵌套
I. HTTP/2 采用二进制格式传输数据,并把他们分割为更小的帧,相比于 HTTP/1.x 的文本格式传输更为方便。
II. HTTP1.x 的 header 由于 cookie 和 user agent 很容易膨胀,而且每次都要重复发送。HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络流量。
2.3 Server Push 带来的更快的资源推送
I. 通过 Server Push 功能,服务端可以主动把 JS 和 CSS 等文件发送给终端,而省去了解析HTML 请求的过程。简单的说,当你需要访问某个文件的时候,它已经在乖乖的在后台躺好了。
三、优化蜂窝网络
I.具有实力的内容服务商可以把资源配置在离用户地理位置更近的地方,缩短最后一公里。
II. 与移动网络服务商合作共同开发算法,实现实时自动调整互联网路由,避免网络拥堵、丢包与离线问题。
III. 还可以采用优化TCP协议的方法,通过借助主流的Cubic、Bic以及Westwood算法,可以有效的避免网络拥堵。
IV. 此外,还可以研究算法改善NAT嵌套导致的网络延时,也可以直接通过IPV6的连接协议规避NAT的延迟问题。
四、设计更加智能的加载方案
4.1采用分段加载和隐藏加载
I.分段加载又称懒加载,它能够在用户滚动页面的时候自动获取更多的数据,从而可以很大程度上减少服务器端的资源耗用。诸如Lazyload.js或Belazy.js都是非常成熟易用的开发包。
II. 隐藏加载是在页面显示后再加载用户暂时看不到的信息,诸如图片展示窗里除了第一张图片,其他图片都可以采用隐藏加载的技术。
4.2采用预加载技术
I.资源预加载目的是让浏览器在空闲时间下载或预读取一些文档资源,用户在将来将会访问这些资源时浏览器能快速的从缓存里提取给用户。
II. 预加载技术不仅支持PC,也已经支持Android系统,可惜的是目前尚不支持iOS Safari。
III. 事实上,Prefetch是网页优化里Prebrowsing的一部分,开发者还可以通过DNS-Prefetch , Subresource,Preconnect,Prerender等技术来实现预先解析DNS与提前渲染等优化。
4.3通过机器学习的手段智能加载
I.通过机器学习的方法,网站可以自动收集并分析用户的浏览习惯与访问信息,然后通过预加载的手段将最有可能访问的信息提前加载完成。
4.4智能调整图片分辨率
I.图片通常占用了Web页面加载的大部分网络资源,也占据了页面缓存的主要空间。 根据统计,一个站点平均62%的内容都是由图片组成。管理这些图片除了需要考虑到图片的大小、格式、旋转、艺术处理、增加水印、存储空间等,还要顾及海量的设备的屏幕尺寸,以及适应终端上运行的浏览器。
以上是我们给开发者总结的一些经验分享,希望能够对读者有所帮助,大家也可以注册下载阿卡迈的技术PPT详细了解如何通过CDN 的方式为(移动)网页提速。我们需要明确的是,专注移动网页的性能优化无疑是开发者需要努力的方向,然而用户并不等于机器。用户不关心你的网站发出了多少请求,也不在乎你的屏幕渲染得有多快,他们只关心网站带给他们体验上的感觉。因此,开发者在进行技术优化时,不仅仅是在某一技术点上的优化,更需要从网站的整体性能规划把控,让整个网站给客户呈现出更快的加载体验!
点击蓝字 ↑【恩施发布】关注我-
恩施土家族苗族自治州曾氏宗亲联谊会
恩施土家族苗族自治州谢氏宗亲联谊会
恩施土家族苗族自治州刘氏宗亲联谊会
中华尹氏恩施土家族苗族自治州宗亲研究会
恩施土家族苗族自治州爱心志愿者协会
以上组织,你听说吗?
它们其实都是“山寨”的!
以上是州民政局公布的我州首批5个未在民政部门登记、擅自以社会组织名义开展活动、涉嫌非法社会组织的名单。同时,民政部门正在向社会各界征集这些组织的有关活动线索。
请记住举报方式
州内“山寨社团”可向民政部门举报
举报电话:0718-8212934
涉及境外非政府组织管理可向州公安部门举报
举报电话:0718-8488110
同时,民政部门提醒,在参与有关组织活动时,可登录民政部中国社会组织公共服务平台(http://www.chinanpo.gov.cn/search/orgindex.html),核查其合法身份。
查证涉及境外文化类社会组织的,可登录公安部的境外非政府组织办事服务平台(http://ngo.mps.gov.cn/ngo/portal/index.do)“信息公开”栏目,查询其是否依法登记设立代表机构或备案开展临时活动。
近年来,各类社团组织兴起
在丰富社会实践、参与社会管理中
起到了重要作用
但是,一些山寨社团浑水摸鱼
成为“治理顽疾”
一段时期以来,一些在境内未注册登记或被撤销登记的组织、在境外成立在境内未经登记备案的组织及以文化类社会组织名义出现的企业,违法违规开展活动,群众反响强烈。对此,我州积极开展“山寨社团”清理整顿工作。州委宣传部迅速传达省文件精神,研究制订《全州开展文化类“山寨社团”清理整顿工作的实施方案》。州委常委、宣传部长尹达多次部署清理整顿文化类“山寨社团”,并提出具体要求。
截至今年8月,中国民政部门
取缔、劝散非法社会组织1800多个
请大家千万擦亮眼睛
积极提供它们的活动线索和证据
让它们无机可乘
记者:谭燚 通讯员:唐敏
来源|专稿/综合
编辑|梅珂
审核|邹瑜
近期最热↓
*请认真填写需求信息,我们会在24小时内与您取得联系。