广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使用CSS让Chrome崩溃
  • 511
分享到

如何使用CSS让Chrome崩溃

2024-04-02 19:04:59 511人浏览 八月长安
摘要

这篇文章主要介绍了如何使用CSS让Chrome崩溃,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。复现在 Chrome 里打开一个稍复杂的页面

这篇文章主要介绍了如何使用CSS让Chrome崩溃,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

复现

  1. 在 Chrome 里打开一个稍复杂的页面,比如知乎或者 掘金

  2. 打开开发工具,为页面 <body> 增加样式 style: "width:1px; height:1px; transfORM:scale(10000)"

  3. 欣赏任务管理器里 Chrome 崩溃前的内存占用

如何使用CSS让Chrome崩溃

其实这台机器只有 8GB 内存,不过这不重要了。和让 js 崩溃的红线容量 4GB 比起来,果然还是 CSS 更强大呢 :)

故事

这行代码的发现,源自于我们的编辑器项目在实现画布尺寸调节时的一个诡异现象:用户调节画布尺寸时, 只要新旧尺寸之比超过一定幅度,Chrome 就会卡死 。

虽然这个问题很难由普通用户的操作路径触发,不过它所导致的后果确实比较严重。排查时我们首先考虑了 JS 阻塞和 DOM 重绘过频等方面的可能性,但它们都不是问题所在。一个突破点在于调试器 Rendering 工具中 FPS Meter 的输出:

如何使用CSS让Chrome崩溃
 

这里 GPU Memory 被占满了。虽然这个提示信息现在看来很明显是与硬件加速有关的,但在没有相关经历的情况下我们还是没有确定它与具体代码之间的关联。直到我们偶然查看 Chrome 设计文档中关于 Compositing 的介绍时,发现了一个行为:Blink 会将 DOM 节点映射到 LayoutObject 的渲染树,这棵树中的节点理论上每个都能具备到渲染后端的上下文,但为了节约资源 Chrome 会将它们做一些合并后再渲染。而这时存在 CSS 定位(如绝对定位与 transform)的元素是不能合并的,这会造成对显存的额外开销。

基于这个信息的提示,我们使用 Layout 工具来调试当时的页面,果然找到了一个特殊的地方:

如何使用CSS让Chrome崩溃
 

图中最大的矩形 Layer 通过一般的 DOM 调试是无法看见的,因此我们推测它的过大尺寸所导致的 RAM 开销是罪魁祸首。基于这个信息,我们最后找到了一个宽高都很合理但 transform 的 scale 值可能在逻辑中被修改得很大的 DOM 节点,限制它的 scale 上限即可解决问题:我们不难发现 scale 的值和最终对应像素数量之间有着 O(N^2) 的关系,1 个像素只放大 100 倍也有 10000 个像素了。因此 scale 很大时对内存 / 显存的过度使用也就是有可能的了(当然浏览器会做 Tiling 等工作,因此这不符合一般情况下的实际情形,Safari / Firefox 这时候也没有出现问题)。最后给 Chrome 提了个 bug 见 #894115

感谢你能够认真阅读完这篇文章,希望小编分享的“如何使用CSS让Chrome崩溃”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网JavaScript频道,更多相关知识等着你来学习!

--结束END--

本文标题: 如何使用CSS让Chrome崩溃

