我们目前在运行一些自定义调整大小/布局功能的WordPress主题时存在性能问题。它们主要涉及粘性'随屏幕滚动的菜单,在屏幕滚动或调整窗口大小时调用。禁用它们可以立即解决问题但会使主题无法使用,因为当您调整大小或滚动时,菜单不再响应(正如预期的那样)
总之,他们可以花费超过3.5秒来完成并对用户体验产生重大影响。从谷歌浏览器中,深入研究最终将我们带到了这里:
更多信息:
可能的原因:
以下是我最好的猜测:
代码:
/*Menu Sticky*/
function MenuSticky() {
if($('#header_content').length) {
var $this = $('#header_content'),
size_point = $this.data().responsive,
window_w = window.innerWidth,
window_scroll = $(window).scrollTop(),
top_h = $('#header .header_top').innerHeight(),
this_h = $this.innerHeight(),
top_bar = 0;
if($('body').hasClass('admin-bar')) {
top_bar = parseInt($('html').css('marginTop').replace('px', ''));
}
if(size_point == undefined || size_point == '') {
size_point = 1199;
}
if( window_scroll > (top_h + top_bar) ) {
if(($this).hasClass('sticky-enable') == true) {
$this.addClass('header-sticky').css('top', top_bar + 'px');
// $('#header').append('<div class="fix-sticky" style="height: '+this_h+'px"></div>')
if(window_w <= size_point) {
$this.find('.header_menu').css('top', this_h + top_bar + 'px');
}
}
} else {
$this.removeClass('header-sticky').css('top', '');
// $('#header').find('.fix-sticky').remove();
if(window_w <= size_point) {
$this.find('.header_menu').css('top', (this_h + top_h + top_bar) + 'px');
}
}
if($this.hasClass('header-sticky')) {
if(window_w <= 600) {
$this.css('top', '');
$this.find('.header_menu').css('top', this_h + 'px');
} else {
$this.css('top', top_bar + 'px');
}
}
console.log('test');
}
}
/* Menu Resize */
function MenuResize() {
if ($('#header_content').length) {
var $this = $('#header_content'),
size_point = $this.data().responsive,
window_scroll = $(window).scrollTop(),
top_h = $('#header .header_top').innerHeight(),
this_h = $this.innerHeight(),
window_w = window.innerWidth,
top_bar = 0;
if($('body').hasClass('admin-bar')) {
top_bar = parseInt($('html').css('marginTop').replace('px', ''));
}
if (size_point == undefined || size_point == '') {
size_point = 1199;
}
if (window_w <= size_point) {
$this.addClass('header_mobile').removeClass('header_content');
} else {
$('.menu-bars').removeClass('active');
$this.removeClass('header_mobile').addClass('header_content');
$('#header_content .header_menu').css({
'top': ''
}).removeClass('active').find('ul').css('display', '');
}
if($this.hasClass('header-sticky')) {
$this.css('top', top_bar + 'px');
} else {
$this.css('top', '');
}
}
}
$(document).ready(function () {
$(window).load(function () {
$('#hillter-preloader').delay(1000).fadeOut('400', function () {
$(this).fadeOut()
});
$('body').append('<div class="awe-popup-overlay" id="awe-popup-overlay"></div><div class="awe-popup-wrap" id="awe-popup-wrap"><div class="awe-popup-content"></div><span class="awe-popup-close" id="awe-popup-close"></div>');
GalleryIsotope();
GuestBookMasonry();
AttractionMap();
ContactMap();
});
$(window).scroll(function (event) {
MenuSticky();
});
$(window).resize(function (event) {
ParallaxScroll();
PopupCenter();
MenuResize();
MenuSticky();
AttractionClick();
}).trigger('resize');
// Fix calendar in tab hillter.
$('.apb-product_tab-header a').on('shown.bs.tab', function() {
if ( $('#calendar').length ) {
$('#calendar, #calendar2').fullCalendar('render');
}
});
$('.awe-overlay').each(function() {
var el = $(this);
if ( el.parents('.vc_row').length != 0 ) {
el.parents('.vc_row').css({
'position': 'relative'
}) ;
el.css({
'position': 'absolute'
});
}
});
});
})
答案 0 :(得分:1)
也许是因为您在每个卷轴上选择了所有内容。
$(window).scroll(function (event) {
MenuSticky();
});
function MenuSticky() {
if($('#header_content').length) { //.....
if($('body').hasClass('admin-bar')) { //....
每次滚动,然后调整大小。你一次又一次地选择一堆元素。这对DOM很重要。 最好做点什么。
var $body = $('body'),
$header_content = $('#header_content');
$(window).scroll(function (event) {
MenuSticky();
});
function MenuSticky() {
if($header_content.length) { //.....
if($body.hasClass('admin-bar')) { //....
还有更多。但这是一般的想法。
答案 1 :(得分:0)