渲染页面片段的最佳实践

时间:2015-09-23 17:54:58

标签: symfony

我有一些简单的复杂页面。 例如:内容(左)和侧边栏(右)。 边栏由多个部分组成。我们来看看其中一个。此片段包含订阅该事件的用户列表(例如)。该列表仅显示5个用户和“更多”按钮,单击时会加载更多用户(ajax)。 如果我使用:

{% render controller('SomeBundle:Event:subcribers', {page: 1, limit: 5}) %}

或者:

{% render path('event_subcribers_route', {...}) %}

它会导致子请求。注意:在这种情况下,我使用此路由'event_subcribers_route'来表示ajax请求。

问题:可能存在避免数十个子请求的方法吗?

我知道我可以使用服务,里面有渲染逻辑,但也许存在这个常见任务的最佳实践。

2 个答案:

答案 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分钟后更改,则可以轻松实现高效缓存。