imi v0.2.2 发布,1秒增量热更新 + 60余项改进

栏目: 软件资讯 · 发布时间: 5年前

内容简介:距离上次发布差不多一个月了,这期间 imi 稳步推进,修复各项问题的同时,增加了不少实用组件和注解。 此次更新,在开发项目的体验也有巨大的提升。imi 的热更新采用了最新的增量更新技术,原本我们的实际项目在 ...

imi v0.2.2 发布,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生成问题

介绍

IMI 是基于 Swoole 开发的协程 PHP 开发框架,完美支持 Http、WebSocket、TCP、UDP 开发,拥有常驻内存、协程异步非阻塞IO等优点。

IMI 框架文档丰富,上手容易,致力于让开发者跟使用传统 MVC 框架一样顺手。

IMI 框架底层开发使用了强类型,易维护,性能更强。支持 Aop ,支持使用注解和配置文件注入,完全遵守 PSR-3、4、7、11、15、16 标准规范。

框架的扩展性强,开发者可以根据实际需求,自行开发相关驱动进行扩展。不止于框架本身提供的功能和组件!

官网:https://www.imiphp.com/
文档手册:https://doc.imiphp.com/

代码仓库:
码云:https://gitee.com/yurunsoft/IMI
Github:https://github.com/Yurunsoft/IMI

空项目:https://gitee.com/yurunsoft/empty-imi-demo
功能Demo:https://gitee.com/yurunsoft/imi-demo

寻有缘人

想要加入我们吗?开源项目不能只靠一两个人,而是要靠大家的努力来完善~

我们需要你的加入,你可以做的事(包括但不限于以下):


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编码的奥秘

编码的奥秘

Charles Petzold / 伍卫国、王宣政、孙燕妮 / 机械工业出版社 / 2000-9-1 / 24.00

渴望交流是大多数人的天性。在本书中,“编码”通常指一种在人和机器之间进行信息转换的系统。换句话说、编码即是交流。有时我们将编码看得很神秘,其实大多数编码并非都是这样。大多数的编码都需要被很好地理解,因为它们是人类交流的基础。――《编码的奥秘》 手电筒、英国人入侵、黑色的猫和跷跷板与计算机有什么必然联系?本书向我们展示了使用语言的一些直观方法并创造新的方法来进行相互之间的交流。此书使我们明白了......一起来看看 《编码的奥秘》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换