Уменьшить выполнение Объема потребляемой памяти и Увеличения направляющих Полукровки?

Автоматическая вставка точек с запятой имеет некоторые причуды, и это одна из них. В вашем первом примере точка с запятой не будет вставлена ​​в конце второй строки, и, таким образом, она будет считываться синтаксическому анализатору следующим образом:

let b = 2[a, b] = [b, a];

Это вызывает исключение, потому что b еще не существует, и все же это пытаясь быть использованным, чтобы определить себя. Пример 2 выглядит аналогично, но теперь он ссылается на переменные, которые уже существуют, поэтому вместо исключения у вас есть действительно странно выглядящий фрагмент кода:

let c = 2[a, b] = [b, a];

Что касается того, что это значит, давайте сначала посмотрите на 2[a, b]. Числа упаковываются в объекты, поэтому к ним можно получить доступ к свойствам. Вот почему, например, вы можете сделать следующее:

let temp = 2;
console.log(temp.toString());

temp является числовым объектом, и у него есть свойство toString. Теперь, поскольку символ . имеет особое значение для чисел (это десятичная точка), вы не можете использовать его с числовым литералом, поэтому что-то вроде следующего недопустимо:

2.toString();

Но можно использовать синтаксис скобок, например:

2['toString']()

Этот синтаксис скобок - это то, что мы имеем в 2[a, b]: он пытается получить доступ к свойству 2. Какое свойство? 2 [b], которая разрешается до 2 [2]. a используется со странным оператором запятой и в основном игнорируется.

Что на 2 [2]? Ничего особенного, просто свойство, которое undefined. И если вы попытаетесь присвоить ему, ничего заметного не произойдет, потому что числа не позволяют вам изменять свойства для них таким образом. Но вы все равно можете попытаться назначить его, если хотите, и он просто потерпит неудачу (в любом случае в нестрогом режиме).

Итак, подведем итог тому, что делает 2[a, b] = [b, a];: он создает массив с элементами [b, a], а затем пытается присвоить его 2 [2]. Это ничего не делает с числом 2, но значение, которое вы пытались присвоить, становится результатом выражения, поэтому результатом 2[a, b] = [b, a]; будет просто [b, a], то есть [2, 1]. Это, в свою очередь, присваивается c из-за кода let c = //etc

6
задан Kekoa 13 May 2009 в 19:45
поделиться

4 ответа

Вы можете посмотреть Phusion Passenger и Ruby Enterprise Edition , которые в наши дни де-факто являются стандартной установкой для приложений Rails. Одна из его целей - сократить использование памяти. Это также проще, чем иметь кучу дворняг.

7
ответ дан 8 December 2019 в 17:27
поделиться

Если вы не привязаны к apache для чего-то еще, я бы также попробовал nginx с Phusion Passenger. Если вас беспокоит использование памяти, вы должны увидеть меньшую площадь, занимаемую nginx, чем apache, и будет загружена последняя версия Passenger, скомпилируйте и установите nginx с минимальной головной болью.

3
ответ дан 8 December 2019 в 17:27
поделиться

Вы также можете заменить ваш беспородный процесс на Thin , который более эффективен и недавно был исправлен в его сборке мусора (через eventmachine), чтобы сделать его еще лучше.

Мы используем тонкий кластер за интерфейсами nginx с прекрасными результатами.

3
ответ дан 8 December 2019 в 17:27
поделиться

Я бы не стал говорить, что Passenger является стандартом де-факто, но он набирает обороты. Мы только что перешли на Nginx + Passenger, и объем памяти нашего рубинового приложения (т. Е. Mongrels vs. Passenger) упал с 450 до 295 МБ. Он может упасть меньше, так как Passenger отключит процессы, если они простаивают (это настраивается), но, конечно, если вы получаете трафик и он использует все экземпляры, для которых он настроен, тогда они будут использовать память соответственно. .

Обратите внимание, что мы еще не используем Ruby Enterprise Edition в нашей конфигурации (в основном потому, что он еще не доступен на Engine Yard), но мы по-прежнему наблюдаем меньший объем памяти. Первоначально основной причиной, по которой мы сделали переход, была память, но есть и другие преимущества, такие как более быстрая и простая настройка для увеличения или уменьшения масштаба и т. Д.

1
ответ дан 8 December 2019 в 17:27
поделиться
Другие вопросы по тегам:

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