GitHub:我们为什么会弃用jQuery?(2)

我们根据网站的分析结果尽快放弃对旧版本Internet Explorer的支持。每当某个IE版本的使用率低于某个阈值时,我们就会停止向它提供JavaScript支持,并专注支持更现代的浏览器。尽早放弃对IE 8和IE 9的支持对于我们来说意味着可以采用很多原生的浏览器功能,否则的话有些功能很难通过polyfill来实现。

作为GitHub.com前端功能开发新方法的一部分,我们专注于尽可能多地使用常规HTML,并且逐步添加JavaScript行为作为渐进式增强。因此,那些使用JS增强的Web表单和其他UI元素通常也可以在禁用JavaScript的浏览器上正常运行。在某些情况下,我们可以完全删除某些遗留的代码,而不需要使用JS重写它们。

经过多年的努力,我们逐渐减少对jQuery的依赖,直到没有一行代码引用它为止。

自定义元素

近年来一直在炒作一项新技术,即自定义元素——浏览器原生的组件库,这意味着用户无需下载、解析和编译额外的字节。

从2014年开始,我们已经基于v0规范创建了一些自定义元素。然而,由于标准仍然在不断变化,我们并没有投入太多精力。直到2017年,Web Components v1规范发布,并且Chrome和Safari实现了这一规范,我们才开始更广泛地采用自定义元素。

在移除jQuery期间,我们也在寻找用于提取自定义元素的模式。例如,我们将用于显示模态对话框的facebox转换为<details-dialog>元素(https://github.com/github/details-dialog-element)。

我们的渐进式增强理念也延伸到了自定义元素上。这意味着我们将尽可能多地保留标记内容,然后再标记上添加行为。例如,<local-time>默认显示原始时间戳,它被升级成可以将时间转换为本地时区,而对于<details-dialog>,当它被嵌在<details>元素中时,可以在不使用JavaScript的情况下具备交互性,它被升级成具有辅助增强功能。

以下是实现<local-time>自定义元素的示例:

// local-time根据用户的当前时区显示时间。 // // 例如: // <local-time datetime="2018-09-06T08:22:49Z">Sep 6, 2018</local-time> // class LocalTimeElement extends HTMLElement { static get observedAttributes() { return ['datetime'] } attributeChangedCallback(attrName, oldValue, newValue) { if (attrName === 'datetime') { const date = new Date(newValue) this.textContent = date.toLocaleString() } } } if (!window.customElements.get('local-time')) { window.LocalTimeElement = LocalTimeElement window.customElements.define('local-time', LocalTimeElement) }

我们很期待Web组件的Shadow DOM。Shadow DOM的强大功能为Web带来了很多可能性,但也让polyfill变得更加困难。因为使用polyfill会导致性能损失,因此在生产环境中使用它们是不可行的。

英文原文:https://githubengineering.com/removing-jquery-from-github-frontend/

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/725b2dcd9423162ea80afbb104b43e3b.html