Re: 答复: 首屏渲染优化提案反馈(原:Re: 答复: 中文兴趣小组5月5日电话会议)

我认为 will-change 是一个很好的例子。本份提案的需求未必能归入 will-change 中,但是它和 will-change
有不少相似处。比如它们的目的都是“优化”,也就是“非功能性需求”。因此本份提案可参考 will-change 的许多性质。如:
1. 即使浏览器不支持它,或者对应的样式声明没有加载,也不会影响最终的呈现。
2. 它是提供给 user agent 的 hint,表明网页 author 所预期的行为。
3. 浏览器可自行决定如何使用此 hint 信息。

把这些性质对应到本提案的需求上——比如对于3,浏览器当然可以忽略首屏优化提示,比如在该页面相关资源完全在本地缓存内。


2014-05-08 10:31 GMT+08:00 Hawkeyes Wind <hawkeyes0.cn@gmail.com>:

>  hi all,
>     插一句,不论是否首屏渲染,用户代理渲染至少需要html和css,首屏渲染的情况下,如果css因为网速无法及时加载的话,依旧会是白屏。
>
> 我建议还是以meta的方式来声明首屏渲染。如果以css方式声明,则不清楚设备的屏幕面积,也就不好确定有多少元素需要声明。而且如果css文件没有及
> 时加载完毕,这种方式等同于没有声明。
>
    meta方式的话,由用户代理决定渲染哪些元素,如果css没有加载完毕就按默认样式渲染。
>     另外,很多开发者习惯把js代码写在body的结束标记前,那么如果首屏存在脚本交互行为怎么办?
>

你说的这些一样适用@viewport。但是viewport的标准化还是在CSS中,而不是meta标签。

注意,在body元素没有开始前,浏览器不会做任何rendering,因为这时body还啥都没有,没啥好render的。而在head内的外部样式表没加载完(或timeout)前,浏览器也必然不能开始render,因为样式表(以及未设定过async/defer的脚本)是阻塞的。所以这个白屏跟你用不用meta没有关系,除非你建议改变现在浏览器中样式表加载阻塞rendering这一行为。但这种改变不太有用,因为在没有外部样式表时,绝大部分网页其实是不可用的,故提早呈现也没有意义。如果要改变,可单独提议给外部样式表也加上async/defer特性,但如前所说,实用性堪忧。另一方面,如果author担忧css无法加载,可以用style元素而不是外部样式表。

BTW,其实一些浏览器的早期 meta name=viewport 实现也不是即时发生的(有可能是在dom
ready后才发生的),当你刷新页面时,会看到明显的 relayout。

综上,meta 方式并不比 css 方式有任何特别优点。

Received on Thursday, 8 May 2014 05:33:58 UTC