hashing the canvas content (v4)

Revision 4 of this benchmark created on


Preparation HTML

  <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/core.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/md5.js"></script>

Setup

const editables = {
  "variations": {
    "main": {
      "placeholder": null,
      "author": "asdf 5",
      "boolean": true,
      "dateTime": "2022-03-21T09:00:00.000+01:00",
      "number": 1,
      "numberMulti": [
        1
      ],
      "enumeration": "Three",
      "multilineSingleRichText": {
        "contentType": "text/html",
        "value": "<p>some text12</p>\n<p>asdfasdf</p>\n"
      },
      "multilineMultipleRichText": {
        "contentType": "text/html",
        "value": [
          "<p>dssd!badge!&nbsp; sdsdsd<br>\n!test! dsdsds afa<br>\n</p>\n<p>sometxt soetxt</p>\n",
          "<p>one two re</p>\n<p>som tetx</p>\n<p>sm est</p>\n<p>some text</p>\n<p>some text</p>\n",
          "<p>some thing</p>\n<p>{Aerospace}</p>\n<p>pm tst</p>\n<p>ame txt</p>\n<p>&nbsp;</p>\n"
        ]
      },
      "contentReference": null,
      "contentReferenceMultipleLimitedTo3": [
        "/content/dam/dwr-bad/mushroom_desk.png",
        "/content/dam/dwr-bad/PXL_20230215_074554878.jpg",
        "/content/dam/dwr-bad/Screenshot from 2023-02-20 13-42-57.png"
      ],
      "contentReferenceUnlimited": [
        "/content/dam/dwr-bad/546607.jpg",
        "/content/dam/お好み焼き.jpg",
        "/content/dam/orlowska-test/assets/blue.png",
        "/test/page/123",
        "/content/dam/wknd-shared/en/magazine/alaska-adventure/alaskan-grizzly.jpg",
        "/content/dam/a1234/Group 3458@2x.png"
      ],
      "fragmentReferenceSingle": "/content/dam/orlowska-test/123test",
      "fragmentReferenceMultipleLimitedTo3": [],
      "fragmentReferenceMultipleUnlimited": [],
      "jason": null,
      "tags": [
        "apetrus-tags:"
      ]
    },
    "variation_one": {
      "title": "Variation One",
      "description": "",
      "elements": {
        "placeholder": null,
        "author": null,
        "boolean": true,
        "dateTime": "2022-02-25T02:00:00.000+02:00",
        "number": 4,
        "numberMulti": [],
        "enumeration": "Two",
        "multilineSingleRichText": {
          "contentType": "text/html",
          "value": "<p>some text123234<br><br>Testing this RTE</p>\n<p><img src=\"/content/dam/a1234/Group 3458@2x.png\" alt=\"Group 3458@2x.png\" width=\"296\" height=\"68\" data-content=\"/content/dam/a1234/Group 3458@2x.png\"><br></p>\n<p><br></p>"
        },
        "multilineMultipleRichText": {
          "contentType": "text/html",
          "value": [
            "<p>test</p>"
          ]
        },
        "contentReference": {
          "path": "/content/dam/orlowska-test/assets/gold.png",
          "status": "PUBLISHED",
          "title": "Goldish star",
          "name": "gold.png",
          "type": "asset",
          "id": "b8182bf6-9587-4370-92de-7a1d9edaea3c",
          "mimeType": "image/png",
          "size": 13299,
          "height": 300,
          "width": 500,
          "created": {
            "at": "2023-01-09T08:08:19.756Z",
            "by": "orlowska@adobe.com"
          }
        },
        "contentReferenceMultipleLimitedTo3": [
          {
            "path": "/content/dam/dwr-bad/5466071.jpg"
          }
        ],
        "contentReferenceUnlimited": [],
        "fragmentReferenceSingle": {
          "path": "/content/dam/bturchyk/personal-instance-of-common-dev-fragment",
          "status": "PUBLISHED",
          "title": "Personal Instance Of Common Dev Fragment ",
          "name": "personal-instance-of-common-dev-fragment",
          "type": "contentfragment",
          "id": "f76cd015-22e6-4ec4-85ba-4ce2558bd27d",
          "model": {
            "path": "/conf/shared-tests/settings/dam/cfm/models/dev-testing",
            "title": "dev-testing"
          }
        },
        "fragmentReferenceMultipleLimitedTo3": [],
        "fragmentReferenceMultipleUnlimited": [],
        "jason": null,
        "tags": null
      },
      "tags": [
        {
          "id": "extras:development",
          "name": "extras/development"
        }
      ]
    },
    "another_variation": {
      "title": "Another Variation",
      "description": "",
      "elements": {
        "placeholder": null,
        "author": "You And What Author?!",
        "boolean": true,
        "dateTime": "2022-05-21T06:00:00.000Z",
        "number": null,
        "numberMulti": [],
        "enumeration": "One",
        "multilineSingleRichText": {
          "contentType": "text/html",
          "value": "<p><img src=\"/content/dam/bturchyk/assets/download.jpeg\" alt=\"download.jpeg\" data-content=\"/content/dam/bturchyk/assets/download.jpeg\" width=\"275\" height=\"183\"></p>"
        },
        "multilineMultipleRichText": {
          "contentType": "text/html",
          "value": [
            "<p>!badge here</p>"
          ]
        },
        "contentReference": "/content/dam/bturchyk/assets/Firefly_a+flat penguin in a fancy dress is fighting an elephant in a pyjama using a snowplow, as if drawn by Miro_photo_86288.jpg",
        "contentReferenceMultipleLimitedTo3": [
          {
            "path": "/content/dam/dwr-bad/5466071.jpg"
          }
        ],
        "contentReferenceUnlimited": [],
        "fragmentReferenceSingle": {
          "path": "/content/dam/orlowska-test/q-3",
          "status": "MODIFIED",
          "title": "q3",
          "name": "q-3",
          "type": "contentfragment",
          "id": "b43ddc6a-84e0-4cb5-8ae2-c68e3ab47456",
          "model": {
            "path": "/conf/shared-tests/settings/dam/cfm/models/dev-testing",
            "title": "dev-testing"
          }
        },
        "fragmentReferenceMultipleLimitedTo3": [
          {
            "path": "/content/dam/bturchyk/delete-me-please"
          }
        ],
        "fragmentReferenceMultipleUnlimited": [],
        "jason": null,
        "tags": null
      },
      "tags": [
        {
          "id": "extras:development",
          "name": "extras/development"
        }
      ]
    }
  },
  "metadata": {
    "title": "Default Test Fragment 123faf",
    "description": "Content Fragment for development testing "
  }
}

function fingerprint(input) {
	return CryptoJS.MD5(JSON.stringify(input)).toString(CryptoJS.enc.Hex)
}

Test runner

Ready to run.

Testing in
TestOps/sec
hashing the whole editables
const fp = fingerprint(editables)
ready
hashing separate variations
const fp = { variations: Object.values(editables.variations).map(fingerprint)
,
metadata: fingerprint(editables.metadata)
}
ready
hashing separate fields
const fp = { variations: Object.values(editables.variations).map((variation) => {
	return Object.values(variation).map(fingerprint)
})
,
metadata: fingerprint(editables.metadata)
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.