这通常是我如何管理渐进增强同时保持体验清洁,但它有多安全?是否存在竞争条件,这不起作用?
想象一下简单的抽象场景,如果你有javascript支持,你想要以不同的方式显示...这通常是我最终会做的事情:
original
许多人可能会声称你应该使用一个框架并等待一个domready事件,并在那里进行更改..但是有一个显着的延迟,其中'test'元素已经在文档结束之前呈现并且css已经准备好了一个domready触发..因此导致明显的'原始'闪烁.
此代码是否容易出现竞争失败?或者我可以保证一个元素是可发现的并且如果它存在于脚本之前可以修改吗?
提前致谢.
你可以,但有一些问题围绕这样做.
首先,在IE中如果你试图操纵一个尚未关闭的节点(例如BODY在它的关闭标签之前应该在你的JS之下),那么你可能会遇到IE的"OPERATION ABORTED"错误,这将导致一个空白页面.操作节点包括附加节点,移动节点等.
在其他浏览器中,行为是未定义的,但它们的行为通常与您期望的一样.主要问题是随着页面的发展,页面可能以不同方式加载/解析/运行.这可能会导致某些脚本在浏览器定义已实际创建的引用元素并使其可用于DOM操作之前运行.
如果您试图提高用户感知性能(即快速).我强烈建议你避开这条路,并考虑减轻你的网页.您可以使用Yahoo的YSlow/Google的Page Performance Firebug来帮助您入门.
谷歌的页面速度
雅虎的YSlow