Drupal 8 在首页(如安装页面)或网络服务器启动后的首页(包括在 ddev 下)的速度非常慢。有什么办法可以加快速度吗?我认为问题在于,所有这些数千个 Drupal php 文件都必须加载到 opcache 中才能正常运行。有没有办法做到这一点?
问问题
470 次
2 回答
3
我正在为此尝试使用全新的Composer-Preload包。使用 Drupal 8 相当容易。维护者在改进它以与 Drupal 兼容方面反应迅速。
正如自述文件中所建议的:
composer require ayesh/composer-preload
(或者ddev composer require ayesh/composer-preload
- 编辑 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
}
- 运行
composer preload
(或ddev composer preload
)。这将创建执行实际预加载的 vendor/preload.php。它翻阅列出的目录中的所有文件,以查看应该预加载的内容。 - 将 preload.php 链接到您的 docroot(或可从网络服务器访问的另一个目录)。例如,是 docroot 是“web”,在 web 容器 (
ddev ssh
) 里面做ln -s /var/www/html/vendor/preload.php /var/www/html/web/preload.php
- 如果对于 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 回答