Próbuję opracować motyw Wordpress i dowiedzieć się, jak zapewnić lokalną rezerwę dla Font Awesome, jeśli CDN zawiedzie lub opracuję swój motyw na lokalnym serwerze bez połączenia z Internetem.
Rozwiązanie, które mam na myśli, jest mniej więcej takie (pseudo kod):
if ( $CDN_IS_AVAILABLE ) {
wp_enqueue_style( 'font-awesome', '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css', false );
} else {
wp_enqueue_style('font-awesome', get_template_directory_uri() . '/css/font-awesome/css/font-awesome.min.css', false, '4.0.3' );
}
Dziękuję Ci!
is_readable($cdnPath)
?Odpowiedzi:
Problem polega na tym, że jestem prawie pewien, że nie można sprawdzić, czy CSS jest skutecznie dodawany do strony przez PHP: CSS jest analizowany przez przeglądarkę, więc po stronie klienta i nie ma żadnego wpływu na stronę serwera.
Oczywiście w PHP można sprawdzić, czy CDN reaguje, czy nie ...
opcja 1
Wyślij żądanie, a jeśli odpowie ono statusem HTTP 200, użyj go. Coś jak:
co powoduje 2 żądania HTTP, jedno do sprawdzenia, drugie do wbudowanego CSS: naprawdę źle .
Opcja 2
Jest jeszcze gorzej :
wp_enqueue_style
przepływ pracy: jeśli wtyczka doda czcionkę Awesome, zostanie dodana 2 razy.Tak naprawdę nie rób tego w domu.
Ważne jest to, że za pomocą PHP można sprawdzić żądanie CDN, ale nie weryfikować CSS, więc wszystkie twoje wysiłki kończą się gorszą wydajnością, a nie lepszą.
Z poważaniem, jeśli twój jest motywem publicznym, sugeruję, abyś używał tylko kopii lokalnej, umożliwiając użytkownikom wybór CDN:
Dzięki temu użytkownicy mogą całkowicie zastąpić tę funkcję za pomocą motywu podrzędnego, a także mogą użyć
'font_awesome css_url'
filtra do zmiany adresu URL.Weź również pod uwagę, że niektórzy wysokiej klasy dostawcy hostingu automatycznie przekształcają zasoby lokalne na CDN, a istnieją wtyczki, które pozwalają CDN na wszystkie te rzeczy; jest to powód, dla którego motyw publiczny nie powinien w ogóle używać CDN.
Jeśli motyw jest dla Ciebie, dokonaj wyboru. Weź pod uwagę, że najbardziej znane sieci CDN mają bardzo niski procent przestojów (a bootstrapcdn jest jednym z najbardziej niezawodnych, według cdnperf.com ). Jestem prawie pewien, że twój hosting ma% przestoju większy niż bootstrapcdn, więc ludzie mają większe prawdopodobieństwo, że w ogóle nie zobaczą twojej witryny, niż zepsutymi ikonami.
Brudna droga
Jak już powiedziano, PHP nie może sprawdzić CSS, ponieważ renderowanie CSS odbywa się po stronie klienta, ale można użyć sprawdzania po stronie klienta: JavaScript.
Najpierw umieść CSS za pomocą CDN:
Następnie dodaj stopkę JavaScript do stopki:
Ten kod jest uruchamiany podczas ładowania strony i sprawdza, czy niewidoczny zakres dodany do stopki w klasie „fa” ma właściwość font-family ustawioną na „FontAwesome”. Jest to ustawiane przez Font Awesome, więc jeśli to nieprawda, oznacza to, że CSS nie jest ładowany. Jeśli tak się stanie, kod używa JavaScript, aby dołączyć lokalny CSS do nagłówka.
(Aby przetestować ten kod, możesz osadzić za
wp_enqueue_style
pomocą niewłaściwego adresu URL CDN i zobaczyć, co się stanie)Dlatego w rzadkim przypadku, gdy CDN nie jest dostępny, wszystkie style będą wyświetlane zgodnie z oczekiwaniami (przez kilka milisekund użytkownicy zobaczą „zepsute” ikony CSS, ponieważ CSS jest dodawany po załadowaniu strony).
Teraz, biorąc pod uwagę, że CDN są bardzo niezawodne, czy warto wykonać ten hack dla <1% osób, które zobaczą zepsute ikony? Odpowiedź na to pytanie należy do Ciebie.
źródło
Sprawdzanie po stronie serwera również nie jest kuloodporne. Jeśli Twój serwer znajduje się w Kalifornii, czek będzie korzystał z centrum danych California CDN. Jeśli użytkownik znajduje się w Chinach, prawdopodobnie używałby zupełnie innego centrum danych. Przynajmniej tak myślę, że to działa.
Tak czy inaczej, oto ulepszone rozwiązanie jquery:
http://jsfiddle.net/skibulk/fp1gqnyc/
źródło
fontFamily
.