在离线networking应用程序加载时,内容会消失一秒钟

我已经在iOS 4.3到5.0上观察到了这一点。 当你创build一个简单的离线web应用程序(意味着一个HTML文件+less量资产,如CSS和JS(全部出现在caching清单中)),它离线工作(我在飞行模式下testing) – 但是 ,当你添加这样一个应用程序到您的主屏幕,并在全屏模式下打开它,它首先显示初始内容, 然后一切消失 (页面变成白色)半秒钟或更长时间,然后内容再次出现。

您可以在iOS主屏幕上添加一个知名且有用的离线networking应用程序Glyphboard ,并启动它几次。 每次加载时都会看到白色的闪光效果。

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

我试过find关于这方面的报告,但我能find的是有关iOS 4.3 JavaScript渲染引擎惨败的谣言和误解,根本不需要这个问题。 但是在iOS版本3中,我特别记得没有看到白色闪光灯。

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

  • 你有基于图像尺寸的dynamic高度,但是你没有在标记或CSS中设置图像尺寸。
  • 你的布局是基于表格,你不是在CSS中使用“table-layout:fixed”。
  • 您的HTML与document.write()一起使用内联脚本。
  • 你有一些onLoad()函数显示/修改内容。
  • 您链接到外部样式表。
  • 您正在使用不可caching的外部内容,或者您​​禁用了caching。
  • 您正在使用返回404的外部内容,或者不能离线使用。

您的HTML / CSS在testingIOS版本之间有变化吗?

我发现这是由于使用:

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

使用最小的页面,如果使用视口元标记,则在apple-touch-startup-image和页面内容之间会出现白色闪烁。 如果我拿出标签,不要闪光。

可以通过编程设置标签来解决这个问题。

我想这里发生的事情是,当iOS被添加到主菜单时,iOS会从该页面截取屏幕截图。 然后在应用程序加载(WebKit加载)期间显示此屏幕截图。 WebKit开始渲染页面,页面本身的构造方式使得页面内容不是即时可用的,从而导致白色闪光,当页面内容尚不存在时,

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

也许如果你可以把自己的应用程序的屏幕截图,然后有这样的事情:

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

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

或者甚至更好,有加载屏幕,不需要任何外部资源显示(只是纯HTML),所以你知道浏览器不需要加载任何东西。