前端工程打开速度优化的循序渐进总结(3)

2019-04-23 15:24

textarea+datalazyload,相对于其他延迟加载异步渲染解决方案,最大好处,还是减少首屏绘制时的DOM节点总数。

参考资料:

?

玉伯(王保平,id@lifesinger)《淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式》(需翻墙)

? ?

BigRender所依赖的“数据延迟加载组件”datalazyload yiminghe《数据延迟加载组件》

script 延迟渲染原理

玉伯在《淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式》中提到, 与前面说的 textarea 存放 html 代码一样,你也可以用 script 来存放,目的都是减少 DOM 节点数。

浏览器在拿到 html 代码时,首次 Tokenization — Tree Construction 的速度就会大大加快。

某网是怎么实践的

在某网商品详情页上,HTML 文档底部遍布着这样的代码:

注意这些 script 的 type 是 text/x-template ,这是YUI类库自己定义的元素type。 你可以注意到,LABjs 也玩过这个小技巧,也是自己定义了一个元素 type“text/cache”, 由于浏览器不认识这种 type,就会主动忽略这个 HTML元素。

什么时候取出这些隐藏HTML代码呢?

那就要用到这些 script 的 id 了。 YUI的教程上是这么获得 HTML 代码:

template: Y.one('#todo-item-template').getHTML(), 某网的做法是:

比如id=search-path-markup的script, 也是用Y.one来拿:

然后用_6e.getContent()方法:

某网由于走的是 YUI3.0 体系,所以可以利用 script 存放html代码技巧,让商品详情页首屏更快地渲染出来。

我们的实践

在商品详情页上,我们把很多不需要首屏渲染的 html 代码放入了类似于