概要
Lodashは便利なnpmパッケージですが、ファイルサイズが非常に大きいです。
圧縮前で71.5kB、圧縮後で25.2kBなので、import _ from 'lodash'
をフロントエンド開発でやってしまうと、画面のJSロード時間に影響が出てしまいます。
解決策として、import range from 'lodash/range'
のように、1つのメソッドだけをインポートすることが知られています。
しかし、実はメソッドによってファイルサイズが異なります。
例えば、lodash/max
は 1.6kB ですが、lodash/omit
は 21.5kBもあります。これは lodash/omit
がいくつかの内部メソッドをインポートしているためで、特に _baseClone.js
のファイルサイズが大きいからです。
このようにインポートする内部メソッドによってファイルサイズがかなり異なるため、全てのメソッドのファイルサイズを計算してみました。
メソッドごとのファイルサイズ
Function Name | File Size(kB) | Gzip file Size(kB) |
---|---|---|
iteratee | 24.6 | 7.5 |
matchesProperty | 23.4 | 7.2 |
xorBy | 22.2 | 7.2 |
sortBy | 22.2 | 7.2 |
unionBy | 21.6 | 6.9 |
omit | 21.5 | 6.6 |
differenceBy | 21.4 | 6.9 |
matches | 21.3 | 6.5 |
intersectionBy | 21.2 | 6.8 |
omitBy | 20.9 | 6.6 |
flatMapDepth | 20.7 | 6.7 |
overEvery | 20.6 | 6.6 |
over | 20.5 | 6.6 |
overSome | 20.5 | 6.6 |
pickBy | 20.5 | 6.5 |
overArgs | 20.4 | 6.6 |
orderBy | 20.4 | 6.6 |
cond | 20.1 | 6.4 |
findLast | 20.0 | 6.5 |
find | 20.0 | 6.5 |
groupBy | 19.9 | 6.4 |
countBy | 19.9 | 6.4 |
keyBy | 19.9 | 6.4 |
uniqBy | 19.8 | 6.4 |
flatMapDeep | 19.8 | 6.4 |
flatMap | 19.8 | 6.4 |
findLastIndex | 19.7 | 6.4 |
findIndex | 19.7 | 6.4 |
every | 19.7 | 6.3 |
reject | 19.7 | 6.3 |
partition | 19.6 | 6.3 |
some | 19.6 | 6.3 |
pullAllBy | 19.6 | 6.3 |
transform | 19.6 | 6.3 |
reduce | 19.5 | 6.3 |
reduceRight | 19.5 | 6.3 |
remove | 19.5 | 6.3 |
map | 19.4 | 6.2 |
filter | 19.4 | 6.2 |
invertBy | 19.3 | 6.2 |
mapKeys | 19.3 | 6.2 |
mapValues | 19.3 | 6.2 |
findLastKey | 19.1 | 6.1 |
findKey | 19.1 | 6.1 |
sortedLastIndexBy | 19.1 | 6.2 |
sortedIndexBy | 19.0 | 6.2 |
dropRightWhile | 19.0 | 6.1 |
takeRightWhile | 19.0 | 6.1 |
dropWhile | 19.0 | 6.1 |
takeWhile | 19.0 | 6.1 |
maxBy | 18.9 | 6.1 |
minBy | 18.9 | 6.1 |
meanBy | 18.9 | 6.0 |
sortedUniqBy | 18.9 | 6.0 |
sumBy | 18.8 | 6.0 |
conforms | 17.2 | 5.2 |
cloneDeepWith | 16.9 | 5.1 |
cloneWith | 16.9 | 5.1 |
clone | 16.9 | 5.1 |
cloneDeep | 16.9 | 5.1 |
isMatchWith | 15.2 | 4.9 |
isMatch | 15.1 | 4.9 |
defaultsDeep | 14.8 | 4.8 |
isEqualWith | 14.6 | 4.7 |
mergeWith | 14.6 | 4.7 |
merge | 14.6 | 4.7 |
isEqual | 14.5 | 4.7 |
bindAll | 14.0 | 5.2 |
rearg | 13.4 | 5.0 |
invokeMap | 13.1 | 4.3 |
wrap | 12.8 | 4.8 |
bind | 12.6 | 4.8 |
bindKey | 12.6 | 4.8 |
partial | 12.6 | 4.8 |
partialRight | 12.6 | 4.8 |
unary | 12.3 | 4.6 |
curryRight | 12.3 | 4.6 |
curry | 12.3 | 4.6 |
ary | 12.2 | 4.6 |
flip | 12.2 | 4.6 |
template | 12.0 | 4.3 |
pick | 11.3 | 3.8 |
pullAt | 11.2 | 3.8 |
xorWith | 10.7 | 3.5 |
xor | 10.5 | 3.4 |
at | 9.9 | 3.3 |
unionWith | 9.8 | 3.2 |
union | 9.6 | 3.2 |
differenceWith | 9.6 | 3.1 |
difference | 9.5 | 3.1 |
method | 9.4 | 3.1 |
methodOf | 9.4 | 3.1 |
invoke | 9.3 | 3.1 |
intersectionWith | 9.0 | 3.0 |
updateWith | 8.9 | 3.0 |
update | 8.9 | 3.0 |
intersection | 8.8 | 2.9 |
without | 8.6 | 2.8 |
zipObjectDeep | 8.6 | 2.9 |
setWith | 8.5 | 2.9 |
has | 8.5 | 2.8 |
set | 8.5 | 2.9 |
hasIn | 8.4 | 2.8 |
toArray | 8.2 | 2.9 |
unset | 8.1 | 2.7 |
property | 7.8 | 2.6 |
assign | 7.8 | 2.8 |
extendWith | 7.7 | 2.8 |
assignWith | 7.7 | 2.8 |
extend | 7.7 | 2.8 |
assignInWith | 7.7 | 2.8 |
assignIn | 7.7 | 2.8 |
get | 7.7 | 2.5 |
propertyOf | 7.7 | 2.5 |
result | 7.6 | 2.5 |
uniqWith | 7.3 | 2.4 |
uniq | 7.2 | 2.3 |
toPath | 7.2 | 2.3 |
defaults | 7.1 | 2.6 |
flowRight | 7.0 | 2.6 |
flow | 7.0 | 2.6 |
entries | 6.9 | 2.4 |
entriesIn | 6.8 | 2.4 |
toPairs | 6.8 | 2.4 |
toPairsIn | 6.8 | 2.4 |
sampleSize | 6.8 | 2.4 |
create | 6.5 | 2.3 |
includes | 6.4 | 2.3 |
camelCase | 6.4 | 2.6 |
startCase | 6.3 | 2.6 |
toPlainObject | 6.1 | 2.2 |
isEmpty | 5.9 | 2.1 |
memoize | 5.7 | 1.9 |
truncate | 5.6 | 2.1 |
mixin | 5.5 | 2.0 |
shuffle | 5.4 | 1.9 |
each | 5.4 | 1.9 |
eachRight | 5.4 | 1.9 |
forEach | 5.4 | 1.9 |
forEachRight | 5.4 | 1.9 |
invert | 5.3 | 1.8 |
sample | 5.2 | 1.8 |
kebabCase | 5.1 | 2.3 |
snakeCase | 5.1 | 2.3 |
lowerCase | 5.1 | 2.3 |
upperCase | 5.1 | 2.3 |
spread | 5.1 | 2.0 |
forOwnRight | 5.0 | 1.8 |
forOwn | 5.0 | 1.8 |
size | 5.0 | 1.9 |
forInRight | 4.9 | 1.8 |
forIn | 4.9 | 1.8 |
pad | 4.9 | 1.8 |
padEnd | 4.8 | 1.8 |
padStart | 4.8 | 1.8 |
functions | 4.8 | 1.7 |
functionsIn | 4.8 | 1.7 |
nthArg | 4.8 | 1.9 |
values | 4.8 | 1.7 |
valuesIn | 4.8 | 1.7 |
conformsTo | 4.8 | 1.7 |
zipWith | 4.7 | 1.8 |
pull | 4.6 | 1.8 |
rest | 4.6 | 1.8 |
keys | 4.5 | 1.6 |
keysIn | 4.5 | 1.6 |
split | 4.5 | 1.7 |
delay | 4.4 | 1.7 |
zip | 4.4 | 1.7 |
attempt | 4.3 | 1.6 |
trim | 3.8 | 1.5 |
repeat | 3.7 | 1.5 |
isMap | 3.7 | 1.4 |
isSet | 3.7 | 1.5 |
defer | 3.7 | 1.5 |
trimEnd | 3.5 | 1.4 |
fill | 3.5 | 1.4 |
trimStart | 3.4 | 1.4 |
random | 3.4 | 1.4 |
chunk | 3.4 | 1.4 |
slice | 3.3 | 1.3 |
rangeRight | 3.3 | 1.3 |
range | 3.3 | 1.3 |
deburr | 3.2 | 1.5 |
words | 3.2 | 1.4 |
isWeakMap | 3.2 | 1.3 |
throttle | 3.2 | 1.3 |
capitalize | 3.1 | 1.2 |
flattenDepth | 3.1 | 1.2 |
lowerFirst | 3.0 | 1.2 |
upperFirst | 3.0 | 1.2 |
floor | 3.0 | 1.2 |
round | 3.0 | 1.2 |
ceil | 3.0 | 1.2 |
debounce | 2.9 | 1.3 |
zipObject | 2.9 | 1.2 |
endsWith | 2.9 | 1.2 |
startsWith | 2.9 | 1.2 |
unzipWith | 2.7 | 1.0 |
indexOf | 2.7 | 1.1 |
lastIndexOf | 2.6 | 1.1 |
times | 2.6 | 1.1 |
nth | 2.5 | 1.1 |
dropRight | 2.5 | 1.1 |
takeRight | 2.5 | 1.1 |
drop | 2.5 | 1.1 |
take | 2.5 | 1.0 |
once | 2.4 | 1.0 |
toSafeInteger | 2.4 | 1.0 |
isTypedArray | 2.4 | 0.9 |
before | 2.4 | 1.0 |
isNative | 2.4 | 1.0 |
isSafeInteger | 2.4 | 1.0 |
toLength | 2.4 | 1.0 |
after | 2.3 | 1.0 |
unzip | 2.3 | 0.9 |
inRange | 2.3 | 1.0 |
isInteger | 2.2 | 0.9 |
concat | 2.2 | 0.9 |
clamp | 2.2 | 0.9 |
gt | 2.2 | 0.9 |
lt | 2.2 | 0.9 |
toInteger | 2.2 | 0.9 |
gte | 2.1 | 0.9 |
lte | 2.1 | 0.9 |
sortedIndexOf | 2.1 | 0.9 |
sortedLastIndexOf | 2.1 | 0.9 |
add | 2.1 | 0.9 |
divide | 2.1 | 0.9 |
subtract | 2.1 | 0.8 |
multiply | 2.1 | 0.8 |
unescape | 2.1 | 0.9 |
toFinite | 2.1 | 0.9 |
escape | 2.1 | 0.9 |
flattenDeep | 2.0 | 0.8 |
flatten | 2.0 | 0.8 |
sortedLastIndex | 2.0 | 0.9 |
sortedIndex | 2.0 | 0.9 |
toNumber | 1.9 | 0.8 |
parseInt | 1.9 | 0.8 |
escapeRegExp | 1.9 | 0.8 |
replace | 1.9 | 0.8 |
isError | 1.8 | 0.7 |
uniqueId | 1.8 | 0.8 |
toLower | 1.8 | 0.8 |
toUpper | 1.8 | 0.8 |
chain | 1.8 | 0.7 |
toString | 1.7 | 0.7 |
isArrayBuffer | 1.7 | 0.7 |
isElement | 1.7 | 0.7 |
isArrayLikeObject | 1.7 | 0.7 |
isRegExp | 1.7 | 0.7 |
isDate | 1.7 | 0.7 |
isPlainObject | 1.6 | 0.7 |
max | 1.6 | 0.7 |
min | 1.6 | 0.7 |
isArrayLike | 1.6 | 0.7 |
isArguments | 1.5 | 0.6 |
isFunction | 1.4 | 0.6 |
isNaN | 1.3 | 0.6 |
isString | 1.3 | 0.6 |
pullAllWith | 1.3 | 0.6 |
pullAll | 1.3 | 0.6 |
isNumber | 1.3 | 0.5 |
isSymbol | 1.3 | 0.5 |
isBoolean | 1.3 | 0.5 |
isWeakSet | 1.2 | 0.5 |
isBuffer | 0.8 | 0.4 |
isFinite | 0.6 | 0.3 |
now | 0.6 | 0.3 |
mean | 0.5 | 0.3 |
negate | 0.5 | 0.3 |
sortedUniq | 0.5 | 0.3 |
tail | 0.4 | 0.3 |
initial | 0.4 | 0.3 |
sum | 0.4 | 0.2 |
castArray | 0.3 | 0.2 |
compact | 0.3 | 0.2 |
fromPairs | 0.3 | 0.2 |
isLength | 0.2 | 0.2 |
isObject | 0.2 | 0.2 |
join | 0.2 | 0.2 |
reverse | 0.2 | 0.2 |
first | 0.2 | 0.2 |
last | 0.2 | 0.2 |
head | 0.2 | 0.2 |
isObjectLike | 0.2 | 0.2 |
constant | 0.2 | 0.1 |
defaultTo | 0.2 | 0.2 |
eq | 0.2 | 0.2 |
isUndefined | 0.2 | 0.1 |
tap | 0.2 | 0.1 |
isNull | 0.2 | 0.1 |
isNil | 0.2 | 0.1 |
thru | 0.2 | 0.1 |
identity | 0.2 | 0.1 |
isArray | 0.2 | 0.1 |
stubArray | 0.2 | 0.1 |
stubObject | 0.2 | 0.1 |
stubString | 0.2 | 0.1 |
stubTrue | 0.2 | 0.1 |
stubFalse | 0.2 | 0.1 |
noop | 0.2 | 0.1 |
感想
20kB以上もあるメソッドが意外に多いですね。
1つのメソッドでと考えるとファイルサイズは大きい方だと思います。
JSファイルサイズを気にしているWebアプリケーションの場合、これを参考に気を付けてもらえればと思います。
その他
- Lodashのバージョン ... 4.17.21
- コンパイル方法など ... https://github.com/matsu012/file-size-lodash