这次发布的 v3.1 版本,带来的远不止常规的功能迭代。根据官方数据,这堪称 NativePHP 框架有史以来最大规模的性能飞跃。
⚡ 迄今为止最大的性能飞跃
响应时间提升超过 10 倍,并且新增了对后台作业处理的支持。在平台兼容性上,现已支持 Android 8 及以上版本,并在 iOS 上实现了完整的 ICU 支持。此外,版本还能够自动匹配 PHP 8.3–8.5,引入了二进制文件缓存等一系列改进。
持久运行时:告别重复启动
在过去的版本中,NativePHP 应用的每个请求都需要经历完整的 Laravel 启动周期:注册服务提供者、构建服务容器、处理请求,最后销毁一切。每一次请求都是如此,导致响应时间通常在 200–300 毫秒左右徘徊。
现在,这种情况在 v3.1 中得到了彻底改变。新版本只会启动一次 Laravel 内核,后续的所有请求都复用同一个已初始化的内核。这使得响应时间直接骤降至 5–30 毫秒。这不是笔误,确实是高达 10 倍 的性能提升。
你的应用会因此变得极快,点击操作立刻得到响应,页面加载几乎在眨眼之间完成,终于能获得真正原生应用般的流畅体验。
实现这一特性的配置非常简单,只需在 config/nativephp.php 文件中进行设置:
// config/nativephp.php
'runtime' => [
'mode' => 'persistent', // 或 'classic'
'reset_instances' => true,
'gc_between_dispatches' => false,
],
将 mode 设置为 persistent(这也是默认值)即可启用内核复用;若设为 classic 则会保持每次请求都重启的旧有模式。系统具备容错能力,如果持久化模式启动失败,会自动回退到经典模式。诸如 Livewire 组件状态、路由状态、门面(Facade)实例等,框架都会自动妥善处理。
后台队列工作者:解放主线程
这是自框架诞生以来最受期待的功能之一。v3.1 版本内置了线程安全(ZTS)的 PHP 以及一个专用的后台队列工作者。这个工作者运行在独立的线程中,与处理 UI 交互的主请求周期完全隔离。
配置过程出乎意料地简单,通常只需要一行环境变量:
QUEUE_CONNECTION=database
之后,你就可以像在标准的 Laravel 应用中一样分发任务:
use App\Jobs\SyncData;
SyncData::dispatch($payload);
后台工作者会在应用启动时自动运行。这意味着那些耗时的操作,例如长时间运行的 API 调用、大文件处理、数据同步等,再也不会阻塞用户界面了。
所有任务都会被持久化到数据库中,即使应用重启,任务也能继续执行。Laravel 原生提供的任务重试、失败处理等机制全部可以直接使用。该功能在 iOS 和 Android 平台上均得到完整支持。
Android 8+ 支持:覆盖更广的设备
此前,NativePHP 要求的最低系统版本是 Android 13(API 33),这无形中将安卓生态中一大部分存量设备排除在外。
v3.1 版本将最低系统要求大幅降低至 Android 8(API 26)。
为了实现这一目标并在 Android 端提升性能与可靠性,新版本采用了静态链接技术。现在,相关的 SDK 版本也变得完全可配置:
// config/nativephp.php
'android' => [
'compile_sdk' => env('NATIVEPHP_ANDROID_COMPILE_SDK', 36),
'min_sdk' => env('NATIVEPHP_ANDROID_MIN_SDK', 33),
'target_sdk' => env('NATIVEPHP_ANDROID_TARGET_SDK', 36),
],
这一改动意味着你的应用能够触达更多的设备、用户和更广阔的市场。
iOS 上的完整 ICU/Intl 支持
现在,为 iOS 构建的应用将自带完整的 ICU(International Components for Unicode)库支持,使得 PHP 的 intl 扩展在 iOS 和 Android 两个平台上都能正常工作。
在此之前,intl 扩展仅在 Android 上可用。这对于许多依赖它的流行包(例如 Filament)来说是一个致命缺陷,因为 Filament 需要它来处理数字格式化、日期本地化、复数规则等国际化功能。
从 v3.1 开始,Filament 可以直接在 iOS 和 Android 上开箱即用。
想象一下:一个功能完整的 Filament 管理后台,可以同时作为原生移动应用发布到 iOS 和 Android 应用商店。无需任何 Hack 手段,也没有功能妥协。
在安装时,你可以通过 --with-icu / --without-icu 参数来选择是否包含 ICU 支持。如果追求极致的安装包体积,可以选择关闭。但团队已经做了大量优化,确保默认包含 ICU(目前主要支持 en 区域设置)的体验非常轻量:ICU 现在只会给应用整体体积增加大约 10–15MB,两个平台都是如此。
PHP 版本自动匹配与二进制缓存
NativePHP 现在会自动读取你的项目 composer.json 文件,在下载 PHP 二进制文件时匹配其中指定的 PHP 版本范围,开发者无需再手动固定或指定版本。
- 最低支持 PHP 8.3。
- 最高支持到 PHP 8.5。
- 采用动态版本清单机制,取代了过去的硬编码下载 URL。
- 下载的 PHP 二进制文件会缓存在本地的
nativephp/binaries 目录中,后续构建时直接使用,避免重复下载,提升了构建速度。
开发者体验优化
新版本还包含了一系列提升开发效率的细节改进:
- 插件批量注册:
native:plugin:register 命令现在可以一次扫描并注册多个插件。
- 未注册插件警告:运行
native:run 时,如果检测到有插件尚未注册,命令行会给出明确提示。
- 平台名称简写:在任何需要指定平台参数的地方,现在可以使用简写
ios/i 或 android/a。
- 自动编译插件:执行
native:package 进行应用打包时,会自动编译所有已注册的插件。
- Android URL 编码保留:在 Android 端进行重定向操作时,现在会正确保留 URL 中的编码信息。
- 移除无用依赖:清理了
react/http 和 react/socket 这两个不再需要的依赖项。
- 支持 Laravel 13:现已兼容 Laravel 13 框架。
平滑升级指南
v3.1 是一个零破坏性变更的平滑升级版本。升级步骤如下:
首先,在 composer.json 文件中更新依赖版本:
"require": {
"nativephp/mobile": "~3.1.0"
}
然后,在终端执行更新命令:
composer update
php artisan native:install --force
使用 --force 参数会强制更新原生项目文件、PHP 二进制文件和相关配置到 v3.1 的最新版本。
总而言之,这不仅仅是一个小版本号的变化。它是一个让基于 NativePHP 构建的应用真正获得原生应用体验的里程碑版本:速度快了 10 倍、支持后台任务、拥有更广泛的设备兼容性以及更完善的生态支持。对于正在使用或考虑使用 PHP 进行跨平台移动开发的团队来说,这次更新值得深入评估。如果你想了解更多类似的跨平台开发实践,欢迎到 云栈社区 的移动开发板块交流探讨。