SMOOSHGATE FAQ(2018)

2021-06-04 02:33:32

它'是Chrome Dev Summit 2020的包裹!立即观看Goo.gle/cds20-sessions的所有会话!

叫做array.prototype.flatten的JavaScriptLanguage功能的提议将转出Beweb-invatmable。在Firefox中运送该功能,夜间引起了最受欢迎的网站网站休息。鉴于有问题的代码是广泛的MootoolsLibrary的一部分,很可能更多的网站受到影响。 (尽管Mootoolsis在2018年不常用于新网站,但它曾经非常受欢迎Andis仍然存在于许多生产网站上。)

该提案作者笑话地建议将扁平化展开变形,以兼容性问题。这个笑话对每个人都不清楚,有些人开始错误地相信新名称已经被认为,事情迅速升级。

array.prototype.flat最初提议为array.prototype.flatten,递归到指定深度的递归达到尺寸的阵列,defaultsto 1。

//展平一个级别:const数组= [1,[2,[2,[3]]]; array.flat(); //→[1,2,[3]] //递归平整,直到阵列不包含更多嵌套阵列:array.flat(无穷大); //→[1,2,3]

注意:由于本文的出版以来,展平已被重命名为公寓以解决#smooshgate。上面的示例已经相应地更新,但请记住原始名称是平坦的。

相同的提案包括array.prototype.flatmap,它就像array.prototype.map,除了它将结果达到一个新数组。

[2,3,4] .flatmap((x)=> [x,x * 2]); //→[2,4,3,6,4,8]

Mootools的扁平实现与所提出的标准不同。但是,这不是问题!当浏览器运输array.ProTotype.flatten当然,Mootools覆盖了您的大量抄本。这可确保代码依赖于Mootools的行为,如拟是可用的原生平坦。所以,如此之好!

不幸的是,别的东西发生了。 Mootools副本拷贝到Elements.Prototype(其中元素是特定于AmoocoOools的API):

for-在“枚举”属性上迭代,这不包含array.prototype.sort等方法,但它确实包括array.prototype.foo =无论如何。但是 - 这是踢球者 - 如果你覆盖了不符合不符合的财产,例如, array.prototype.sort =无论如何,它仍然是不可识别的。

目前,Array.ProTotype.flatten = mootoolsflattenimplementation createSan枚举扁平属性,因此它后来复制到元素。但是,ifbrowsers发货扁平的本机版本,它变得不可识别,而不是复制到元素。任何代码依赖于Mootools的元素.Prototype.flatten现在被打破了。

虽然似乎更改原生阵列.prototype.flatten才能解决问题,但它可能会导致莫会代表性的问题。每个网站依赖于迭代迭代rowan数组(这是一个糟糕的做法,但它发生)然后突然突然扼杀扁平性的循环迭代。

这里更大的潜在问题正在修改内置对象。现在,Extending的原型通常被接受为现在的糟糕练习,因为它与其他图书馆和第三方代码没有很好地组成。不要修改您自己不拥有的!

在1996年,在CSS普遍存在之前,在“HTML5”之前很久就成了了余下,空间Jamwebsite就活着。今天,该网站仍然在22年前的方式工作。

那是怎么发生的?这些年来,有人维持该网站,每次浏览器供应商都会更新它的新功能吗?

事实证明,“不要打破网络”是用于HTML,CSS,JavaScript和Web中广泛使用的任何其他标准的数字普遍设计。如果运送新的浏览器功能会导致现有的网站已停止,对每个人都不糟糕:

网站所有者从一个完美的工作网站上才能在没有他们改变任何东西的情况下向Anon-uniforal的网站上;

浏览器供应商运送新功能丢失市场份额,由于用户开关浏览器在注意到“它在浏览器X中工作”;

一旦兼容性问题是已知的,其他浏览器供应商拒绝出货。该特征规范与现实不匹配(“除非是一个虚构的工作”),这对标准化过程不利。

当然,在回想下,Mootools做错了什么 - 但打破了网站没有惩罚他们,惩罚用户。这些用户不知道Mootool是什么。或者,我们可以找到另一种解决方案,用户可以继续使用Web。选择很容易。

这取决于。在极少数情况下,可以从网上移除不良功能。甚至只是umitture才能删除功能是一种非常棘手的努力,需要广泛的遥测来量化有多少网页将有异步的变化。但是,当特征充分不安全时,有害衰退是有害的,或者很少使用,这可以完成。

< applet>,< keygen>,showmodaldialog()是从Web平台成功删除的坏API的allexample。

修补Mootools,以便它不再延伸内置对象是一个Guididea。但是,它并不能解手。即使Mootools Wereto发布了一个修补的版本,所有现有的网站都将有兼容性问题的副本。

在一个完美的世界中,Mootools将释放一个补丁,每一个网站mootools都会在第二天似乎可以更新。问题解决了,对吧?!

不幸的是,这是不现实的。即使某人以某种方式识别完整的受影响的网站,也可以查找联系人信息foreach和它们中的每一个,成功地联系到所有网站所有者,并说服他们所有人来执行更新(这可能意味着重构TheIr的整个代码基础),整个过程需要数年,最佳。

请记住,这些网站中的许多网站都是旧的并且可能没有幻想。即使维护者仍然存在,他们可能是他们不是熟练的Web开发人员。由于网络兼容性问题,我们无法指望每个人都会逐渐改变8岁的网站。

#smooshgate导致一些人相信“tc39想要重命名扁平浮动”,但这是一个互相沟通的互动沟通。像重命名一个提案的决定没有轻,没有被剥夺一个人,并且绝对不是基于床单评论的一夜之间。

TC39在明确的StageProcess上运作,适用于特征预言.CMAcript提案,并在TC39会议期间讨论了对他们的任何重大变更(包括方法),并且需要在他们成为官方的委员会之前获得委员会的批准。在Array.Prototype.flatten的情况下,该提案已经经过了同意的几个故事,一直到3阶段,表示在Web浏览器中实现的功能。在实施期间提出额外的说明是常见的。在这种情况下,尝试运送它之后最重要的是:该功能在其当前状态删除网络。难以预测的问题,如这些问题是TC39过程不仅结束一旦浏览器发货了一个特征的一部分原因。

TC39经营共识,这意味着委员会必须就任何纽换达成一致。即使Smoosh是一个严肃的建议,似乎也可能对象反对它有利于更常见的名字,如紧凑或链条。

在TC39会议上讨论了从平坦到Smoosh(即使没有笑话)的重命名。因此,官方TC39姿势目前未知。没有单身人士可以代表TC39发言,直到下次会议达成共识。

TC39会议通常由具有高度多样化的人参加:有些人有多年的编程语言设计经验,其他人在浏览器或JavaScript引擎上工作,并且越来越多的ofantendants是表示JavaScript开发人员社区的。

RSS_FEED订阅我们的RSS或ATOM Feed,并在您最喜欢的饲料阅读器中获取最新更新!