Chiến lược tổng hợp / thu nhỏ CSS và JS tốt nhất cho D7


8

Drupal 6 có mô-đun advagg tuyệt vời , thực hiện công việc tuyệt vời là kết hợp thông minh CSS và JS, nhưng hiện tại không có bản phát hành D7.

Những gì tôi đang tìm kiếm để đạt được là:

  • ít tệp CSS và JS (5 tệp CSS và 5 tệp JS quá nhiều)
  • Các tệp JS có thu nhỏ (hiện tại lõi chỉ thực hiện điều này cho CSS)

Có một giải pháp drupal 7 sẽ giúp ở đây? Kinh nghiệm của người khác với việc tối ưu hóa điều này là gì?


Chỉnh sửa: Câu hỏi ban đầu được đăng vào năm 2011. Hiện tại đã có bản phát hành D7 rất ổn định của advagg .

Câu trả lời:


12

Đối với D7, có Thư viện lõi có chế độ học tập tổng hợp dựa trên số liệu thống kê trong thế giới thực về trang web của bạn.

Nếu bạn muốn bắt buộc mọi thứ thành một tập hợp khổng lồ, tôi đã viết một bài viết với một số mã mẫu:

/**
 * Implements hook_js_alter().
 */
function mymodule_js_alter(&$javascript) {
  uasort($javascript, 'drupal_sort_css_js');
  $i = 0;
  foreach ($javascript as $name => $script) {
    $javascript[$name]['weight'] = $i++;
    $javascript[$name]['group'] = JS_DEFAULT;
    $javascript[$name]['every_page'] = FALSE;
  }
}

/**
 * Implements hook_css_alter().
 */
function mymodule_css_alter(&$css) {
  uasort($css, 'drupal_sort_css_js');
  $i = 0;
  foreach ($css as $name => $style) {
    $css[$name]['weight'] = $i++;
    $css[$name]['group'] = CSS_DEFAULT;
    $css[$name]['every_page'] = FALSE;
  }
}

Vấn đề Drupal.org # 1034208 cũng đề xuất nới lỏng các yêu cầu đặt hàng nghiêm ngặt một chút.


Tập hợp khổng lồ dường như không tạo ra hành vi chính xác, nó thực sự sẽ tạo ra 1 tệp CSS / JS lớn cho trang, nhưng tệp này sẽ thay đổi tùy thuộc vào trang bạn đang truy cập. Điều này rõ ràng là ít hơn lý tưởng.
wiifm

Chính xác, nếu mỗi trang tải các tệp JS khác nhau, thì tổng hợp sẽ nhất thiết phải khác nhau. Bạn vừa khám phá lại lý do Drupal 7 chia các tệp thành các nhóm chức năng (JS_LIBRARY, JS_DEFAULT và JS_THEME). Với các trang web phức tạp, điều này thường hiệu quả hơn một tệp khổng lồ.
Dylan Tack

1
Nếu có 3 nhóm, làm thế nào có thể tải 5 tệp trong đầu? Tại sao không bao giờ nhiều hơn 3? Gói tất cả mọi thứ trong 1 tệp rõ ràng là một ý tưởng khủng khiếp, nhưng làm thế nào để giữ các tệp JS ở mức tối thiểu?
Rudie

tôi đã thử mã được đề cập ở đây. Trên thực tế, nó tạo ra hai tập tin js nén cho tôi. Làm thế nào tôi có thể làm cho nó một tập tin js?
ARUN

@DylanTack một trong những trang web của tôi có vấn đề với việc tải css fiels [ drupal.stackexchange.com/questions/128649/ và địa chỉ trang web [ Living.md/] Tôi đã đi lang thang nơi để đặt mã của bạn và tôi có thể sử dụng mã của bạn cùng với mô-đun advagg?
Yama

3

AdvAgg D7 đang được phát triển. Các tùy chọn khác (trích dẫn bao gồm từ các trang dự án của họ):

... Cho phép thu nhỏ JavaScript nhanh chóng với trang web uglify.js. Mô-đun dựa trên một dịch vụ web (uglify.me) theo mặc định để thực hiện thu nhỏ để bạn không cần thực hiện bất kỳ quá trình tiền xử lý nào trên máy chủ của mình để tận hưởng các lợi ích của JavaScript được rút gọn.

... Được thiết kế để giúp tăng tốc hiệu suất giao diện người dùng trong một trang web. Trong phiên bản đầu tiên của mô-đun Speedy này, nó cung cấp các phiên bản rút gọn của các tệp JavaScript cốt lõi chưa được thu nhỏ. Ví dụ: một phiên bản rút gọn của drupal.js được cung cấp trong khi jquery.js (đã được rút gọn) thì không.


AdvAgg 7.x hiện đang ở RC đầu tiên của nó. drupal.org/project/advagg Đề xuất sử dụng nó
mikeytown2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.