【问题标题】:Content disappears for fraction of a second on offline web app load内容在离线 Web 应用加载时消失几分之一秒
【发布时间】:2011-11-24 00:56:27
【问题描述】:

我在 iOS 4.3 到 5.0 上观察到了这一点。当您创建一个甚至是简单的离线 Web 应用程序时,意味着一个 HTML 文件 + 少量资产,例如 CSS 和 JS(都存在于缓存清单中),它可以离线工作(我在飞行模式下测试过)——但是,当您将这样的应用添加到您的主屏幕并以全屏模式打开时,它首先显示初始内容,然后一切消失(页面变白)半秒或更长时间,然后内容重新出现再次。

您可以通过将著名且有用的离线网络应用程序Glyphboard 添加到您的 iOS 主屏幕并启动它几次来看到这一点。每次加载时,您应该会看到白色闪光效果。

这是一个大问题,因为它暴露了应用程序的非本地性,并给人一种应用程序没有针对性能和错误进行优化的印象。

我已尝试查找有关此问题的报告,但我只能找到有关 iOS 4.3 JavaScript 渲染引擎惨败的谣言和误解,这与此问题完全无关。但在 iOS 版本 3 中,我清楚地记得从未见过白色闪光。

【问题讨论】:

    标签: ios html offline web


    【解决方案1】:

    由于 HTML 的渐进性,在渲染时清除屏幕和其他工件是 HTML 渲染的常见问题。这个概念是浏览器应该尽可能早地和经常地绘制,并在样式/脚本/内容可用时呈现它们。标记可能存在一个问题,即所有渲染都会延迟,直到某些内容或脚本可用。这可能发生在以下情况:

    • 您有基于图像尺寸的动态高度,但您没有 在标记或 CSS 中设置图像尺寸。
    • 您的布局基于表格,并且您没有在 CSS 中使用“table-layout:fixed”。
    • 您的 HTML 使用带有 document.write() 的内联脚本。
    • 您有某种 onLoad() 函数可以显示/修改内容。
    • 您链接到外部样式表。
    • 您正在使用无法缓存的外部内容,或者您​​已禁用缓存。
    • 您正在使用返回 404 或无法离线使用的外部内容。

    您的 HTML/CSS 在测试 IOS 版本之间是否发生了变化?

    【讨论】:

    • 不,HTML/CSS 没有改变。但是,关于外部资产的好处。我会看看它是否有助于将 CSS 内联。
    • 问题解决了吗?你弄清楚是什么原因造成的吗?
    【解决方案2】:

    我发现这是由以下原因引起的:

    <meta name="viewport" content="width=device-width initial-scale=1.0 maximum-scale=1.0 user-scalable=0"> 
    

    如果我使用视口元标记,我会在 apple-touch-startup-image 和页面内容之间看到一个最小的页面。如果我把标签拿出来,就不闪了。

    可以通过以编程方式设置标签来解决此问题。

    【讨论】:

      【解决方案3】:

      我认为这里发生的情况是,当页面添加到主菜单时,iOS 会从页面中截取屏幕截图。然后在应用程序加载(WebKit 加载)期间显示此屏幕截图。 WebKit 开始渲染页面,并且页面本身的构造方式使得页面内容不能立即可用,导致页面内容尚未出现时呈现的页面出现白色闪烁,

      您可以通过构建 JS/CSS 来在一定程度上避免该问题,以便它快速加载初始 HTML 视图,然后在后台延迟加载/构建其余资源。您还可以设置自定义加载屏幕,而不是 iOS 从页面使用的默认屏幕截图。

      也许你可以给自己的应用截图,然后有这样的东西:

       <body style="background: white url('my-initial-loading-screen.png')" />
      

      ...并确保图像可用并且来自清单。

      或者更好的是,加载屏幕不需要任何外部资源来显示(只是纯 HTML),这样您就知道浏览器不需要加载任何内容。

      【讨论】:

      • 你说得对,iOS 会截取屏幕截图,先启动它,然后再重新绘制页面。不过,为什么需要清除中间的整个页面?此外,Glyphboard(清楚地显示了问题)同时具有“apple-touch-startup-image”和背景颜色,所有这些仍然消失。看起来你真的无法从页面上做任何事情来防止这种情况发生。
      • 稍后重绘页面可能与您的 Javascript 代码、HTML 布局或内容有关 - 我很确定您可以避免它。你看到的是浏览器触发了reflow code.google.com/speed/articles/reflow.html
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多