async modernizr可以吗?

时间:2016-06-15 21:05:27

标签: javascript performance asynchronous modernizr

Google PageSpeed测试告诉我使用async

E.g。变化

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>

<script async src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>

现代化器还能正常工作吗?

2 个答案:

答案 0 :(得分:4)

需要将Modernizr置于using UnityEngine; using System.Collections; using CnControls; public class PlayerDash : MonoBehaviour { private Animator myAnim; private bool dash = false; private float dashTimer = 0; private float dashCd = 0.3f; public Collider2D[] Coll; void Start () { myAnim = gameObject.GetComponent<Animator> (); } void Update () { if (CnInputManager.GetButtonDown ("Dash") && !dash) { dash = true; dashTimer = dashCd; myAnim.SetBool ("Dash", dash); foreach (Collider2D coll in Coll) { if (coll.gameObject.tag == ("Enemy")) { coll.enabled = false; } } } if (dash) { if (dashTimer > 0) { dashTimer -= Time.deltaTime; } else { dash = false; myAnim.SetBool ("Dash", false); } } } } 中,原因有两个:

  1. html5shiv需要在那里为oldIE。
  2. 在使用modernizr-placement类时避免使用FOUC 特征条件样式
  3. 如果这些都不重要,您可以使用async属性和/或将其置于底部。

    请查看Modernizr

    中发布的此问题

答案 1 :(得分:1)

Modernizr 需要放在<head>

无论何时包含它,Modernizr都将最终正常工作。

如果您使现代化脚本异步,或者在一些重要的页面加载事件(DOMContentLoadedwindow.onload ...)之后将其包含在内。

  • 特定css规则的应用(feature中的no-featurehead类将被推迟
  • window.Modernizr的可用性也将被延迟,连同其对象属性(即Modernizr.propery

简而言之,

  • 如果您使用CSS加载Modernizr,async可能会发生的错误是不合适的样式(依赖于<html>类的那些)应用了一段时间
  • 你的JS代码可能发生的坏事是,如果你使用Modernizr全局对象,你可能不会直接使用它,因为它可能并且可能没有加载 - 你必须以某种方式等待它。所以,不再:

if(Modernizr.cssanimations){
    // your feature-dependant code
}

但是:

if(typeof Modernizr !== "undefined"){
//uitilize Modernizr global object here
} else {
// implement waiting for this object, let's say write short onModernizrLoad() function...
}