为什么Google Chrome会多次加载页面和/或资源?

3
我们的一个Web应用程序长期以来一直存在这个问题。谷歌浏览器会加载所有资源两次,并且出于某种原因在页面上运行所有脚本和其他内容两次。这不可能是因为刷新或重定向,因为开发者控制台并没有在中途清除/重置,如果有什么东西在刷新或重新加载页面,那么它将无限次地发生。这只发生在谷歌浏览器上,这使我们的Web应用程序加载和使用非常缓慢。我分享了一个解决此问题的答案(下面?),因为令人惊讶的是很难找到原因,而且该错误可能会降低性能数百个百分点。
2个回答

4

一开始我们以为是一些奇怪的缓存bug,在页面加载期间资源被某种方式过期,但我们找不到任何支持这个理论的东西。

然后在搜索了一番之后,我找到了这篇文章:https://codebuildplay.wordpress.com/2014/03/06/chrome-loads-page-twice-sitecore-dms-gets-faulty-usage-data/

他们发现,如果有元素具有src = ""或css规则,如url(''),它会导致Google Chrome认为src或url指的是网站根路径,从而导致页面及其所有资源在那里加载。

对于我们来说,这是一个“扩展版本”问题。我们有一个url =“#”的问题,这似乎与url =“”相同。因此,在url或src中使用#也会产生此错误。

这个问题的根源可以通过观察开发者控制台的网络视图并查找取消的index.php / index.html /类似资源来潜在地找到。请求此资源时的行号应告诉您哪里存在有缺陷的src属性。如果问题存在于css url规则中,则我认为这并不起作用。

我还写了一个小脚本,可以帮助确定具有错误url或src的元素:https://gist.github.com/ahvonenj/8e2eef80590e200dd297

希望这能帮助遇到这个非常恼人且性能破坏问题的人。


问题不在于浏览器,而是错误的标记。您不应该在任何地方使用空的 src 属性或只有 # 的属性。我不确定为什么您要在这里责怪浏览器,因为它已经做了它应该做的事情。 - Reinstate Monica Cellio
该引用的文章已经有18个月了,而Chrome浏览器没有展现出“问题”中描述的行为。 - Jaromanda X
@Archer 只有 Chrome 会这样做。我真的看不出来为什么空的 url 或 src 的默认行为应该是将其解释为网站根路径,因此尝试在那里重新加载整个网站,导致多次请求并使所有脚本运行多次。 - Swiffy
一个空的URL等同于打开当前文件夹的默认文档。这就是为什么Chrome 正确地 这样做的原因。 - Reinstate Monica Cellio
没错。我只是想确定你知道它已经执行了应该执行的操作,并且这是你的错误,以防其他人遇到同样的问题。他们需要理解为什么出错,以便将来避免犯同样的错误。 - Reinstate Monica Cellio
显示剩余2条评论

2

在我的情况下,问题通过将有效的图标链接到下面的 href 中解决,尽管我的 html 中还有其他一些空的 href / src(它仍在开发中)。
在 Chrome Android 版本56.0和桌面版上测试通过。

<link rel="icon" href="">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接