1. 简介
FabricJS是一款用于创建交互式Canvas应用程序的JavaScript库。 它已经成为Canvas的开发者们最喜爱的工具之一,因为它提供了强大的功能和易于使用的API。可以创建各种元素,并与它们进行交互,例如:动画、交互、滤镜和矢量设计。
2. FabricJS渲染器
FabricJS中实现了多个渲染器,但是不同的渲染器之间可能会有一些差异。其中有一种渲染器是在浏览器中绘制图像。 这种渲染器利用的是HTML5 Canvas,并通过JavaScript代码基于特定的状态和数据进行呈现。 我们一般可以通过以下方式来创建渲染器:
var canvas = new fabric.Canvas('canvas');
这里的“canvas”就是我们想要呈现的画布。通过使用Canvas渲染器,我们可以在Canvas上方便地添加图形和文本。 这非常有用,因为Canvas不支持文本,所以我们可以利用Canvas渲染器来添加文本。
3. FabricJS缓存
FabricJS可以通过使用缓存来优化它的性能。 当您缓存一个对象时,它的状态将被记录下来,并且在以后的渲染中,只要对象的状态没有更改,就可以使用缓存数据进行渲染,而不必重新计算和绘制图像。 这种优化非常适用于一些固定元素,例如:放置在画布上的背景元素。 缓存可以使用以下方法启用:
object.setOptions({ cache: true });
这里的“object”可以是在画布上放置的任何对象,例如:图像、文本、矩形等等。 调用此方法时,将为该对象启用缓存,以实现高性能的渲染。 然而,当您更改了对象的状态时,您需要注意从缓存中删除数据。 可以使用以下代码来删除对象的缓存:
fabric.util.clearFabricCacheForObject(object);
3.1 检查缓存是否脏
检查缓存是否脏是指检查对象的状态是否与其缓存数据相同。 如果不同,就需要重新计算并绘制对象。 FabricJS提供了一个方便的方法来检查对象的状态是否脏:
if (object.isCacheDirty() || object._objects.length){
// 如果缓存是脏的或对象的状态发生了改变,则需要重新计算并绘制对象
}
如果对象的状态与缓存数据不同,就需要重新计算和绘制。如果不同,则必须清除它们的缓存,否则将导致图像被叠加或显示错误。 我们可以使用以下代码来清除对象的缓存:
object.dirty = true; // 设置对象标志为“dirty”,以通知FabricJS缓存需要更新
canvas.requestRenderAll(); // 请求Canvas渲染
3.2 多边形是否需要渲染器
多边形是FabricJS中非常常见的元素。 多边形可以是包含任意数量点的多边形或三角形等。 多边形元素可以使用Canvas渲染器进行呈现。 但是,当使用WebGL渲染器时,会发生错误,导致多边形不能正确呈现。 在这种情况下,需要使用一个WebGL多边形呈现器,它将使用WebGL来正确呈现多边形。
要使用WebGL多边形呈现器,需要进行以下设置:
fabric.Object.prototype.objectCaching = false; // 禁用对象缓存
fabric.maxCacheSideLimit = fabric.maxCacheSideLimit / 10; // 将Canvas对象的缓存大小缩小10倍
canvas.renderOnAddRemove = false; // 禁止在添加/删除对象时自动重新渲染画布
canvas.enableRetinaScaling = false; // 禁止自动启用视网膜缩放
canvas.stateful = false; // 禁止启用状态跟踪
canvas.contextTop = fabric.util.createCanvasElement().getContext('2d'); // 创建一个2D上下文对象
canvas.skipOffscreen = false; // 禁用替代Canvas来优化性能
canvas.fire('canvas:settingsUpdated'); // 更新Canvas设置
fabric.Object.NUM_FRACTION_DIGITS = 10; // 将小数数字保留到十位小数
这里禁用了对象缓存,减小了Canvas对象的缓存大小,禁止在添加/删除对象时自动重新渲染画布,禁止自动启用视网膜缩放,禁止启用状态跟踪,创建了一个2D上下文对象,禁用替代Canvas来优化性能,将小数数字保留到十位小数。
4. 总结
FabricJS是一款功能强大的JavaScript库,专为Canvas开发者设计。 它提供了许多强大的API,可以让开发者轻松地创建交互式Canvas应用程序。 FabricJS提供了多个渲染器来呈现图形和文本。 在使用Canvas渲染器呈现图形和文本时,可以通过使用缓存来提高性能。 使用缓存时,需要检查缓存是否脏,并清除缓存数据。 当使用WebGL渲染器呈现多边形时,需要进行一些特殊设置,以确保多边形可以正确呈现出来。