drom/hypernova-php

hypernova 的 PHP 客户端。https://github.com/airbnb/hypernova

3.0.5 2023-12-23 08:24 UTC

This package is auto-updated.

Last update: 2024-09-23 10:19:05 UTC


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