我应该如何解决冗余在渐进增强/优雅降级中的作用?

时间:2011-10-04 23:05:03

标签: javascript jquery html html5 progressive-enhancement

当我在placeholderinputs中回答有关textareas文字最佳做法的其他问题时,就出现了这个问题。

使用HTML5 placeholder肯定是最佳选择,但此时似乎还需要为旧浏览器添加降级解决方案(使用javascript)。

JsFiddle:http://jsfiddle.net/leifparker/DvqYU/16/

问题是:既然他们都完成了几乎完全相同的事情,为什么还要包括两者呢?为什么不利用仅限javascript的解决方案,放弃HTML5实现,直到(接近)普遍接受为止?

当然,通过这个具体示例,添加HTML5 placeholder属性和hasPlaceholderSupport()函数是行(4)的相当少的添加,但由于需要降级支持,是否有任何理由打扰渐进式冗余?

我确信双方都有理由,我很想听到它。

提前致谢!

2 个答案:

答案 0 :(得分:3)

有理由打扰。随着时间的推移,预计所有浏览器都将支持占位符属性。现在,just a few browsers do not support it最重要的是,IE 9和劣等,以及Android浏览器)。因此,最终,您的占位符后备代码将是不必要的。如果您使用所有浏览器的脚本发布网站,几年后就完全没必要了。

相反,通过使用特征检测仅在必要时回退到JavaScript解决方案:

  1. 您不必在已支持占位符属性的浏览器中不必要地运行一些JavaScript代码。
  2. 您只能在必要时加载回退脚本,节省几个字节。
  3. 这就是Modernizr和yepnope.js(包含在Modernizr中)这样的库已经可以实现的。我建议使用Modernizr并将占位符polyfill解压缩到placeholder-polyfill.js文件,因此您的代码可能如下所示:

    Modernizr.load({
      test: Modernizr.placeholder,
      nope: 'placeholder-polyfill.js'
    });
    

    如果你只是想要yepnope.js并运行你自己的特征检测功能:

    yepnope({
      test: hasPlaceholderSupport(),
      nope: 'placeholder-polyfill.js'
    });
    

    这样,您可以节省资源负载并提高大多数浏览器的性能。将来,所有浏览器都会通过测试,从而提高性能。然后,你可以简单地删除yepnope.js / Modernizr调用。

    对我而言,它更像是一种关于面向未来的代码的思维方式,同时已经充分利用了现代浏览器的功能。

答案 1 :(得分:0)

我看到的增益是你只能在必要时加载jsFiddle。这节省了加载,解析和执行额外代码所需的时间。您的页面加载速度更快,本机html5支持可能比在JavaScript中模拟它更快。