Hi Noam, Thanks for the tips. One (package-earlyload) is to put package-initialize before custom-set-variables, another one (package-lateload) is to put package-initialize after then custom-set-variables. I attahed the diff of the trace-log. The trace-log from package-earlyload has less do-after-load-evaluation items which are supposed to be loaded during the package-initialize. However, it still takes longer time for custom-set-variables during early package initialization. The two items, mail-prsvr.elc and mm-util.elc are in earlyload but not in lateload. On Tue, Mar 13, 2018 at 1:09 AM, Noam Postavsky wrote: > On Mon, Mar 12, 2018 at 12:08 PM, Shuguang Sun wrote: > > FYI. If put (package-initialize) before custom-set-variables, > >>>> before custom-set-variables : 3.637 sec <<< > > Loading image-file...done > > Loading time...done > > Loading completion...done > > Loading elec-pair...done > > Loading icomplete...done > > Loading ido...done > > Loading avoid...done > > Loading savehist...done > > Loading paren...done > >>>> custom-set-variables time: 10.080 sec <<< > > > > Don't know whether autoloads being triggered. It is hard to test one by > one. > > Try > > ... > (require 'trace) > (trace-function 'do-after-load-evaluation) > (custom-set-variables ...) > (untrace-function 'do-after-load-evaluation) > > and see if there is a difference in the *trace-output* buffer when you > call package-initialize first. > > Maybe also do (mapc #'require '(image-file time completion elec-pair > ido avoid savehist paren)) to get the known loads (which I see listed > in your output above) out of the way. >