为什么我放弃了顺手拿来的后台源码?
老实说,三年前我也跟你们一样。
传来公司的话,要做一个移动端后台管理的APP,随后顺手前往进行了一番克隆操作。
究竟是哪种 Admin ,还是Ant Pro ,去挑选那个最为火爆的,直接把它拽下来。
代码真漂亮,真像回事。
但一放手机上,完蛋。
图表点不进去,滑两下就闪退,键盘弹起来页面乱飘。
堪称完美的手册案例,一旦到了真机之上,就摇身变成了“滑不动、点不准、狂卡顿三兄弟”。
移动端,是后台系统最说不出口的恶梦。
从事后端工作的同事,始终都没办法明白,为何页面之内存在五十条数据的时候就会出现崩溃的情况。
移动端后台为什么那么难做?
在桌面上,难道有人会吐槽你的iPad布局吗?没有,反正根本就没有人去缩放窗口。
但手机上,你一屏就显示三行字,列表滑三秒才出下一页。
用户骂你:怎么那么卡,是不是服务器垃圾?
其实是你虚拟列表没用对。
我踩过这坑太深了,说出来都丢人。
一般admin模板,它是基于桌面设计的。
桌面显示报表和图表,舒服。
但手机上,你堆六个卡片在那,用户得滑三秒才能看到全部。
并且处于没有运用虚拟列表的情形下,移动设备端的一次性进行渲染这样的行为,直接致使低级安卓系统出现崩溃现象。
你要自行去转变为React的虚拟列表,并且在某些情形之下要手动进行修改。
上一回,我弄了个有着500条记录的订单列表,将其进行渲染花了一秒钟,结果手机热得如同暖宝宝一般烫。
后来加了react-才勉强冷静下来。
换组件库这事,也得注意。
移动版的Ant ,跟那个Ant ,可不是同一回事儿。
你抄桌面版代码,放到手机上去,按钮很大,布局全散。
桌面你用,手机上得用移动组件。
况且我有惰性,起初并未进行更换,然而却出现了这样的状况,即一个列表之中的按钮,在手机上,无论如何都无法实现对齐。
那晚我删了重写好几次,才发现是库的问题。
后来干脆全换 react-vant 才舒服一点。
状态管理,你用对了没有?
还有状态管理。
你要知道移动后台,轮询非常频繁。
若是不进行优化,每隔几秒便发狂似地刷新,用户的电量以及流量全都会被你消耗殆尽。
于我原本的模板之中,所存满满的都是,一旦对数据作出更改,全部的子树便会重新进行渲染。
状态一多,巨卡。
之后,进行切换,切换至,或者Redux ,将那些存在于全局范围,易引发问题,类似于触雷般的情况予以减除。
少渲染几次,性能就回来了。
移动端后台的屏幕适配困扰
适配问题更是一言难尽。
设计稿给的是375px宽。
所有图标准备好了。
但一到折叠屏、一到横屏,按钮飞到天上去了。
旋转屏幕再对不齐用户就开始骂。
没办法,需要运用来对进行监听,进而动态地去调整列表的行数以及卡片的列数。
还有flex+grid一起上,才能勉强保住脸面。
那些更隐藏的坑
更恶心的是手写系统偏好。
存在这样一批键盘导航用户,他们开启了高对比度,然而你却对此不管不顾,直接将默认样式删除,如此一来,他们便无法找到焦点了。
因着这个缘故呢,我耗费了满满一整个通宵去进行排查,而后才发觉那儿存在着现成的hook。
深浅色,那些个监听不到的.历史原因,我其实也没搞懂。
反正就那么用吧,能跑就行。
还有 和源码包大小的问题。
桌面版你可以无视SW离线策略,反正网线一直插。
移动端进电梯、进地铁,没网了直接一片白屏。
我只好被迫去搞离线缓存策略。
另外,存在着打包之后动不动就有3兆的文件,将其放到桌面上,没有人会察觉到什么,若放置在手机上,加载起来需要三四秒钟的时间。
Code 没做好就是这种后果。
后端接口对移动端的适配也很关键
后端接口可能也是大坑。
我们所认为的后端给予的列表接口,一次去返回两三百条各种各样的数据,你觉得这样的情况好似是贴心的表现,然而实际上它却是一场灾难。
移动端不需要那么多。
你得逼后端改接口,提供分页参数。
不然你再虚拟列表也白搭。
还有字体大小。
桌面默认用px写,手机上完全不行。
你辛辛苦苦做的管理后台,放在手机上文字小得跟蚁卵似的。
后来只好全部改成rem。
哪怕添加上了,或者填入了lib-,然而动态去更改根字体,却又跟SSR产生了冲突。
又是一场debug之旅。
哎,说多了都是泪。
每次改后台的移动端兼容性,都像给一艘航母装轿车的轮子。
最重要的教训
最后来句真心话吧。
仅源码还算作初期起始点,若你切实打算将其推至移动端,那就必须自行去改动框架结构,更换相关组件,优化整体性能,开展适宜适配工作。
别信那些“五分钟搞定”的标题党。
后台拖拽、看报表、审批任务,手机上很难受的。
所以如果你打算按这个方向做,提前想好:
真的有必要移动办公吗?
我是写完这十几万行代码才发现——
将代码迁移过来是较为便利的,然而,要把桌面体验成功转变为手指触控,此地实实在在乃是最为困难之处。
还好,踩坑越多记得越牢。
现在我闭着眼都能默写手势防抖和滚动预加载。
对了,最后送你一句我常跟自己说的话:
代码写得不好改就行,用户体验崩了用户就不会再来了。

