-
Notifications
You must be signed in to change notification settings - Fork 510
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
让需求来得再猛烈些——快速响应需求的天猫H5首页新架构 #35
Comments
1、MUI规范(天猫前端组件规范)目前有开放吗?又向polymer或webcomponents的标准靠近吗?至少我很想这样做。 |
@zhoukekestar 后面有机会介绍这部分具体的方案及思考 |
还有一点,因为页面很多元素都组件化了,组件内的数据如何获取?换言之,就是组件内部的模板的数据如何获取然后进行绑定的?组件是通用的,但不同页面的接口肯定不同,如果要达到很理想的状态的话,还需要对后端的接口数据做组件化层面的拆分,然后在通过不同组件的配置将接口也进行combo。。。这,我怕被后端集体群殴啊~~这,天猫是怎么解决的?谢谢~ |
期待MUI规范开放,想参考; |
react-web什么时候开源呢? |
并不是很喜欢目前很多web框架(不过react-native很不错,给我们前端一条走向app的路),个人觉得当前许多框架和w3c的标准相去甚远,不是很喜欢框架类的(喜欢polymer等比较符合标准的,需要翻墙),希望能用或靠近标准的用法去写代码(使用polyfill等)。所以参照polymer建了个模块来达到类似的功能:https://github.com/zhoukekestar/modules/tree/master/src/webcom |
首屏的内容也是异步加载的吗? |
应该是的,基础库(css&js)+布局+组件+数据,貌似都是异步的 |
@zhoukekestar 不好意思回复晚了,关于接口combo,的确是有一个后端接口来对接其他所有的系统,不是串行combo,而是并发。为什么采用后端并发:1,因为首页接入的系统太多,不后端来并发请求而是前端来并发的话,整体性能可想而知……;2,接入的其他系统不用再购买https证书…… |
@suprise 谢谢您的回答,还是有很多东西要靠自己慢慢探索的, <( ̄ˇ ̄)/ |
👍 |
Hi,该方案中没有提到版本问题,请问是怎么解决的呢 |
@zhanyouwei 不好意思,没太明白,是什么版本问题? |
@suprise 就是静态资源版本控制如何解决的呢。 |
@zhanyouwei 看起来像是通过构建工具插入静态资源的tag号 |
@zhanyouwei 有一个统一的模块版本配置seed来管理所有版本,渲染html的时候将最新版本的seed引入。这个是目前天猫的模块机制的一部分,可以参考https://zhuanlan.zhihu.com/p/21271376?refer=tmallf2e |
大神,帮忙介绍下埋点,我现在处理h5之间(如A-B)的跳转,出现丢失,网上建议使用window.name处理,不过这样需要原业务人员多配置一项该打点是不是跳转命令,这个你这里是什么样的方案呢。 |
这种模式还是试用于这种大型的网站吧,一些国外的网站还是换需求就重新做页面,毕竟前端人太少了。 |
前言:
作为一名前端工程师,恐怕最经常听到的词就是: 改需求。
作为一名产品,恐怕最头疼的就是: 前端排期已经排到两个月后。
想了解首页新架构是怎样仅仅上线15个工作日就为前端节省约3个工作日的开发时间吗?
请听我细细道来~
从首页的业务说起
天猫首页是天猫的一项业务,而一项业务的技术架构,与这个业务的特点是息息相关的,所以需要先了解首页的业务,才能更好地理解技术架构的演变。从业务上,首页一直承担着以下两个职能:流量的集散地、拉动用户的留存、门面与标杆。
以上几个特点,对于前端所要面临的挑战就是: 频繁的布局调整、 多系统对接数据来源、 更好的性能与稳定性等几个问题。
一张图让你感受首页对接多系统的痛苦,还是省略了后续接入其他什么鬼系统的情况下。(不要问我为什么首页没有专门的服务端同学,而是要前端自己对接……)
针对这几个问题,我们则是通过: 动态化布局+ **异步渲染&对接优胜美地(猫客服务端)**来解决。同时本文也对首页升级MUI4.0、埋点、性能、容灾与监控等方面也做了介绍。
1. 动态化布局
解决痛点:你们知不知道双十一期间首页紧急发布多少次啊?
简直要哭了出来。 大部分的需求都是各种模块位置调整、频道增减,虽然Web最大的优势在于发版快捷,可也不能这么搞啊……但俺们工程师的一项主要任务就是 支(皮) 撑(实) 业(耐) 务(操),没办法,只好撸袖子解决这个问题了。
基本原理
众所周知,改配置的成本和风险要比改代码小得多(前提是配置经过测试)。
所以解决办法就是动态化布局, 指的是抽象一套配置文件,根据配置文件渲染页面。当页面有临时需求变更时,只需更改配置,无需开发。
更进一步,抽离配置后,实现可视化功能更加方便,可以将更改配置的任务交给运营,将解放前端的生产力。
具体方案
那么问题来了:怎么抽象是一个较为合理的方案呢?当然是以常见的视觉设计稿为依据。
常见的视觉设计稿基本如下:可以抽象为 业务模块、布局、UI组件三个层次(不将组件拆分为更细的层次,控制复杂度)。
从图中可以很清晰地看见, 布局和UI组件是可以自由地组合的,如模块0是由一排二布局和单图组件组成,模块A是由一排二布局和上图下文组件组成。
通过积累布局和UI组件库,当新增一个不是很复杂的模块甚至页面时,可以 快速地更改配置即可上线~(当然它也不是百分百动态配置,假如后续要新增布局类型和组件,那还是要代码实现的,只是绝大部分可以复用)
动态化布局的大致思想如此,在实现上,每一家都有自己的路数。
解析引擎流程
后端生成配置系统、运营投放系统暂且略过不表,前端 解析引擎大致流程如下:
要注意的点:
1,性能。模板按需加载,模板预编译,优先渲染首屏、图片懒加载支持等等。
2,埋点。包括点击埋点和曝光埋点,具体实现不表。
3,依赖技术选型。例如模板渲染器,因为首页不涉及复杂的逻辑,所以选用的还是较为轻量的xtemplate;还有ES6、模板加载器的选型、工作流的构建等等。
4,文档、脚手架、测试用例等等
2. 异步渲染
一个页面是由数据和模板渲染而成的,同步渲染是指在服务端进行渲染,而异步渲染则是指在浏览器端各自获取数据和模板,再进行拼接渲染的方案。
采用异步渲染主要的优点:
**前提:**因为手机端的用户习惯较为类似,在视觉设计上,客户端和h5首页也采用了较为一致的方案。部分优点基于此前提。
最后h5首页的架构简化为下图,对于前端而言,对比之前的是不是清晰很多?
需要注意的点:
3. 率先落地天猫前端基础组件新规范
时代总在进步,MUI规范(天猫前端组件规范)也来到了4.0版本。
MUI4.0 主要有两个特点:
首页作为一个轻逻辑但具有一定复杂性的页面和技术标杆,自然率先对MUI4.0规范进行了落地尝试。虽然也踩了一些坑,如所有依赖组件并未都立刻升级到MUI4.0,所以也采用了一些兼容方案。结果也使得首页向极致的性能优化更近一步。
4. 埋点
数据是业务的指南针,因此丰富的埋点信息格外重要。
埋点通常分为点击埋点和曝光埋点,首页改版后,为了更好地支撑业务,针对每一个模块进行了细粒度的曝光埋点,同时针对slider轮播的每一帧进行了曝光埋点。与内部某系统对接,曝光埋点参数的产生、解析逻辑由服务端控制。
5. 其他:性能、容灾、监控
的确做了一些事情,只不过暂时还没有达到最终目标,暂时允许我先卖个关子,后续完成了会再发文分享~
尾声
其实还有很多由其他同学协助完成的内容,如迈入ES6的时代、工作环境的构建等等,但那又是另一个话题了
总而言之,技术架构是根据业务特性、某一段时期和有限资源下决定的,也会不断地演变,所以本文仅供参考The text was updated successfully, but these errors were encountered: