2016项目开发经验总结及后续计划

目录

关于SEO

  • 开发过程中一般会规划几个环境,比如dev,qa,pre,prd-test,prd,其中我们的pre比较特殊,会公开到外网的一个域名用于培训。在开发初期,完全没有考虑SEO相关的事情。pre环境的网页不应该被搜索引荐收录。可是我们没有处理,导致用户搜索到了,给用户带来了一些不便。

  • 因此,我们在开发阶段就应该考虑这些事情。增加robots.txt文件

    dev, qa, pre配置

    User-agent: *
    Disallow: /
    

    prd-test, prd配置

    User-agent:*
    Allow:/
    Disallow:/Content/
    

关于Cookie

  • Cookie的值应该尽量小,我们的值已经超过1K了,这个要想办法优化...
  • 强制Cookie过期时要设置的合理一些,一个队友把过期时间设置为DateTime.Now.AddSeconds(-1),由于服务器时间和用户机器的时候存在差异,导致Cookie在那个间隔内没有失效。

关于登录

  • 使用成熟的FormsAuthentication
  • 用当前登录帐号(LoginName)缓存登录信息,需要考虑负载均衡的场景:比如在A服务器上登录,下个请求可能又到了B服务,那么要考虑服务器的本地缓存如何失效。我们采用的是用登录状态中的时间戳来解决缓存失效问题。
  • 在负载均衡的场景中要将所有服务配置相同的MachineKey,否则在A服务器登录后,下个请求到了B服务器,如果MachineKey不同的话,带过来的Cookie无法解密,就无法恢复登录状态。
  • LoginName必须全局唯一。
  • 登录状态要尽量小,否则在恢复登录状态时,需要频繁地解密等,会导致性能问题。
  • 只允许在Controller层使用登录状态,不允许在Service层使用登录状态。因为在登录状态需要HttpContext的支持,在服务层使用多线程时,就没有HttpContext就无法恢复登录状态。所以登录状态最好从上层的Controller层传递到Service层。

关于前端

  • 前后端还是没有分离
  • 组件化思想还是没有贯彻
  • 规范了在View层不允许写C#代码
  • 全面使用knockoutjs,少量场景继续使用jquery
  • 下一步准备使用requirejs进行组件化/模块化开发

项目部署结构

项目部署结构

  • 目前每天的PV接近20W,还在不断上升
  • 主要有六个产品线
  • 所有产品线使用统一的授权平台AuthCenter
  • 所有产品线使用https部署

项目分层结构

Web 项目分层结构

Web API 项目分层结构

Job Console

  • 公司处于创业期,根据我们的业务场景选用最简单的三层结构
  • 各层必须界限分明,不允许滥用每层的职责
  • 数据访问层:只允许有数据访问及少量相关逻辑。
  • 服务层:负责业务计算,数据缓存等逻辑。
  • Controller:只允许服务调用获取Model,计算Model或视图状态,输出缓存等相关逻辑
  • View:只允许使用ViewBag接收Controller层中计算好的状态,不允许在视图引擎层书写C#代码。

项目主要使用到的技术

  • asp.net mvc 4.6.2
  • asp.net wep api 2.0
  • jquery
  • knockoutjs
  • vuejs 2.0+vue router 2.0+webpack 2.0
  • nginx
  • redis
  • solr
  • zabbix
  • mysql

posted on 2017-01-11 16:51  James.H.Fu  阅读(430)  评论(0编辑  收藏  举报

导航