모바일 장치의 성능을 최적화하기 위해 Joomla 3의 장치 또는 뷰포트 크기에 따라 모듈을 비활성화하는 방법은 무엇입니까?


14

저는 별도의 '모바일'사이트 디자인이 아니라 적응 형 웹 디자인 (즉, 모든 장치의 디스플레이를 조정하고보기 포트 크기에 따라 콘텐츠를 제공하는 하나의 디자인)과 함께 반응 형 웹 디자인을지지합니다.

예를 들어 대형 디스플레이에는 약간의 단점이 있습니다. 작은 뷰포트 크기로 숨길 수있는 일부 모듈을 포함하고 싶습니다. 그러나 뷰포트 크기에 따라 모듈이 숨겨져있는 경우 특정 모듈이 더 작은 뷰포트 크기로 표시되지 않는 것으로 알려진 경우 해당 모듈을로드하고 실행하면 불필요한 성능 저하가 발생합니다.

성능 향상을 위해 뷰포트 크기를 사용하여 모듈을 효과적으로 비활성화 (즉, 실행 중지)하는 방법은 무엇입니까?

답변:


15

고급 모듈 관리자 ( http://www.nonumber.nl/extensions/advancedmodulemanager )를 사용하면 브라우저 유형에 따라 모듈을 할당 할 수 있습니다. 따라서 모바일, 데스크탑 또는 특정 장치를 선택할 수 있습니다. 크기별로 선택할 수 없으므로 어느 정도 유용합니다.

PHP와 자바 스크립트의 조합으로 가능할 수도 있습니다. 이 질문을 내 친구에게 보내면 아이디어가있을 수 있습니다.


좋은 생각인데, 이런 식으로 AMM을 사용하는 것을 생각하지 않았습니다.
jackJoe

Peter는 AMM에 멋진 기능을 많이 넣었습니다. 필자의 견해로는 필수입니다.
Faye

동의합니다. 이 기능이 내장되지 않은 테마 (예를 들어, 워프 7 테마에는이 기능이 내장되어 있음)가 붙어 있으면 AMM을 사용합니다.
Brian Peat

@BrianPeat-WARP7과의 작동 방식에 대한 추가 정보를 제공 할 수 있습니까?
NivF007

3
Warp 7에는 템플릿 관리자에 데스크탑 / 태블릿 / 전화 버튼을 클릭 할 수있는 패널이 있으며 이러한 설정에 따라 모듈을 켜거나 끕니다. 로켓 테마는 특수 클래스와 비슷한 것을 수행합니다. 내가 모르는 것은 모듈이 오프로드되었거나 모든 것이로드 된 다음 숨겨져 있는지입니다. 브라우저 크기를 조정할 때 변경되는 것을 볼 수 있기 때문에 후자라고 생각합니다. 크기를 기준으로 항목을 완전히 오프로드하면 적극적으로 창 크기를 조정하면 어떻게됩니까?
Brian Peat

10

나는 당신이 그런 모듈을 비활성화시켜야한다고 생각하지 않으며 여전히 반응 형 디자인이라고 부릅니다. 반응 형 요점의 일부는 다른 화면 크기에 대해 다른 레이아웃을 인쇄하는 것이 아니라 뷰포트의 변경에 응답한다는 것입니다.

예제 화면 크기에 따라 세로 모드의 태블릿은 모듈을로드하지 않지만 가로 모드에서는 동일한 태블릿에 해당 내용이 한 번 필요할 수 있습니다.


3
사실이지만 실제로는 효과적이지 않습니다. 즉, iPhone 사용자는 화면 해상도가 1440x900이 아니며 뷰포트 크기를 조정할 수 없습니다. 사람들이 "브라우저 창 크기를 조정할 때 어떻게 변하는 지보기"와 같은 반응 형 디자인은 실제로 과시하려는 디자이너에게만 효과적입니다. 실제로, 모듈을 끄고 다양한 화면 크기에 대한 출력을 변경하는 것이 좋습니다.
Don Gilbert

3
@Don 죄송합니다. 반응 형 디자인이 아닙니다. 데스크톱에는 Windows에서 작업 할 때 크기 조정 기능을 이용하는 많은 사람들이 있습니다. 반응 형 디자인은 특정 장치의 여부에 관계없이 뷰포트 변경에 응답합니다.
Spunkie

2
나는 동의한다. 그러나 저는 "반응 형 디자인"이라는 목표에 동의하지 않습니다. 내가 말했듯이, 디자이너들에게 과시하는 것이 꿈이었습니다. 그들은 아이폰의 해상도가 절대 높지 않다는 사실을 잊어 버린다. tl; dr-반응 형 디자인 모바일 장치에서 중요하지 않습니다 . "순수한 반응 형 디자인"보다 네트워크 대역폭을 절약하고 싶습니다.
Don Gilbert

2
@ DonGilbert와 Spunkie-IMO-둘 다 맞습니다. 반응 형 웹 디자인의 '엄격한'정의에는 '콘텐츠'수정이 포함되지 않습니다. RWD / AWD-반응 형 웹 디자인 및 적응 형 웹 전달을 포함하도록 질문을 편집하겠습니다. en.wikipedia.org/wiki/Responsive_web_design
NivF007

8

이것은 자바 스크립트를 사용하여 뷰포트를 감지 할 수있는 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');
    });

