Twig 表单生成器渲染时间

Twig form builder rendering time

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

Class :

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())
        ));
}

树枝:

<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-400 毫秒,但是当我单击此联系人页面时,总渲染时间为 800-850 毫秒。

我在开发环境中(所以我没有使用 Twig 缓存选项或 gzip 压缩)并且调试工具栏显示控制器花费了 652 毫秒,Twig 模板花费了 387 毫秒。 现在是正确的时间吗?

调试统计屏幕截图:here and here

整个站点我只有一个控制器文件 HomeController.php(这是一个小站点,所以里面只有 9 个功能)- 有问题吗? ;这是有关联系操作的功能:

家庭控制器:

/* 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. 450ms 没有那么多,你不用担心,别忘了: "premature optimization is root of all evil".
  2. 是在开发环境中吗?如果是,那么可能在生产中(使用 symfony 缓存)它会更少
  3. 在调试工具栏的开发环境中,您可以看到哪个部分占用最多 时间 - 那是什么意思?
  4. 我不确定 "hand build" 表格是什么意思,但是你 应该使用 symfony 书中的形式 - 如果你使用一些 "direct" 组装表单对象的方法而不是 formbuilder,我怀疑速度会有差异