Как я могу заставить Emacs запуститься быстрее?



  
    
    
    
    Static Template
  
  
	  

Current Index:

Следуйте коду, который вы пишете, замена изображений работает правильно, за исключением того, что ввод массива изображений имеет тот же URL.

Поскольку метод indexOf возвращает первый индекс, по которому данный элемент может быть найден в массиве, или -1, если его нет.

var images = ['1.png', '1.png', '1.png'];

//no matter how many times to execute images.indexOf('1.png'), it's always return 0.

Таким образом, лучшее решение состоит в том, чтобы заменить curIndex глобальным числом, как показано ниже:

var curIndex = 0;

function prev() {
    ...
    curIndex -= 1
}

function next() {
    ...
    curIndex += 1;
}

Это решение должно избегать проблемы, с которой вы сталкиваетесь.


Это пример, и он дает некоторые доказательства правильности вашего сценария.

Есть два направления, чтобы найти проблему. Один, чтобы проверить ввод изображений, а другой, попробуйте отладить код в реальной среде.

68
задан Peter Mortensen 18 March 2010 в 16:44
поделиться

12 ответов

In addition to Adam Rosenfield's solution, I recommend to use Emacs in server mode. You may add (server-start) to your dotemacs, and run emacsclient instead of emacs whenever you want to open file in Emacs. That way you have to pay the loading cost of Emacs only once, after then clients pop up immediately.

Edit

You're right, v22 does not create a new frame. Create a shell script that do the trick:

#!/bin/bash
# Argument: filename to open in new Emacs frame
/usr/bin/emacsclient -e '(let ((default-directory "`pwd`/")) (select-frame (make-frame)) (find-file "'$1'"))'
37
ответ дан 24 November 2019 в 14:00
поделиться

I would have to check my customization, but there is a package called gnuserve or emacsclient. It migrates a lot so you will have to google for it.

It runs one emacs session in the background. Any further sessions of emacs are essentially just new frames of that session. One advatage is quick startup times for your later sessions.

1
ответ дан 24 November 2019 в 14:00
поделиться

Это не отвечает на вопрос, но довольно уместно

