代码之家  ›  专栏  ›  技术社区  ›  Jim C

使用webcomponents loader而不是webcomponents lite时

  •  2
  • Jim C  · 技术社区  · 6 年前

    在我的index.html中,如果添加

    <script src="bower_components/webcomponentsjs/webcomponents-lite.js">
    or  
    <script src="bower_components/webcomponentsjs/webcomponents-loader.js">.
    

    https://www.npmjs.com/package/webcomponents-lite 我阅读了“webcomponents-lite.js包括除阴影DOM之外的所有多边形填充”和 https://www.npmjs.com/package/web-components-loader 我读到“将HTML文件及其所有依赖项复制到公共/输出目录中的名称空间位置”。我可以假设web组件加载器与webcomponents lite在默认情况下所做的一样,再加上一些其他加载功能吗?有什么理由用一个代替另一个吗?似乎webcomponents lite的加载过程更少,所以如果它符合我的需要,它会比webcomponents loader更好吗?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Cappittall    6 年前

    webcomponents-lite.js 将加载所有最低要求的多边形填充,即使您使用自然支持的浏览器,如 Chrome 但是 web-components-loader 有一些浏览器的检查。 performance reason .

    webcomponents-hi.html
    webcomponents-hi-ce.html
    webcomponents-hi-sd.html
    webcomponents-hi-sd-ce.html
    webcomponents-sd-ce.html
    

    以下检查适用:

    var polyfills = [];
    
     if (!('import' in document.createElement('link'))) {
        polyfills.push('hi');
      }
      if (!('attachShadow' in Element.prototype && 'getRootNode' in Element.prototype) ||
        (window.ShadyDOM && window.ShadyDOM.force)) {
        polyfills.push('sd');
      }
      if (!window.customElements || window.customElements.forcePolyfill) {
        polyfills.push('ce');
      }
      // NOTE: any browser that does not have template or ES6 features
      // must load the full suite (called `lite` for legacy reasons) of polyfills.
      if (!('content' in document.createElement('template')) || !window.Promise || !Array.from ||
        // Edge has broken fragment cloning which means you cannot clone template.content
        !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment)) {
        polyfills = ['lite'];
      }
    

    所以,使用 webcomponents-loader 而不是 webcomponents-lite