cho*_*ake 3 javascript memory pdf angularjs pdfjs
我的问题是每次使用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);
});
Run Code Online (Sandbox Code Playgroud)
我在单独的视图中呈现文件.当我回到上一个视图并打开另一个文件时,内存使用量增加了大约20MB.
我试过这个:
documentPdf.destroy();
Run Code Online (Sandbox Code Playgroud)
现在,内存使用量略有下降,但没有以前分配的那么多.
这有解决方案吗?
更新:
Pdf.js版本:1.6.210
pdf.js工人版:1.6.210
您需要在DocumentPageProxy的promise上调用destroy方法.
文档描述如下:
销毁当前文档实例并终止worker.
来源:https://github.com/mozilla/pdf.js/blob/master/src/display/api.js(第621行)
当前pdf.js库中有一些测试,它们测试destroy方法的行为.(https://github.com/mozilla/pdf.js/blob/master/test/unit/api_spec.js (第86行)
在你的情况下像:
// a variable to store the callback function
var loadingTask = PDFJS.getDocument(basicApiUrl);
...
// when the document should get destroyed call
loadingTask.destroy();
Run Code Online (Sandbox Code Playgroud)
我认为通过调用documentPdf.destroy();您不会释放所占用的内存pdfViewer:我没有找到任何销毁方法pdfViewer,但您可以尝试调用
delete pdfViewer;
delete documentPdf;
Run Code Online (Sandbox Code Playgroud)
如果您不确定删除属性就足够了,您可以将两者都设置为null。
如果您仍然遇到内存泄漏,则可能是历史缓存中存储的 HTML 正在耗尽您的内存,因此请尝试用空元素替换查看器或容器 HTML(或将其完全删除)
document.getElementById('viewerContainer').outerHTML = '';
Run Code Online (Sandbox Code Playgroud)
或者
container.parentNode.removeChild(container);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2577 次 |
| 最近记录: |