在不使用任何图像加载库的情况下,我正在加载如下图像:
final Image img = new Image();
img.setVisible(false);
RootPanel.get().add(img);
img.addErrorHandler(new ErrorHandler() {
@Override
public void onError(ErrorEvent event) {
System.out.println(event);
}
});
img.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
ImageElement data = ImageElement.as(img.getElement());
RootPanel.get().remove(img);
obj.setData(data);
System.out.println("Arrived:" + (System.currentTimeMillis()-startTime) + "ms");
render();
}
});
不使用 RootPanel.get().add(img); 图像永远不会被添加到 DOM。所以不会触发onLoad。但是当你将图像添加到 DOM 中时,如果你不删除它,这将是内存泄漏。
我对上述代码的观察:
- 如果我不将图像添加到 DOM,则不会触发加载处理程序。
- 如果我这样做了,但加载后不删除,则会发生内存泄漏。
- 我这样做了,我确实删除了,Chrome 将在 256 MB 后调用垃圾收集。Firefox 从不调用垃圾收集。所以发生了内存泄漏。可能是 Firefox 会在需要时调用垃圾收集器。我不太了解这个问题。
我的问题是,是否有图像加载程序(库)处理图像加载?
加载图像后,它们会自动从 DOM 中删除图像吗?
有没有更合适的方法来处理这个问题,你正在绘制许多图像但在绘制后不需要图像?
还有快速的方法来添加和删除 DOM 中的图像吗?