如何在vuejs项目中发现内存泄漏?Vue js自己处理这些泄漏吗



我尝试在我的vue应用程序中查找内存泄漏。我使用了chrome开发工具的内存堆快照。但我找不到。我试着在youtube和谷歌上寻找教程或视频。但他们中的大多数人都在使用Native JS进行解释。即使在Vue的官方文档中,他们也使用第三方库进行了解释。现在,我不确定我的应用程序是否存在内存泄漏。

有什么好的资源我可以参考吗?

在我看来,评测工具只是帮助您监控&决定你的应用程序是否有内存泄漏。它不能把"是"或"否"这样简单的结果摆在你面前,但它可以让你看到应用程序性能的全貌。

根据这些统计数据,你可以看到你的应用程序出现了问题,这种情况通常会随着时间的推移而发生(这意味着你必须监控它,而不仅仅是运行分析工具然后检查结果(。

Vue只是一个用JS编写的框架/库。因此,没有什么神奇的工具可以告诉你自己的代码到底出了什么问题。

Vue有一些工具可以像下面这样监控渲染过程。你可以看到你的应用程序如何重新渲染&为什么会这样?取决于你的代码逻辑,你可以决定哪一个只应该呈现一次&优化该部分。这也可以防止内存泄漏。

Anuj内存泄漏是一个比单一语言更广泛的主题。文档中有使用库的例子,因为通常情况下,第三方软件包不考虑内存使用情况会导致内存泄漏,我们应该注意这一点。查看此视频以检测项目中的内存泄漏。

Fuite是一个查找内存泄漏的好工具。他们的自述中也链接了一个不错的介绍视频。基本上,它会在你的应用程序中抓取内部链接,然后重复访问它们(例如,从/about,然后是本机的"返回"导航,然后重复N多次(。每次访问后,它都会检查是否有任何事件侦听器或DOM节点处于分离状态。最后你会得到一份可读性很好的报告

您可以从CLInpx fuite http://localhost:8080运行它,或者如果您有想要定义的身份验证保护或一些自定义交互,则可以创建";场景";让富伊特通过。

这里有一个简单的自定义场景,它通过添加登录来扩展fuite默认场景。然后将结果转储到JSON文件中。确保您已经预先创建了logs目录。您还需要首先安装fuite,例如:

mkdir fuite-test && cd fuite-test
npm init -y 
npm i -D fuite

现在创建一个fuite.mjs文件:

import { defaultScenario, findLeaks } from 'fuite'
import fs from 'fs'
const domain = 'http://localhost:8080'
const myScenario = {
...defaultScenario,
async setup(page) {
let url = await page.url()
if (!url.endsWith('login')) return
// Run login code only if we're at /login
await page.type('input[type=email]', 'email@example.com')
await page.type('input[type=password]', 'password')
await page.click('button[type=submit]')
},
}
let log = []
for await (const result of findLeaks(domain, {
scenario: myScenario,
iterations: 5,
heapsnapshot: false,
debug: process.env.DEBUG || false,
progress: true,
browserArgs: ['--use-fake-device-for-media-stream']
})) {
const entry = JSON.stringify(result, null, 2)
// If you want, you can also print the logs while the scanner runs:
// console.log(entry)
log.push(entry)
}
console.info('Fuite scan finished:', log.length)
const filename = `fuite.${Date.now()}.json`
console.info('Dumping log file:', filename)
fs.writeFileSync(`logs/${filename}`, JSON.stringify(log, null, 2))

您可以使用node fuite.mjs运行它。

注意:如果你有一个有很多链接的大型应用程序,最好用writeStream流式传输到log/JSON文件,我在这里的例子中有点懒,所以这对你来说可能很慢。

最新更新