Ekranın üst kısmındaki içerikte oluşturma engelleyen JavaScript ve CSS'yi kaldırın


30

Bir Drupal 7 sitesi inşa ediyorum. Bunlar kullandığım modüllerden bazıları: Uyarlama düzeni (tema), Görünümler ve İçerik Panelleri, Paneller, Mini paneller, Her yerde Paneller, Sayfa yöneticisi, Menüler için süper balık, Addthis, Seçilmiş (açılan).

Site performansımı geliştirmek ve CSS ve JS dosyaları ile başa çıkmak için Advagg modülünü kullanıyorum .

Google’ın Pagespeed testini çalıştırırken, "Düzeltmeli" olarak aşağıdaki hatayı alıyorum:

Ekranın üst kısmındaki
içerikte render engelleyen JavaScript ve CSS'yi kaldırın Sayfanızda oluşturmayı engelleyen 6 tane komut dosyası ve 8 tane CSS kaynağı var. Bu, sayfanızı oluşturmada gecikmeye neden olur.
Aşağıdaki kaynakların yüklenmesini beklemeden sayfanızdaki üst kısımdaki içeriklerden hiçbiri oluşturulamadı. Engelleme kaynaklarını ertelemeyi veya zaman uyumsuz olarak yüklemeyi deneyin veya bu kaynakların kritik bölümlerini doğrudan HTML'de satır içi yapın.

Google’ın sağladığı bilgi şudur:

Advagg modülünün veya Drupal çekirdeğinin ayarlarını değiştirebilmemin ve bu sorunu çözebilmemin bir yolu var mı?

Bu hedefe ulaşmak için başka bir yol var mı?

Güncelleme - mikeytown2 cevabına göre değişiklikler yaptıktan sonra Google’ın Pagespeed testinde şu mesajı aldım:

Ekranın üst kısmındaki içerikte oluşturma engelleyen JavaScript ve CSS'yi kaldırın
Sayfanızda oluşturmayı engelleyen 6 tane komut dosyası ve 4 tane CSS kaynağı var. Bu, sayfanızı oluşturmada gecikmeye neden olur.
Aşağıdaki kaynakların yüklenmesini beklemeden sayfanızdaki üst kısımdaki içeriklerden hiçbiri oluşturulamadı. Engelleme kaynaklarını ertelemeyi veya zaman uyumsuz olarak yüklemeyi deneyin veya bu kaynakların kritik bölümlerini doğrudan HTML'de satır içi yapın.


Advvgg hakkında emin değilim, ama çekirdeği için gitmeden, böyle bir ayar yoktur. Avukat olarak onları görmedim ama kısa sürede kullanmayı bıraktım. Belki şimdi bunun gibi ayarlar vardır. Şahsen sorun sırasına bir destek isteği gönderirim, bunu sorarım ve bakıcı uygun olmadığını söylerse özellik isteğine geçer.
Moot

Sorunuz çok geniş. Siteniz CSS ve JS kullanıyor - internetteki diğer tüm siteler de öyle. CSS'nin basamaklı sıralaması korunduğu sürece, tüm CSS'lerinizi 1 dosyada toplayamamanızın çok az nedeni vardır. JS'niz kapsüllenmiş olduğu sürece, 1 dosyada birleştirilememesi için hiçbir sebep yoktur (en uç örnek olarak). Sayfada hangi CSS ve JS dosyalarının / kaynaklarının gerekli olduğu hakkında ayrıntılı bilgi verebilirseniz; daha bilinçli cevaplar alabilirsiniz.
tenken

@tenken nasıl geniş? Render-bloke edici bir şekilde bağlı olan CSS ve JS'ye sahiptir ve bloke edici olmayan bir şekilde onları ister. Bu yollar hemen hemen açıklanmaktadır ( örneğin , OP’de Google Pagespeed önerilerini ifade ettiği için). Yorumunuzda sorulan OP ile ilgisi yok.
Moot

Bağlantılı tüm css ve js dosyaları async, eski tarayıcılar tarafından desteklenmeyen satır içi kodları veya kullanımı olmadıkça engellenir . Örneğin, varsayılan Drupal toplaması, <link>tüm css’iniz için etiketler içerir . Siteniz CSS veya JS çok karmaşıksa, her zaman bu sorunla karşılaşırsınız. Sitenizi doğru oluşturursanız, dosyaları güvenli bir şekilde bir araya getirebilirsiniz. Dosya bağımlılıkları hakkında hiçbir bilgi olmadan soru detayları çok geniştir - bir modül sorununu asla çözemez ; Hepsi CSS ve JS'nin nasıl yazıldığı ve içerme sırası ve karmaşıklığı ile ilgili. bloke edilmek istemediğini, ne istediğini düşündüğünü söylemedi.
tenken

@tenken Sorumu güncelledim ve modüller hakkında daha fazla bilgi verdim - umarım hangi CSS ve JS'yi kullandığımı anlamanıza yardımcı olur.
EB84

Yanıtlar:


42

