Javascript 稍后加载元素,以提高页面速度,但使其对SEO可见?
我正在使用billboard.js显示页面折叠下方的某个位置 添加billboard JS代码导致我的移动页面速度从90+下降到75-80 我的代码的结构如下:Javascript 稍后加载元素,以提高页面速度,但使其对SEO可见?,javascript,jquery,seo,pagespeed,billboard.js,Javascript,Jquery,Seo,Pagespeed,Billboard.js,我正在使用billboard.js显示页面折叠下方的某个位置 添加billboard JS代码导致我的移动页面速度从90+下降到75-80 我的代码的结构如下: <!-- chart area --> <div class="chart_holder"> <div id="chart_area"></div> </div> ... ... ... <script src="/js/d3.v5.min.js"><
<!-- chart area -->
<div class="chart_holder">
<div id="chart_area"></div>
</div>
...
...
...
<script src="/js/d3.v5.min.js"></script>
<script src="/js/billboard.min.js"></script>
<script defer src="/js/moment.min.js"></script>
<script type="text/javascript">function drawChart(t){$(".chart_holder").show(),.........);</script>
$.getScript('/js/d3.v5.min.js', function() {
$.getScript('/js/billboard.min.js', function() {
$.getScript('/js/moment.min.js', function() {
//the rest
});
});
});
...
...
...
函数绘图图(t){$(“.chart_holder”).show();
有没有办法让图表稍后加载,以解决谷歌页面速度问题,如:
- 减少JavaScript执行时间
- 保持请求计数低,传输大小小(额外的JS文件相当大)
- 最小化主线程工作(脚本评估)
$(document).ready(function() {
$.ajax( {
type:"GET", url:"chart/data.php", dataType:"json", data: {
item_id: 'item'
}
, success:function(t) {
void 0!==t.criteria?t.criteria[0].length<=2?$(".chart_holder").hide(): drawChart(t): $(".chart_holder").hide()
}
, error:function() {
console.log("Data extraction failed")
}
}
)
}
$(文档).ready(函数(){
$.ajax({
类型:“GET”,url:“chart/data.php”,数据类型:“json”,数据:{
项目id:“项目”
}
,成功:功能(t){
void 0!==t.criteria?t.criteria[0]。长度警告:这是基于这样的假设,即如果延迟1秒,谷歌页面速度计算将不计算脚本加载,我还没有验证自己。谷歌页面速度计算脚本将来可能会更改,请确保在有延迟和没有延迟的情况下进行测试。
注意:当然,如果整个页面的显示依赖于脚本,这可能会损害用户体验。对于OP的问题,这似乎是可以接受的
这里的技巧是在页面加载后使用1000毫秒的超时来加载脚本,完成后,显示图表:
$(document).ready(function() {
setTimeout(function() {
//you may need to change URL to a full URL here (with 'http://domain.etc')
$.getScript('/js/billboard.min.js', function() {
//you probably can keep this in your <script> tag, put it here if you have 'X is undefined' errors coming from calls to billboard's stuff
function drawChart(t){$(".chart_holder").show(),.........);
//your ajax call and the chart display
$.ajax( {
type:"GET", url:"chart/data.php", dataType:"json", data: {
item_id: 'item'
},
success:function(t) {
void 0!==t.criteria?t.criteria[0].length<=2?$(".chart_holder").hide(): drawChart(t): $(".chart_holder").hide()
},
error:function() {
console.log("Data extraction failed")
}
} );
});
}, 1000);
});
最小化http请求
billboard.js提供了d3+billboard.js的打包版本
所以,如果您需要处理文件计数,请处理打包版本
惰性渲染
从1.11.0
版本中,添加了延迟图表渲染的新功能。(内部将保留渲染过程)
var图表=bb.generate({
...,
呈现:{
懒惰:是的,
注意:错误
}
});
setTimeout(函数(){
//在要渲染的点调用“.flush()”
chart.flush();
}, 1000);
由于您没有说明如何调用drawChart,假设您在某处也有drawChart(“t”);
,猜测可能是使用setTimout(function(){drawChart(“t”)},10);
或者,作为jquery,$(function(){drawChart(“t”);}延迟调用
我已经编辑了我的代码。你能告诉我应该修改哪一行吗?延迟对SEO来说仍然可见吗?小心。任何关于SEO的问题都是离题的,会让你的问题结束。坚持提高速度,不要问SEO。你的新代码显示你的图表在页面加载后已经加载(在第二次请求获取数据后)。因此,请求在以后加载数据是没有意义的。@Rob good catch-表明人们从不阅读他们添加到问题中的标签!