jasny/assetic-extensions

此包已被废弃且不再维护。未建议替代包。

改进Assetic的缓存

v1.0.0 2017-06-05 18:29 UTC

This package is auto-updated.

Last update: 2024-08-29 20:45:36 UTC


README

Build Status Scrutinizer Code Quality Code Coverage SensioLabsInsight Packagist Stable Version Packagist License

改进了Assetic的缓存。

安装

可以使用composer轻松安装Jasny的Twig扩展。

composer require jasny/assetic-extensions

使用工厂时的内部缓存

AssetCacheWorker 将每个资产包装在 AssetCache 对象中。这在使用工厂时允许使用资产缓存。

use Assetic\Factory\AssetFactory;
use Jasny\Assetic\AssetCacheWorker;

$factory = new AssetFactory('/path/to/asset/directory/');
$factory->setAssetManager($am);
$factory->setFilterManager($fm);

$factory->addWorker(new AssetCacheWorker(
    new FilesystemCache('/path/to/cache')
));

资产版本控制

AssetVersionWorker 为每个生成的资产添加版本号。这在生产环境中表现良好,可以防止删除、检查或覆盖资产文件。

如果输出文件设置为 all.css 且版本设置为 1.3.7,输出文件将被命名为 all-1.3.7.css

use Assetic\Factory\AssetFactory;
use Jasny\Assetic\AssetVersionWorker;

$factory = new AssetFactory('/path/to/asset/directory/');
$factory->setAssetManager($am);
$factory->setFilterManager($fm);

$factory->addWorker(new AssetVersionWorker($version));

使用Twig时的缓存

根据Assetic的readme中的示例代码,每个模板在每个请求时都会被解析。这会显著减慢您的应用程序。使用 TwigCachingFormulaLoader 可以将Assetic公式存储在Twig缓存中,以在每个模板中找到。公式加载器使用Twig环境的 cacheauto_reload 选项

PersistentAssetWriter 是一个带有 overwrite 选项的资产编写器。当禁用覆盖时,现有资产不会被覆盖。这可以提高您生产环境中的速度。建议在输出文件中添加版本号,无论是手动还是使用 AssetVersionWorker

use Jasny\Assetic\PersistentAssetWriter;
use Jasny\Assetic\TwigCachingFormulaLoader;
use Assetic\Extension\Twig\TwigResource;
use Assetic\Factory\LazyAssetManager;

$twigLoader = new Twig_Loader_Filesystem('/path/to/views');
$twig = new Twig_Environment($twigLoader, ['cache' => '/path/to/cache', 'auto_reload' => true]);

$am = new LazyAssetManager($factory);

// enable loading assets from twig templates, caching the formulae
$am->setLoader('twig', new TwigCachingFormulaLoader($twig));

// loop through all your templates
foreach ($templates as $template) {
    $resource = new TwigResource($twigLoader, $template);
    $am->addResource($resource, 'twig');
}

$writer = new PersistentAssetWriter('/path/to/web');
$writer->writeManagerAssets($am);