通過模塊、最佳編碼實踐和正確的服務器配置提高 Drupal 9 性能
已發表: 2020-08-11您可以擁有擁有大量內存的最強大的服務器,但這足以確保網站的高性能嗎? 使用 Drupal,可以輕鬆地根據您的業務增長擴展網站。 事實上,這正是 Drupal 所擅長的。 但是,網頁、功能和內容的突然增加可能會影響其性能。 Drupal 9 現在就在這裡,並且已經準備好像專業人士一樣迎接這一挑戰! 它帶有 Drupal 8 的優點,去掉了舊代碼,使其更精簡、更簡潔、更強大。 探索更多關於絕對有效的 Drupal 9 性能改進技術。
網站的性能是企業成功的關鍵。 緩慢加載網站可能對企業有害。 性能更好的網站有助於更好的搜索引擎優化,提高訪問者的轉化率,並為訪問者提供更好的用戶體驗,從而共同促進業務增長。 而緩慢加載的網站則恰恰相反,並成為業務失敗的原因。

影響網站性能的因素有很多。 他們之中有一些是:
• 您的服務提供商(託管、DNS 等)
• 對服務器的請求數
• 技術問題或糟糕的編程實踐
• 緩存技術
• 不正確的服務器配置
• 重圖像和視頻文件
Drupal 9 核心和自定義模塊以提高性能
Drupal 9 中有許多可用的貢獻和核心模塊,它們可以幫助提高您網站的性能。 通過遵循某些編碼實踐並使用適當的服務器配置,您可以顯著提高站點性能。
核心模塊
• 大管道
Drupal Big Pipe 模塊無需額外配置即可使事情變得更快。 它與 Drupal 核心打包在一起。 它通過使用可緩存元數據來提高前端感知性能,從而改進渲染管道。
• 內部動態頁面緩存
這個 Drupal 9 模塊有助於緩存動態內容。 它對匿名和經過身份驗證的用戶都有幫助。 該模塊在 Drupal 7 中不可用。用戶請求的頁面在第一次請求時被存儲,然後可以在進一步請求同一頁面時重複使用。
• 內部頁面緩存
內部頁面緩存模塊有助於為匿名用戶緩存數據。 此模塊在核心中可用,默認情況下處於啟用狀態。
配置路徑:admin/config/development/performance
在這裡您可以清除緩存、設置瀏覽器和代理緩存最大年齡以及啟用/禁用聚合設置。

貢獻的模塊
- 高級 CSS/JS 聚合
Advagg 模塊包含許多其他子模塊,例如 - - AdvAgg Cdn:幫助從公共 CDN 加載資產 (CSS/JS)
- AdvAgg CSS/JS Validator:驗證 CSS 和 JS 文件
- AdvAgg 外部縮小器:使用命令行縮小器縮小 Javascript 和/或 CSS。
- AdvAgg Minify CSS:幫助使用第 3 方縮小器縮小 css 文件
- AdvAgg Minify JS:幫助使用 3rd 方 mi 縮小 js 文件
- AdvAgg 修飾符:允許修改 CSS 和 JS 數組。 (可能有兼容性問題)
- AdvAgg 舊版 Internet Explorer 兼容性增強器
配置路徑: /admin/config/development/performance/advagg
該模塊還支持文件壓縮技術,如gzip和brotli 。 該模塊有助於減少 http 請求的數量,從而顯著提高站點性能。
熾熱的
Drupal 9 Blazy 模塊提供延遲加載圖像以節省帶寬並避免更高的跳出率。 延遲加載是一種僅在用戶可見區域加載圖像的技術。 這種多服務技術可節省時間和數據。
配置路徑: /admin/config/media/blazy
在這裡,您可以啟用/禁用 Blazy,配置佔位符效果,還可以設置偏移量,該偏移量決定了圖像對用戶可見的時間。

熾熱模塊
CDN
Drupal 9 CDN 模塊有助於在 Drupal 網站中輕鬆集成 CDN。 它有助於從 CDN 服務器提供靜態內容,以提高內容交付速度。 除此之外,這個模塊也很容易配置。
配置路徑: /admin/config/services/cdn

