因是这样的。公司接了一个活,公司好多年前开发的一个系统要求变更外形样式。
因为原系统有大量的JS交互操作,而新的系统只是单纯的改变一下界面,所以我初步的思路就是在保留原动作的同时,修改样式的实现。 而我也就这样展开了工作。
最开始,确实进行的非常顺利。但是渐渐的,样式的修正变得不是那么顺利。于是开始骂娘,开始骂旧系统的垃圾。就这样持续了好几天。
最后直到昨天,旧界面上的动作和新界面上的动作产生了冲突,怎么debug,怎么改都不行,在平白浪费了近一天的时间后,开始反思自己这些天来的工作。 最终发现,原来不是系统有多垃圾,而是是自己走进了死胡同。
这里就涉及到了新旧两个界面所使用的技术上来了。
旧界面使用的是公司早年基于jquery-ui
的JS库(暂时称之为公司库)。然后因为旧界面的动作直接和公司库的代码进行绑定。这等于说间接和jquery-ui
有了比较强的耦合。
而新界面是基于featherlight.js的实现。当我要显示新系统的界面是,必然要将featherlight.js
纳入原来的系统,而这中间,公司库和featherlight.js
发生了冲突。拆东墙补西墙,哪里都要改,但哪里都改不好,导致最后工期无限延长,自己搞死自己。
除非是对公司库和featherlight.js
都非常熟悉的人,才可能去完成这项任务吧。
原因算是找到了,那解决方案呢?
也很简单,完全摈弃旧界面的实现方案,包括js和css。然后将静态的新界面原封不动的挪过来,做到先只保留新界面的代码。
这样一来,旧系统代码就对我的修改没有了任何的影响了。
而剩下来的事情就很简单了,将静态的页面一个个动态化,这样做就很简单了,而需要JS进行动态加载的地方,要么自己写几个函数,或者从原来的公司库里面拷贝点代码过来就能完美解决。
然后再有困难,也都是可以在网上找到答案,或者自己稍微修修改改也就有了解决方案的问题。
所以,从这次作业的前后来看,我犯了一个严重的错误,潜移默化的认为样式(CSS)是很简单的东西。
所以我最开始选择的,是先保留页面上的功能,再往页面上添加新的样式。
然而,我却忘了,现代的样式,特别是到了H5之后,样式不仅仅是CSS,很多时候CSS和JS都是紧密团结在一起,甚至有时候CSS只是一个配角,真正的主力是JS。而CSS、JS又或者HTML单单拉出一个来都不能成为一个独立的个体,只有将HTML、CSS、JS三者有机地结合在一起,才能真正称为H5。
而造成这样的问题的,原因和非常简单,就是对H5的理解还是浅薄了。依然想当然地认为样式(CSS)就是那么回事,粘贴复制就可以解决问题。所以这才造成了开始的时候,陷入如何去调和两个 JS 库的思维误区中。
而最后是怎么发觉的呢?也很简单。
当发现原本的旧系统的界面功能无法完美展现新界面,两者又死活无法完全兼容时,我最开始的想法是自己上手写代码来解决。但要做到和一个成熟的库完全一致的功能,不是一个人,一朝一夕就可以做到的,于是我就死死的陷在其中,越陷越深,无法自拔。
直到下班后,在地铁上反思重新整理这一天正的工作时,才想到新界面已经写好,又何必自己去动手写代码来实现呢?这不等于再次开发了一遍其他人已经干好的事情么?搞了半天,原来自己这一天做的都是无用功。
然后,既然知道了原因,思路也调整了过来,再来干活就彻底明白了要怎么做。
一天干下来,虽然把前几天的活反了一下工,单整体的速度却有非常明显提升。
从这次的教训中,可以获得经验有什么呢?