iOS 12 的 safari 有哪些变化吗?今天发现了一个 javascript 的问题

2018-09-18 21:09:38 +08:00
 34C

正在开发的程序中,有一段代码大概如下:

window.addEventListener("load", function ()
{
    var arr = [1, 2, 3, 4];
    arr.reverse();
});

今天升级了 iOS 12 之后,无意中发现数组的顺序有问题。

第一次加载是正常的, 页面刷新会颠倒, 再刷新又正常了, 再刷新又颠倒了, 以此类推…

而如果是关闭了页面、重新打开,则不会有问题。

在 PC Chrome / Android / iOS 11 Safari 中都没出现这个问题,就好像这个变量,被 safari “缓存” 了一样,即使刷新页面也会被保留、继承之前的状态。

这是 iOS 12 Safari 的 bug 还是 feature 啊?有没有哪里可以看到关于 safari 底层机制的改变呢?

9737 次点击
所在节点    问与答
31 条回复
JayZangwill
2018-09-19 16:49:29 +08:00
这个问题在 qq 浏览器上也能复现
34C
2018-09-19 16:57:12 +08:00
@JayZangwill ios 上所有浏览器都是基于 safari 内核
mrcode
2018-09-19 19:36:47 +08:00
@34C @34D 两兄弟很溜
mrcode
2018-09-19 19:37:30 +08:00
#22 @34C 包括 Chrome、Firefox 这些吗?
mrcode
2018-09-19 19:43:36 +08:00
这个问题是因为什么导致的呢?
34C
2018-09-19 19:46:24 +08:00
@mrcode

firefox 没装过,但 ios 上的 chrome 就是 safari 套了个皮(仅仅指 ios 上的),什么微信啊 QQ 啊 内置的浏览器都一样

原因见楼上 hax 的分析咯
hax
2018-09-19 21:11:59 +08:00
@oh 根据源码来看,基本上就是我说的问题(除了 reverse/slice 颠倒的瞎猜之外)。至于说刷新,其实是无关的。估计应该是 safari 在刷新本页的时候,一看啥都没变,就不销毁之前的资源继续用了。实际上不是每次刷新都复用的,有概率全清掉的。
hax
2018-09-19 21:15:04 +08:00
bug 来源: https://github.com/WebKit/webkit/commit/c02f5d334455d7fe8b16fe642d1f5900c5cde6e9
修复: https://bugs.webkit.org/show_bug.cgi?id=188794

是的,上个月 webkit 已经修掉了( 6 月上的 bug 代码),但是 apple 不知道为啥这次发版没把 patch 打上。
hax
2018-09-19 21:17:58 +08:00
至于为什么要用 CoW,当然就是为了性能啰。在 https://bugs.webkit.org/show_bug.cgi?id=185003 这里有提到在某些性能测试中有显著提升。
但是 CoW 很复杂,一下改了好多代码,所以出 bug 了。其实当时作者也写了很多 testcase,无奈还是漏掉了 reverse()。
mrcode
2018-09-19 23:00:38 +08:00
大胆猜测一下 hax 就是那个实习生 (逃
spiderGgl
2018-09-25 23:23:07 +08:00
兄弟,你吃屎了,这样害我

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX