如何负责任地使用Modernizr
如果你喜欢的新功能可能无法在所有浏览器中可用播放,您一定已经尝试过的Modernizr 。 这个库可以测试你想要的功能是否可用。 随着Modernizr的增加了一些CSS类html
元素来表示,如果给定的功能是可用的,你可能会直接将其包含在head
标记尽快知道如果你想可用与否的功能。
这种方法是什么的Modernizr的开发者自己推荐的开头。 它的问题是,它不与负责任的态度,我们都应该有兼容。 这就是为什么保罗爱尔兰,项目的开发者之一,分享他关于思想的Modernizr应该如何被列入 。 这些想法的启发这篇文章。 在这里面我们会说说为什么我们应该采取负责任的态度,当我们要使用Modernizr的。 然后,我们会看到一些方式尽可能把这种方法付诸实践。
为什么关爱如何Modernizr的是包括
一个负责任的方法的有效性可以在一个问题恢复:你喜欢等待几秒钟访问的网页? 当然不是,你的观众讨厌这一点。 这就是为什么,如果他们等待很长一段时间待显示页面,他们不会回来了。 而且我敢肯定,你不希望出现这种情况。 我们都爱花哨的功能,但如果这些网站放慢太多。 好消息是,你仍然可以保持你的花哨的功能,即使是负责任的做法。 所不同的是,你不会加载它们以同样的方式。
让我们来讨论一个JavaScript文件的具体例子。 在很多情况下,我们等待页面执行脚本之前加载。 在这种情况下,包括脚本head
元素,因为脚本是在一个非常早期的阶段,加载,但它会等待页面运行之前加载也没用。 问题是,如果你的脚本包含在head
,浏览器将网页本身之前加载它。 这意味着,如果你的脚本是在规模大,直到脚本被加载,他们可以看到页面之前,你的访问者等待。
Modernizr的已开发,以确定是否可以使用最近的一些功能,如CSS转换或转换,在一个网页。 若不计某些特殊情况下,你不要为了需要这些功能来显示一些用户的屏幕上。 有迹象表明,必须包含在脚本head
标签,但大多没有。 Modernizr的也不例外。 在大多数情况下,你不需要把它列入了head
,你可以包括在年底前库右侧body
。
往前走之前,我想澄清一点:如果使用Modernizr的网页需要很长的时间来加载,包括这个库负责将不足以改善性能。 拥抱以负责任的态度意味着你必须要包含的JavaScript文件或其他潜在的巨大资源每次去想它。 如果您优化包含一个资源的话,你就没有必要看到一个很大的区别。 但是,如果你优化你如何包括所有的资源,差别是巨大的。
正如我提到的,有这样的情况,你必须包括Modernizr的在head
和其他地方是没有必要的。 这取决于你的项目,你的需求,这正是我接下来会覆盖。
定义你的需求
定义你需要的是你,包括Modernizr的前应该做的第一件事。 您可以测试了很多不同的东西与此库,但可能你的项目并不需要所有这些测试。 如果你访问这个页面 ,你会看到Modernizr的为我们提供了一种方式来建立我们自己的定制库的版本只需要测试。 生成的文件将在尺寸上比库的完整版本更小,所以它会花费较少的时间来下载。
通常情况下,你不提前知道哪些功能将需要一旦该项目公布。 生成每次添加一个功能时新版本是不是一个非常有吸引力的选择。 一种可能的解决方案与完整版开发项目,并只有当你发布你的项目生成自己的编译。 更好的方法是使用自动化的工具,像咕噜-Modernizr的检索您CSS和JavaScript文件找到所有你所使用的功能。 一旦完成,它会创建相应的定制Modernizr的构建。
通过使用咕噜-Modernizr的,而不是自己建立一个自定义版本,可以确保你不会有意外无用的功能。 例如,您可能需要在某一时刻的测试,但随后摆脱它,而从自定义Modernizr的构建删除测试。 请记住,当谈到决定你在你的项目中使用测试或功能是否真的有用或不咕噜,Modernizr的不会取代你。 因此,对于每一个可能的测试Modernizr的,你应该问自己,如果你真的需要一个测试或没有。
例如,库中有一个测试,以确定CSS属性是否text-shadow
是由浏览器的支持。 你可能会认为知道了这个信息,如果不支持它是为了不应用属性很有用。 但是,如果浏览器不支持CSS的一个功能,它不会崩溃或破坏网站的属性将被完全忽略。 因此,你应该如果是,如果没有显示阴影为您的网站的大思考。 也许你的影子在那里添加一个凉爽的效果,在这种情况下,它并没有真正如果游客不能看到它的问题。 增强的体验是谁更新他们的浏览器的用户,但网站可以在没有文字阴影肯定的生存。 结论是,如果测试该功能是否可用可能是无用的。
有些情况下,你想添加文字阴影,以提高文本的可读性。 如果是这样的话,你必须为不支持此功能的浏览器回退的行为,所以你需要进行测试。 但是,本次测试的需要也取决于你想用回退类型。 有在CSS一些后备不需要在所有的测试。 总之,考虑好后再决定你的需求。
类似的讨论可以为html5shiv制成,使您能够支持较老版本的Internet Explorer的HTML5元素。 Modernizr的可以包括为你,但你应该有吗? 如果您的网站不支持旧版本的Internet Explorer,确保您可以在这些浏览器样式的HTML5元素是无用的,因此你不需要html5shiv。 就个人而言,我认为这是不支持一些浏览器的错误。 这不是很难有一个工作网站,一些旧版本的Internet Explorer。 总之,你应该使用html5shiv,但不一定通过Modernizr的。 继负责任的态度,我们常常包括这SHIV在内嵌script
里面标签head
元素(详见下一部分)。
总之,一定要选择你真正需要的测试。 一些测试可以常常被遗忘和CSS回退并不总是需要Modernizr的工作。
某些功能可以等待
我们都学会了写字我们的脚本中分隔的文件,连击和它们最小化,并链接到的HTML代码中的精缩文件。 优点是多方面的,从可能性包括几页,可以用来允许在下列访问下载速度更快的浏览器缓存中的脚本。 该script
包含的文件可以放在HTML代码的任何地方,不仅在head
。 更有甚者,将其放置在HTML代码的底部有几个优点。 例如,文件不会先于其他元素的元素已经被解析下载。 即使你的脚本是很大的,它不会阻止用户浏览的网页。 然后,你的脚本就会被下载和增强的体验将开始。
在这里,我讨论了一个脚本,可以等待页面结束加载。 以同样的方式,最Modernizr的功能可以等待。 一旦一个基本可用我们创建一个增强的体验,可用。 后面负责的态度精神是用户希望看到你的网站的内容,他们希望看到它迅速。 内容周围良好的环境总是更好,但前提是信息是存在的。 这就是为什么我们加载脚本,以增强在页面底部的体验。
说,仍有一些Modernizr的功能,我们必须包括head
像html5shiv。 为了支持HTML5元素,较老版本的Internet Explorer需要这个SHIV看到第一个HTML5元素之前加载。 这意味着,你根本无法推迟装载,但你仍然可以提高你包括它的方式。 一个例子是,你可以包括html5shiv仅当浏览器条件注释需要它。 另一个例子是,可以直接包括(内联)本SHIV到HTML代码,而无需外部文件。 高速缓存将不可用,但SHIV并不大。 不使用外部文件的好处是,你避免HTTP请求。
要确定是否需要包括Modernizr的在head
,你需要考虑你想要什么,以及如何你第一次显示。 对于所有使用的测试,你必须考虑,如果,如果显示的页面后,测试执行的网页将被打破。 我们总是可以提供一个备用的行为,然后,一旦权类是在添加html
标签,这种行为将被覆盖在增强的体验。 这是至关重要的,你要了解,如果改变是一个大的或没有。 事实上,如果一旦页面加载某些块移动,你可能会失去你的用户。 如果变化大,也许你应该包括Modernizr的在head
。 但在此之前,看看是否有可能作出改变不太明显具有更好的备用行为。
关于什么效率?
我们想在页面底部加载Modernizr的改善加载时间。 然而,正如保罗爱尔兰说 , 很多的Modernizr的测试(尤其是CSS的)原因回流
。 借助这些测试,浏览器可能不得不重新计算一些风格。 在文档中继DOM树和样式的复杂性已经,这些重新计算可能需要更多或更少的时间。 如果库包含在head
,被处理身体的任何元素之前它会被执行。 如果body
是空的,计算更简单的浏览器,所以它需要较少的时间。
在这一点上,你必须采取一个重要的决定:可以在页面的底部,通过加载Modernizr的获得时间是完全输,因为执行时间? 不幸的是,这是很难提供一个统一的答案,这一切取决于你的具体情况。 继你的DOM树的复杂性,测试可快可不行,所以进行一些测试,看看它需要你的情况多长时间来执行Modernizr的。 请记住,时间可能会有所不同基于浏览器和你正在测试的版本很多。
谈到Modernizr的效率也是另一个场合再提起自定义生成你可以创建。 通过只选择您需要的测试,测试无用将不执行,如果它们影响DOM树,它的时候救了!
结论
由于这篇文章,你应该有一个更好的了解Modernizr的,你应该如何将其包含在您的网页。 我们已经讨论案件中,你可以在你的页面和其他的底部,它应该在包括它head
。 无论什么你的情况的解决方案,总是试图为这些提供了很好的经验,你的用户,谁拥有仅一个缓慢的互联网连接中包含的功能,你需要。
在本文中,我大约Modernizr的讨论,但这个库是不是唯一一个可以从一个负责任的方法中获益。 例如,考虑到jQuery是用来影响DOM树和脚本,当整个文件已准备好使用jQuery经常执行,为什么还包括它的head
标记?
负责开发不仅仅是一个时尚名词。 这是我们应该遵循尽可能的方法。 顾名思义,这是很不负责任的强制无用数据的下载。
From: https://www.sitepoint.com//how-to-use-modernizr-responsibly/