Atomパッケージのloading timeとactivation timeを改善した話
引続きlanguage-context-freeの話です。
AtomにはTimecopというパッケージがあって、起動時間の計測結果を表示することができます。
左側のPackage Loading, Package Activationペインに各パッケージの時間が出るのですが、language-context-freeのロードに時間が掛かっているのが気になりました。
調べていくと、AtomのディスカッションにHow To Speed Up Your Packages - Atom Discussionというpostがあって、パッケージの起動時間を改善する方法がありました。
やり方はいつくか紹介されていたのですが、今回は"Do not require modules before activation."(activateの前にモジュールのrequireを実行しない)を適用してみました。
具体的には、ファイルの先頭にあるrequireを遅延実行するように変更しています。
[適用前]
Builder = require './models/builder'
module.exports =
activate: (state) ->
@builder = new Builder()
deactivate: ->
@builder.destroy()
@builder = null
[適用後]
Builder = null
module.exports =
activate: (state) ->
Builder ?= require './models/builder'
@builder = new Builder()
deactivate: ->
@builder.destroy()
@builder = null
自分のパッケージでは、 Improve package loading and activation time · kn1kn1/language-context-free@d869d93 · GitHub が、適用分のコミットです。パッケージのメインモジュール以外にもactivateで実行されるような箇所は同様に適用しています。
以下が適用後のTimecopの結果です。language-context-freeのロードは5msec以下に改善され、Package Loadingのペインには表示されなくなりました。
おわりに
Atomというと、皆口を揃えて「起動が遅い」と仰られるのですが、原因は個々のパッケージのにあるのかもしれないですね。個々のパッケージに依存してしまいますが、この辺りが改善されるとAtom全体の起動時間の改善も期待できるのではないでしょうか。
また、Atom Blogの以下のポストでは、"Improved startup time"ということでAtom本体側の対応も紹介されているので、こちらも期待したいところですね。