1秒增量热更新 + 60余项改进
距离上次发布差不多一个月了,这期间 imi 稳步推进,修复各项问题的同时,增加了不少实用组件和注解。
此次更新,在开发项目的体验也有巨大的提升。imi 的热更新采用了最新的增量更新技术,原本我们的实际项目在 WSL 下热重启需要 6 秒(根据文件增多,逐渐变慢),现在使用框架核心运行时缓存
+热更新重启采用增量方式
,不管文件增加多少只需 1 秒左右,即可完成热重新重启,极速的体验~
另外我们的框架核心运行时缓存、项目运行时缓存、数据库 Statement
复用等优化,也为开发、生产时的性能及体验打下了坚实的基础。
我们将持续为性能优化,为可靠性优化。
在此要特别感谢 @wi1dcard 一直以来的讨论交流,感谢群里每一位同学。
当前 imi 还不是正式版,就快了,请耐心等待哦!
更新日志:
新增
Redis
-
新增RedisManager类(getNewInstance/getInstance/release/getDefaultPoolName)
-
新增Redis类,用于快捷操作,如:Imi\Redis\Redis::set($key, $value)
-
新增 redis.quickFromRequestContext 配置项,支持配置Redis快捷操作类,使用RequestContext独享连接还是连接池实时争抢
-
Redis连接池配置新增支持uri格式
缓存
-
新增RedisHash缓存驱动
-
新增 Cacheable、CacheEvict、CachePut 注解
-
实现 Cacheable 注解中的 Lockable 嵌套使用
锁
- 新增 Lock,支持注解锁 Lockable,默认带有 RedisLock 支持
配置
-
新增支持 Config::get('@currentServer.xxx') 用法,当前服务器配置中不存在则取 @app 中的配置
-
增加注入值注解的概念,支持 ConfigValue 等注解,可用于注解参数使用配置值
注解
-
新增 Callback 注解,其 class 可配合 Inject 注解,实现表示bean类方法回调
-
Condition注解的args属性,增加默认值
-
新增 Compare、ValidateValue 用于验证的注解
-
新增 ConstValue 注解,从从常量中读取值注入注解属性
验证器
-
Http 验证器新增支持验证 $headers、$cookie、$session
-
为验证器增加$this支持
其它
-
新增支持忽略路由URL大小写
-
实现进程名称统一管理
-
新增支持方法参数注入
-
为Bean类统一增加__clone支持
-
实现了unset()模型类属性的处理
-
新增用于过滤字段的列表 Imi\Util\FilterableList
-
MySQL、Redis连接池配置新增支持uri格式
-
新增支持.env环境变量
-
数据库查询器支持 replace into 用法
-
Model->save()实现方式改为replace
-
@ExtractData 现在可以导出单独的$get/$post/$body等数据了
-
新增jsonBodyIsObject配置项,设置post body为json时,转为对象还是数组,默认为false数组。可以和@app.jsonBodyIsObject或@currentServer.jsonBodyIsObject配合使用
-
新增 Pagination 分页计算类
-
新增 Imi\Util\ObjectArrayHelper::filter() 过滤对象或数组属性的方法
-
新增热重启耗时输出
优化
-
完善CoroutineRedisHandler类魔术方法注释
-
因PHP BUG,放弃使用匿名类,Bean类采用eval()+动态类名,不再使用include Bean缓存文件,Bean缓存相关配置及方法移除。因此,性能有所提升。
-
Worker 进程启动时,重新加载项目配置及组件
-
调整Db、Redis获取默认连接池名称,使用@currentServer配置
-
现在缓存的$ttl参数支持传递\DateInterval类型了
-
完善 LazyArrayObject
-
将Redis模块中获取到的实例对象,统一改为 Imi\Redis\RedisHandler
-
优化热更新提示内容、重启逻辑,改为增量方式,性能更高
-
新增支持构建框架预加载缓存,提升项目开发时的热更新性能
-
优化onShutdown()时,日志处理如果发生错误或异常,直接输出错误信息
不兼容的调整
-
Imi\Redis\Redis 类更名为 Imi\Redis\CoroutineRedisHandler (连接池中如果有指定,请修改)
-
方法验证抛出的异常信息,不再包含 "xxx Parameter verification is incorrect" 信息
-
调整验证注解的args参数格式,注意与之前版本不兼容
-
弃用Swoole内置序列化,改为php序列化。原因:Swoole官方未来将不再维护序列化功能
-
信息提示英文规范
修复
-
修复Db类获取默认连接池名称问题
-
修复常量注解处理错误
-
修复master进程的事件无法触发问题
-
修复服务器配置中注入HttpRoute失效问题
-
修复热更新在特定情况下filemtime warning问题
-
修复当使用Swoole MySQL驱动时,Result->getRowCount()报错问题
-
修复开启一键协程化时,文件缓存写入失败问题
-
修复一些场景下的可变参数处理问题
-
修复使用Swoole协程MySQL时,fetchAll \PDO::FETCH_COLUMN 如果不指定$fetchArgument,结果为null问题
-
修复热重启后,@app.pools配置更改无效问题
-
修复一处潜在的notice问题
-
修复出现重复中间件时的问题
-
修复因@serializable注解导致的,模型插入更新数据缺失问题
-
修复dev/ext生成问题