Scalazのscaladoc内のjavascriptファイルが数MBあって巨大で遅い件について考えた


さきに結論:
sonatypeに自動でjavadocやscaladoc展開する機能あるけど、なにも最適化されてなくて遅い。javadoc.ioはキャッシュやgzip圧縮対応されてるのか速い



きっかけとなったissue

https://github.com/scalaz/scalaz/issues/1385


sonatypeのやつはこれ

sonatypeに特定のURLでアクセスすると、javadocやscaladocを展開して表示してくれる機能がある件

https://oss.sonatype.org/service/local/repositories/releases/archive/org/scalaz/scalaz-core_2.12/7.3.0-M12/scalaz-core_2.12-7.3.0-M12-javadoc.jar/!/scalaz/index.html

たしかにchromeのdev toolでみると色々遅かった。キャッシュが全然効いてなさそうな感じ。その巨大な index.js のダウンロードに数十秒かかる。
ちなみに、このindex.jsの中身を見てみたけれど、検索用のjsonっぽい。

scalaz-core_2.12 7.3.0-M12 だと index.js が 7.4MB。 unidoc だと 8.7 MB ある





javadoc.ioの方を見たら、キャッシュされてるし、キャッシュ無効にしても、gzip圧縮されてる?のか、7.4MB のはずが 495KB になってる?ので速い

http://static.javadoc.io/org.scalaz/scalaz-core_2.12/7.3.0-M12/scalaz/index.html



じゃあなぜscalazのscaladocはsonatypeのほうのリンクを貼ってるか?

http://scalaz.github.io/scalaz/


というと、以前から以下の様なことをしており


sbtでunidocを自動でsonatypeにpublishする


この「publishしたunidoc」を、 javadoc.io さんが認識してくれないからです。
認識してくれないのは、おそらくpom.xmlをpublishせずにdocのjarのみpublishしているから、などによるとおもわれる・・・。


scalaz-coreのみ、とか、scalaz-concurrentのみ、みたいなscaladocでいいなら、今でもjavadoc.io経由で見れる(unidocはこれ書いてる2017年5月現在見れない)


しかし、ここまで違うなら、ダミーのpom.xml置くなどして、javadoc.ioに乗り換えようかなぁ・・・。


あと、説明とやった順番が逆になりますが、独自にその巨大な index.js のみを圧縮、というのもできたが、効果ないわけではないが、とにかくsonatypeのほうはキャッシュしてくれなかったり色々全体的に遅いので、javadoc.io使ったほうが優秀そう、ということがわかった。