Как се пише: <em>поларена, поларено, поларени</em> или <em>поларна, поларно, поларни</em>?
от Павлина ВърбановаКак се пише: <em>не зависи</em> или <em>независи</em>?
от Павлина ВърбановаКак се пише: <em>пръти</em> или <em>прътове</em>?
от Павлина ВърбановаКак се пише: <em>проформа, про-форма</em> или<em> про форма</em>?
от Павлина ВърбановаКак се пише: <em>андалусец</em> или <em>андалусиец</em>?
от Павлина ВърбановаКак се пише: <em>подобект</em> или <em>под-обект</em>?
от Павлина ВърбановаКак се пише: <em>криволича</em> или <em>кривулича</em>?
от Павлина ВърбановаКак да използваме Autoptimize с HTTP/2
от ГонзоВ по-новите версии на Autoptimize има възможност чрез филтър да съставите списък с разрешени за обединяване скриптове. Това позволява да обедините скриптовете, които са задължителни за всички страници в сайта и да оставите скриптовете, които се зареждат само на определени страници извън пакета. Това решава и един друг проблем с Autoptimize – когато различни скриптове се зареждат на различни страници, пакетите, които се генерират са различни. Това води до безконтролно увеличаване на кеша на Autoptimize и до забавяне на зареждането за потребителите, защото вместо да заредят кеширан файл, всеки път теглят различен.
И така, да започнем с обединяването на задължителните скриптове:
/**
* Whitelist scripts to autoptimize
*
* @return: whitelist
*/
function gonzo_js_whitelist() {
$whitelist = array(
'jquery.js',
'jquery-migrate.min.js',
'wp-embed.min.js'
);
return join( ',', $whitelist );
}
add_filter( 'autoptimize_filter_js_whitelist', 'gonzo_js_whitelist' );
След като вече имаме пакет с най-важните скриптове, нужни за сайта, трябва да се погрижим за две неща:
- Да зареждаме обединените скриптове преди останалите, защото пакетът съдържа jQuery, а някои от останалите скриптове най-вероятно разчитат на него.
- Да зареждаме скриптовете асинхронно, за да не блокират изобразяването на страницата.
Генерираният от Autoptimize скрипт елемент може да поставим веднага след елемента title така:
/**
* Where in the HTML optimized JS is injected.
*
* @param array $replacetag, containing the html-tag and the method (inject "before", "after" or "replace")
* @return array with updated values
*/
function gonzo_override_js_replacetag( $replacetag ) {
return array( '</title>', "after" );
}
add_filter( 'autoptimize_filter_js_replacetag', 'gonzo_override_js_replacetag', 10, 1 );
За да зареждаме всички скриптове асинхронно, и в същото време последователно, ще добавим атрибут defer към тях. Така скриптовете не само се зареждат асинхронно, но и не блокират изобразяването на страницата когато се изтеглят. Освен това атрибута defer кара скриптовете да се изпълнят по реда в документа.
/*
* Defer all javascripts
*/
function gonzo_defer_js($tag, $handle) {
if( ! is_admin() ){
$tag = str_replace( ' src', ' defer="defer" src', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'gonzo_defer_js', 10, 2 );
/**
* Change flag added to Javascript.
*
* @param $defer: default value, "" when forced in head, "defer " when not forced in head
* @return: new value
*/
function gonzo_override_defer( $defer ) {
return "defer ";
}
add_filter( 'autoptimize_filter_js_defer', 'gonzo_override_defer', 10, 1 );
И на края, за да гарантираме, че скриптовете ще се кешират правилно от браузърите и прокситата, ще премахнем GET променливата с версията, която WordPress добавя към адресите на всички ресурси:
/*
* Remove query string from static assets
*/
function gonzo_remove_script_version( $src ){
return remove_query_arg( 'ver', $src );
}
add_filter( 'script_loader_src', 'gonzo_remove_script_version' );
Естествено, подобен подход можем да приложим и към CSS файловете, които сайта зарежда. На края ще имаме бърз сайт за удоволствие на потребителите и печалба на клиента.
2017-та
от Ясен ПраматаровЕдна стара година, за която не ми се пише дълго. Като цяло гадна година, с няколко много готини проблясъка, но тях ние сами си ги направихме, на мускули и с лишения, даже някак напук на всичко. Имаше готини неща, като пренасяне и рождени дни, за тях писах. Но иначе гадна година.
Пак концерти пропуснах, макар много да се навивах да ида, накрая все нещо се случваше и не видях нито Аксепт, нито Хелоуин. И за първи път от дълги години бях в студиото на приятел с китара в ръка и… тотално се отчаях от себе си. Още гледам китарите в ъгъла и не знам кога ще ги взема пак. Въпреки че, както казва пък друг един приятел, свиренето е почти изцяло рутина и няма нищо магично в самото свирене. Важното е да си ентусиаст, както казва пък трети един приятел. Брей, ако не бяха разпръснати тия тримата из градове и държави, да ги бях събрал да правим банда направо…
Освен къщата и всички страхотни часове тук с децата ни, успяхме да обиколим остров Тасос. Приятно ми е, шкипер Ясен. Е, не посмях да съм сам и бяхме с баш шкипер, той се оказа на нашите години и на нашия акъл, та добре стана. Даже сме следвали по едно и също време, даже сме били заедно на спецкурса на Цочо, а и съм сигурен, че имаме общи компании от едно време. Е, не е от философския, но какво да се прави, никой не е съвършен. :)
В началото на годината баща ми влезе в болница за тежка сърдечна операция, от която на практика още не се е възстановил, а и прогнозите са неясни. Годината всъщност беше най-тежка не за мен, а за майка ми. Сигурно е била по-лека за брат ми. Не ми се пише повече.
Честита нова година, добре си ни дошла, добре си ни заварила! Да си опичаш акъла, надежди ти възлагаме!