1. 程式人生 > >imi v0.2.2 釋出,1秒增量熱更新 + 60餘項改進

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

尋有緣人

想要加入我們嗎?開源專案不能只靠一兩個人,而是要靠大家的努力來完善~

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