TL; DR 엄청난 양의 패키지가있어서 시작 시간을 아프게합니다. 그럴 수 있다고 생각하지 않으면 계속 읽으십시오.
나의 Emacs 시작 시간은 매우 작습니다. 나는 사용하지 않고 use-package
, autoload
거의 모든 코드가 연기되도록 많은 후크와 s를 설정 했다. 실제로 모든 것이 미친 혼란처럼 보이지만 일반적으로 0.5 초 미만으로로드됩니다.
그러나 시간이 지남에 따라 시작 시간이 약간 느려져 설명 할 수없는 것으로 나타났습니다 . 결국 시작 시간이 1 초 이상인 지점에 도달했습니다. 나는 마침내 충분했고 문제의 근원을 파헤 쳤다. 결국 전체 ~/.emacs
파일을 주석 처리하고 시작 시간이 여전히 1 초 이상 임을 알았습니다 . 실제로, 그것은 ~ 0.2
초만 면도하고 때로는 더 적게 면도했습니다 . 그런 다음 emacs -q
시작 시간이 ~ 0.1
초라 는 것을 알았 습니다.
검사시 이 부분 Elisp 매뉴얼을, 나는 이유를 발견 emacs -q
너무 많은 시작 시간을 단축했다. 분명히 emacs -q
시작할 때 세 가지 일을에서 이맥스를 중지 :
- init 파일로드
default.el
파일 로드- 부름
package-initialize
우리는 이미 init 파일을 모두 배제했습니다 ~/.emacs
. 나는 default.el
파일을 사용하지 않으므로 배제됩니다. package-initialize
성능 히트의 범인으로 남습니다 .
package-initialize
시작 시간이 너무 많은 이유는 무엇 입니까? 그게 내가 물었던 첫 번째 질문이었습니다. 모든 것을 자동로드하지 않습니까? 그래 그러나 그것은 정확히 문제입니다.
"활성화"패키지가 자동로드 파일 읽기 및로드 경로 설정으로 구성되어 있음을 설명하는 이 게시물 을 찾았 습니다 . 읽을 수있는 많은 자동로드 파일과 설정해야 할 경로가 많기 때문에 패키지가 많은 경우 분명히 I / O 패널티가 발생합니다. 불행히도, 이것이 없으면 자동로드 관리 작업이 사용자의 손에 달려 있습니다. 즉, package.el
파일 시스템을 자동로드 파일 및 경로로 크롤링 하지 않으면 지루하고 오류가 발생하기 쉬운 프로세스를 직접 관리해야합니다.
나는 그 길로 내려 가지 않는 것을 선호합니다. 현재 116 개의 패키지가 있으며 ELPA의 패키지 중 107 개와 종속성 중 25 개가 있습니다. 이 엄청난 숫자가 내 성능을 심하게 저하시키는 요소라고 확신합니다. 그러나 패키지를 제거하고 싶지 않기 때문에 나는 일시적입니다.
이러한 상황에서 번개가 다시 시작되는 시간에 구제책이 있습니까?
최신 정보:
이 문제를 해결하기 위해 메일 링리스트 에서 Stefan Monnier의 일부 패치 (이 패치에 대한 설명은 here ) 에 대한 새로운 스레드 를 시작했습니다 . 누구나 패치를 테스트하고 피드백을 제공 할 수 있습니다.emacs-devel
또 다른 업데이트 :
Stefan Monnier가 더 이상이 문제에 관심이 없거나 내 메시지를받지 못하는 것 같습니다. 나는 전자를 믿는 경향이 있습니다. 그렇다면 괜찮습니다. 그의 경우에는 그에게서 어떤 반응을 보일 것입니다. 어쨌든,이 문제에 대해 그가 작성한 코드는 꽤 잘 작동합니다. 그의 최신 패치는 여기 (Emacs 25.3) 와 여기 (Emacs 마스터 브랜치) 에서 찾을 수 있습니다 .패치 덕분에 시작 시간이 크게 향상되었으며 시작 시간에 익숙해 져서 사용자 지정 기능을 없애지 않고도 최대한 최적화 된 시점에 있습니다. 나는이 패치들이 언젠가는 이맥스 메인 라인으로 만들어지기를 바랐지만, 나는 스테판 대신에 지금이나 다른 누군가가 그것을 위해 횃불을 가져 가야한다고 생각한다. 우리는 메일 링리스트에 저작권 할당 및 라이센스에 관한 약간의 스파를 가졌습니다. 처음에는 그렇게하는 것이 불편했지만 Richard Stallman과 다른 사람들의 의견으로 인해 저작권 할당이 원래 생각했던 것만 큼 제한적이지 않을 수 있습니다. 또한 저의 저작물을 저작권 할당의 대안으로 퍼블릭 도메인에 커밋 할 수 있습니다.
어쨌든, 지금까지 패치에 대해 Stefan에게 감사드립니다! 이러한 변화를 계속 발전 시키길 희망하지만, 그렇지 않다면 괜찮아 어느 시점에서 계속 발전 할 수 있습니다. 이 문제를 해결하는 데 통찰력과 기여를 한 다른 모든 분들께도 감사드립니다.
또 다른 업데이트 :
와우,이 기능은 마침내 도착했고 Emacs 27에있을 것 같습니다 . Stefan Monnier에게 감사합니다!
use-package
이것을위한 길입니다.