## 改进记录


## 2020.12.10 调整Model目录下文件命名规律.  
  > author: gwang  
  > digest: 学习自minipet项目组.  
  1. 添加前缀规则.  
    1.1 Data_前缀: 代表一个大的数据组织结构,比如玩家数据.  
    1.2 Info_前缀: 代表一个模块级别的数据组织结构,比如仓库或者是baseInfo等.  
    1.3 Ins_前缀:  代表是一个实例数据组织结构,比如一封邮件, 一把刀或者是一个英雄.  

## 2020-11-30 调整目录结构.删掉内嵌的PHPRedisAdmin代码. -gwang 

## 2020年11月24日 这次改动值得记录一下.
> author: gwang
> digets: 渐进迭代.
  1. 代码整理精简. 普及Err()以及my_assert()的应用,替换掉旧的写法.
    1.1 删除了MySQL/MySQLi连接代码.
    1.2 删除了memcache/memcached的连接代码.
  2. 完善了PHP自检能力,在原来检查PHP版本以及模块的基础上, 增加了环境配置检查.
    2.1 增加MySQL配置检查, 读写能力, 以及插入操作性能检测.
    2.2 增加NoSQL(Redis)配置检查,读写能力以及性能检测.
  3. 补充增加了一个身份证号码检查功能.
  4. 完善了之前的Code_Gen功能(参见2017.4.5 优化1),进入生产就绪状态.


## 2019年10月开启言灵世界重制项目
> author: gwang
> digets: 代码重整, 应用近两年来的改进

1. 应用在近两年实践中的改进项.(各种精简、优化代码的写法）  
  1.1 比如Err(), my_assert(), my_default_obj(), my_default_arr()  
  1.2 经过实践检验, ErrHandler和高性能Log模块已经更趋于实用.  
  1.3 增加了PHP环境监察能力, PHP版本、基本模块检测.  
2. 应用高健关于代码组织结构的思考.(参考openresty思想)


## 2017.07.19
> author: gwang
> digest:  添加几个小优化点

1. 类型智能感知问题, 增加了一个isEditor()方法, 永远返回false, 用法: isEditor() and $xx=new someClass();
       比如: for($arr as $xx){
           isEditor() and $xx=new someClass();
           $xx->aaa; 后续代码中则可以按照someClass进行语法提示. 但是当程序运行的时候却不会受到赋值的影响.
        }
2. ClogHelper中增加一个Assert方法,  用法也同assert类似, 当条件不满足时将$errmsg写入日志, 
      当条件满足的情况下,如果指定了$okmsg,则将$okmsg写入日志.否则无日志写入行为.


## 2017.04.05
> author: gwang
> digest:  添加2个优化

1. 常量数据增加了从代码中读取的方案.
	1. 刷数据工具刷入数据的同时, 将数据写入PHP文件: return unserialize('datastr');
	2. 刷数据工具输出一个总的获取配置数据的PHP类文件, 包含了获取所有配置信息的方法封装,  采用静态变量缓存来优化多次读取问题.
	2. 读取数据的时候,先检查是否支持代码写入(define CodeGen_Enabled=false), true=>则 return include 'cfg_xxx.php'; 
2. 简化了RedisConnect的传递方案, 采用global_mem()函数加静态变量的方法来取代通过参数传递. 

## 2017.02.14

> author: gwang
> digest: 使框架真正成为了框架.

1. 改进框架结构, 自动导入需要的proc和Model类,已经部分utils类也是按需加载.
2. 效果: 减少每请求内存消耗, 提高程序单服务器并发性能. 
3. 已经过对比测试: 按需加载模式相比原来并不会影响cpu效率, 也不会延长每请求的总处理时间长度.  


## 2016-04-05
> Author:gwang,
> 
> digest: 简要提几个近期的改进

1. 通讯协议的改进
	1. 原来的通讯协议数据层乃是amf,转入Unity后,就是普通的Querystring加上base64. base64对文本长度有3分之1的膨胀,因此是相当的浪费流量.经过考虑,利用Post协议中对流的规定.修改post方法中传输数据的格式,对QueryString进行deflate压缩后直接传给服务端.服务端接收到流之后,先解压为Querystring再继续后续处理. 这样的话,实际使用过程中,相对于base64,流量大幅压缩.
		1. 可以提升玩家体验
		2. 降低服务器带宽和配置要求,节省运营费用(指数级的)
	2. 原来上一个版本,不管是post还是get,Querystring中都带有参数名.后来发现无需传参数名,可以直接给Querystring一个字符串即可.服务端完美接收.
2.  请求响应时间监控,在index中添加了函数响应时间监控.
	1.  所有请求的响应时间都做了监控.方便确认耗时函数,在开发期间即可有针对性的优化. 
	2.  同时增加了智能化的判断,如果客户端来源不是调试模拟器,那么监控代码不运行.
3.  取掉原AMFphp框架.如1中所说,现在已经没有使用AMF的条件了.所以去掉它,去掉的同时,也失去了它的后台调试页面,所以我([gwang]())自己仿制了一个后台调试页面,功能等同原来的.
4.  在模块入口处的分发代码做了个小改动,不完美.能减少些预加载的文件数量,同时减少编码数量.
5.  重点提一下Utils的改进.
	1.  添加了OpensslUtil,能进行验签,保证发送方来自认证的客户端.
	2.  添加时间辅助方法类,将原来散落于commonUtil的时间相关方法整理到里面.新增了毫秒和微秒的函数,还增加了一个用于统计渲染/逻辑执行消耗时间的辅助类.
	3.  JsonUtil,在Json_decode的时候增加安全检查,以前若是参数不是合法的json串,执行过程会报错,现在则能够在遇到非Json格式的字符串时,直接返回原字符串.(意义:在Memc=>get()函数中的jsondecode时,遇到非json串也兼容了,可返回原值)
	4.  添加HttpUtil,整理自腾讯平台给的SNSNetwork类和高健的HttpUtil类.
		1.  提供Querystring的提取,解析操作.
		2.  还提供封装了curl的服务端发送http请求的方法.
		3.  提供了一个异步请求方法,未完善.
	5.  commonUtil里面新增了压缩解压方法,用于刷后台数据程序的,暂时通用性不强.
	6.  提取CMemutil,CmemdUtil,中共有方法为一个基类.
		1.  让CMemutil,CmemdUtil和CRedisUtil继承自此基类.并统一实现原有方法.
		2.  可以达到以前的旧项目完全兼容的地步,即,将以前的某个项目的实际数据库改为Redis,只在代码层面,切换一下CMemInit()中初始化的对象类型即可.
	7.  CRedisUtil类扩展了自有特殊数据结构的操作方法.Hash,ZSet,Set,以及事务处理的相关方法.意义:
		1.  以后的项目中使用高级数据结构可以极大的节省网络通信效率以及耗费在Json编解码上的CPU.可以节省运营费用.
		2.  其高级数据结构对于开发上的便利性是非常巨大的.好多业务逻辑可以结合Redis提供的高级数据结构来实现,比如关系的实现就非常方便了.还有事务来解决一些竞争性的资源,还有排行榜的开发等等.