README Bu kullanarak mevcut nasıl yapılacağına ilişkin bir rehber vardır AdvAgg ait 7.x-2.31 + sürümünü . Ayrıca bu yüksek wiki sayfasındaki wiki sayfasına bakınız . Çoğu site https://developers.google.com/speed/pagespeed/insights/ adresinde mükemmel bir 100/100 puan alabilir . Aşağıdaki yeni AdvAgg kurulumları için nasıl ulaşacağınıza dair talimatlar.

Değişikliğin sitenizi bozmadığından emin olmak için her bölümden sonra siteyi kontrol ettiğinizden emin olun. AdvAgg Modifier altındaki değişiklikler genellikle en sorunludur ancak en büyük gelişmeleri sunarlar.

Gelişmiş CSS / JS Toplaması

Git admin/config/development/performance/advagg

  • "Önerilen (optimize edilmiş) ayarları kullan" seçeneğini seçin
AdvAgg Sıkıştırma Javascript

Etkinleştirilmemişse AdvAgg Compress Javascript'i yükleyin ve admin/config/development/performance/advagg/js-compress

  • Varsa JSMin'i seçin; aksi halde JSMin + 'ı seçin
  • Her şeyi şeritle'yi seçin (en küçük dosyalar)
  • Bu dosyaları işlemek için toplu sıkıştır bağlantısını tıklayın.
AdvAgg Async Yazı Tipi Yükleyici

Etkin değilse, AdvAgg Async Yazı Tipi Yükleyicisini yükleyin ve admin/config/development/performance/advagg/font

  • Topluluğa dahil olan yerel dosyayı seçin (sürüm: XXX). Bu seçenek mevcut değilse, nasıl kurulacağı ile ilgili seçeneklerin hemen altındaki talimatları izleyin.
  • "LocalStorage kullan, böylece stilsiz metnin flaşı (FOUT) sadece bir kere olur" seçeneğini işaretleyin.
  • "Çerez ayarlayın, böylece stilsiz metnin flaşı (FOUT) sadece bir kez gerçekleşsin" seçeneğini işaretleyin.
AdvAgg Bundler

Etkinleştirilmemişse AdvAgg Bundler'ı yükleyin ve admin/config/development/performance/advagg/bundler

HTTP / 2.0 Ayarları

  • "Sayfa Başına CSS Paketlerinin Hedef Sayısı" altında 25
  • "Sayfa Başına JS Paketlerinin Hedef Sayısı" altında 25
  • "Gruplandırma mantığı" altında "Dosya boyutu" nu seçin

HTTP / 1.1 Ayarları (varsayılan)

  • "Sayfa Başına CSS Paketlerinin Hedef Sayısı" altında 2
  • "Sayfa Başına JS Paketlerinin Hedef Sayısı" altında 5
  • "Gruplandırma mantığı" altında "Dosya boyutu" nu seçin

25 paket vs 2 ve 5 tarayıcı önbelleklemesi ile ilgili. Daha fazla dosya, tarayıcısının önbelleğinde birleşik birleşme şansına eşittir, ancak daha fazla dosya daha fazla bağlantı kurulup HTTP 1.1'de açıldığı anlamına gelir. Bu numara herhangi bir yeni bağlantı için beklemediğinden, CSS için 2 kullanın; Çoğu tarayıcıda eşzamanlı bağlantı sınırı 6 olduğu için JS 5'tir. Paketler için bu sayı birçok testten sonra seçildi. HTTP 2.0'da bir akış bağlantısı var ve çoklu CSS ve JS dosyalarının cezası neredeyse yok; bu nedenle tarayıcı önbelleği için en iyi duruma getirme en iyi seçimdir; Bu nedenle, HTTP / 2.0 sunarken CSS ve JS için 25 kullanılmalıdır.

AdvAgg Yer Değiştirme

Etkinleştirilmemişse AdvAgg Relocate uygulamasını yükleyin ve admin/config/development/performance/advagg/relocate

  • "Önerilen (optimize edilmiş) ayarları kullan" seçeneğini seçin
AdvAgg Değiştirici

Etkinleştirilmemişse AdvAgg Modifier'i yükleyin ve admin/config/development/performance/advagg/mod

  • "Önerilen (optimize edilmiş) ayarları kullan" seçeneğini seçin
Kritik CSS Dosyaları Oluşturma

Https://www.sitelocity.com/critical-path-css-generator adresine gidin ve kritik css için gereken sayıda açılış sayfasını girin; ilk 10 genellikle iyi bir başlangıçtır. Google Analytics’iniz varsa, bu size en iyi açılış sayfalarınızı nasıl bulacağınızı gösterir : https://developers.google.com/analytics/devguides/reporting/core/v3/common-queries#top-landing-pages veya Piwik https //piwik.org/faq/how-to/faq_160/ . Hangi sayfadan başlayacağınızı bilmiyorsanız, sitenizin ana sayfasını yapın. Bunu bize css üretmek için de yapabilirsiniz https://chrome.google.com/webstore/detail/critical-style-snapshot/gkoeffcejdhhojognlonafnijfkcepob?hl=tr

