3

Drupal 8 在首页(如安装页面)或网络服务器启动后的首页(包括在 ddev 下)的速度非常慢。有什么办法可以加快速度吗?我认为问题在于,所有这些数千个 Drupal php 文件都必须加载到 opcache 中才能正常运行。有没有办法做到这一点?

4

2 回答 2

3

我正在为此尝试使用全新的Composer-Preload包。使用 Drupal 8 相当容易。维护者在改进它以与 Drupal 兼容方面反应迅速。

正如自述文件中所建议的:

  1. composer require ayesh/composer-preload(或者ddev composer require ayesh/composer-preload
  2. 编辑 composer.json 以将所需部分添加到“额外”:

    "preload": {
        "paths": [
            "web"
        ],
            "exclude": [
               "web/core/tests",
           "web/core/lib/Drupal/Component/Assertion",
               "web/core/modules/simpletest",
               "web/core/modules/editor/src/Tests"
            ],
            "no-status-check": false
        }

  1. 运行composer preload(或ddev composer preload)。这将创建执行实际预加载的 vendor/preload.php。它翻阅列出的目录中的所有文件,以查看应该预加载的内容。
  2. 将 preload.php 链接到您的 docroot(或可从网络服务器访问的另一个目录)。例如,是 docroot 是“web”,在 web 容器 ( ddev ssh) 里面做ln -s /var/www/html/vendor/preload.php /var/www/html/web/preload.php
  3. 如果对于 ddev,ddev start请在 .ddev/config.yaml 中添加要运行的 curl 命令:

hooks:
  post-start:
    - exec: curl -s localhost/preload.php

您的里程可能会有所不同,但在我看来,我的 D8 项目从这个设置开始要快得多。感谢 @ayesh 出色的 Composer-Preload 项目,它有一个美好的未来。

于 2018-11-24T18:46:59.450 回答
2

我们的解决方案是使用 APCu,我也建议在生产中使用它。以下是我们设置 DDEV 的方法——另外,我建议禁用 Symfony APCClassLoader,因为它已被弃用且速度较慢

ddev/config.yaml

hooks:
  post-start:
  - exec: sudo apt-get update
  - exec: sudo apt-get install -y php-apcu

你的 settings.php

// Don't use Symfony's APCLoader. Composer's APCu loader has better performance.
$settings['class_loader_auto_detect'] = FALSE;
于 2019-01-05T05:10:35.813 回答