wayfair/hypernova-php

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

v2.2.0 2022-07-29 14:15 UTC

README

PHP客户端,用于您的Hypernova服务

为什么选择Hypernova?

更广泛的问题往往是“我该如何在服务器端渲染我的React应用?”这可能是一个业务需求(例如SEO)或只是想为用户提供最快的初始渲染。

假设您有一个PHP后端(否则您为什么会在这里?),通常您会想要搭建一个node.js服务来为您进行渲染。您可以尝试phpv8js,但我认为在任何规模的生产环境中使用都是不合适的。这只是我的观点,请自行研究 😁

那么——编写自己的node.js服务,或者使用现成的。编写自己的node.js服务并不特别困难——您可以用大约20行代码搭建一个东西来为您渲染React组件。我们个人选择Hypernova是因为它轻量级、可插件(见插件系统)、性能良好(见createVM中的巧妙字节码缓存),并且当服务有问题时具有良好的客户端回退行为。

入门指南

composer require wayfair/hypernova-php

创建一个Renderer

use \WF\Hypernova\Renderer;

$renderer = new Renderer('http://localhost: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