Bagaimana cara menangani / membersihkan agregat usang css / js?


17

Saya hanya menggunakan Drupal 7 yang dibangun dalam agregasi CSS / JS, namun folder file tempat file css.gz dan js.gz hidup terisi dengan kecepatan yang cukup cepat, dan sementara saya yakin itu akan cukup lama sebelum mulai mengisi total drive, sekarang waktu yang tepat untuk menangani situasi.

  • Jumlah file saat ini di / js adalah 335
  • Jumlah file saat ini di / css adalah 451

Apakah ada metode standar yang harus saya terapkan untuk menghadapi situasi ini? Saya lebih suka solusi yang menjaga drupal dalam loop.

Selain itu, saya melihat bahwa banyak file gz memiliki rekanan non-gz. Apakah ada alasan mengapa file .css dan .css.gz disimpan? Degredasi mungkin?

Terima kasih


Bisakah Anda mengonfirmasi cron sedang berjalan?
mpdonadio

Tentu saja
DanH

Jawaban:


16

Ini sebenarnya dengan desain sehingga halaman dalam cache dengan versi file yang lebih lama tidak rusak. Lihat masalah tertutup ini .

TL; DR: Mereka akan dihapus secara otomatis 30 hari (atau apa pun drupal_stale_file_thresholdvariabel Anda diatur ke) setelah mereka dibuat melalui drupal_clear_css_cache()dan drupal_clear_js_cache(). Jadi solusinya adalah mengubah drupal_stale_file_thresholdnilai ke sesuatu yang lebih rendah dari 30 hari default.

  • Kapan file lama dihapus

    File cache lama tidak langsung dihapus ketika variabel pencarian dikosongkan, tetapi dihapus setelah periode yang ditentukan oleh drupal_delete_file_if_stale (). Ini memastikan bahwa file yang direferensikan oleh halaman cache masih akan tersedia.

drupal_delete_file_if_stale() standarnya adalah 30 hari - jadi jika a) Cron berjalan dengan benar dan b) Anda melihat file yang dikumpulkan lebih lama dari 30 hari, Anda memiliki masalah yang berbeda.

variable_get('drupal_stale_file_threshold', 2592000)adalah cek 30 hari. variable_set('drupal_stale_file_threshold', 172800)akan mengubah batas waktu menjadi dua hari. Di situs di mana penanganan cache dikontrol secara ketat, waktunya bisa lebih singkat.

Sumber: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7
Lihat drupal_delete_file_if_stale()untuk informasi lebih lanjut.

  • Apakah ada alasan mengapa file .css dan .css.gz disimpan?

    Jika kompresi CSS gzip diaktifkan, URL bersih diaktifkan (yang berarti aturan penulisan ulang berfungsi) dan ekstensi zlib tersedia kemudian buat versi gzip file ini. File ini disajikan secara kondisional ke browser yang menerima gzip menggunakan aturan .htaccess.

Sumber: http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7 (Dalam komentar fungsi)

Lihat juga drupal_build_js_cache()yang hampir identik dengan drupal_build_css_cache().


Terima kasih, saya merasa agak malas karena tidak mencari sendiri sekarang;)
Clive

0

Setelah 4 tahun, saya harus tidak setuju dengan jawaban pertama, di mana penulis menyatakan:

"Ini memastikan bahwa file yang dirujuk oleh halaman cache masih akan tersedia."

Mungkin sudah pasti hal-hal telah diubah / dioptimalkan dalam penyediaan agregasi file yang lebih lama, tetapi jika saya menghapus file yang lebih tua secara manual di server di file / advagg_js (yang tampaknya masih saya gunakan di salah satu browser saya), isi ulang halaman berikutnya dibuat ulang persis file yang sama lagi dengan kode sumber javascript yang baru ditambahkan, seolah-olah drupal_build_js_cache()dieksekusi pada nama file agregat itu.

misalnya. js__22qMV1d_G25luSFBkuR7bIuKD5FE80eKuXx6ldibEixg__yjA2JTeF2f1LUJ3PMdjMr8k9nOPZQJIcvVw-c5Gz_yc__FY0NTHFBVMd9MIGE5srDXTejEZGP-ccSH7UX2zImN-0.js

Jadi saya menyimpulkan pengaturan yang lebih rendah secara signifikan drupal_stale_file_thresholdtidak akan menyebabkan masalah, dan bahkan menghapus semua file agregat diikuti dengan cache yang jelas akan memaksa regenerasi agregat (diuji dan dikonfirmasi bekerja pada halaman yang dimuat ulang)


-5
  • Dapatkan modul Aturan
  • Tambahkan aturan baru yang akan dieksekusi ketika cron berjalan
  • Sebagai tindakan pilih eksekusi kode php.
  • Tulis kode php

Mungkin seperti ini:

$dir = 'your/directory/';
  foreach(glob($dir.'*.*') as $v){
  unlink($v);
}

Fungsi-fungsi php ini dapat membantu Anda mengubah kode sesuka Anda.

Berhati-hatilah sebelum menjalankan ini! Jika tidak digunakan dengan benar Anda dapat menghapus situs Anda! Sebelum mencoba kode ini, cobalah di localhost

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.