我有一些简单的复杂页面。 例如:内容(左)和侧边栏(右)。 边栏由多个部分组成。我们来看看其中一个。此片段包含订阅该事件的用户列表(例如)。该列表仅显示5个用户和“更多”按钮,单击时会加载更多用户(ajax)。 如果我使用:
{% render controller('SomeBundle:Event:subcribers', {page: 1, limit: 5}) %}
或者:
{% render path('event_subcribers_route', {...}) %}
它会导致子请求。注意:在这种情况下,我使用此路由'event_subcribers_route'来表示ajax请求。
问题:可能存在避免数十个子请求的方法吗?
我知道我可以使用服务,里面有渲染逻辑,但也许存在这个常见任务的最佳实践。
答案 0 :(得分:0)
子请求有什么问题?
也许您会考虑浏览器和服务器之间的更多流量,因为如果HTML中有许多图像,css文件或javascript指令,就会发生这种情况。
这不是在Symfony框架内使用内部子请求的重点。实际上这只是一些程序逻辑或设计模式。
<div id="outtermost-wrapper">
<div id="page-header" class="container-fluid">
HEADER - Blue Dotted - Stays at the top
</div>
<div id="page-content" class="container-fluid">
<div class="chart-nav">
SUB HEADER - Green Solid - Stays at the top
</div>
<div class="faux-sidebar-wrapper">
<div class="chart-sidebar-wrapper">
<nav class="navbar-default navbar-static-side">
<ul class="nav metismenu">
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
</ul>
</nav>
</div>
<div class="faux-sidebar">
<div class="row main">
<div>Actual Page Content with Widgets and What Not</div>
</div>
</div>
</div>
<div class="footer-push"></div>
</div>
</div>
<div id="page-footer" class="container-fluid">
FOOTER - Red Solid - Stay below the and not lift off the bottom of the page for short content.
</div>
这是一个非常简化的子请求模式,就像使用Twig中的browser->request->[router->controller->view]->response->browser
^ |
| |
|<-subrequest-V
一样。在{% render controller() %}
和[
之间是Symfony。你只需要留在申请表中。
答案 1 :(得分:0)
每当您包含该HTML时,无论您使用哪种方法,都需要对数据库执行相应的子请求。
但是,您可以优化查询以恢复这些用户。您只能选择实际需要的字段(用户名,slug等),也可以在单个查询中执行。该单个查询将成为预准备语句,您甚至可以在表上放置索引以使查询更快。
此外,您可以实现symfony缓存系统以避免symfony在每次加载时执行的子请求。如果您的代码段始终加载相同的5个用户,或者他们在X分钟后更改,则可以轻松实现高效缓存。