Drupal - 优化
Drupal - 性能优化
Section titled “Drupal - 性能优化”在本章中,我们将探讨优化 Drupal 网站以提升性能和速度的现代技术。优化 Drupal 网站涉及多个层面,从服务器配置到前端交付(front-end delivery)。
优化 Drupal 网站的关键策略包括:
启用 Drupal 的内置缓存机制
Section titled “启用 Drupal 的内置缓存机制”Drupal 核心提供了强大的缓存功能。对于匿名用户,启用“内部页面缓存(Internal Page Cache)”可以通过提供预渲染的 HTML 显著减少页面加载时间。对于已认证用户和页面的动态部分,Drupal 的渲染缓存(render cache)和 BigPipe 技术有助于高效地提供内容。
配置缓存:
- 导航到“配置(Configuration)”>“开发(Development)”>“性能(Performance)”(admin/config/development/performance)。
- 在“缓存(Caching)”下,确保为匿名用户启用了“内部页面缓存”。你可以设置“页面缓存最大有效期(Page cache maximum age)”。
- Drupal 自动处理区块(blocks)和渲染实体(rendered entities)的缓存。BigPipe 默认启用,有助于更快地流式传输动态内容。
对于更高级的缓存,考虑集成外部缓存层,例如 Varnish 或 Memcached。这些通常需要服务器级别的配置以及特定的 Drupal 模块(例如 Varnish Purger、Memcache API and Integration)。
聚合和压缩 CSS 和 JavaScript 文件
Section titled “聚合和压缩 CSS 和 JavaScript 文件”减少 CSS 和 JavaScript 文件数量及大小可以减少 HTTP 请求并缩短加载时间。Drupal 可以将多个 CSS/JS 文件聚合成单个文件并进行压缩。
启用聚合:
- 前往“配置”>“开发”>“性能”(admin/config/development/performance)。
- 在“带宽优化(Bandwidth Optimization)”下,勾选“聚合 CSS 文件(Aggregate CSS files)”和“聚合 JavaScript 文件(Aggregate JavaScript files)”。
- 确保你的网站处于生产环境,或者如果你想测试这些功能,在开发过程中取消勾选“禁用 CSS 聚合和压缩(Disable CSS aggregation and compression)”和“禁用 JavaScript 聚合和压缩(Disable JavaScript aggregation and compression)”。
对于生产网站,确保在你的 development.services.yml 或 services.yml 文件中禁用了“启用 Twig 开发模式(Enable Twig development mode)”(twig.config.debug),因为这会阻止聚合。
利用内容分发网络 (CDN)
Section titled “利用内容分发网络 (CDN)”CDN(内容分发网络)将你的静态资源(图像、CSS、JavaScript)分发到全球的多个服务器上。这通过从更接近用户的服务器提供文件来减少延迟(latency),并减轻源服务器(origin server)的请求负载。
集成 CDN:
- 选择一个 CDN 提供商(例如 Cloudflare、AWS CloudFront、Akamai)。
- 配置你的 Drupal 网站以从 CDN 提供文件。“CDN”模块(contrib)可以通过重写文件 URL 来帮助实现自动化。
- 通常,你会设置 CDN 从你的 Drupal 网站的公共文件目录拉取资源。
实际场景:一个全球性的电子商务网站使用 CDN 来确保产品图片和样式表在全球范围内为客户快速加载,从而改善用户体验和转化率。
大型的、未经优化的图片是导致页面加载缓慢的常见原因。请遵循以下最佳实践:
- **压缩图像:**使用 ImageMagick 等工具或“Image Optimize”(以前称为 ImageAPI Optimize)等模块及各种处理器(例如 TinyPNG、OptiPNG、JpegOptim)来减小文件大小,同时不显著降低图像质量。
- **自适应图像(Responsive Images):**使用 Drupal 的“自适应图像”模块(核心模块)根据用户的视口(viewport)提供不同大小的图像。这确保移动用户下载更小的图像。
- **现代格式:**考虑使用 WebP 等下一代图像格式,它们提供更好的压缩和质量。“WebP”等模块可以帮助实现转换和交付的自动化。
- **延迟加载(Lazy Loading):**对那些并非立即可见(位于首屏下方)的图像实现延迟加载。这可以通过 JavaScript 库或 Drupal 模块(如“Lazy-load”)来完成。
示例:一个在线作品集网站使用自适应图像在桌面、平板电脑和手机上恰当地显示高质量作品,并对图片库使用延迟加载来改善初始页面加载速度。
主题和前端优化
Section titled “主题和前端优化”一个良好优化的主题至关重要:
- **选择精简主题:**从一个最小化的基础主题(base theme)或一个编写良好的贡献主题(contributed theme)开始。
- **最小化自定义代码:**编写高效的 CSS 和 JavaScript 代码。避免过于复杂的选择器或会阻塞渲染(rendering)的繁重 JavaScript 操作。
- **HTTP/2 或 HTTP/3:**确保你的服务器支持 HTTP/2 或 HTTP/3,它们允许多路复用(multiplexing)请求,即使不进行积极的聚合也能改善资源加载。
- **预加载和预提取:**对关键资源或后续页面可能需要的资源使用
<link rel="preload">和<link rel="prefetch">。
服务器端和 PHP 优化
Section titled “服务器端和 PHP 优化”确保你的服务器环境已优化:
- **最新的 PHP 版本:**使用最新且稳定的 PHP 版本(Drupal 10 要求 PHP 8.1+)。新版本提供了显著的性能提升。
- **PHP OPcache:**确保你的服务器上启用了 OPcache 并正确配置。它会预编译 PHP 脚本,加快执行速度。
- **充足的资源:**为你的服务器分配足够的内存和 CPU,特别是对于流量高或模块多的网站。
定期数据库维护很重要:
- **查询优化:**如果你有自定义模块,确保数据库查询(queries)是高效的。正确使用 Drupal 的数据库 API(Database API),并考虑为慢查询(slow queries)建立索引(indexing)。
- **清理旧数据:**定期删除旧的日志条目、watchdog 消息和其他不必要的数据。“Views Bulk Operations”(VBO)等模块可以帮助自动执行一些清理任务。
附加资源:
- Drupal 性能文档:https://www.drupal.org/docs/administering-a-drupal-site/performance
- Drupal 中的 BigPipe:https://www.drupal.org/docs/8/core/modules/big-pipe/overview(注意:虽然是针对 D8,但核心概念与 D9/10 类似)