ZF2 - 资产管理器,减慢了应用程序

时间:2014-09-06 11:33:55

标签: zend-framework2

我开始写这篇文章,因为我正在努力让ZF2资产管理器正常工作,但是在中途我解决了这个问题并且觉得仍然需要提出问题以帮助其他人。

如果您正在寻找ZF2的资产管理器,请尝试:https://github.com/RWOverdijk/AssetManager

我遇到的问题主要是由于缺乏文档而且解决方案非常简单。

要使资产管理器正常工作,您基本上需要生成应用可以找到的文件缓存。找到并且可以访问文件后,您的应用程序将会非常快速地加速。我遇到的第一个问题是module.config.php文件。文档中没有明确说明如何正确设置。

我的原始文件如下所示:

'asset_manager' => [
    'resolver_configs' => [
        'paths' => [
            __DIR__ . '/../assets',
        ]

    ],
],

这实质上告诉我的应用程序在module / assets目录中查找任何资产。这个盒子很好但很慢......

我读到了缓存,我对文件的修改如下:

'asset_manager' => [
    'caching' => [
        'default' => [
            'cache'     => 'FilePath',  // Apc, FilePath, FileSystem etc.
        ],
    ],
    'resolver_configs' => [
        'paths' => [
            __DIR__ . '/../assets',
        ]

    ],
],

这没有做任何事......所以在gitHub中搜索代码后,看看其他人是如何实现Asset Manager的,我发现你可以设置缓存放置位置的选项...所以我的新配置变为:

'asset_manager' => [
    'caching' => [
        'default' => [
            'cache'     => 'FilePath',  // Apc, FilePath, FileSystem etc.
            'options' => [
               'dir'   => getcwd() . 'public',
            ]
        ],
    ],
    'resolver_configs' => [
        'paths' => [
            __DIR__ . '/../assets',
        ]

    ],
],

尽管在我的应用根目录中名为:trunkpublic的文件夹中生成了资产,但我的应用仍无法正常工作。经过多次挫折后,我意识到我需要更新:

'dir'   => getcwd() . 'public', to 'dir'   => getcwd() . '/public',

添加斜杠将文件夹放在公共目录中,回想起来很明显,因为应用程序需要访问缓存的文件。

我的最终配置是:

'asset_manager' => [
    'caching' => [
        'default' => [
            'cache'     => 'FilePath',  // Apc, FilePath, FileSystem etc.
            'options' => [
               'dir'   => getcwd() . '/public',
                //'dir'   => getcwd() . '/data/cache/assets',
            ]
        ],
    ],
    'resolver_configs' => [
        'paths' => [
            __DIR__ . '/../assets',
        ]

    ],
],

您会注意到我已将此代码段注释掉:

//'dir'   => getcwd() . '/data/cache/assets',

以上是超快的,并且与Filepath选项一起使用,非常适合开发模式,它实际上在/data.cache/assets目录中生成文件的哈希值,但对于生产环境,我更喜欢拥有实际文件保存到资源缓存中:public / assets,因为这允许应用程序直接获取文件而无需调用php。

注意:

我遇到了另一个问题,这是由于误导性文件

如果你看这一行:

'cache'     => 'Filesystem',  // Apc, FilePath, FileSystem etc.

您可能很想使用CamelCase添加文件...但是有些人可能需要使用CamelCase,其他人可能需要Normalcase ...请检查代码...

1 个答案:

答案 0 :(得分:0)

适合我!

'asset_manager' => array(        
    'caching' => array (
        'default' => array(
            'cache'     => 'FilePath',  // Apc, FilePath, FileSystem etc.
            'options' => array(
               'dir'   => './public',
            ),
        ),
    ),
    'resolver_configs' => array(
        'paths' => array(
            'MyModule' => __DIR__ . '/../public',
        ),
    ),
),

现在我尝试修复flter JSMin和JSSqueeze

坦克你!