从2017年9月18号,我开始独立做C游新官网项目。第一次独立完成项目,压力还是挺大的,毕竟还要自己去写前端,前端我已经忘了差不多了。
做这个网站主要是公司开始转型,开始自己建立渠道倒量,这样网站的SEO优化就很重要了。原来官网是跑脚本5分钟一次生成所有站点的全静态网页,但是这样对磁盘的消耗比较大,而且某些访问量较小的代理站点也要为其生成页面,这样就造成了不必要的性能消耗。另外,新官网有评论回复,盖楼等交互,比较多的详情页,详情页是肯定做不了静态化的了,而且原来域名解析只会解析到对应代理静态页面的文件夹下面,这样在请求接口的时候就会造成不便,而且,访问纯静态页面的时候,layer弹出层会有问题。
综上所述,就选择了传统的页面渲染方式,数据则读取cache和DB。用户权限接口全部调用现有的。接口域名是不同域名的,这里就有一个ajax跨域问题,请求接口之后会发放名为cyauth的cookie,用来记录用户登录状态,这样jsonp就做不了了,所以选用了nginx代理,这样就可以保持session一致,但是发放的cyauth只是用json字符串base64编码了一下,但是我觉得不够安全,所以在登录和注册请求之后请求自身站点发放一个token用来验证登录,结果也证明我的选择是正确的,因为登录注册发放的cyauth过期时间太长了,足足一年时间,而我自定义的token过期时间设置为7天,只要过期或者伪造cyauth或者token了,程序就把所有cookie清除,后面还加了一个实名验证的需求,在用户登录之后弹窗让其实名,这样就把业务连贯起来了。
开始因为设计图还没有出,所以我先把要用的接口都准备好,这个时间倒是挺快的,一两个礼拜就完成了,然后设计图也出的差不多了。在国庆回来之后就开始做静态页了。
后端接口的进度让我对整个项目的完成预估有了不切实际的幻想。在开始做静态页的时候就击碎了。一个首页让我做了7天,是工作日,而不是自然日。虽然后面页面的进度相对快了不少,但其实问题还是不少的(到上线前一天还在调试轮播图,因为是手撸的轮播图,比较好调试,而且貌似性能会好一点)。在做的时候我没注意浏览器兼容性问题,用了不少CSS3,如border-radius,rotate。像chrome跟FF之间的差异还是会有不少差异,那么零点几个像素的区别,还有CSS3的解析问题。但还好,chrome,FF,QQ等正常的浏览器战友的市场份额比较多,不用做过多的向下兼容,像IE,IE8,IE7和IE6之间的差异都非常大,页面放上去完全不能看。后来我看了下,腾讯的网站完美兼容了IE,而像知乎比较新的网站就完全没做兼容,大概是没什么历史包袱吧。
页面完成之后就要填充数据了,从这时开始就要把之前自己挖的一些坑给填上。很多接口我在做之前没有考虑清楚,导致会出现不少逻辑错误。另外,由于需要加缓存,很多获取数据的方法都需要调整,这就是没有预先制定好缓存策略的坑。还有在页面获取分页数据的时候,页面逻辑相对来说比数据逻辑还要稍微复杂一些,所以页面变动经常出bug,这也跟我使用js生成HTML追加到页面这样的方法有一定关系。如果以后页面有变动,那么久需要改两处地方了,比较麻烦,最主要是我不会js框架。。。
用户的权限验证一般都会放在父类控制器中完成,但不是所有的接口和页面都需要进行权限验证,这里就需要传参或者区别处理了。我最开始是不区分,直接所有请求都进行权限验证,但这其实是一种性能的浪费,后面修修改改几次才改好。
不管怎样,现在项目上线了,总算是独立完成了一个不小的项目。总结起来,做项目还是要好好分析需求,尽可能预计出所有项目完成过程中可能出现的情况和以后改版可能出现的需要增加和改动,做出合理的代码设计,代码逻辑考虑要周全,程序要健壮和容易维护,可读性要强,然后才去考虑性能的问题。不过web项目都是IO密集,对程序的运算性能要求不高,所以做好缓存,限流还有降级就差不多了(降级暂时还不会)。