Điểm:6

Việc sử dụng cùng một cái móc hai lần có phải là hành vi xấu không?

lá cờ jp

Tôi đang làm một dự án khá lớn và tôi sử dụng hook_entity_update() trong ba mô-đun của tôi. Tôi làm điều này để giữ cho dự án của tôi có cấu trúc và có các chức năng khác nhau của trang web của tôi trong các mô-đun khác nhau.

  • Hiệu suất kém có khôn ngoan không khi hook này được gọi nhiều lần từ các mô-đun khác nhau?
  • Vì cách làm việc này làm cho số lượng mô-đun tùy chỉnh tăng lên, vậy số lượng mô-đun có ảnh hưởng đến hiệu suất của trang web hay chỉ có mã bên trong mới có thể gây ra các vấn đề về hiệu suất?
Điểm:4
lá cờ cn

Tất nhiên, bạn sẽ phải đánh giá các mô-đun của mình để có câu trả lời chính xác, nhưng nói chung, lợi ích của việc chia nhỏ mã phức tạp thành nhiều mô-đun được phân tách theo chức năng là cách tốt nhất.

Tác động hiệu suất của việc gọi hook là tối thiểu; tác động hiệu suất lớn hơn sẽ là bất kỳ mã nào mà hook chạy.

Số lượng mô-đun không quan trọng bằng mã mà các mô-đun đang chạy.

Bằng chứng: Chuyển từ Drupal 7 sang Drupal 8/9, nhiều mô-đun chính của Drupal đã chuyển từ "giảm thiểu số lượng mô-đun" sang "cung cấp nhiều mô-đun cụ thể hơn về chức năng có thể được kích hoạt khi cần":

  • AdvAgg
  • thương mại
  • Thẻ meta
  • Hình thức web

TLDR: Mã thực tế mà bạn chạy trong hook/mô-đun quan trọng hơn nhiều đối với hiệu suất so với thực tế là bạn đang gọi hook nhiều lần trong mô-đun.

Tuy nhiên, bạn phải lưu ý một điều là nếu tổ chức các mô-đun của mình không tốt, cuối cùng bạn có thể thêm mã tùy chỉnh vào cùng một hook trong nhiều mô-đun, điều này có thể dẫn đến lỗi, chẳng hạn như nếu bạn đang thay đổi cùng một trường trong hook_entity_update(). Vì vậy, hãy đảm bảo rằng bạn tổ chức mã của mình theo cách làm rõ mô-đun nào chịu trách nhiệm cho chức năng nào.

Là một nhà phát triển, việc duy trì các mô-đun tùy chỉnh chắc chắn sẽ dễ dàng hơn khi chúng được phân tách theo chức năng, đặc biệt trong trường hợp bạn phải sử dụng một số chứ không phải tất cả các chức năng/mô-đun trên nhiều trang web.

Joost avatar
lá cờ jp
Cảm ơn câu trả lời rộng rãi, rất rõ ràng và rất hữu ích
Điểm:3
lá cờ us

Số lượng mô-đun được cài đặt có thể ảnh hưởng đến hiệu suất. Đó là lý do tại sao, ví dụ, lõi Drupal lưu trong bộ nhớ đệm tên của các hook được triển khai.
Với những gì lõi Drupal làm, việc tăng số lượng mô-đun được cài đặt sẽ có tác động thấp hơn đến hiệu suất.

Mục đích của các nhà phát triển không phải là giảm số lượng mô-đun/mô-đun con, mà là viết các mô-đun triển khai một tính năng cụ thể. Rõ ràng, nếu việc triển khai một tính năng yêu cầu vài dòng, thì có lẽ mô-đun đó nên được hợp nhất với một mô-đun khác, đặc biệt nếu mô-đun đó là một mô-đun con.

Để làm một ví dụ, thay vì NútNgười dùng mô-đun, có thể có một mô-đun duy nhất (ví dụ: được gọi là Nội dung cơ bản). Vì những mô-đun đó thường được yêu cầu từ hồ sơ cài đặt, nó sẽ làm giảm số lượng mô-đun đã cài đặt. Nó cũng có thể giảm số lượng móc được triển khai, vì (ví dụ) node_user_predelete() có thể được hợp nhất với một phương thức lớp hoặc một chức năng khác.
Dù sao, làm như vậy, hai mô-đun với các mục đích khác nhau sẽ được hợp nhất với nhau; các hook có thể được giảm bớt, nhưng trong một số trường hợp, mã bây giờ có thể cần kiểm tra trước một số điều kiện đã được đáp ứng chưa; có lẽ nhiều dịch vụ sẽ được tải chậm, điều đó có nghĩa là sẽ có hai lớp thay vì một (lớp proxy và lớp triển khai dịch vụ). Các lớp đó cần phải được đồng bộ hóa với nhau: Bất kỳ thay đổi nào trên lớp dịch vụ cũng cần được thực hiện trên lớp proxy. (Có một tập lệnh để làm điều đó, nhưng nó chỉ hoạt động trên các mô-đun đã cài đặt, điều đó có nghĩa là nhà phát triển sẽ cần một máy chủ cục bộ chạy Drupal và hãy nhớ chạy tập lệnh cho mọi dịch vụ được tải chậm.)

Nó không chỉ là vấn đề của các hook được triển khai: Trong Drupal 9, một mô-đun đủ phức tạp sẽ triển khai nhiều lớp, một số trong số đó là triển khai dịch vụ hoặc plugin. Ngay cả các mô-đun đủ đơn giản để chỉ cần một mã triển khai tuyến duy nhất trong ít nhất một lớp.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.