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
尋有緣人
想要加入我們嗎?開源專案不能只靠一兩個人,而是要靠大家的努力來完善~
我們需要你的加入,你可以做的事(包括但不限於以下):
糾正拼寫、錯別字
完善註釋
bug修復
功能開發
教程、部落格分享