本文链接: https://www.lsjlt.com/news/76304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用CSS让Chrome崩溃
    这篇文章主要介绍了如何使用CSS让Chrome崩溃,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。复现在 Chrome 里打开一个稍复杂的页面...
    99+
    2022-10-19
  • 如何让阿里云服务器崩溃
    在云计算时代,云服务器已经成为了企业和个人进行数据存储、应用部署等服务的重要工具。然而,有时候我们可能需要测试服务器的稳定性或者想了解其故障处理的能力。本文将介绍一些可能导致阿里云服务器崩溃的方法,并提供相应的解决方案。 1. 资源耗尽阿里...
    99+
    2023-12-29
    阿里 服务器
  • 如何使用Kdump检查Linux内核崩溃
    这篇文章将为大家详细讲解有关如何使用Kdump检查Linux内核崩溃,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。kdump 是获取崩溃的 Linux 内核转储的一种方法,但是想找到解释其使用和内部结构的...
    99+
    2023-06-16
  • 如何解决使Eclipse崩溃的JVM terminated问题
    这期内容当中小编将会给大家带来有关如何解决使Eclipse崩溃的JVM terminated问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。本文将介绍如何解决JVM terminated令Eclipse...
    99+
    2023-06-17
  • 电脑系统崩溃如何使用U盘重装win8系统
    这篇文章主要为大家展示了“电脑系统崩溃如何使用U盘重装win8系统”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“电脑系统崩溃如何使用U盘重装win8系统”这篇文章吧。准备工作提前制作一个U盘启动...
    99+
    2023-06-27
  • 影子系统造成win10崩溃如何使用命令提示符
    这篇文章主要讲解了“影子系统造成win10崩溃如何使用命令提示符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“影子系统造成win10崩溃如何使用命令提示符”吧!解决方法可以先使用U盘刻录一个...
    99+
    2023-07-01
  • 如何使用CSS让div模块旋转
    本篇内容主要讲解“如何使用CSS让div模块旋转”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用CSS让div模块旋转”吧!问题:如何让你的一个div模块...
    99+
    2022-10-19
  • 如何避免三大常见诱因使Windows Server崩溃的方法
    下面让我们来细致看一下这三种服务器 debugger中用命令!analyze –v显示了它的堆栈方式。从下往上读,我们就看到一个NtCreateFile的函数调用,最后引入了buggydrv,从而导致bugc...
    99+
    2023-05-25
    Windows7 崩溃 Windows Server 诱因 方法
  • 如何用CSS以chrome极客式开个玩笑
    如何用CSS以chrome极客式开个玩笑,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 免责声明:恶搞带来的所有后果...
    99+
    2022-10-19
  • 如何使用Chrome DevTools调试JavaScript
    这篇文章主要介绍了如何使用Chrome DevTools调试JavaScript,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。步骤 1:重现...
    99+
    2022-10-19
  • 如何利用f11一键恢复无需再重装的崩溃系统
    如何利用f11一键恢复无需再重装的崩溃系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于电脑用户来说,最头疼的问题莫过于系统崩溃后重装系统。虽然现在有形形色...
    99+
    2023-06-14
  • 如何使用纯css实现div自适应居中兼容IE7 Chrome FireFox
    小编给大家分享一下如何使用纯css实现div自适应居中兼容IE7 Chrome FireFox,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去...
    99+
    2022-10-19
  • css如何让a标签不可用
    在css中设置a标签不可用的方法首先,在页面中创建一个a标签; <body>  <a href='###'>我是a标签</a> </...
    99+
    2022-10-18
  • Win8系统崩溃了怎么办 如何使用Win8系统自带重装还原系统
    如果我们的Win8系统故障或崩溃了怎么办?不要着急,在Win8就已经内置了相应的工具,让我们无需借助第三方软件就能搞定。本期的《Win8大百科》我们就将介绍如何使用Win8的备份、恢复、重装和还原功能。  ...
    99+
    2022-06-04
    系统 重装 如何使用
  • Python中如何使用chrome配置selenium
    这篇文章主要讲解了“Python中如何使用chrome配置selenium”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中如何使用chrome配置selenium”吧!1.下载c...
    99+
    2023-06-29
  • 如果使用css让div占满整个屏幕
    小编给大家分享一下如果使用css让div占满整个屏幕,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用定位方法<style>*{  ...
    99+
    2023-06-08
  • 如何使用HTML5和CSS让web app运行更加流畅
    这篇文章给大家分享的是有关如何使用HTML5和CSS让web app运行更加流畅的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  Tip 1: 使用web storage代替c...
    99+
    2022-10-19
  • 如何使用Webstorm和Chrome来调试Vue项目
    目录前言一、新建Vue项目二、WebStorm配置1、设置调试器端口2、 添加调试配置三、测试第一步第二步第三步第四步前言 在项目开发中,Debug模式是非常有必要的,后端对于IDE...
    99+
    2022-11-12
  • css如何让文本域中字用不同颜色
    这篇文章主要介绍“css如何让文本域中字用不同颜色”,在日常操作中,相信很多人在css如何让文本域中字用不同颜色问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css如何让文本...
    99+
    2022-10-19
  • 如何使用Chrome找到Marketing Cloud某个contact的guid
    我们使用nodejs对contact进行修改时,需要指定待修改contact实例的guid。...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作