rares / big-pipe-bundle

在 Symfony 中实现基本 BigPipe 概念的 Bundle。

安装: 107

依赖项: 0

建议者: 0

安全: 0

类型:symfony-bundle

2.3.0 2018-06-18 08:47 UTC

This package is auto-updated.

Last update: 2024-09-18 22:16:58 UTC


README

BigPipeBundle 是一个用于 Symfony 3.4/4 的 Bundle,它将基本 BigPipe 概念集成到 Symfony 应用程序中。有关该概念的更多信息,可以在 这里 找到。

安装

要安装此 Bundle,首先您需要安装 jQuery。

然后需要引入此 Bundle

    composer require "rares/big-pipe-bundle"

然后在您的 AppKernel 文件中启用此 Bundle

$bundles = [
	...,
	new Rares\BigPipeBundle\RaresBigPipeBundle(),
];

然后您需要使用以下命令安装资产

bin/console assets:install --symlink

然后您需要将此 Bundle 的脚本包含到您的模板中

<script src="{{ asset('bundles/raresbigpipe/js/scripts.js') }}"></script>

使用

要使用此 Bundle,只需在模板中调用 render_bigpipe Twig 函数,在您通常使用其他 Twig 渲染函数的地方。此函数将渲染一个页面片段的占位符标签,然后在主页面加载完毕后,按顺序加载页面上的所有页面片段。此函数支持路径和控制器引用,就像正常的渲染函数一样。

此函数还接受一个可选的第二个参数,即页面片段的优先级。优先级较高的页面片段将首先在页面上渲染。

示例

    {{ render_bigpipe('url...') }}<br>
    {{ render_bigpipe(path('route...')) }}<br>
    {{ render_bigpipe(controller('Controller::...'), 3) }}

然后,在您的控制器中,您必须使用 BigPipeRenderer 类中的 renderBigPipe 方法

	return $this->get(BigPipeRenderer::class)->renderBigPipe('page.html.twig', [
		...
	]);

就是这样!您现在有一个使用此 Bundle 的应用程序!您的首页将首先渲染,然后按页面定义的顺序渲染所有页面片段。

缓存

此 Bundle 还与 Symfony 反向代理集成以进行缓存。实际上,建议在您的应用程序中启用缓存。要启用缓存,只需简单地编辑您的 web/app.php 文件,并使用此 Bundle 提供的 BigPipeHttpCache 类代替默认的 Symfony AppCache kernel

$kernel = new \Rares\BigPipeBundle\Cache\BigPipeHttpCache($kernel);

您还可以将自定义 StoreInterface 作为第二个参数传递给 BigPipeHttpCache 类。如果您想将此 Bundle 与 ReverseProxyBundle 一起使用,这将很有用。

会话

默认情况下,Symfony 中的会话在内核响应事件中保存,这对于正常应用程序来说效果很好,但不与 BigPipe Bundle 兼容,因为响应是流式传输的,并且首先发送了头部,这将阻止在页面片段中访问会话。由于这个原因,此 Bundle 重写了此行为,并且将会话在内核终止事件之后保存。如果您有会话问题,您可以手动保存它,但请注意,这将阻止它被加载在该特定子请求之后的所有页面片段使用。

查看 demo 分支,以查看使用此 Bundle 的示例项目。