While this PHP extension is not actually a "requirement" for using Twig, it does help increase performance. Regardless, we should add a notice when it is not installed.

This is very similar to how we provided a notice when the PECL uploadprogress extension was not installed. The Twig C PHP extension helps improve rendering performance up to 15% for more complex templates.

See: http://twig.sensiolabs.org/doc/installation.html#installing-the-c-extension

http://derickrethans.nl/twig-extension.html

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

star-szr’s picture

Component: user interface text » theme system
Issue summary: View changes

Bumping this and changing "compilation" to "rendering", because the purpose of the C extension (at this time anyway) is to replace calls to TwigTemplate::getAttribute() (magic dot operator power) with a native C function (available to PHP).

jhedstrom’s picture

Status: Active » Needs review
Issue tags: +Performance
FileSize
4.68 KB

This adds detection of the Twig C extension to the status report. Tagging 'Performance' since doing this will inform people that this is available as an option.

jhedstrom’s picture

FileSize
1.1 KB

Oops, that had work from another issue.

dawehner’s picture

  1. +++ b/core/modules/system/system.install
    @@ -648,6 +648,22 @@ function system_requirements($phase) {
    +    $url = Url::fromUri('http://twig.sensiolabs.org/doc/installation.html#installing-the-c-extension')->toString();
    

    Are we really sure there is a value in doing that? It will really just output the string which comes in, right? We also link directly to https://www.drupal.org in other parts of the code.

  2. +++ b/core/modules/system/system.install
    @@ -648,6 +648,22 @@ function system_requirements($phase) {
    +    $requirements['twig_c_ext'] = [
    

    Any reason to not write a full name, so :twig_c_extension?

jhedstrom’s picture

FileSize
1.61 KB
1.1 KB

1. Good point!
2. Fixed.

dawehner’s picture

Status: Needs review » Reviewed & tested by the community

Looks nice now!

alexpott’s picture

Status: Reviewed & tested by the community » Fixed

This is a normal task and usually I'd ask for a beta evaluation but considering this is only adding helpful information to the UI in a completely non disruptive fashion we're good to go. Committed 3b6e90d and pushed to 8.0.x. Thanks!

  • alexpott committed 3b6e90d on 8.0.x
    Issue #2160643 by jhedstrom, dawehener: Add status report "requirement"...

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.

msonnabaum’s picture

Status: Closed (fixed) » Needs work

Just found this new status message and I was surprised by it.

"Enabling the Twig C extension can greatly increase rendering performance" seems completely false to me. This implies to me that it will improve the performance of rendering a page, or executing templates at run time, which it will not. It's only an optimization for template rebuilding, which should be a rare event. Also, I'm not sure 15% qualifies as "greatly", if that number is even still correct.

Please correct me if I'm wrong, but it seems to me this message needs to be rephrased.

star-szr’s picture

Status: Needs work » Closed (fixed)

@msonnabaum that's a misunderstanding, some more details in this link (also in the IS) and below: http://derickrethans.nl/twig-extension.html

The Twig PHP extension replaces calls in the compiled template with native C functions. So it doesn't make template compilation faster but it should make template rendering (execution at run time) faster.

The improvement depends on how many dots in Twig you use in your Twig templates - when you go {{ foo.bar.baz.quux }} each of those dots needs to be resolved as array key, object property, method, setter, getter, etc. at runtime because the variable will change. That is what TwigTemplate::getAttribute() does and that is the slow part that the Twig C extension replaces with a faster native version.

I think if we want to tweak the wording that should be done in a follow-up, for example if we think "greatly" is too strong a word.

msonnabaum’s picture

Thanks Scott, that is exactly the clarification I needed.

anavarre’s picture