为什么简单的网站在移动设备(至少是 iOS Safari 和 Chrome)上会崩溃?

2024-03-16

我有一个非常简单但又很长的网站——有很多可以滚动浏览的文本。这是一个文档网站,考虑到内容的性质(很多简短的相似条目),我决定立即显示所有内容,因此用户可以从一个条目滚动到另一个条目,也可以通过侧边栏索引进行导航。这是我喜欢的常见文档模型(例如下划线 http://underscorejs.org/, Backbone http://backbonejs.org/, and LoDash http://lodash.com/docs).

该网站在这里:http://davidtheclark.github.io/scut/ http://davidtheclark.github.io/scut/。您可以在此处查看预生产代码:https://github.com/davidtheclark/scut/tree/master/docs/dev https://github.com/davidtheclark/scut/tree/master/docs/dev.

问题是这样的:对于许多用户来说,该网站经常导致他们的 iOS 浏览器崩溃。不是所有用户(不是我);但对于那些do经历过崩溃,它似乎不断重复发生。 (该网站也可能会导致某些人的 Android 手机崩溃,我不知道:没有收到任何 Android 用户的消息。)我希望有人可以帮助我诊断并可能解决这个问题。

我遇到的部分困难是我自己无法重现崩溃——无法在我自己的 iOS 设备上重现崩溃,也无法在 Xcode 模拟器上重现崩溃。因为该网站根本不占用大量资源(约 70KB 负载)并且涉及很少的 JavaScript,并且由于之前几次尝试修复此问题的影响,我猜测问题涉及内存使用-- iOS 浏览器崩溃是因为该网站需要太多内存。但我不是sure这就是问题所在,如果是的话,我不确定如何解决它。

我不确定接下来要尝试什么,我希望一些精明的 StackOverflow 高手能提供建议。这个在我看来如此简单和基本的网站到底是怎么回事,却使它如此占用内存以至于导致浏览器崩溃?

是不是太长了?是否存在 CSS 太难渲染的情况? JavaScript 是否存在内存泄漏?

我对这个特定的网站很感兴趣,这样我就可以学习预测和预防和/或诊断和修复未来其他网站上的类似问题。

欢迎查看或贡献[Github问题](在这个 Github 问题中 https://github.com/davidtheclark/scut/issues/110,还有。

Addendum

以下是有关该网站可能相关的一些信息:

  • HTML 文档是large相对于其他网站的 HTML 文档。未缩小时看起来约为 225KB。 (我注意到 LoDash 文档更大——该网站会让人们的手机崩溃吗?)
  • 所提供的 HTML 文档已缩小。
  • 服务的 CSS 和 JS 也被缩小。
  • 该网站使用Prism.js http://prismjs.com/用于语法突出显示。
  • 该网站使用推翻 https://github.com/filamentgroup/Overthrow使 2 滚动列布局适用于平板电脑。
  • <aside id="help-content">在屏幕外进行固定和翻译;当您单击 [?] 时,它会滑入,就像任何实用程序的“使用名称”一样。

iOS 崩溃日志

在我看来,这些是来自运行 Chrome 并在网站上崩溃的 iPhone 的崩溃报告的潜在相关行(我不确定它们是否真正相关,因为我还没有开发过 iOS 应用程序,也不知道这些报告的细节):

Free pages:                              5674
Active pages:                            117674
Inactive pages:                          55121
Speculative pages:                       3429
Throttled pages:                         0
Purgeable pages:                         0
Wired pages:                             60906
File-backed pages:                       23821
Anonymous pages:                         152403
Compressions:                            356216
Decompressions:                          121241
Compressor Size:                         16403
Uncompressed Pages in Compressor:        49228
Largest process:   Chrome

[...]

Chrome &lt;2a759438c2253e3baededaa0d13feb56&gt;       166479           166479  200  [per-process-limit] (frontmost) (resume)

我想我修好了!

正如怀疑的那样,问题是由 CSS 布局引起的渲染/绘制。在手机大小的情况下,我一直隐藏每个条目的内容,直到它被选择为止;以及我一直用来隐藏它们并从布局中删除它们的任何痕迹的方法,包括position: absolute。我最初没有使用display: none因为通常担心不想看到内容但保留它there,出于各种读者和原因。我把这些担忧放在一边并更改了布局,以便条目被隐藏display: none并显示为display: block——这似乎解决了崩溃问题。

我认为绝对定位在屏幕的一角堆积了大量的内容,虽然不可见,但它对内存的要求很高。

促使我尝试这个的是另一个相关问题的答案,由@tea_totaler链接到上面:https://stackoverflow.com/a/14866503/2284669 https://stackoverflow.com/a/14866503/2284669。它说:

对我有很大帮助的是,将此时不可见的任何内容保留在显示状态下:无。这听起来可能很原始,但确实有效。这是一种简单的方法,可以告诉浏览器的渲染器您此时不需要该元素,从而释放内存。只要隐藏当前不使用的元素,您就可以创建具有各种 3D 效果的一英里长的垂直滚动条。

我认为我的另一种隐藏方法是not释放内存,尽管它有其他优点(无论如何可能与这个特定站点无关)。我确信这只是因为该网站太长而成为一个问题。

不过,当您想隐藏某个元素时,需要考虑这一点:渲染/内存需求.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么简单的网站在移动设备(至少是 iOS Safari 和 Chrome)上会崩溃? 的相关文章

  • 使用 Google Cloud Datastore Python 库时应如何调查内存泄漏?

    我有一个使用 Google 数据存储的网络应用程序 在发出足够的请求后内存不足 我已将范围缩小到数据存储查询 下面提供了最低 PoC 稍长的版本 https gist github com edeca 214d7a7c51f84b9c2dc
  • 如何创建粗体 UIFont

    我正在我的表格视图中进行一些自动换行 因为某些值太大 以至于超出了屏幕边缘 但是 字体 大小和粗体与表视图的默认设置不匹配 希望有人能帮助我解决这个问题 这就是我正在做的设置字段的操作 CGFloat tableView UITableVi
  • UIViewControllerHierarchy不一致

    我正在尝试构建我的应用程序 有一次我推送了 UIViewController 然后收到此错误 我不太清楚为什么 UIViewControllerHierarchyInconsistency 原因 视图只能是 一次最多与一个视图控制器关联 查
  • 升级到 SDK 4.1 后 Facebook 登录失败(总是 isCancelled)

    我已在 iOS 应用程序中将 Facebook SDK 从 3 21 1 升级到 4 1 已上线 我仔细遵循升级指南 并实施了新的登录方法 我使用的代码是 Facebook 文档中提供的代码 但是自从升级以来 每次我尝试登录 设备或模拟器
  • 哪里可以找到关于 swift Alert (UIAlertController) 的明确解释?

    对此找不到清晰且信息丰富的解释 在某个主题上搜索了一段时间后 我没有 找到清晰的解释 即使在它的类参考中UIAlertController 参考 https developer apple com library ios documenta
  • iOS 中特定字符串的 SHA1

    根据我的要求 输入字符串必须转换为字节值 string 的每个字符都是 16 位值 必须转换为低 8 位 然后在字节数组上计算 Sha1 生成的 SHA 1 将转换为 40 个字符的字符串 我知道如何将字符串转换为 SHA1 但其余部分对我
  • iOS10 iMessage:无法使用 MSConversation 将数据插入 iMessage

    在我的项目中我添加了iMessage Extension但我无法发送选定的数据UITableview 需要发送选定行数据 声明 var savedConversation MSConversation 我想在用户时发送文本didselect
  • 使用 Swift 的核心数据瞬态值

    有谁知道 或者有一个例子 如何使用 Swift 处理核心数据瞬态值 我知道在属性之前使用 NSManaged 但无法弄清楚如何编写逻辑以使用 Swift 构建瞬态值 复选标记短暂的数据模型中特定属性的字段 例如sectionTitle 为该
  • Selenium 打开未登录 Chrome 帐户的 chrome

    我最近一直在使用 Selenium WebDriver 我还专门使用 chromedriver 每当我打开一个新的 chrome 窗口 driver get url 时 Chrome 都会以完全默认的状态启动 而不是我刚刚从我的扩展坞打开一
  • iOS表单键盘不消失

    我知道我必须打电话 BOOL disablesAutomaticKeyboardDismissal return NO this dismiss keyboard on ios BOOL textViewShouldBeginEditing
  • 背景大小:封面在 Google Chrome 中突然停止工作?

    还有其他人有这个问题吗 我以创建网站为生 有些网站使用了 css 属性background size cover 大约 1 周前突然间 所有具有此属性的网站都不再在 Google Chrome 中正确显示 所有其他浏览器都工作正常 还有其他
  • 快速在视图之间传递数据

    我试图熟悉 Swift 但找不到如何使用 Swift 在视图之间传递数据 class ViewController UIViewController IBOutlet var field UITextField IBOutlet var b
  • 在 Swift 中上传带有其他参数的多张图片

    现在 我通过下面给出的代码仅将一张图像上传到服务器端脚本上的服务器 现在我有一个数组UIImage 我想知道如何使用UIImageJPEGRepresentation myImageView image 0 1 将所有图像发布到UIImag
  • 覆盖 Bootstrap 表格边框折叠样式

    引导程序有一个table border collapse collapse border spacing 0 风格 我想覆盖它 所以我创建了一个类并将其应用到有问题的表 table FormGroupContainer border col
  • 如何将预编译头文件添加到我的 ios 项目中?

    我希望创建一个预编译头文件 以避免在项目中的每个头文件中包含相同的调试和跟踪库 我创建了一个名为 Prefix pch 的文件 ifdef OBJC import Blah h import Blarg h endif 并将其添加到项目中
  • 协议扩展,不符合协议

    我正在创建一个名为MyFramework含有LoginProtocol swift它有一些默认行为 import UIKit public protocol LoginProtocol func appBannerImage gt UIIm
  • 检查indexPath处的单元格在屏幕UICollectionView上是否可见

    我有一个CollectionView向用户显示图像 我在后台下载这些 下载完成后 我调用以下函数来更新collectionViewCell并显示图像 func handlePhotoDownloadCompletion notificati
  • 当状态为 AVKeyValueStatusFailed 时重新加载 AVAsset 中的密钥

    我正在执行以下操作 创建一个新的AVAsset与给定的 URL 该 URL 指向远程 Web 服务器上的视频 尝试加载tracks通过调用属性loadValuesAsynchronouslyForKeys completionHandler
  • 使用 Objective C 将 html 字符串插入 sqlite 数据库

    我正在使用下面的代码片段将 html 字符串插入 sqlite 数据库 我的代码工作正常 但是当我检索相同的 html 字符串并在 Web 视图中显示时 它不会呈现 一些数据正在被修改 任何人都可以帮助如何插入长 html 字符串存入数据库
  • 迭代 NSDictionary 时保持顺序

    我有一个 NSDictionary 它正在迭代并将数据保存到核心数据 如下所示 NSDictionary details valueDict objectForKey shipment master for NSDictionary res

随机推荐

  • 如何连接 Windows 中的其他程序?

    谁能解释一个程序如何挂钩并修改 Windows 中其他程序的行为 这怎么可能呢 Windows 程序是否不会保护自己免受其他程序进入其内存等的影响 我不知道它的内部结构是如何工作的 所以我只是说 进入他们的记忆 我敢打赌它比这更复杂 另外
  • select2 中的 Angular ng-options - 设置值属性

    我有一系列国家 var countriesList name Israel code IL name India code IN name Andorra code AD 以及一系列选定的国家 地区 selectedCountries co
  • 如何在 Flutter 中创建按钮表并从中随机选择任何按钮?

    我正在尝试在 Flutter 中创建一个自定义的 Housie 游戏门票生成器 其中我必须从 4X3 按钮表中随机选择一个按钮 并显示一个否 在那个按钮上 单击按钮后 它的颜色从绿色变为红色 我通过对所有单元格进行硬编码创建了一个 4X3
  • 如何解决最大数量限制的杆切割问题允许削减多少?

    我知道如何使用动态规划解决杆切割问题 但是 当我们限制允许的最大切割次数时 动态规划无法给出正确的答案 即使我也无法想到该问题的递归解决方案 帮助 问题是这样的 确定通过切割杆并出售碎片可获得的最大收入 给定长度为 N 的杆 以及长度为 i
  • 高性能串联二维数组存储为子数组[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 想象一下 我们有几个由 X Y 坐标标识的 3x3 2D 数组 伪代码 Array 0 0 Array 1 0 1 2 1 1 2 1
  • GUID:varchar(36) 与 uniqueidentifier

    我正在使用一个将 GUID 值存储为 varchar 36 数据类型的旧数据库 CREATE TABLE T Rows RowID VARCHAR 36 NOT NULL PRIMARY KEY RowValue INT NOT NULL
  • 如何在 XSLT 处理器中使用 HTML5 的“about:”协议

    HTML5 草案指定 http dev w3 org html5 spec Overview html about 3alegacy compat 至少目前 URIabout legacy compat可用于依赖于符合 XML 的文档类型
  • 非虚拟和抽象方法的命名约定[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常发现自己创建使用这种形式 A 的类 abstract class Animal public void Walk TODO do some
  • FastAPI异步后台任务会阻塞其他请求吗?

    我想在 FastAPI 中运行一个简单的后台任务 其中涉及一些计算 然后将其转储到数据库中 但是 计算会阻止它接收更多请求 from fastapi import BackgroundTasks FastAPI app FastAPI db
  • Swings ImageIcon 构造函数非常慢

    编辑 请参阅对此答案的评论以获取此问题的答案 TLDR 瓶颈是缩放图像 但分析显示这是 ImageIcon 构造函数中的问题 java version Picked up JAVA OPTIONS Dswing aatext true Da
  • 为什么我在安装 gem 时收到“权限被拒绝”错误?

    我正在尝试安装 Jekyll 运行后gem install jekyll我收到此错误 ERROR While executing gem Errno EACCES Permission denied usr local lib ruby g
  • Firebase 实时数据库 API 中的“set”和“update”有什么区别?

    正如标题所说 我无法理解之间的区别update and set 此外 文档也无法帮助我 因为如果我使用 set 代替 更新示例的工作原理完全相同 The update文档中的示例 function writeNewPost uid user
  • Android getsupportedvideosizes 在模拟器上返回 null

    我尝试在模拟器中获取支持的视频大小 如下所示 但它总是返回 null 为什么会这样 我在 4 03 中尝试过 提前致谢 Camera camera Camera open android hardware Camera Parameters
  • 无法从 $injector.get() 获取服务实例

    我定义了一个名为 greeting 的客户服务 但无法从 injector get greeting 获取该实例 它会抛出这样的错误 未知提供者 greetingProvider 那么哪种方式才是正确的获取方式呢 以下是代码 var app
  • 更改 y 对数刻度 imshow()

    我正在尝试根据周期绘制 y 尺度的频谱图 所以我想要一个反转的对数尺度 事情是 我找到了如何使用pcolormesh 不是通过使用imshow imshow 似乎比pcolormesh 这对我来说 是一个非常喜欢它的理由 我错过了什么 我不
  • 如何在 SQL Server 和 C# 中加快读取大量数据的速度

    我的数据库中有一个包含大约 200k 条目的视图 我正在使用以下代码阅读它 using SqlConnection conn new SqlConnection conn Open string query SELECT FROM SP3D
  • Perl:写入速度之谜?

    输出速率怎么可能高于硬盘写入速率呢 Update 1 我更改了以下内容 关闭了防病毒软件 不用找了 插入新的物理磁盘并使用第一个分区 为了测试 初始测试的磁盘位于 最后一个分区 与系统分区分开 但是 在同一物理磁盘上 结果 有相同的 循环模
  • 使用自定义端点的 to.minutes

    我使用的是从上午 9 50 开始的日内数据 并希望将其转换为 20 分钟的时间间隔 因此第一个时间段是从 09 50 到 10 09 59 第二个时间段是从 10 开始 10 至 10 29 59 等 但是to minutes 来自xts软
  • F# 的隐藏功能

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 这是类似的毫不掩饰的尝试C https stackoverflow com questions
  • 为什么简单的网站在移动设备(至少是 iOS Safari 和 Chrome)上会崩溃?

    我有一个非常简单但又很长的网站 有很多可以滚动浏览的文本 这是一个文档网站 考虑到内容的性质 很多简短的相似条目 我决定立即显示所有内容 因此用户可以从一个条目滚动到另一个条目 也可以通过侧边栏索引进行导航 这是我喜欢的常见文档模型 例如下