在這裡您可以啟用/禁用 CDN、提供映射 URL 和選中/取消選中永久文件緩存。
通過最佳編碼實踐提高性能
在 array_key_exist() 上使用 isset()
isset()方法明顯快於array_key_exist() 。 isset和array_key_exist之間的主要區別在於array_key_exists肯定會告訴你一個鍵是否存在於數組中。 而isset只會在鍵/變量存在且不為空時返回 true。 有關此檢查的更多信息,請單擊此處進行基準比較。

使用 entityQuery()
entityQuery()依賴於存儲控制器來處理構建和執行對適當實體存儲的查詢。 這樣做的優點是任何通過entityQuery()運行的查詢都是獨立於存儲的。 因此,如果您正在編寫貢獻的模塊或在網站上工作,並且將來可能需要移動到替代實體存儲,那麼您的所有查詢都將透明地使用新的存儲後端,無需任何更改。 entityQuery()是否可以使用你的手在寫查詢中的自定義代碼或通過entityQuery()的意見後端。
使用 loadMultiple() 方法而不是循環
如果您有 10 個 nid(節點 id)並且您正在循環加載每個節點,那麼您將對數據庫進行 10 次查詢。 在使用loadMultiple() 時,它被簡化為一個數據庫查詢。
緩存
使用 Drupal 9 中的緩存 API,您可以緩存渲染器、響應數組或對象。 Drupal 9 中提供了三種可渲染性緩存元數據。
- 緩存標籤
當數據依賴於 Drupal 實體或配置時,Cache 標籤用於緩存數據。 其語法是cache-item:identifier 例如節點:5,用戶:3。 - 緩存上下文
句法:
• 將父母與孩子分開的時期
• 多個命名的緩存上下文表示可以指定一個參數; 使用:附加一個冒號
示例: user.roles、user.roles:anonymous 等。 - 緩存最大年齡
Cache max-age 用於緩存時間敏感的數據。
隊列工作者/批次
處理大量數據且沒有 php 超時,可以使用批處理或隊列工作者。 queue worker 中的項目僅在 cron 運行時運行,並且它運行了一小段時間。 有兩種類型的隊列工作者:可靠的和不可靠的。 可靠隊列工作者確保隊列中的項目至少運行一次,而不可靠隊列可能會因內存故障或其他中斷而跳過項目。 批處理處理項目,直到所有項目在批處理條件下完成,以便在處理過程中不會發生錯誤,而無需等待 cron 運行。
通過更好的服務器配置提高性能
使用 Nginx 而不是 Apache
Nginx 和 Apache 都是廣泛使用的 Web 服務器。 Nginx 在性能基准上優於 Apache。 它也比 apache 更快、更高效。 根據運行多達 1,000 個同時連接的基準測試,Nginx 的執行速度是 Apache 的 2.5 倍。
HTTP/2.0 優於 HTTP/1.1
HTTP/2.0 支持多路復用,這與阻塞其他資源的 HTTP/1.1 不同。 如果一個資源無法加載,HTTP/2.0 使用 TCP 連接一次發送多個流數據。 HTTP/2.0 使用了比 HTTP/1.1 先進的頭壓縮技術
HTTP/2.0 的 Nginx 配置
服務器 {
聽 443 ssl http2; //http2設置
ssl_certificate server.crt;
ssl_certificate_key server.key;
}提供壓縮內容
壓縮響應通常會顯著減少傳輸數據的大小。 然而,由於壓縮發生在運行時,它也會增加大量的處理開銷,這會對性能產生負面影響。
用於提供壓縮內容的 Nginx 配置:
服務器 {
gzip 上;
gzip_static 開啟;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxyed 任何;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
...
}MariaDB 代替 MySQL
與 MySQL 相比,mariaDB 的速度有所提高。 它提供比 MySQL 更快的緩存和索引。 在這種情況下,它比 MySql 快近 24%。 mariaDB 在其他一些關鍵指標上也優於 MySQL。 因此,就性能而言,MariaDb 優於 MySQL。
CDN
CDN 代表內容交付網絡。 它是遍布全球的服務器集群(又名,存在點或 PoP),它們協同工作以更快地交付內容。 CDN 存儲站點內容的緩存版本並從最近的可用服務器傳送內容。 一些流行的 CDN 提供商是 Cloudflare、Amazon cloudfront、Google Cloud CDN 等。
