Vue项目 在chrome页面崩溃:喔唷 崩溃了(总结)

情况一、vue项目在谷歌浏览器上出现崩溃

一、问题描述:

最近vue项目开发时,在chrome浏览器页面过一段时间一直提示:页面崩溃:喔唷 崩溃了

 项目开发的时候,测试同事反馈页面会出现“喔唷 崩溃了”,打开控制台进行相同操作后发现控制台会频繁出现一个警告:

Forced reflow while executing JavaScript took <N>ms

二、问题排查

以前也看到过类似警告,不过没有重视。警告内容很明显,就是执行JS代码的时候强制页面元素重排,页面重排很消耗性能,reflow软熔焊接; 文档重整,页面重排;消耗了几十ms。
排查相关代码后发现在某个组件中,使用了一个v-if频繁增删DOM节点
相关代码如下:
template部分

<template>
	<div v-if="detail.id">
		xxxx
	</div>
</template>	

JS部分:

export default {
	props: {
		detailId,
	},
	data() {
		return {
			detail: {
				id: xxx,
			}
		}
	},
	watch: {
		detailId: {
			immediate: true,
			handler () {
				this.getDetail()
			}
		}
	},
	methods: {
		getDetail: {
			this.detail = {}
			axios.get('xxx', this.detailId).then(res => {
				// xxx
				this.detail = res.data.data
			})
		}
	}
}

本来是想在detailId改变的时候,重新获取detail,但是在获取的过程中不想显示遗留数据,所以先将detail清空了。猜测正是这里导致了浏览器移除DOM节点又插入DOM节点,然后就有了上述警告和崩溃页面。
我这里修改detailId是通过用户点击不同的元素触发的,为了验证猜测,直接在父组件用一个setInterval函数模拟用户操作:
 

// ...
mounted () {
	let time = 0
	let detailList = [xxx, xxx]
	setInteval(() => {
		console.log(time, 'setInteval')
		this.detailId = this.detailId === detailList[0] ? detailList[1] : detailList[0]
	}, 200)
}

刷新页面后发现,当打印的time到100次(也就是模拟了用户切换100次, v-if也生效100次)左右,页面就会崩溃。
果然就是这里v-if导致的问题,试了多次均是如此,看来问题也不是那么“偶然”。
问题定位到了, 那就很好解决了!

三、解决方案:

因为我这里只是想不显示遗留数据,所以其实只用把旧数据隐藏起来就行了,所以解决办法还是很多的。这里在请求过程中我给要隐藏的dom加了一个class,然后为这个class设置opacity(不透明度)为0:

<div :class="{ hide: !detail.id }">
	xxx
<div>
.hide
	opacity 0

再用之前的代码测试,再也没有出现警告与页面崩溃,到此解决了以上问题。

四、反思
本文虽然解决了当前浏览器崩溃的问题,但是因为时间有限,并没有深究:
为什么这种情况下v-if会导致回流耗时异常(为什么一般情况下的v-if并不会有警告)?
为什么JS操作导致回流超时多次后会导致浏览器崩溃?
一点思考:当一个问题重复出现的时候,就应该去尝试重现它,并且可以适当采用代码模拟人为操作,会大大提升效率。
 

情况二、谷歌浏览器更新了,发现网页全部打不开了。都显示:“喔唷 崩溃啦”。

  • 点击任何按钮,例如,设置,选项,历史记录等,也“喔唷 崩溃啦”
  • 卸载重装也无效
  • 解决方案

  • 找到 路径C:\Windows\System32\drivers\bd0001.sys
  • 删除(没有强制删除工具重命名也行,随便改个名字)
  • 重启电脑
  • chrome就正常了
  • 原因

    可能是注册列表被一些卫士类优化工具或杀毒软件优化了

最后为了方便大家的沟通与交流请加QQ群: 625787746

请进QQ群交流:【IT博客技术分享群①】:https://jq.qq.com/?_wv=1027&k=DceI0140

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
A:基于Spring Boot和Vue的实现图书管理系统论文 概述 本文介绍了一个基于Spring Boot和Vue的图书管理系统的实现过程。该系统旨在提供一个快速,直观和易于使用的平台,以帮助管理和组织图书馆的藏书阅读。 技术实现 后端:Spring Boot Spring Boot是一个基于Spring框架的快速开发Web应用程序的框架,它将常见的Spring开发模式整合到一个轻量级的、易于使用的模式中,使得开发者可以快速地开发出应用程序。 在这个图书管理系统中,我们使用了Spring Boot构建后端,它实现了RESTful API(Representational State Transferful Application Programming Interface)的架构风格,用于对前端提供数据服务。 RESTful API是一种通用的架构风格,用于构建Web应用程序,它使用标准的HTTP协议和数据格式,如JSON和XML,用于在客户端和服务器之间传输数据。 前端:Vue Vue是一个基于MVVM(Model-View-ViewModel)模型的渐进式JavaScript框架,它旨在提供一种快速、简和灵活的开发方式,用于构建现代的Web应用程序。 在这个图书管理系统中,我们使用了Vue构建前端,它通过一种声明式和响应式的方式,将数据和界面组件绑定在一起,提供了一种更加友好、直观和易于使用的用户界面。 数据库:MySQL MySQL是一种开放源代码的关系型数据库管理系统,它提供了高性能、稳定和可靠的数据存储服务,被广泛应用于Web应用程序开发中。 在这个图书管理系统中,我们使用了MySQL作为数据存储服务,它提供了一个简、高效和可扩展的数据存储解决方案,用于存储和管理图书馆的藏书信息。 功能实现 该图书管理系统主要包括以下功能: 1. 用户登录:用户可以通过用户名和密码登录系统,进行后续操作。 2. 图书查询:用户可以通过书名、作者和ISBN号等信息,查询享库中是否有相关图书。 3. 图书借阅:用户可以借阅自己所需的图书,并设置借出和归还日期。 4. 图书归还:用户可以归还自己所借的图书,并进行相应的处理。 5. 图书管理:管理员可以对图书进行管理,包括添加、删除、修改等操作。 6. 用户管理:管理员可以对用户进行管理,包括添加、删除、修改等操作。 技术难点 在实现这个图书管理系统的过程中,我们遇到了一些技术难点,包括: 1. 安全性保证:我们需要保证用户的登录信息和相关的操作数据的安全性,避免系统被恶意攻击或数据泄露。 2. 性能优化:我们需要保证系统在高负载情况下能够快速响应,避免因为性能瓶颈而导致系统的崩溃。 3. 数据库设计和优化:我们需要根据实际的业务需求,设计和优化图书和用户信息的数据表结构,提高数据的查询效率和存储可靠性。 总结 基于Spring Boot和Vue的实现图书管理系统,是一项非常有挑战性的技术任务,需要我们深入了解后端和前端的相关技术,并结合实际业务需求进行实现。通过这项技术任务的实施,我们可以提高自己的技术水平,提高对现代Web应用程序的理解和应用能力。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT博客技术分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值