Twig表单构建器渲染时间

时间:2016-05-24 17:51:05

标签: forms symfony twig silex

我使用Twig构建这样的表单:

上课:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', 'text', array(
            'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 5)))
        ))
        ->add('mail', 'email', array(
            'constraints' => array(new Assert\NotBlank(), new Assert\Email())
        ));
}

Twig:

<div class="col-xs-12 col-less-padding">
    {{ form_start(contactForm, { 'attr': {'class': 'form-horizontal pull-left'} }) }}
        <div class="form-group">
            {{ form_label(contactForm.name, null, { 'label_attr':  {
                'class': 'col-sm-4 control-label'
            }}) }}
            <div class="col-sm-6">
                {{ form_widget(contactForm.name, { 'attr':  {
                    'class': 'form-control'
                }}) }}
            </div>
        </div>

        <div class="form-group">
            {{ form_label(contactForm.mail, null, { 'label_attr':  {
                'class': 'col-sm-4 control-label'
            }}) }}
            <div class="col-sm-6">
                {{ form_widget(contactForm.mail, { 'attr':  {
                    'class': 'form-control'
                }}) }}
            </div>
        </div>

        <div class="form-group">
            <div class="col-sm-offset-4 col-sm-3">
                <input type="submit" class="btn btn-primary" value="Send">
            </div>
        </div>
    {{ form_end(contactForm) }}
</div>

但它看起来确实会影响我的网页的渲染时间。例如,静态页面的总渲染时间为350-400ms,但当我点击此联系页面时,总渲染时间为800-850ms。

我在开发环境中(所以我没有使用Twig缓存选项或gzip压缩),调试工具栏说控制器需要652ms和Twig模板387ms。 这是正确的时间吗?

调试统计信息截图:herehere

我只有一个控制器文件HomeController.php用于整个网站(它是一个小网站,因此其中只有9个功能) - 是一个问题吗?;这是关于联系行动的功能:

HomeController:

/* 8 others functions */

public function contactAction(Request $request, Application $app) {
    $book_id = $app['dao.home']->returnBookId();
    $contactForm = $app['form.factory']->create(new ContactType());
    $contactForm->handleRequest($request);

    if ($contactForm->isSubmitted() && $contactForm->isValid()) {
        $formData = $contactForm->getData();
        $msg = 'New message from'.$formData['name'].'('.$formData['mail'].') <br><br>';
        $msg .= 'Content : '.$formData['content'].'';
        mail("mail@gmail.com","New message",$msg);
        $app['session']->getFlashBag()->add('success', 'Your message was sent successfully.');
    }

    return $app['twig']->render('contact.html.twig', array(
        'active_page' => 'contact',
        'book_id' => $book_id,
        'contactForm' => $contactForm->createView()));
}

所以使用表单构建器是一种构建表单的好方法吗?或者我应该自己使用两个html输入和一个提交按钮构建表单吗?

另外,何时建议使用表单构建器而不是在视图中自己创建输入?

1 个答案:

答案 0 :(得分:1)

  1. 450ms不是那么多,你不要担心,不要忘记: &#34;过早优化是万恶之源&#34;。
  2. 是在开发环境中吗?如果是,那么可能在生产中(使用symfony缓存)它将更少
  3. 在调试tolbar的开发环境中,您可以看到哪个部分占用最多 时间 - 那说什么?
  4. 我不确定你的意思是&#34;手工制作&#34;形式,但你 应该使用symfony中的表格 - 如果你使用某些&#34;直接&#34;组装形式对象而不是formbuilder的方法,我怀疑速度会有差异