Як можна відключити модуль на основі розміру пристрою або вікна перегляду в Joomla 3, щоб оптимізувати продуктивність для мобільних пристроїв?


14

Я прихильник адаптивного веб-дизайну спільно з адаптивним веб-дизайном (тобто - одним дизайном, який регулює показ дисплея для всіх пристроїв та надає вміст на основі розміру порту перегляду) на відміну від окремих "мобільних" сайтів.

Наприклад, на великих дисплеях є деякі недоліки, які я хотів би включити в модулі, які будуть приховані для менших розмірів вікна перегляду. Однак у випадку, коли модуль приховано на основі розміру вікна перегляду, завантаження та виконання цього модуля спричиняє непотрібне враження від продуктивності, коли відомо, що конкретний модуль ніколи не відображатиметься при меншому розмірі вікна перегляду.

Як я можу використовувати розмір вікна перегляду для ефективного відключення модуля (тобто зупинення його виконання), щоб прискорити продуктивність?

Відповіді:


15

Розширений диспетчер модулів ( http://www.nonumber.nl/extensions/advancedmodulemanager ) дозволяє призначити модулі на основі типу TYPE браузера. Таким чином, ви можете вибрати мобільний або настільний ПК, або певний пристрій. Однак це не дозволяє обирати за розміром, тому корисно лише до певної міри.

Це також можливо за допомогою комбінації php та javascript. Я надішлю це питання своєму приятелю, він може мати ідею.


Яка гарна ідея, я ніколи не думав використовувати AMM таким чином.
jackJoe

Пітер вклав багато чудових функціональних можливостей в AMM, на мою думку, це обов'язково.
Faye

Я згоден з цим. Якщо я застряг у темі, в якій цього не було вбудовано (наприклад, у варп 7 тем увімкнено цю функцію), то я б застосував AMM.
Брайан Торф

@BrianPeat - чи можете ви надати більш детальну інформацію про те, як це працює з WARP7?
NivF007

3
У програмі Warp 7 в адміністраторі шаблонів є панель, яка дозволяє натискати кнопки робочого столу / планшета / телефону, і вона вмикає та вимикає модулі на основі цих налаштувань. Тема ракети робить щось подібне із спеціальними класами. Я не знаю, якщо модулі завантажені, або все завантажено, а потім просто приховано. Я підозрюю, що це останнє, оскільки ви можете бачити, як це змінюється під час зміни розміру браузера. Якщо ви повністю завантажуєте речі залежно від розміру, що це зробить, якщо активно змінити розмір вікна?
Брайан Торф

10

Я не думаю, що вам слід відключати такі модулі, і все ще називати це чуйним дизайном. Частина сенсу, що реагує, полягає в тому, що він буде реагувати на зміни вікна перегляду, а не лише те, що він виводить інший макет для різних розмірів екрана.

Залежно від прикладних розмірів екрана можливо, що планшетний ПК в портретному режимі призведе до того, що модуль не завантажується, але тоді цей самий планшет може потребувати цього вмісту один раз у альбомному режимі.


3
Хоча це правда, на практиці це не дуже ефективно. Це означає, що користувач iPhone ніколи не матиме роздільну здатність екрана 1440x900, а також не зможе змінити розмір вікна перегляду. Чуйний дизайн, де люди схожі на "о, дивіться, як змінюються речі, коли я змінюю розмір вікна свого веб-переглядача" дійсно ефективний лише для дизайнерів, які хочуть показати себе. На практиці цілком чудово підходити до відключення модулів та зміни виводу для різних розмірів екрана.
Дон Гілберт

3
@Don Вибачте, це просто не чуйний дизайн, і на робочому столі багато людей, які користуються перевагами змін розміру під час роботи у Windows. Чуйний дизайн відповідає на зміни у вікні перегляду, чи не з певного пристрою чи ні.
Spunkie

2
Я згоден. Але я не згоден з цілями "чуйного дизайну". Як я вже казав, дизайнери приснилися, щоб показати себе. Вони забувають той факт, що iPhone ніколи не матиме величезної роздільної здатності. tl; dr - чуйний дизайн не має значення для мобільних пристроїв. Я вважаю за краще зберегти пропускну здатність мережі, ніж мати "чистий чуйний дизайн".
Дон Гілберт

2
@DonGilbert і в Spunkie - IMO - ви обидва праві. "Суворе" визначення чуйного веб-дизайну не включає зміну "вмісту" - я відредагую питання, щоб включити RWD / AWD
чуйний

8

Це клас JS, який я створив деякий час тому, який міг би використовувати JavaScript для виявлення вікон перегляду, він ніколи не ставився через ретельне тестування, але працює.

function ResJS(){
    this.min = 0;
    this.max = 0;
    this.config = config;
    this.width = function(){
        return jQuery(window).width();
    }
    this.breakpoint = function(min,max){
        this.min = min;
        this.max = max;
        this.outside = false;
        this.inside = false;
        this.triggeredOut = false;
        this.triggeredIn = false;
        this.enter = function(callback){
            var context = this;
            jQuery(window).on('resize',function(){
                if(context.min<context.width()&&context.max>context.width()){
                    if(!context.triggeredIn){
                        jQuery(document).ready(function(){callback(context.min,context.max)});
                        context.inside = true; //browser width has entered breakpoint
                        context.outside = false; //browser has left another breakpoint
                        context.triggeredIn = true; //triggered event for breakpoint
                        context.triggeredOut = false; //be ready to trigger leave event
                    }
                }else{
                    context.inside = false; //browser width is not within breakpoint
                    context.outside = true; //brower width is outside of breakpoint
                }
            });
            if(context.min<context.width()&&context.max>context.width()){
                jQuery(document).ready(function(){callback(context.min,context.max)});
                context.inside = true;
                context.outside = false;
                context.triggeredIn = true;
                context.triggeredOut = false;
            }else{
                context.inside = false;
                context.outside = true;
                context.triggeredOut = true;
                context.triggeredIn = false;
            }
            return this;
        }
        this.leave = function(callback){
            var context = this;
            jQuery(window).on('resize',function(){
                if(context.outside&&!context.triggeredOut){
                    jQuery(document).ready(function(){callback(context.min,context.max)});
                    context.triggeredIn = false;
                    context.triggeredOut = true;
                }
            });     
            return this;
        }
        return this;
    }
    return this;
}

В основному ви використовуєте його так

ResJS()
    .breakpoint(0,600)
    .enter(function(min,max){
        console.log(min,max,'enter');
    })
    .leave(function(min,max){
        console.log(min,max,'leave');
    });

У точці розриву є параметри min / max для ширини, потім ланцюгова функція для введення в неї та виходу із зворотним дзвоном для запуску деякого коду JS.

Я не можу детально розповісти, як це працює, як я це зробив так давно, але ви можете безкоштовно використовувати його, якщо це допоможе. Це можна використовувати для завантаження модулів через ajax на основі вікна перегляду. Я вважаю, що com_ajax компанії Joomla може бути використаний для цього, щоб зробити якісь цікаві функції.


1
Це виглядає як головний фрагмент головоломки та має цікаві можливості - дякую за відповідь та особливо за розміщення коду.
NivF007

1
Верхня відповідь - це мій колега, це більш-менш моя ідея: P
Jordan Ramstad

3

Ще одне рішення:

Ви можете використовувати серверне виявлення бокового сервера таким чином: http://mobiledetect.net/ тут плагін Joomla http://www.yagendoo.com/en/blog/free-mobile-detection-plugin-for-joomla.html а потім розгорніть joomla / templates / yourtemplate / html / module.php власним стилем mod_chrome. Тоді ви можете написати стільки php, якщо вам подобаються твердження для будь-якого пристрою чи роздільної здатності.


3

Якщо ви хочете прискорити продуктивність, то не завантажуйте зайві модулі. Якщо це не потрібно на маленьких екранах, то це також не потрібно на великих екранах.

Люди з більшими дисплеями пристроїв також хочуть створити швидкий веб-сайт, який не завантажує зайву суть. Ви робите помилкове припущення, що на великих екранах доступна більша пропускна здатність. Вони ні.

Будьте хорошим дизайнером і надайте всім своїм користувачам оптимізований досвід роботи на сайті, незалежно від розміру екрана.


2

Я б сказав, що нюхання браузера - це неправильний шлях. Якщо ви дійсно хочете завантажувати модулі тільки на ширині екрана, вам потрібно запустити деякий javascript, який потім викликає модуль AJAX (com_ajax). Майте на увазі, що можлива розплата в плані оптимізації пошукової системи за вміст, завантажений AJAX.


2

Зазвичай я використовую css @media, щоб це сталося. Полегшує приховування речей залежно від розміру екрана та їх розбір для тих часів, коли альбомний планшет достатньо широкий, щоб показати його, а ширина портрета - ні. Ось приклад:

@media (max-width:699px) {
    #moduleid, .modulewrapperclass {display:none}
}

Зазвичай я використовую це для приховування цілої позиції модуля, тому базую свій вибір css на обгортці цієї позиції (або позицій у деяких шаблонах).


Дякую за вашу відповідь. Проблема підходу до медіа-запиту CSS полягає в тому, що ви все ще виконуєте модуль (навіть якщо ви вирішили не відображати його). Я шукаю рішення не виконує модуль, якщо він не відображається.
NivF007

Як зазначають інші, це може бути не найкращою ідеєю для людей, які змінюють розмір вікна після завантаження сторінки, а також пейзаж у порівнянні з портретними планшетами. Декілька сотих секунд, які потрібен серверу для розбору цього модуля, не матимуть великого значення, і оскільки він відображається: жоден на менших пристроях не виводить його, так що і час не втрачається. - Але якщо ви дійсно хочете не завантажувати його, то, можливо, розширений диспетчер модулів - це спосіб перейти як пов'язаний в іншій відповіді.
pathfinder

1

Ви можете завантажити його на вимогу, використовуючи деякий javascript, який викликає com_ajax і повертає лише модулі для поточного розміру.


0

Суфікс модуля можна використовувати в поєднанні з медіа-запитами. У багатьох шаблонах є вже вбудований, де ви можете додати клас "прихованого телефону", щоб не відображати їх на мобільному пристрої. Вони називають їх класи CSS Helper:

GANTRY: http://www.gantry-framework.org/documentation/joomla/advanced/responsive_grid_system.md

WARP: http://www.yootheme.com/blog/2012/06/12/warp-gets- response

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.