scaleAndTranslateSelf(sx, sy, tx, ty) {
        const a = this.values;

        const m00 = a[0], m01 = a[1], m02 = a[2];
        const m10 = a[3], m11 = a[4], m12 = a[5];

        a[0] = sx * m00;
        a[1] = sx * m01;
        a[2] = sx * m02;

        a[3] = sy * m10;
        a[4] = sy * m11;
        a[5] = sy * m12;

        a[6] = tx * m00 + ty * m10 + a[6];
        a[7] = tx * m01 + ty * m11 + a[7];
        a[8] = tx * m02 + ty * m12 + a[8];
    }
Scaling & translation only changes certain values, no need to compute full matrix multiplication.
Optimization: in case the original matrix can be thrown away, optimize instead by computing in-place.
@memberof OpenSeadragon.Mat3