Choose a version:
53% The original file has 1167012 bytes (1,139.7k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 615971 bytes (601.5k, 53%).

After GZIP compression these minified files vary in size:
unpkg
  205579 bytes (200.8k)
CDN
gzip -6 (default)
  151973 bytes (148.4k)
local copy
jsdelivr
  151798 bytes (148.2k)
CDN
gzip -9
  151446 bytes (147.9k)
local copy
libdeflate -12
  146201 bytes (142.8k)
local copy
7zip -mx=9 -tgzip
  146058 bytes (142.6k)
local copy
zultra
  145964 bytes (142.5k)
local copy
kzip -s0 -rn -b8
  145833 bytes (142.4k)
local copy
Zopfli
  145680 bytes (142.3k)
local copy
pigz -11 -n
  145566 bytes (142.2k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/threejs/three-r133.min.js (or via HTTPS)

You will automatically get the smallest ThreeJS 133 file, ETag caching is available and
if your browser doesn't support GZIP decompression then the uncompressed version will be sent.

Currently best Zopfli settings

Save 6118 bytes by using my ThreeJS 133 Zopfli version instead of the best available CDN (4.20% smaller than jsdelivr, 145680 vs. 151798 bytes):
You can use my super-compressed files for whatever purpose you like as long as you respect the library's original license agreement.
There are no restrictions from my side - but please avoid hot-linking if you run a high-traffic website.

These command-line settings yielded the best compression ratio so far (Linux version of zopfli-krzymod):
zopfli --i1000000 --mb8 --mls16384 --bsr7 --lazy --ohh

(found October 6, 2021)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 7  --bsr7
lazy matching in LZ77 yes  --lazy
optimized Huffman headers yes  --ohh
initial random W for iterations 1  --rw1
initial random Z for iterations 2  --rz2

Even Smaller Files Thanks To Defluff

Zopfli's output can be further optimized by the defluff tool.
In this particular case, defluff saves 4 more bytes (145676 bytes).

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://raw.githubusercontent.com/mrdoob/three.js/r133/build/three.min.js --location | md5sum
565cba95a62de107680cdef14abc37e7  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r133.min.zopfli.js.gz | md5sum
565cba95a62de107680cdef14abc37e7  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mrdoob/three.js/r133/build/three.min.js --location | sha1sum
9110ff3554b09c22349fb8edf2764bd36cf48d67  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r133.min.zopfli.js.gz | sha1sum
9110ff3554b09c22349fb8edf2764bd36cf48d67  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 205579 bytes 565cba95a62de107680cdef14abc37e7 (invalid)
jsdelivr 151798 bytes 565cba95a62de107680cdef14abc37e7 October 4, 2021 @ 12:57

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available ThreeJS versions at minime.stephan-brumme.com:

133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, D3, Dojo, Ember, jQuery, Knockout, lodash, React, Socket.IO, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
145680 bytes -3 bytes zopfli --i1000000 --mls16384 --bsr7 --lazy --ohh October 6, 2021 @ 17:11
145683 bytes -10 bytes zopfli --i100000 --mls16384 --bsr7 --lazy --ohh October 4, 2021 @ 18:42
145693 bytes -21 bytes zopfli --i10000 --mls16384 --bsr7 --lazy --ohh October 4, 2021 @ 15:48
145714 bytes -45 bytes zopfli --i1000 --mls16384 --bsr7 --lazy --ohh October 4, 2021 @ 15:10
145759 bytes zopfli --i100 --mls16384 --bsr7 --lazy --ohh October 4, 2021 @ 13:12

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on October 6, 2021 @ 17:19.

Heatmaps

This Zopfli heatmap visualizes how compression changes when modifying the --bsr and --mls parameter.
Cell's contents is the best filesize achieved (in bytes, hover with mouse over cells to see number of iterations).

Good parameters are green, bad are red. The best and worst are bold as well.
The brightness of the blue background color indicates how many iterations were processed:
10,000, 100,000 or 1,000,000.
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
145923 145882 145956 145913 145897 145894 145874 145824 145828 145878 145805 145868 145814 145835 145804
145822 145811 145809 145794 145829 145937 145980 145878 145793 145980 145849 145768 145828 145723 145786
145914 145902 145908 145785 145842 145843 145785 145780 145782 145815 145795 145790 145816 145788 145803
145909 145795 145969 145865 145819 145894 145830 145872 145809 145834 145817 145819 145757 145680 145777
145795 145797 145867 145949 145851 145863 145868 145868 145950 145825 145787 145781 145771 145800 145800
145936 145915 145831 145787 145916 145873 145955 145919 145819 145815 145798 145833 145796 145789 145777
145967 145904 145924 145872 145853 145864 145852 145856 145822 145802 145793 145833 145790 145787 145784
145952 145918 145860 145862 145849 145853 145850 145870 145949 145815 145826 145746 145800 145767 145787
145956 145940 145872 145924 145986 145846 145846 145942 145818 145815 145801 145760 145719 145801 145795
145926 145953 145974 145873 145951 145866 145852 145967 145964 145833 145807 145793 145767 145789 145774
145915 145819 145922 145912 145942 145849 145885 145863 145835 145803 145782 145761 145794 145819 145842
145918 145817 145857 145950 145850 145845 145845 145867 145928 145831 145812 145781 145790 145803 145806
145963 145853 145852 145944 145942 145782 145852 145862 145800 145827 145797 145756 145775 145777 145799
145864 145905 145868 145858 145908 145859 145959 145912 145958 145805 145791 145817 145771 145819 145776
145940 145948 145942 145950 145849 145849 145828 145828 145803 145825 145785 145793 145769 145805 145803
145957 145820 145912 145838 145923 145850 145928 145820 145785 145758 145795 145783 145788 145815 145811
145793 145852 145809 145813 145824 145864 145957 145910 145780 145820 145785 145812 145796 145774 145782
145961 145905 145853 145913 145847 145856 145917 145869 145766 145756 145794 145774 145804 145781 145807
145934 145906 145875 145853 145779 145865 145781 145850 145944 145923 145793 145799 145788 145785 145789
145958 145901 145912 145853 145849 145850 145906 145919 145812 145762 145781 145799 145793 145776 145802
145862 145802 145860 145846 145823 145855 145905 145802 145768 145755 145794 145803 145817 145749 145790
145914 145911 145863 145843 145910 145844 145855 145830 145764 145759 145798 145787 145783 145806 145788
145919 145915 145864 145911 145854 145825 145786 145863 145943 145809 145801 145782 145798 145783 145787

Due to the Monte Carlo design of my search algorithm, not all parameters have reached the same number of iterations yet:
Iterations Min. Bytes Reduction Coverage
100 145759 bytes 100%
1,000 145714 bytes -45 bytes 100%
10,000 145693 bytes -21 bytes 100%
100,000 145683 bytes -10 bytes 0.87%
1,000,000 145680 bytes -3 bytes 0.29%
10,000,000

KZIP has far less options available for tuning/optimization. I only played around with the number of blocks (parameter -n):
Blocks Min. Bytes Compared To Best Zopfli Compared To Best KZIP
145853 bytes +173 bytes (+0.12%) +20 bytes
146202 bytes +522 bytes (+0.36%) +369 bytes
146185 bytes +505 bytes (+0.35%) +352 bytes
146058 bytes +378 bytes (+0.26%) +225 bytes
145952 bytes +272 bytes (+0.19%) +119 bytes
145900 bytes +220 bytes (+0.15%) +67 bytes
145933 bytes +253 bytes (+0.17%) +100 bytes
145870 bytes +190 bytes (+0.13%) +37 bytes
145833 bytes +153 bytes (+0.11%)

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
However, support for Brotli is constantly growing - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 98513 bytes -47167 bytes (-32.38%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 113702 bytes -31978 bytes (-21.95%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 117356 bytes -28324 bytes (-19.44%)
Brotli (Wikipedia) brotli brotli -q 11 123554 bytes -22126 bytes (-15.19%)
LZMA2 (Wikipedia) xz xz -9 123920 bytes -21760 bytes (-14.94%)
Zstandard (Wikipedia) zstd zstd -19 130101 bytes -15579 bytes (-10.69%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 131208 bytes -14472 bytes (-9.93%)

Detailled Analysis

I wrote a DEFLATE decoder in Javascript. Click the button below to start a client-side analysis of the smallest gzipped files (may take a second):


Notes: pigz is a fast open source multi-threaded implementation of gzip written by one of the original authors of gzip.
However, when using compression level 11, pigz actually switches to the slower Zopfli algorithm and isn't multi-threaded anymore.
KrzyMOD's extensions to Zopfli offer the highest level of configuration and is therefore used for my brute-force search.
Ken Silverman wrote the closed-source KZIP compression program and Jonathon Fowler ported it to Linux.
Defluff was created by Joachim Henke; DeflOpt is a tool by Ben Jos Walbeehm.

website made by Stephan Brumme in 2015 and still improving in 2021.
all timestamps are displayed in central european time. see my changelog.
no flash, not even images or external css files - and everything squeezed into a single html file.
which was handsomely compressed before releasing it into the wild internet - obviously.

please visit my homepage and my blog, too.
email: minime (at) stephan-brumme.com

All trademarks are property of their respective owners. You know, the boring legal stuff.