date | tags |
---|---|
2020-06-07 |
javascript |
polyfill了就一定靠谱吗?现在把工程中的js代码分为三个部分:
- polyfill
- 第三方lib
- 业务代码
一般来说问题就容易发生在第三方库上面,导致polyfill不靠谱。它可能会无差别篡改基础原型方法。
基础原型方法,指的是最基础的那些方法,比如push,可能作为底层方法提供给第三方库,一旦被篡改则非常危险。
而polyfill的位置无论是在前还是在后都会被其影响,并且js的动态性意味着整个运行时中,在某些调用某个角落的代码,都可能篡改各种原型方法,也就是说极端情况下只依赖polyfill一定是束手无策的。
那应该怎么办?开个脑洞,测试阶段引入实时test。在测试阶段的各种测试case中都加入对基础原型方法单元测试的运行,方式可能是用事件绑定+monkey patch,整个测试的运行时没有问题,去掉测试代码再上线。
总结一下,polyfill只保证能力被注入,不保证能力后续被篡改。当然大部分第三方库不会有问题,我也没遇到过类似case。