Bir modül, mobil cihazlar için performansı optimize etmek üzere Joomla 3'teki cihaza veya görüntü alanı boyutuna göre nasıl devre dışı bırakılabilir?


14

Adaptive Web Design (yani - tüm cihazlar için ekranı ayarlayan ve görünüm bağlantı noktası boyutuna göre içerik sağlayan bir tasarım) ile birlikte 'Mobil' site tasarımlarının aksine, Duyarlı Web Tasarımının savunucusuyum.

Bazı büyük dezavantajlar var, örneğin büyük ekranlarda daha küçük görüntü alanı boyutları için gizlenecek bazı modüller eklemek istiyorum. Ancak, bir modülün görüntü alanı boyutuna göre gizlenmesi durumunda, bu modülün yüklenmesi ve yürütülmesi , belirli modülün hiçbir zaman daha küçük bir görüntü alanı boyutunda görüntülenmeyeceği bilindiğinde gereksiz bir performans vuruşuna neden olur .

Performansı hızlandırmak için bir modülü etkin bir şekilde devre dışı bırakmak (yani yürütülmesini durdurmak) için görüntü alanı boyutunu nasıl kullanabilirim?

Yanıtlar:


15

Gelişmiş Modül Yöneticisi ( http://www.nonumber.nl/extensions/advancedmodulemanager ) tarayıcı TÜRÜ'ne göre modüller atamanıza olanak tanır. Böylece mobil veya masaüstü veya belirli bir cihazı seçebilirsiniz. Bununla birlikte, boyuta göre seçim yapmanıza izin vermez, bu nedenle sadece bir derece için yararlıdır.

Bir php ve javascript kombinasyonu ile de mümkün olabilir. Bu soruyu arkadaşıma göndereceğim, bir fikri olabilir.


Ne güzel bir fikir, AMM'yi bu şekilde kullanmayı hiç düşünmemiştim.
jackJoe

Peter AMM içine bir sürü harika işlevsellik koydu, bence bu bir zorunluluktur.
Faye

Buna katılıyorum. Bu yerleşik olmayan bir tema ile sıkışmış olsaydı (çözgü 7 temaları bu yerleşik var) o zaman AMM kullanırdım.
Brian Peat

@BrianPeat - Bunun WARP7 ile nasıl çalıştığı hakkında daha ayrıntılı bilgi verebilir misiniz?
NivF007

3
Warp 7, şablon yöneticisinde masaüstü / tablet / telefon düğmelerini tıklatmanıza olanak tanıyan bir panele sahiptir ve bu ayarlara göre modülleri açar ve kapatır. Roket teması özel sınıflarla benzer bir şey yapar. Bilmiyorum, modüller yüksüzse veya her şey yüklüyse ve sonra sadece gizli. Tarayıcıyı yeniden boyutlandırırken değiştiğini görebildiğiniz için ikincisi olduğundan şüpheleniyorum. Bir şeyleri boyuta göre tamamen boşaltırsanız, pencereyi aktif olarak yeniden boyutlandırırsanız ne yapacaksınız?
Brian Peat

10

Böyle modülleri devre dışı bırakmanız gerektiğini düşünmüyorum ve yine de duyarlı tasarım diyoruz. Duyarlı olan noktalardan biri, sadece farklı ekran boyutları için farklı bir düzen yazdırması değil, görünüm alanı değişikliklerine yanıt vermesidir.

Örnek ekran boyutlarına bağlı olarak, portre modundaki bir tabletin modülün yüklenmemesine neden olması mümkündür, ancak aynı tabletin yatay modda bir kez bu içeriğe ihtiyacı olabilir.


3
Bu doğru olsa da, pratikte gerçekten etkili değildir. Yani bir iPhone kullanıcısı asla 1440x900 ekran çözünürlüğüne sahip olmayacak, hatta görüşlerini yeniden boyutlandıramayacak. İnsanların "tarayıcı penceremi yeniden boyutlandırdığımda işlerin nasıl değiştiğine bak" gibi duyarlı tasarım, gerçekten sadece göstermek isteyen tasarımcılar için etkilidir. Uygulamada, farklı ekran boyutları için modülleri kapatma ve çıkışı değiştirme yaklaşımını kullanmak son derece iyidir.
Don Gilbert

3
@Don Üzgünüm o zaman sadece duyarlı bir tasarım değil ve masaüstünde pencerelerde çalışırken yeniden boyutlandırma özelliklerinden yararlanan birçok kişi var. Duyarlı tasarım, görüntü alanı değişikliklerine belirli bir cihazdan ya da değil yanıt verir.
Spunkie

2
Katılıyorum. Ancak "duyarlı tasarım" hedeflerine katılmıyorum. Dediğim gibi, tasarımcılar tarafından gösteriş yapmak hayal edildi. İPhone'ların asla büyük bir çözünürlüğe sahip olmayacaklarını unutuyorlar. tl; dr - Duyarlı tasarım mobil cihazlarda önemli değildir . "Saf duyarlı tasarıma" sahip olmaktan ziyade ağ bant genişliğinden tasarruf etmeyi tercih ederim.
Don Gilbert

2
@DonGilbert ve Spunkie - IMO'da - ikiniz de haklısınız. Duyarlı Web Tasarımının 'katı' tanımı 'içeriği' değiştirmeyi içermez - Soruyu RWD / AWD - Duyarlı Web Tasarımı ve Uyarlanabilir Web Dağıtımı'nı içerecek şekilde düzenleyeceğim en.wikipedia.org/wiki/Responsive_web_design
NivF007

8

Bu, bir süre önce görünüm pencerelerini algılamak için javascript kullanabileceğiniz bir JS sınıfıdır, titiz testlerden geçirilmemiştir, ancak çalışır.

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;
}