Breakpoint에는 너비에 대한 최소 / 최대 매개 변수가 있고, JS 코드를 실행하기위한 콜백과 함께 너비를 입력하고 떠나는 체인 함수가 있습니다.

나는 오래 전에 그것을 만들었으므로 어떻게 작동하는지 자세히 설명 할 수는 없지만 도움이된다면 자유롭게 사용할 수 있습니다. 뷰포트를 기반으로 아약스를 통해 모듈을로드하는 데 사용할 수 있습니다. joomla의 com_ajax를 이것과 함께 사용하여 정말 멋진 기능을 만들 수 있다고 생각합니다.


1
이것은 퍼즐의 주요 부분처럼 보이며 흥미로운 가능성을 가지고 있습니다. 답변과 특히 코드 게시에 감사드립니다.
NivF007

1
가장 좋은 대답은 제 동료입니다. 이것은 다소 제 생각입니다 : P
Jordan Ramstad


3

성능을 향상 시키려면 불필요한 모듈을로드하지 마십시오. 작은 화면에서는 필요하지 않은 경우 큰 화면에서는 필요하지 않습니다.

더 큰 장치 디스플레이를 가진 사람들은 불필요한 부스러기를로드하지 않는 빠른 웹 사이트를 원합니다. 화면이 클수록 더 많은 대역폭을 사용할 수 있다고 잘못 가정하고 있습니다. 그들은하지 않습니다.

화면 크기에 상관없이 훌륭한 디자이너가되어 모든 사용자에게 최적화 된 사이트 환경을 제공하십시오.


2

브라우저 스니핑이 여기에 잘못된 방법이라고 제안합니다. 화면 너비를 기준으로 모듈 만로드하려면 일부 자바 스크립트를 실행해야합니다. 그런 다음 AJAX (com_ajax)에 의해 모듈을 호출합니다. AJAX가로드 한 컨텐츠에 대한 검색 엔진 최적화 측면에서 보상이있을 수 있음을 명심하십시오.


2

나는 일반적으로 css @media를 사용하여 이것을 수행합니다. 화면 크기에 따라 사물을 숨기고 가로 태블릿이 화면을 표시하기에 충분히 넓고 세로 너비가 아닌 경우 구문 분석하는 것이 간단합니다. 예를 들면 다음과 같습니다.

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

나는 보통 이것을 사용하여 전체 모듈 위치를 숨기므로 CSS 선택기를 해당 위치의 래퍼 (또는 일부 템플릿의 위치)를 기준으로합니다.


답변 주셔서 감사합니다. CSS 미디어 쿼리 접근 방식의 문제점은 모듈을 표시하지 않더라도 여전히 모듈을 실행하고 있다는 것입니다. 내가 찾고있는 솔루션은 모듈이 표시되지 않으면 모듈을 실행하지 않습니다.
NivF007

다른 사람들이 말했듯이, 페이지로드 후 뷰포트 크기와 가로 및 세로 태블릿을 변경 한 사람들에게는 이것이 최선의 아이디어가 아닐 수도 있습니다. 서버가이 모듈을 구문 분석하는 데 수백 분의 1 초가 걸리는 것은 그리 중요하지 않으며 표시되기 때문에 작은 장치에서는 렌더링하지 않으므로 시간이 손실되지 않습니다. -그러나 실제로로드하지 않으려면 Advanced Module Manager가 다른 답변에 링크 된 방법 일 것입니다.
패스 파인더

1

com_ajax를 호출하고 현재 크기의 모듈 만 반환하는 일부 자바 스크립트를 사용하여 요청시로드 할 수 있습니다.


0

미디어 쿼리와 함께 모듈 접미사를 사용할 수 있습니다. 많은 템플릿 프레임 워크에이 기능이 이미 내장되어있어 모바일에 표시되지 않도록 "숨겨진 전화"클래스를 추가 할 수 있습니다. 그들은 그것들을 CSS 헬퍼 클래스라고 부릅니다 :

갠트리 : http://www.gantry-framework.org/documentation/joomla/advanced/responsive_grid_system.md

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.