Aşağıdaki örnek dosya isimleri ve yollar "bootstrap" teması içindir; hepsi ile başlar sites/all/themes/bootstrap/critical-css/; temanızda critical-css/dizini oluşturun . Bir sonraki dizin kullanıcıya dayanmaktadır; anonymous/, all/veya authenticated/kullanılabilir.

Bir sonraki dizin urls/veya olabilir type/. Bakıyor urls/; front, front page için özel bir durumdur, diğer tüm yollar current_path () .cssişlevini dizine ve sonuna eklenmiş dosya olarak kullanır; Bkz https://api.drupal.org/api/drupal/includes%21path.inc/function/current_path/7.x

Buna bakmak, type/düğüm tipleri için özel bir durumdur. Makine adını kullanın ve .csssonuna ekleyin . Bu tipteki herhangi bir düğüm daha sonra bu kritik css dosyasına uygulanır ve sıralanır. Aşağıda bunun nasıl çalıştığını gösteren bazı örnekler verilmiştir.

"ön" sayfa için geçerli örnek dosya konumları: sites/all/themes/bootstrap/critical-css/anonymous/urls/front.css

"düğüm / 1" current_path () sayfası için geçerli örnek dosya konumları: sites/all/themes/bootstrap/critical-css/anonymous/urls/node/1.css

"page" düğüm tipi için geçerli örnek dosya konumları: sites/all/themes/bootstrap/critical-css/anonymous/type/page.css

Bu css dosyalarını oluşturmanın bir tür otomatik yolu istiyorsanız, fourkitchens'in nasıl kurulacağı konusunda harika bir makalesi var: https://fourword.fourkitchens.com/article/use-grunt-and-advagg-inline-critical-css -drupal-7-tema


Bu, AdvAgg! Teşekkürler. Belki de bu metin proje sayfanız için bağlantılı bir "dokümantasyon" sayfasının başlangıcı olabilir :)
tenken


@ mikeytown2 harika cevap için teşekkürler. Tüm değişiklikleri uyguladım ve soruyu güncelledim. Biraz daha yüksek puan aldım - teşekkürler!
EB84

Çıktıya baktığımızda, advagg/modsayfada JavaScript Siparişini Optimize Et altındaki tüm kutuları işaretlememiş olduğunuz VE / VEYA, Tüm JS'leri altbilgiye taşımadığınız anlaşılıyor . Ayrıca, genellikle önerilere yardımcı olan sayfaların tam kaynağını görebilirsem (yalnızca sitenize bağlantı verin).
mikeytown2

Bu bilgiyi verdiğiniz için teşekkür ederiz. Sayfada daha az css dosyası istiyorsanız, advagg / bundler'a gidin ve css değerini 4'ten 1'e değiştirin. Bu size daha iyi bir puan verecek, ancak yukarıda yaptığım yorumları aklınızda bulundurun. Uyarlamalı tema tarayıcı koşullu js eklemek için drupal_add_html_head () kullanır gibi görünüyor, olup bittiğini doğrulamak gerekir; 1'den fazla temanın drupal.org/node/2217451 ihtiyacı olduğu anlamına gelir . Ayrıca ben işlemek engelleme css adrese Bu sorunu oluşturduk drupal.org/node/2223267
mikeytown2

2

Önceden oluşturulmuş drupal modülleri ile asla gerçekten yüksek puanlar alamayacaksınız, bunu başarmanın tek yolu, google hız aracı tarafından yapılan önerilere her birinin bağımsız olarak cevap vermesi ve dikkatlice analiz edilmesidir.

Çok aktif bir haber sitesinde 95'e ulaşmak için yaptığım bazı şeyler , bunu yazdığımda, nytimes'ten daha iyi puan aldı (Şimdi değil):

  • [komut dosyalarını engelleme] Sharethis, facebook widget'ları, google plus vb. üçüncü taraf komut dosyalarının yalnızca sayfa tamamen oluşturulduktan sonra çalıştırılmasını geciktirir. Bu, bu komut dosyalarını yakalamak ve daha sonra yürütmek üzere sıraya koymak için html.tpl.php dosyasının çıktısına yapılan bazı basit dize değişikliklerini gerektiriyordu.
  • [komut dosyalarını engelleme] html.tpl.php (json_encode ile) $ scripts değişkenini, ilk sayfa yüklendikten sonra çalıştırılmak üzere sıraya koymak için bir javascript değişkeninde saklayın. Bu doğal değil, ama gerekli. Tarayıcıya özgü bazı sorunların çözülmesi gerekiyordu.
  • [css engelleme] Keith Clark'ın tekniğine benzer bir şey uyguladı , ancak rel = "prefetch" ile. Bu, FOUC'u çözme ihtiyacını ortaya koymaktadır .
  • [Minification and sıkıştırma] Sıkıştırma ve küçültmeyi, drupal yüklemeyi yönetilemez bir karmaşaya dönüştürmeden, bu kuralları aşmak için imagemagic, yui-kompresör, pngoptim ve daha pek çok şey kullanabileceğim bir dağıtım sunucusunda dışa aktarın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.