Я не знаю, как заставить его работать быстрее, но есть несколько вещей, которые я мог бы предложить:

  • для большинства вещей, которые вы делаете в командной строке, вы можете сделать это в emacs:

    • compile: Mx compile, затем введите команду, которую вы используете
    • , мой опыт только с C ++, но с g ++ вы можете нажать Cx ` чтобы перейти к строкам, на которые жалуется компилятор,
    • запустите команды оболочки: M- !, выгрузит вывод в буфер
    • интерактивная оболочка: Mx shell
  • или вы можете запустить emacs так:

    • файл emacs .ext &
    • , который открывает emacs в фоновом режиме, так что вы все равно можете использовать оболочку (это лучше всего работает с putty и X forwarding с чем-то вроде Xming)
3
ответ дан 24 November 2019 в 14:00
поделиться

Одна вещь, о которой другие не упомянули, - это включить библиотеки elisp, которые вы используете как часть сброшенного Emacs , чтобы перенести время загрузки библиотеки из запуска Emacs Emacs построить. Это не для слабонервных, но если вы загрузите несколько библиотек в .emacs , это может выиграть несколько секунд времени запуска.

4
ответ дан 24 November 2019 в 14:00
поделиться

Emacs is designed to run "all the time" (or at least for long periods of time), thus starting and stopping Emacs several times during a day is not recommended.

I would suggest using screen. Screen is a terminal multiplexer, giving you an unlimited virtual terminals in one terminal.

After installing simply write "screen emacs" in your terminal. Emacs will start as usual, but pressing "c-a c" (that is press ctrl-a and then c) will open a new virtual terminal. You can get back to emacs by pressing "c-a c-a" (that's two times ctrl-a).

You can even detach from the running screen session, the key sequence is "c-a d".

Re-attach to the session by issuing "screen -R" and you will be back where you left. This enables you to start an emacs session at work, detach, go home, and re-attach from home.

I've been running Emacs like this for months in a row.

Here's the official web site: http://www.gnu.org/software/screen/ but try googling for screen tutorials and howtos

8
ответ дан 24 November 2019 в 14:00
поделиться

"I tend to open and close emacs a lot, because I'm more comfortable using the bash command line for file/directory manipulation and compiling."

You're describing the way an editor like vim is used like. Shoot in&out. Emacs is usually kept open, and mostly all is done from "within it". hiena already answered what would be the correct approach here.

13
ответ дан 24 November 2019 в 14:00
поделиться

Проверьте файл .emacs и посмотрите, загружаете ли вы ненужные пакеты. Загрузка пакетов может занять значительное количество времени. Например, вам может потребоваться загрузить пакет php-mode , если вы редактируете файл PHP. Вы можете сделать это, установив подключаемую процедуру, хотя я не уверен в деталях.

Также убедитесь, что все загружаемые вами пакеты скомпилированы (файлы .elc ). Вы можете скомпилировать файл elisp , запустив

emacs -batch -f batch-byte-compile thefile.el

Скомпилированные пакеты загружаются намного быстрее, чем не скомпилированные пакеты.

14
ответ дан 24 November 2019 в 14:00
поделиться

Один из

M-x shell
M-x eshell
M-x term
M-x ansi-term

должен отвечать вашим требованиям командной строки из Emacs.

Вы также можете использовать M -! (он же Mx shell- команда ) для выполнения однострочных без перехода в оболочку.

19
ответ дан 24 November 2019 в 14:00
поделиться

Несколько советов:

  1. Использование автозагрузки

    Использование автозагрузки избавляет вас от загрузки библиотек до их использования. Например:

     (if (locate-library "ediff-trees")
     (автозагрузка 'ediff-trees "ediff-trees" "Запустить дерево ediff" т))
    
  2. Скомпилируйте ваш .emacs.

    Дает вам небольшое увеличение скорости, хотя есть ошибки, если вы работать с контролем версий, и ваш .emacs новее, чем .emacs.elc. Один из распространенных приемов:

     (defun autocompile nil
     "скомпилировать себя, если ~ / .emacs"
     (Интерактивный)
     (требуется 'bytecomp)
     (let ((dotemacs (имя-файла-user-init-файл)))
     (if (string = (buffer-file-name) (файл-chase-links dotemacs))
     (байт-компиляция-файл dotemacs))))
    
    (add-hook 'after-save-hook' автокомпиляция)
    
  3. Научитесь любить сервер emacs.

    Запуск emacs в качестве сервера означает, что вам никогда не придется его закрывать. тем не мение Я заметил, что вы все еще используете emacs22. emacs23 поддерживает multi-tty, что делает намного проще запустить emacs за один сеанс экрана, а затем вызвать новые окна в другом терминале. Я использую Emacs для редактирования почты для моей почты client (mutt) и emacsclient отлично подходят для таких быстрых изменений.

21
ответ дан 24 November 2019 в 14:00
поделиться

Не закрывать Emacs каждый раз, когда вы хотите использовать оболочку.Используйте Ctrl-Z, чтобы переместить Emacs на задний план, и команду fg в Bash, чтобы переместить его обратно на передний план.

28
ответ дан 24 November 2019 в 14:00
поделиться

Другие покрывали с помощью gnuserve и emacsclient ], и я бы предложил компиляцию в emacs (возможность перехода к ошибкам компиляции - выигрыш).

Но, в частности, ускорение .emacs может быть сделано:

  1. Байт, компилирующий файл .emacs, который Вы можете сделать это автоматически, используя этот фрагмент кода

  2. . Заменить как можно больше операторов (require 'package) функциональностью автозагрузки . Это задержит загрузку lisp до тех пор, пока это действительно не потребуется. Использование этой техники позволило мне ускорить мой запуск с> 6 секунд до <1. Это займет немного работы, потому что не все библиотеки поставляются с пометкой autoload .

  3. Удаление кода / функциональности, которые вы больше не используете.

  4. Попробуйте запустить emacs с опцией - no-site-file , чтобы избежать загрузки ненужных пакетов при установке сайта site-start. el .

  5. Если вы действительно серьезны, вы можете свернуть свои собственные emacs с уже загруженными вашими любимыми функциями. Это, конечно, означает, что более важно вносить изменения в то, что у вас есть в .emacs , потому что это часть двоичного файла. Перейдите по ссылке для получения информации о том, как использовать dump-emacs .

  6. Купить более быстрый компьютер и / или более быстрый диск.

Как определить, что загружает ваш .emacs

Теперь, как это сделать Вы узнаете, что загружает ваш .emacs? С целью убрать функционал или отложить его? Проверьте буфер * Messages * , который содержит строки вроде:

Loading /home/tjackson/.emacs.tjackson.el (source)...
Loading /home/tjackson/installed/emacs/lisp/loaddefs.el (source)...done
Loading /user/tjackson/.elisp/source/loaddefs.el (source)...done
Loading autorevert...done
Loading /home/tjackson/.emacs.tjackson.el (source)...done

Если вы заметите, операторы Загрузка могут быть вложенными: первый .emacs.tjackson.el заканчивается на ... и последняя строка показывает, что загрузка .emacs.tjackson.el равна ... выполнено . Все эти другие файлы загружаются из моего файла .emacs.tjackson.el . Все остальные загрузки являются атомарными.

Примечание: Если у вас большой .emacs, возможно, что буфер * Messages * потеряет некоторые сообщения, потому что он сохраняет только фиксированное количество информации. Вы можете добавить эту настройку вначале в свой .emacs , чтобы хранить все сообщения:

(setq message-log-max t)

Примечание: Если команда 'load подавит сообщения, если четвертый Аргумент nomessage не ноль, поэтому удалите все такие вызовы (или посоветуйте '

58
ответ дан 24 November 2019 в 14:00
поделиться

Одна вещь, которая помогла мне сократить время загрузки my .emacs , в дополнение к автозагрузке (как предлагали другие), является eval-after-load . В следующем примере задержка вызова к sql-set-product избавляет вас от необходимости загружать sql в ваш .emacs , делая существующий sql автозагрузка более эффективна.

(eval-after-load "sql"
  '(progn
     (sql-set-product 'mysql)
     (setq sql-mysql-options '("-C" "-t" "-f" "-n"))
     (setq sql-sqlite-program "sqlite3")
     ))

Конечно, для некоторых пакетов будет доступен хук , который позволяет делать то же самое, но иногда нет, или этот способ просто доказывает проще думать.

9
ответ дан 24 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: