web - 在 chrome 上滚动时网站运行缓慢
web - website is laggy when scrolling on chrome
我的网站 (https://whatifhq.com) 加载正常,而且速度非常快。但是,当我尝试向下滚动时,它开始变得迟钝并且不再流畅。我只在 Chrome 遇到过这个问题。 (在 chrome、edge 上测试,即)。我正在为我的网站使用 Chrome V 70,WordPress,以及 PHP 7.1
我阅读了一些其他 SO 帖子,最推荐删除一些脚本、图像、动画。因此,我删除了 animate.css、Adsense 和其他一些图片。但是,它仍然无法正常工作。
此问题仅发生在桌面上。我网站的移动版本在同一台计算机上运行良好。 (手机端和桌面端内容基本一致。)
可能导致问题的一件事是我的 AJAX 无限滚动脚本。它检查 window 在什么位置,然后决定是否加载新内容。但是,此功能也在我的移动网站上,运行良好。此外,滚动问题也出现在没有 AJAX 的页面上,例如 https://whatifhq.com/question/where-can-one-find-some-good-resume-cv-templates/
我也进行了一些速度测试并获得了很好的分数。 85%+ Pagespeed,全部 'A' WebPageTest。
有人可以帮忙吗?
编辑:不是Ajax。我删除了脚本,但页面仍然卡顿。
这是我的 AJAX 脚本
$(document).ready(function(){
InfinitiScroll = Backbone.View.extend({
el: 'body',
initialize : function(){
var view = this;
$(window).scroll(function(){
if($(window).scrollTop() >= ($(document).height() - $(window).height()) - 1000 && $("#post_loading").attr('data-fetch') == 1 ){
view.ajaxData(query_default);
}
});
var loading = $('body').find('#post_loading'),
fetch = $(loading).data('fetch'),
type = $(loading).data('type'),
term = $(loading).data('term'),
taxonomy = $(loading).data('taxonomy'),
posts_per_page = $(loading).data('current-page'),
sort = $(loading).data('sort'),
keyword = $(loading).data('keyword'),
query_default = {
action : 'et_post_sync',
method : 'scroll',
data : {
posts_per_page : posts_per_page,
type : type,
term : term,
taxonomy : taxonomy,
sort : sort,
page : 1,
keyword : keyword
}
};
setInterval(function(){
if($('ul#main_questions_list li.question-item').length < 6 && $("#post_loading").attr('data-fetch') == 1 ){
view.ajaxData(query_default);
}
}, 3000);
},
ajaxData : function(query_default){
var loading = $('body').find('#post_loading');
query_default['data']['page'] += 1;
$.ajax({
url : ae_globals.ajaxURL,
type : 'post',
data : query_default,
beforeSend : function(){
$(loading).removeClass('hide');
$(loading).attr('data-fetch',0);
},
error : function(){
$(loading).addClass('hide');
$(loading).attr('data-fetch',1);
},
success : function (response){
setTimeout(function(){
if(response.success){
var container = $('body').find('#main_questions_list'),
questions = response.data.questions;
for (key in questions){
$(container).append(questions[key]);
}
$(loading).addClass('hide');
$(loading).attr('data-fetch',1);
}else{
$(loading).addClass('hide');
}
},1500);
}
});
}
});
我在滚动您的非 ajax 页面时做了一些性能分析:https://prnt.sc/lh0s2d. Note how fps drops to ~10 while scrolling, and 95% of the time is consumed by requestAnimationFrame()
calls. Looks like it all boils down to this function that gets called on each frame: https://prnt.sc/lh0s5f。我怀疑 document.querySelectorAll()
和 setAttribute()
非常昂贵,并且在每一帧上都这样调用它们是导致延迟的原因。
我的网站 (https://whatifhq.com) 加载正常,而且速度非常快。但是,当我尝试向下滚动时,它开始变得迟钝并且不再流畅。我只在 Chrome 遇到过这个问题。 (在 chrome、edge 上测试,即)。我正在为我的网站使用 Chrome V 70,WordPress,以及 PHP 7.1
我阅读了一些其他 SO 帖子,最推荐删除一些脚本、图像、动画。因此,我删除了 animate.css、Adsense 和其他一些图片。但是,它仍然无法正常工作。
此问题仅发生在桌面上。我网站的移动版本在同一台计算机上运行良好。 (手机端和桌面端内容基本一致。)
可能导致问题的一件事是我的 AJAX 无限滚动脚本。它检查 window 在什么位置,然后决定是否加载新内容。但是,此功能也在我的移动网站上,运行良好。此外,滚动问题也出现在没有 AJAX 的页面上,例如 https://whatifhq.com/question/where-can-one-find-some-good-resume-cv-templates/
我也进行了一些速度测试并获得了很好的分数。 85%+ Pagespeed,全部 'A' WebPageTest。
有人可以帮忙吗?
编辑:不是Ajax。我删除了脚本,但页面仍然卡顿。
这是我的 AJAX 脚本
$(document).ready(function(){
InfinitiScroll = Backbone.View.extend({
el: 'body',
initialize : function(){
var view = this;
$(window).scroll(function(){
if($(window).scrollTop() >= ($(document).height() - $(window).height()) - 1000 && $("#post_loading").attr('data-fetch') == 1 ){
view.ajaxData(query_default);
}
});
var loading = $('body').find('#post_loading'),
fetch = $(loading).data('fetch'),
type = $(loading).data('type'),
term = $(loading).data('term'),
taxonomy = $(loading).data('taxonomy'),
posts_per_page = $(loading).data('current-page'),
sort = $(loading).data('sort'),
keyword = $(loading).data('keyword'),
query_default = {
action : 'et_post_sync',
method : 'scroll',
data : {
posts_per_page : posts_per_page,
type : type,
term : term,
taxonomy : taxonomy,
sort : sort,
page : 1,
keyword : keyword
}
};
setInterval(function(){
if($('ul#main_questions_list li.question-item').length < 6 && $("#post_loading").attr('data-fetch') == 1 ){
view.ajaxData(query_default);
}
}, 3000);
},
ajaxData : function(query_default){
var loading = $('body').find('#post_loading');
query_default['data']['page'] += 1;
$.ajax({
url : ae_globals.ajaxURL,
type : 'post',
data : query_default,
beforeSend : function(){
$(loading).removeClass('hide');
$(loading).attr('data-fetch',0);
},
error : function(){
$(loading).addClass('hide');
$(loading).attr('data-fetch',1);
},
success : function (response){
setTimeout(function(){
if(response.success){
var container = $('body').find('#main_questions_list'),
questions = response.data.questions;
for (key in questions){
$(container).append(questions[key]);
}
$(loading).addClass('hide');
$(loading).attr('data-fetch',1);
}else{
$(loading).addClass('hide');
}
},1500);
}
});
}
});
我在滚动您的非 ajax 页面时做了一些性能分析:https://prnt.sc/lh0s2d. Note how fps drops to ~10 while scrolling, and 95% of the time is consumed by requestAnimationFrame()
calls. Looks like it all boils down to this function that gets called on each frame: https://prnt.sc/lh0s5f。我怀疑 document.querySelectorAll()
和 setAttribute()
非常昂贵,并且在每一帧上都这样调用它们是导致延迟的原因。