モバイルデバイスのパフォーマンスを最適化するために、Joomla 3のデバイスまたはビューポートサイズに基づいてモジュールを無効にするにはどうすればよいですか?


14

私は、個別の「モバイル」サイトデザインとは対照的に、アダプティブWebデザイン(つまり、すべてのデバイスの表示を調整し、ビューポートサイズに基づいてコンテンツを提供する1つのデザイン)と組み合わせたレスポンシブWebデザインの支持者です。

いくつかの欠点があります。たとえば、大きなディスプレイでは、小さなビューポートサイズでは非表示になるいくつかのモジュールを含めたいです。ただし、ビューポートサイズに基づいてモジュールが非表示になっている場合、特定のモジュールがより小さなビューポートサイズで表示されないことがわかっている場合、そのモジュールをロードして実行すると、不必要なパフォーマンスヒットが発生します。

パフォーマンスを高速化するために、ビューポートサイズを使用してモジュールを効果的に無効にする(つまり、実行を停止する)にはどうすればよいですか?

回答:


15

Advanced Module Manager(http://www.nonumber.nl/extensions/advancedmodulemanager)を使用すると、ブラウザーのTYPEに基づいてモジュールを割り当てることができます。そのため、モバイル、デスクトップ、または特定のデバイスを選択できます。ただし、サイズで選択することはできないため、ある程度しか役立ちません。

phpとjavascriptの組み合わせでも可能です。私はこの質問を仲間に送ります。彼はアイデアを持っているかもしれません。


AMMをこのように使用することは考えていませんでした。
jackJoe

Peterは、AMMに多くの素晴らしい機能を追加しました。
フェイ14

私はこれに賛同する。これが組み込まれていないテーマ(たとえば、warp 7のテーマに組み込まれている)で立ち往生している場合は、AMMを使用します。
ブライアンピート14

@BrianPeat-これがWARP7でどのように機能するかについての詳細を提供できますか?
NivF007 14

3
Warp 7のテンプレート管理パネルには、デスクトップ/タブレット/電話のボタンをクリックして、それらの設定に基づいてモジュールのオンとオフを切り替えることができるパネルがあります。Rocketテーマは、特別なクラスと同様のことを行います。私が知らないのは、モジュールがオフロードされているのか、それともすべてがロードされてから隠されているだけなのかです。ブラウザのサイズを変更すると変化するのを見ることができるので、後者のようです。サイズに基づいて完全にオフロードする場合、ウィンドウのサイズを積極的に変更するとどうなりますか?
ブライアンピート14

10

そのようなモジュールを無効にして、レスポンシブデザインと呼ぶべきではないと思います。レスポンシブのポイントの一部は、画面サイズごとに異なるレイアウトを印刷するだけでなく、ビューポートの変更に応答することです。

画面サイズの例によっては、ポートレートモードのタブレットがモジュールをロードしない場合がありますが、同じタブレットがランドスケープモードで一度そのコンテンツを必要とする場合があります。


3
それは事実ですが、実際にはあまり効果的ではありません。つまり、iPhoneユーザーは1440x900の画面解像度を持つことはなく、ビューポートのサイズを変更することもできません。「ブラウザウィンドウのサイズを変更すると、状況がどう変わるか」というようなレスポンシブデザインは、誇示したいデザイナーにのみ効果的です。実際には、モジュールをシャットダウンし、さまざまな画面サイズに合わせて出力を変更するというアプローチを取ることはまったく問題ありません。
ドンギルバート14

3
@Don申し訳ありませんが、それは単にレスポンシブデザインではなく、Windowsで作業するときにサイズ変更機能を利用するデスクトップユーザーがたくさんいます。レスポンシブデザインは、特定のデバイスからであるかどうかにかかわらず、ビューポートの変更に応答します。
スパンキー14

2
同意する。しかし、「レスポンシブデザイン」の目標には同意しません。私が言ったように、それは誇示するためにデザイナーによって夢見られました。彼らはiPhoneの巨大な解像度は決してないという事実を忘れています。tl; dr-レスポンシブデザインモバイルデバイスでは重要はありません。「純粋なレスポンシブデザイン」よりもネットワーク帯域幅を節約したいです。
ドンギルバート14

2
@DonGilbertとSpunkie-IMO-どちらも正しい。レスポンシブWebデザインの「厳格な」定義には「コンテンツ」の変更は含まれません
-RWD / AWD-

8

これは、JavaScriptを使用してビューポートを検出できるJSクラスです。厳密なテストは行われていませんが、機能します。

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

ブレークポイントには、幅の最小/最大パラメーターがあり、その後、JSコードを実行するコールバックを使用して、幅を入力および終了するための連鎖関数があります。

私はずっと前に作ったので、それがどのように機能するかについて詳しく説明することはできませんが、それが役立つ場合は自由に使用できます。これは、ビューポートに基づいてajaxを介してモジュールをロードするために使用できます。joomlaのcom_ajaxをこれ​​で使用して、本当にクールな機能を作成できると思います。


1
これはパズルの主要な部分のように見え、興味深い可能性があります。答え、特にコードを投稿してくれてありがとう。
NivF007 14

1
P:トップ答えは私の同僚で、これは、多かれ少なかれ、私の考えである
ヨルダンRamstad

3

別の解決策:

あなたはこのようなサーバー側デバイスの検出を使用することができます。http://mobiledetect.net/ここJoomlaのプラグインhttp://www.yagendoo.com/en/blog/free-mobile-detection-plugin-for-joomla.htmlそして、独自のmod_chromeスタイルでjoomla / templates / yourtemplate / html / modules.phpを拡張します。その後、任意のデバイスまたは解像度に対して好きな数のphp ifステートメントを記述できます。


3

パフォーマンスを高速化する場合は、不要なモジュールをロードしないでください。小さい画面で必要ない場合は、大きい画面でも必要ありません。

デバイスのディスプレイが大きい人は、不要なデータを読み込まない高速なWebサイトも必要です。画面が大きいほど利用可能な帯域幅が広いという誤った仮定をしていることになります。彼らはしません。

優れたデザイナーであり、画面サイズに関係なく、すべてのユーザーに最適化されたサイトエクスペリエンスを提供します。


2

ブラウザスニッフィングは、ここに行くのに間違った方法であることをお勧めします。画面の幅に基づいてモジュールのみをロードする場合は、JavaScriptを実行する必要があります。その後、JavaScriptがAJAX(com_ajax)によってモジュールを呼び出します。AJAXによって読み込まれたコンテンツの検索エンジン最適化に関しては、見返りがあるかもしれないことに注意してください。


2

私は通常、css @mediaを使用してこれを実現しています。画面サイズに応じて物事を簡単に非表示にし、ランドスケープタブレットが表示するのに十分な幅でポートレートの幅がそうでないときにそれらを解析します。次に例を示します。

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

通常、これを使用してモジュールの位置全体を非表示にするため、CSSセレクターはその位置(または一部のテンプレートの位置)のラッパーに基づいています。


ご回答有難うございます。CSSメディアクエリアプローチの問題は、(表示しないことを選択している場合でも)モジュールをまだ実行していることです。探しているソリューションは、表示されない限りモジュールを実行しません。
NivF007 14

他の人が言ったように、それはページの読み込み後にビューポートのサイズを変更する人々や、横向きと縦向きのタブレットにとって最良のアイデアではないかもしれません。サーバーがこのモジュールを解析するのに必要な数百分の1秒はそれほど重要ではありません。また、小さなデバイスでは表示しないため、レンダリングしないので時間も失われません。-しかし、本当にロードしたくない場合は、おそらくAdvanced Module Managerが別の回答でリンクされている方法です。
パスファインダー14

1

com_ajaxを呼び出し、現在のサイズのモジュールのみを返すjavascriptを使用して、オンデマンドで読み込むことができます。


0

モジュールサフィックスをメディアクエリと組み合わせて使用​​できます。多くのテンプレートフレームワークにはこれが既に組み込まれているため、「隠し電話」のクラスを追加して、モバイルで表示しないようにすることができます。それらをCSSヘルパークラスと呼びます:

ガントリー:http ://www.gantry-framework.org/documentation/joomla/advanced/responsive_grid_system.md

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.