技术场景
前端获取数据通过Socket IO与Node.js交互,其交互过程基于异步,前端页面将要获取的数据通过指令发给Node Server,Node再将根据指令去调用Gearman相应的接口,
当Gearman执行结束,会将数据发送给Node,Node再将数据发给前端页面。
下面是开发中遇到的一些问题
1 一个业务操作进行了多次IO交互
对于前端页面来说,每发一次指令就是一次原子操作,而要完成一次业务场景,就会产生多次的原子操作,比如下面用户加房间的过程
获取用户名片 -> 加入房间 -> 创建卡片 -> 获取房间信息 -> 加入房间
上述场景是在有房间无名片的用户加入房间整个原子操作,先获取用户的名片信息,如果是一张系统生成的默认名片,就将用户加入到房间,并弹窗要求用户创建名片,
当名片创建成功,获取该房间的信息(有可能房间已经结束),而后加入房间,客户端发送的网络指令如下:
get_card_info->join_room->create_card->get_room_info->join_room
共进行了5次网络IO,多次的网络IO操作会造成页面数据延迟加载,而每一个原子操作都是异步的,因此会在回调函数里进行回调,出现多层回调嵌套的代码。
解决:提出了复合命令的方式向服务器请求(初定)
2 接口定义
项目开始定义了后台需要实现的接口,但是在实际进行中才发现,最初定义的接口往往不够,开发中还会增加或修改接口
3 单页&多页
本次开发是一个多页应用,在实际体验中,多页的应用会加载每一个链接的js、css、html文件,因此页面之间的切换会有一个延时等待的过程,降低了产品的流畅度。
计划在下次改版及下个项目中去使用单页开发
4 UI
因为项目开始我们还没有专门的人来做UI,而我们由没有太多的时间花费在UI设计上,导致页面看起来不够美观,色彩搭配不是很合理;另外,项目中采用了ionic框架,
但是由于缺乏专业UI的设计,以至大量的css代码需要手动完成(自适应能力兼容性也不敢保证),ionic也没发挥出它的功能。
解决:确定好使用某一套UI框架的时候,前端美工人员的界面要基于这套UI来做。
5 页面交互
现阶段的页面交互是比较生硬的,如弹窗之间的动画效果没有,用户触摸时背景切换,在网络延迟的情况下,用户可以对一个提交按钮进行多次提交,导致后台数据冗余等等。
解决:此类的js特效可以采用某个前端框架的交互效果;也可以自己实现这些交互效果,并逐步将其抽取出来,形成公司移动端的固定的交互模式。
6 代码结构
因为js语言的灵活性及语法的特点,如何组织代码提高可维护度,这还需要一定的时间来提高,我想对于前端的压力,经过2个月左右的锻炼和学习,能达到一个专业的水平,胜任
前端任务。
总结:现在前端的压力主要集中于对js代码的熟练以及对渲染性能的把控,因为移动设备渲染DOM元素能力并不是很好,当元素存在阴影、滤镜及css3的一些高级特性的时候,渲染很慢,
在后续的开发中,将逐步提取形成一些模块化、框架化的可复用代码。