Làm thế nào một mô-đun có thể bị vô hiệu hóa dựa trên kích thước thiết bị hoặc khung nhìn trong Joomla 3 để tối ưu hóa hiệu suất cho các thiết bị di động?


14

Tôi là người đề xuất Thiết kế Web đáp ứng kết hợp với Thiết kế web thích ứng (nghĩa là - một thiết kế điều chỉnh hiển thị cho tất cả các thiết bị và cung cấp nội dung dựa trên kích thước cổng xem) trái ngược với thiết kế trang web 'di động' riêng biệt.

Có một số nhược điểm, ví dụ, trên màn hình lớn tôi muốn bao gồm một số mô-đun sẽ bị ẩn cho kích thước khung nhìn nhỏ hơn. Tuy nhiên, trong trường hợp mô-đun bị ẩn dựa trên kích thước khung nhìn, việc tải và thực thi mô-đun đó gây ra hiệu ứng không cần thiết khi biết rằng mô-đun cụ thể sẽ không bao giờ được hiển thị ở kích thước khung nhìn nhỏ hơn.

Làm cách nào tôi có thể sử dụng kích thước khung nhìn để vô hiệu hóa một mô-đun (tức là ngăn không cho nó thực thi) để tăng tốc hiệu suất?

Câu trả lời:


15

