drom / hypernova-php
hypernova 的 PHP 客户端。https://github.com/airbnb/hypernova
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^6|^7
- ramsey/uuid: ^3.5|^4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- phpstan/phpstan: 0.12.99
- phpstan/phpstan-phpunit: ^0.12.22
- phpunit/phpunit: 9.5.10
README
Hypernova 服务的 PHP 客户端。
为什么选择 Hypernova?
更广泛的问题往往是“我如何进行 React 应用的服务器端渲染?”您可能出于业务需求(例如 SEO)或仅仅想要提供用户最快的初始渲染。
假设您有一个 PHP 后端(否则您为什么会在这里?),您通常将建立一个 Node.js 服务来为您进行渲染。您可以尝试 phpv8js,但我相信在任何规模的生产环境中都不适合使用。这只是我的看法,请自行研究 😁
因此,那么——编写自己的 Node.js 服务,或者使用现成的服务。编写自己的 Node.js 服务并不特别困难——您可以在大约 20 行代码中搭建一个可以为您渲染 React 组件的服务。我们个人选择了 Hypernova,因为它轻量级,可插拔(参见插件系统),性能良好(参见 createVM
中的字节码缓存),并且在服务出现问题时具有不错的客户端回退行为。
入门指南
composer require drom/hypernova-php
创建一个 Renderer
use \WF\Hypernova\Renderer;
$renderer = new Renderer('https://:3030/batch');
给它一些工作
$renderer->addJob('myViewId', ['name' => 'my_module_name', 'data' => ['some' => ['props']]]);
可选地添加一个或两个插件(参见插件部分)
$renderer->addPlugin($myPlugin);
$renderer->addPlugin($myOtherPlugin);
然后获取您的渲染 Response
$response = $renderer->render();
echo $response->results['myViewId']->html;
插件 API
这是如何自定义客户端行为。常见用例包括
- 记录请求元数据,如性能计时
- 错误记录
- 注入/移除属性
- 在开发环境中内联堆栈跟踪
- 完全停止对服务的请求,让所有内容都回退到客户端渲染
通常,您可能只想实现生命周期钩子的子集;也许您需要处理 onError
,但没有必要使用 shouldSendRequest
。为了方便开发者,您可能希望扩展 \WF\Hypernova\Plugin\BasePlugin
,它提供了所有钩子的无操作实现。
请参阅 js 客户端文档 以获取可用钩子的完整描述。
贡献
将其分叉,提交 PR。
运行测试
composer test
运行 phpstan
composer analyse
运行 PHP fix
composer fix