- From: Douglas Sherk <dsherk@mozilla.com>
- Date: Thu, 4 Sep 2014 12:58:49 -0700 (PDT)
- To: public-webapps@w3.org
Hi all,
Currently, there's no way to compare the contents of two Blobs without writing your own byte-by-byte comparison. A use case I can see for this is setting webapp wallpapers and wanting to see if an image that a user uploaded is the same as one already in a gallery, but without having to query a server or store them as anything other than blobs.
I have an example of what the byte-by-byte comparison code looks like. [1]
Here's a much simpler test case:
```
<script>
var blobA = new Blob(['hello'], {type: 'text/html'});
var blobB = new Blob(['hello'], {type: 'text/html'});
// Prints "blobA and blobB are not equal"
alert('blobA and blobB are ' + (blobA == blobB ? 'equal' : 'not equal'));
</script>
```
Obviously, since byte-by-byte blob comparisons can be very expensive, I think it's dangerous to provide this with a simple "==" check, so I don't actually think we should do anything about this. However, Jonas Sicking proposed an interface like this:
```
p = blob.isEqual(otherblob);
p.then((equal) => {
if (equal === true) {
alert("they were equal");
}
else {
alert("they were not equal");
}
});
```
This would guarantee the following about the blobs:
1) they are the same MIME type,
2) they are byte-by-byte equal.
It could also perform shortcuts (note: these are implementation details) such as:
1) checking the sizes and if they're different, bailing out early,
2) using memcmp and such when appropriate.
This is discussed further on Mozilla's bug tracker. [2]
Doug
[1] https://bug1029064.bugzilla.mozilla.org/attachment.cgi?id=8445567
[2] https://bugzilla.mozilla.org/show_bug.cgi?id=1029064
Received on Friday, 5 September 2014 07:14:03 UTC