- From: John Hax <johnhax@gmail.com>
- Date: Thu, 8 May 2014 13:33:30 +0800
- To: Hawkeyes Wind <hawkeyes0.cn@gmail.com>
- Cc: 中文HTML5同樂會ML <public-html-ig-zh@w3.org>
Received on Thursday, 8 May 2014 05:33:58 UTC
我认为 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