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

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

Joomla 2.5: Аптымізацыя js і Асінхронная загрузка JavaScript

  1. пабудова шаблону
  2. асінхронная загрузка
2012/12/25 job 18553

Пагаворым трошкі аб аптымізацыі загрузкі старонкі ў Joomla. На сёння гэта будзе падключэнне JavaScript. Во первых звярну ўвагу вярстальшчыкі, на правільнасць пабудовы шаблону. А потым разгледзім убудаваную ў рухавічок магчымасць выкарыстоўваць асінхронныя загрузку знешніх скрыптоў. Размаўляць для чаго патрэбна аптымізацыя не буду.

пабудова шаблону

Як правіла вярстальшчыкі на Joomla не звяртаюць увагу на парадак загрузкі стыляў і скрыптоў, а гэта важны аспект аптымізацыі для распаралельвання загрузкі. CSS файлы варта заўсёды ўключаць перад файламі JavaScript.

Калі ў Вашым шаблоне загрузка css і javascript выглядае наступным чынам:

<! DOCTYPE html> <html> <head> <link rel = "shortcut icon" type = "image / x-icon" href = "/ favicon.ico"> <jdoc: include type = "head" /> <link rel = "stylesheet" href = "/ templates / beez_20 / css / style.css" type = "text / css" /> <script src = "/ templates / beez_20 / js / jquery-latest.min.js" type = "text / javascript"> </ script> </ head>

хачу вас запэўніць, гэта не правільна! Таму што вы загружаеце знешнія файлы пасля рэндэрынгу старонкі, а гэта значыць што фарміраванне блока head ўжо прайшло, адсюль узнікае хаос загрузкі ў шахматным парадку.

А вось як правільна ўключаць файлы ў рэндэрынг:

<? Php defined ( '_JEXEC') or die ( 'Restricted access'); $ 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>

Не зважаем на валіднасць doctype і html, пісаў скарочана для прыкладу.

асінхронная загрузка

А вось тут я б больш завастрыў увагу і дачытаў артыкул да канца! Часта заказчык на аптымізацыю патрабуе рэалізоўваць асінхроннага загрузку javascript. Як ні дзіўна распрацоўшчыкі Joomla прадугледзелі і такую ​​магчымасць, а вось распрацоўшчыкі іншых кампанентам, модуляў і ўбудоў забываюць пра дадзены функцыянал, мабыць таму Jooml'у часта і крытыкуюць за нізкую аптымізацыю, з чым бы я і паспрачаўся.

Як разглядаўся раней у рэндэрынгу якога існуе функцыя addScript (); . Але мабыць некаторыя і не падазраюць што яна мае чатыры зменныя - $ url, $ type, $ defer, $ async.

Калі асінхронная загрузка скрыптоў нам не патрэбна дастаткова выкарыстаць адзін атрыбут $ url, астатнія падстаўляюцца па змаўчанні ($ 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");

Але ў нашым выпадку нам неабходна загрузку скрыптоў браўзэрам паставіць у чаргу, для гэтага неабходна выкарыстоўваць атрыбут async і / або defer. Абодва адрозніваюцца толькі тым што defer захоўвае парадак выканання скрыптоў. Defer патрэбен у тым выпадку калі script.js выкарыстоўваецца фреймворк jQuery, які прадухіліць яго загрузку раней самой бібліятэкі, ну і калі неабходна захаваць нейкую паслядоўнасць.

І так што б уключыць асінхроннага загрузку неабходна выкарыстоўваць усе зменныя

$ This-> addScript ($ this-> baseurl. "/ Templates / beez_20 / js / jquery-latest.min.js", "text / javascript"); // або $ this-> addScript ($ this-> baseurl. "/ Templates / beez_20 / js / jquery-latest.min.js", "text / javascript", false, false); // Выводзіць <script 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); // Выводзіць <script 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); // Выводзіць <script src = "/ templates / beez_20 / js / jquery-latest.min.js" type = "text / javascript" async = "async"> </ script>

І яшчэ адзін маленькі моментик. У прынцыпе дадзеныя атрыбуты гэта элементы HTML5, такім чынам няма сэнсу выкарыстоўваць выгляд async = "async" і defer = "defer", досыць async і defer адпаведна.

Занясем карэктывы ў бібліятэку joomla. Адкрываем сайт.ру / libraries / joomla / document / html / renderer / head.php

Шукаем (прыкладна радок 150):

// Generate script file links foreach ($ document -> _ scripts as $ strSrc => $ strAttr) {$ buffer. = $ Tab. '<Script 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; }

замяняем на:

// Generate script file links foreach ($ document -> _ scripts as $ strSrc => $ strAttr) {$ buffer. = $ Tab. '<Script src = "'. $ StrSrc. '"'; if (! is_null ($ strAttr [ 'mime'])) {$ buffer. = 'type = "'. $ strAttr [ 'mime']. '"'; } If ($ strAttr [ 'defer']) {$ buffer. = 'Defer'; } If ($ strAttr [ 'async']) {$ buffer. = 'Async'; } $ Buffer. = '> </ Script>'. $ LnEnd; }

Вось і ўся соль. Усе маніпуляцыі мной праводзіліся ў Joomla 2.5, як гэта будзе працаваць у 1.5 хз, не разглядаў, ды і пара ўжо забыцца пра яе))). Ды і вышэйапісаная тэхніка зусім не панацэя, да кожнага патрэбен індывідуальных падыход.

Дзякуй за ўвагу!

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