Trình quản lý mô-đun nâng cao ( http://www.nonumber.nl/extensions/adv cânmodulemanager ) cho phép bạn chỉ định các mô-đun dựa trên TYPE của trình duyệt. Vì vậy, bạn có thể chọn thiết bị di động, hoặc máy tính để bàn hoặc thiết bị cụ thể. Tuy nhiên, nó không cho phép bạn chọn theo kích thước, vì vậy nó chỉ hữu ích ở một mức độ.

Nó cũng có thể có thể với sự kết hợp của php và javascript. Tôi sẽ gửi câu hỏi này cho bạn thân của tôi, anh ta có thể có một ý tưởng.


Thật là một ý tưởng hay, tôi chưa bao giờ nghĩ đến việc sử dụng AMM theo cách này.
jackJoe

Peter đưa rất nhiều chức năng tuyệt vời vào AMM, đó là điều bắt buộc phải có trong quan điểm của tôi.
Faye

Tôi đồng ý với điều này. Nếu tôi bị mắc kẹt với một chủ đề không được tích hợp sẵn (ví dụ: các chủ đề warp 7 đã được tích hợp sẵn) thì tôi sẽ sử dụng AMM.
Brian Peat

@BrianPeat - bạn có thể cung cấp thêm chi tiết về cách thức hoạt động của WARP7 không?
NivF007

3
Warp 7 có một bảng điều khiển trong quản trị viên mẫu cho phép bạn nhấp vào các nút cho máy tính để bàn / máy tính bảng / điện thoại và nó bật và tắt các mô-đun dựa trên các cài đặt đó. Chủ đề tên lửa làm một cái gì đó tương tự với các lớp đặc biệt. Những gì tôi không biết là nếu các mô-đun được giảm tải, hoặc nếu mọi thứ được tải và sau đó chỉ bị ẩn. Tôi nghi ngờ đó là cái thứ hai vì bạn có thể thấy nó thay đổi khi bạn thay đổi kích thước trình duyệt. Nếu bạn giảm tải hoàn toàn mọi thứ dựa trên kích thước, nó sẽ làm gì nếu bạn chủ động thay đổi kích thước cửa sổ?
Brian Peat

10

Tôi không nghĩ bạn nên vô hiệu hóa các mô-đun như thế và vẫn gọi nó là thiết kế đáp ứng. Một phần của điểm nhạy cảm là nó sẽ đáp ứng với những thay đổi của chế độ xem và không chỉ là nó in ra một bố cục khác cho các kích thước màn hình khác nhau.

Tùy thuộc vào kích thước màn hình mẫu, có thể một máy tính bảng ở chế độ dọc sẽ khiến mô-đun không tải nhưng sau đó cùng một máy tính bảng đó có thể cần nội dung đó một lần ở chế độ ngang.


3
Trong khi đó là sự thật, nó không thực sự hiệu quả trong thực tế. Có nghĩa là người dùng iPhone sẽ không bao giờ có độ phân giải màn hình 1440x900, thậm chí họ cũng không có khả năng thay đổi kích thước khung nhìn của mình. Thiết kế đáp ứng trong đó mọi người giống như "ooh xem mọi thứ thay đổi như thế nào khi tôi thay đổi kích thước cửa sổ trình duyệt của mình" thực sự chỉ hiệu quả đối với các nhà thiết kế muốn thể hiện. Trong thực tế, việc tiếp cận tắt các mô-đun và thay đổi đầu ra cho các kích thước màn hình khác nhau là hoàn toàn tốt.
Don Gilbert

3
@Don Xin lỗi, đơn giản là nó không đáp ứng thiết kế và có rất nhiều người trên máy tính để bàn tận dụng các tính năng thay đổi kích thước khi làm việc trong windows. Thiết kế đáp ứng đáp ứng với thay đổi khung nhìn không phải là từ một thiết bị nhất định hay không.
Spunkie

2
Tôi đồng ý. Nhưng tôi không đồng ý với các mục tiêu của "thiết kế đáp ứng". Như tôi đã nói, nó được các nhà thiết kế mơ ước thể hiện. Họ quên mất thực tế là iPhone sẽ không bao giờ có độ phân giải lớn. tl; dr - Thiết kế đáp ứng không quan trọng trên thiết bị di động. Tôi muốn tiết kiệm băng thông mạng hơn là "thiết kế đáp ứng thuần túy".
Don Gilbert

2
@DonGilbert và tại Spunkie - IMO - cả hai bạn đều đúng. Định nghĩa 'nghiêm ngặt' về Thiết kế Web đáp ứng không bao gồm sửa đổi 'nội dung' - Tôi sẽ chỉnh sửa câu hỏi để bao gồm RWD / AWD - Thiết kế web đáp ứng và phân phối web thích ứng en.wikipedia.org/wiki/Responsive_web_design
NivF007

8

Đây là một lớp JS tôi đã tạo cách đây một thời gian có thể sử dụng javascript để phát hiện các khung nhìn, nó chưa bao giờ được đưa vào thử nghiệm nghiêm ngặt nhưng hoạt động.

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

Về cơ bản bạn sử dụng nó như thế này

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

Breakpoint có các tham số tối thiểu / tối đa cho chiều rộng, sau đó là một chuỗi được nối để nhập và rời đi, với một cuộc gọi lại để chạy một số mã JS.

Tôi không thể đi chi tiết về cách thức hoạt động của nó, vì tôi đã làm nó rất lâu rồi nhưng bạn có thể sử dụng nó miễn phí nếu nó có ích. Điều này có thể được sử dụng để tải các mô-đun thông qua ajax dựa trên chế độ xem. Tôi tin rằng com_ajax của j Joomla có thể được sử dụng với điều này để tạo ra một số tính năng thực sự thú vị.


1
Điều này trông giống như một phần chính của câu đố và có những khả năng thú vị - cảm ơn bạn đã trả lời và đặc biệt là đã đăng mã.
NivF007

1
Câu trả lời hàng đầu là đồng nghiệp của tôi, đây ít nhiều là ý tưởng của tôi: P
Jordan Ramstad

3

Một giải pháp khác:

Bạn có thể sử dụng phát hiện Thiết bị phía Máy chủ như thế này: http://mobiledetect.net/ tại đây Plugin Joomla http://www.yagendoo.com/en/blog/free-mobile-detection-plugin-for-j Joomla.html và sau đó mở rộng j Joomla / samples / yourtemplate / html / Module.php với kiểu mod_chrom của riêng bạn. Sau đó, bạn có thể viết bao nhiêu php nếu các câu lệnh bạn thích cho bất kỳ thiết bị hoặc độ phân giải nào.


3

Nếu bạn muốn tăng tốc hiệu suất thì đừng tải các mô-đun không cần thiết. Nếu nó không cần thiết trên màn hình nhỏ thì nó cũng không cần thiết trên màn hình lớn hơn.

Những người có màn hình thiết bị lớn hơn cũng muốn có một trang web nhanh mà không tải các hành trình không cần thiết. Bạn đang đưa ra giả định sai lầm rằng màn hình lớn hơn có sẵn nhiều băng thông hơn. Họ không.

Hãy là một nhà thiết kế giỏi và cung cấp cho tất cả người dùng của bạn trải nghiệm trang web được tối ưu hóa, bất kể kích thước màn hình của họ.


2

Tôi sẽ đề nghị rằng trình duyệt đánh hơi là cách sai để đi đến đây. Nếu bạn thực sự muốn chỉ tải các mô-đun dựa trên chiều rộng màn hình, bạn cần chạy một số javascript, sau đó gọi mô-đun bằng AJAX (com_ajax). Hãy nhớ rằng có thể có một khoản tiền về mặt tối ưu hóa công cụ tìm kiếm cho nội dung được tải bởi AJAX.


2

Tôi thường sử dụng css @media để thực hiện điều này. Làm cho nó đơn giản để ẩn mọi thứ tùy thuộc vào kích thước màn hình và phân tích chúng theo thời gian khi một máy tính bảng phong cảnh đủ rộng để hiển thị và chiều rộng chân dung thì không. Đây là một ví dụ:

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

Tôi thường sử dụng điều này để ẩn toàn bộ vị trí mô-đun vì vậy tôi dựa vào bộ chọn css của mình trên trình bao bọc của vị trí đó (hoặc vị trí trong một số mẫu).


Cảm ơn câu trả lời của bạn. Vấn đề với cách tiếp cận truy vấn phương tiện CSS là bạn vẫn đang thực hiện một mô-đun (mặc dù bạn chọn không hiển thị nó). Giải pháp tôi đang tìm sẽ không thực thi mô-đun trừ khi nó được hiển thị.
NivF007

Như những người khác đã nói, đó có thể không phải là ý tưởng tốt nhất cho những người thay đổi kích thước khung nhìn sau khi tải trang cũng như phong cảnh so với máy tính bảng dọc. Vài phần trăm giây, máy chủ sẽ phân tích mô-đun này sẽ không quan trọng lắm và vì nó được hiển thị: không có thiết bị nào trên các thiết bị nhỏ hơn mà bạn không hiển thị nên cũng không mất thời gian. - Nhưng nếu bạn thực sự muốn không tải nó, thì Advanced Module Manager có lẽ là cách để đi như được liên kết trong một câu trả lời khác.
tìm đường

1

Bạn có thể tải nó theo yêu cầu bằng cách sử dụng một số javascript gọi com_ajax và chỉ trả về các mô-đun cho kích thước hiện tại.


0

Bạn có thể sử dụng hậu tố mô-đun kết hợp với truy vấn phương tiện. Nhiều khung mẫu đã được tích hợp sẵn trong đó bạn có thể thêm một lớp "điện thoại ẩn" để không hiển thị chúng trên thiết bị di động. Họ gọi chúng là các lớp Trình trợ giúp CSS:

GANTRY: http://www.gantry-framework.org/documentation/j Joomla / advified / resource_grid_system.md

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.