我的问题是,每次使用viewer.js呈现pdf文件时,我的应用程序的内存使用量都会增加。
我以这种方式渲染我的PDF:
container = document.getElementById('viewerContainer');
viewer = document.getElementById('viewer');
pdfViewer = new PDFViewer({
container: container,
viewer: viewer
});
$scope.pdfFindController = new PDFFindController({
pdfViewer: pdfViewer
});
pdfViewer.setFindController($scope.pdfFindController);
container.addEventListener('pagesinit', function () {
pdfViewer.currentScaleValue = 'page-width';
});
PDFJS.getDocument($scope.getPageLink(pdf)).then(function (pdfDocument) {
documentPdf = pdfDocument;
pdfViewer.setDocument(pdfDocument);
});
我在单独的视图中渲染文件。当我回到上一个视图并打开另一个文件时,内存使用量增加了大约20MB。
我试过了:
documentPdf.destroy();
现在,内存使用量略有下降,但没有以前分配的那么多。
有解决方法吗?
更新:
Pdf.js版本:1.6.210
pdf.js工人版:1.6.210
答案 0 :(得分:7)
您需要在DocumentPageProxy的承诺上调用destroy方法。
文档描述如下:
销毁当前文档实例并终止worker。
资料来源:https://github.com/mozilla/pdf.js/blob/master/src/display/api.js(第621行)
当前b=0.001
库中有一些测试,用于测试destroy方法的行为。 (https://github.com/mozilla/pdf.js/blob/master/test/unit/api_spec.js(第86行)
在你的情况下:
pdf.js
答案 1 :(得分:1)
我认为通过致电documentPdf.destroy();
,您不会释放pdfViewer
所占用的记忆:
我没有找到任何方法来销毁pdfViewer
,但你可以尝试调用
delete pdfViewer;
delete documentPdf;
如果您不确定删除属性是否足够,则可以将两者都设置为null
。
如果您仍然遇到内存泄漏,那么存储在历史记录缓存中的HTML可能会耗尽您的内存,因此请尝试使用空元素替换查看器或容器HTML(或将其完全删除)
document.getElementById('viewerContainer').outerHTML = '';
或
container.parentNode.removeChild(container);