Temelde böyle kullanırsın

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

Kesme noktası, genişlik için min / maks parametrelerine, daha sonra onu girmek ve ayrılmak için zincirlenmiş bir işleve sahiptir ve bazı JS kodlarını çalıştırmak için bir geri çağrı vardır.

Çok uzun zaman önce yaptığım gibi, nasıl çalıştığına dair ayrıntılı bir şekilde ilerleyemem, ancak yardımcı olursa ücretsiz olarak kullanabilirsiniz. Bu, görünüm penceresine göre ajax aracılığıyla modülleri yüklemek için kullanılabilir. Joomla com_ajax bu gerçekten bazı harika özellikler yapmak için kullanılabilir inanıyoruz.


1
Bu bulmacanın önemli bir parçası gibi görünüyor ve ilginç olasılıkları var - cevap için ve özellikle kodu gönderdiğiniz için teşekkür ederiz.
NivF007

1
En iyi cevap iş arkadaşım, bu aşağı yukarı benim fikrim: P
Jordan Ramstad


3

Performansı hızlandırmak istiyorsanız, gereksiz modülleri yüklemeyin. Küçük ekranlarda gerekli değilse, daha büyük ekranlarda da gerekli değildir.

Daha büyük cihaz ekranlarına sahip kişiler de gereksiz sarsıntı yüklemeyen hızlı bir web sitesi istiyor. Daha büyük ekranların daha fazla bant genişliğine sahip olduğu yanlış varsayımını yapıyorsunuz. Yapmazlar.

İyi bir tasarımcı olun ve ekran boyutlarından bağımsız olarak tüm kullanıcılarınıza optimize edilmiş bir site deneyimi yaşatın.


2

Tarayıcı koklamanın buraya gitmenin yanlış yolu olduğunu öneririm. Modülleri yalnızca ekran genişliğine göre yüklemek istiyorsanız, javascript çalıştırmanız gerekir; bu modül modülü AJAX (com_ajax) ile çağırır. AJAX tarafından yüklenen içerik için arama motoru optimizasyonu açısından bir kazanç olabileceğini unutmayın.


2

Bunu yapmak için genellikle css @media kullanıyorum. Ekran boyutuna bağlı olarak şeyleri gizlemeyi ve bir yatay tabletin gösterecek kadar geniş olduğu ve portre genişliğinin olmadığı zamanları ayrıştırmasını kolaylaştırır. İşte bir örnek:

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

Genellikle tüm modül konumunu gizlemek için kullanıyorum, böylece css seçicimi bu konumun sarıcısına (veya bazı şablonlardaki konumlara) dayandırıyorum.


Cevabınız için teşekkürler. CSS ortam sorgusu yaklaşımıyla ilgili sorun, hala bir modül yürütüyor olmanızdır (bunu görüntülememeyi seçmiş olsanız bile). Aradığım çözüm, görüntülenmedikçe modülü yürütmez.
NivF007

Diğerlerinin de söylediği gibi, sayfa yüklendikten sonra görünüm boyutlarını ve yatay veya dikey tabletleri değiştiren insanlar için bu iyi bir fikir olmayabilir. Saniyenin birkaç yüzüncüsü sunucuyu bu modülü ayrıştırmak için çok fazla önemli olmayacak ve görüntülendiğinden: daha küçük cihazlarda hiçbiri oluşturmaz, böylece orada da zaman kaybı olmaz. - Ama gerçekten yüklemesini istemiyorsanız, Gelişmiş Modül Yöneticisi muhtemelen başka bir cevaba bağlı olarak gitmenin yoludur.
pathfinder

1

Com_ajax'ı çağıran ve yalnızca geçerli boyut için modülleri döndüren bazı javascript kullanarak istek üzerine yükleyebilirsiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.