Экономика стран

К сожалению, большинство людей, которые будут ими затронуты почти весь мир, не будут иметь никакого влияния на результат. Вести Экономика Дайджест иностранной прессы за 14 августа.
Вести Экономика Греции снова придется списывать долги Греция не сможет самостоятельно расплатиться по долгам, и понадобится новая реструктуризация долгов, чтобы спасти страну от банкротства.

Joomla 2.5: js Optimization i Asynchronous JavaScript Loading

  1. Budowanie wzoru
  2. Ładowanie asynchroniczne
12.25.2012 praca 18553

Porozmawiajmy trochę o optymalizacji ładowania strony w Joomla. Dzisiaj będzie to połączenie javascript. Najpierw zwrócę uwagę twórców układu na poprawność konstrukcji szablonu. Następnie rozważymy możliwość wykorzystania asynchronicznego ładowania skryptów zewnętrznych wbudowanych w silnik. Nie będę żądał optymalizacji.

Budowanie wzoru

Z reguły twórcy układu Joomla nie zwracają uwagi na kolejność ładowania stylów i skryptów, a to jest ważny aspekt optymalizacji w przypadku pobierania równoległego. Pliki CSS powinny zawsze znajdować się przed plikami JavaScript.

Jeśli twój szablon pobiera css i javascript wygląda tak:

<! DOCTYPE html> <html> <head> <link rel = "ikona skrótu" type = "image / x-icon" href = "/ favicon.ico"> <jdoc: include type = "head" /> <link rel = "arkusz stylów" href = "/ templates / beez_20 / css / style.css" type = "text / css" /> <skrypt src = "/ templates / beez_20 / js / jquery-latest.min.js" type = „text / javascript”> </ script> </ head>

Chcę cię zapewnić, to nie w porządku! Ponieważ ładujesz zewnętrzne pliki po renderowaniu strony, co oznacza, że ​​formowanie bloku głównego już minęło, stąd chaos ładowania w sposób rozłożony.

Ale jak poprawnie uwzględnić pliki w renderowaniu:

<? php zdefiniowany ('_JEXEC') lub die ('Ograniczony dostęp'); $ this-> addStyleSheet ($ this-> baseurl. '/ templates /'.$ this-> template.' / css / style.css '); $ this-> addScript ($ this-> baseurl. '/ templates /'.$ this-> template.' / js / jquery-latest.min.js '); ?> <! DOCTYPE html> <html> <head> <jdoc: include type = "head" /> </ head>

Nie zwracamy uwagi na ważność doctype i html, pisał na przykład w skrócie.

Ładowanie asynchroniczne

I tutaj wyostrzę więcej uwagi i przeczytam artykuł do końca! Często klient musi zoptymalizować ładowanie asynchronicznego javascript w celu optymalizacji. Co dziwne, programiści Joomla zapewnili taką możliwość, ale twórcy komponentów, modułów i wtyczek innych firm zapominają o tej funkcjonalności, dlatego prawdopodobnie Jooml jest często krytykowany za niską optymalizację, z którą bym się sprzeczał.

Jak omówiono wcześniej w renderowaniu dokumentu, istnieje funkcja addScript (); . Ale najwyraźniej niektórzy nie podejrzewają, że ma cztery zmienne - $ url , $ type , $ defer , $ async .

Jeśli asynchroniczne ładowanie skryptów nie wystarcza, aby użyć jednego atrybutu $ url , pozostałe są domyślnie zastępowane ($ type = "text / javascript", $ defer = false, $ async = false)

$ this-> addScript ($ this-> baseurl. "/ templates / beez_20 / js / jquery-latest.min.js"); $ this-> addScript ($ this-> baseurl. "/ templates / beez_20 / js / script.js");

Ale w naszym przypadku musimy załadować skrypty w kolejce przez przeglądarkę, w tym celu musimy użyć atrybutu async i / lub defer . Obie różnią się tylko tym, że odroczenie zachowuje kolejność wykonywania skryptów. Odroczenie jest potrzebne, jeśli framework jQuery jest używany przez skrypt.js , co uniemożliwi załadowanie go wcześniej niż sama biblioteka i jeśli trzeba zapisać jakąś sekwencję.

Aby włączyć ładowanie asynchroniczne, musisz użyć wszystkich zmiennych.

$ this-> addScript ($ this-> baseurl. "/ templates / beez_20 / js / jquery-latest.min.js", "text / javascript"); // lub $ this-> addScript ($ this-> baseurl. "/ templates / beez_20 / js / jquery-latest.min.js", "text / javascript", false, false); // Wyświetla <skrypt src = "/ templates / beez_20 / js / jquery-latest.min.js" type = "text / javascript"> </ script> $ this-> addScript ($ this-> baseurl. "/ Templates /beez_20/js/jquery-latest.min.js ("text / javascript", true, false); // Wyświetla <skrypt src = "/ templates / beez_20 / js / jquery-latest.min.js" type = "text / javascript" defer = "defer"> </ script> $ this-> addScript ($ this-> baseurl. "/ templates / beez_20 / js / jquery-latest.min.js (" text / javascript ", false, true); // Wyświetla <skrypt src = "/ templates / beez_20 / js / jquery-latest.min.js" type = "text / javascript" async = "async"> </ script>

I jeszcze jeden mały momentik. Zasadniczo te atrybuty są elementami HTML5, dlatego nie ma sensu korzystanie z formy async = „async” i defer = „defer”, asynchroniczne i odroczone są wystarczające.

Dokonujemy zmian w bibliotece joomla. Otwórz site.ru / libraries / joomla / document / html / renderer / head.php

Szukamy (około 150 linii):

// Wygeneruj linki skryptów foreach ($ document -> _ scripts jako $ strSrc => $ strAttr) {$ buffer. = $ Tab. '<skrypt src = "'. $ strSrc. '"'; if (! is_null ($ strAttr ['mime'])) {$ buffer. = 'type = "'. $ strAttr ['mime']. '"'; } if ($ strAttr ['defer']) {$ buffer. = 'defer = "defer"'; } if ($ strAttr ['async']) {$ buffer. = 'async = "async"'; } $ buffer. = '> </ script>'. $ lnEnd; }

zastąp:

// Wygeneruj linki skryptów foreach ($ document -> _ scripts jako $ strSrc => $ strAttr) {$ buffer. = $ Tab. '<skrypt src = "'. $ strSrc. '"'; if (! is_null ($ strAttr ['mime'])) {$ buffer. = 'type = "'. $ strAttr ['mime']. '"'; } if ($ strAttr ['defer']) {$ buffer. = 'defer'; } if ($ strAttr ['async']) {$ buffer. = 'async'; } $ buffer. = '> </ script>'. $ lnEnd; }

Właśnie o to chodzi. Wszystkie manipulacje zostały wykonane przeze mnie w Joomla 2.5, jak będzie działać w 1.5 xs, nie rozważałem tego i nadszedł czas, aby o tym zapomnieć))). Tak, a powyższa technika nie jest panaceum, każde wymaga indywidualnego podejścia.

Dziękuję za uwagę!

Навигация сайта
Реклама
Панель управления
Календарь новостей
Популярные новости
Информация
Экономика стран www.mp3area.ru © 2005-2016
При копировании материала, ссылка на сайт обязательна.