каков жизненный цикл создания экземпляра ColdFusion CFC? - PullRequest
1 голос
/ 23 февраля 2011

Я хотел бы знать, как создается экземпляр ХФУ при холодном синтезе под капотом! Я знаю, что вы создаете экземпляр компонента, и вы получите ссылку на вновь созданный экземпляр, и вы можете использовать его для вызова открытых методов внутри них.

Но что именно происходит, когда я пишу код

<cfscript>
 person = createObject('component','human') // what happen here!!!!
 person.speak();
</cfscript>

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

application.person.speak();

сейчас под очень высокой нагрузкой. я обнаружил, что память не выпускается для человека obj и в какой-то момент она достигла 200 Мб .. странно! , Так что внесены исправления, как говорится в лучших практиках

request.person = duplicate(application.person);

теперь есть еще один прямой способ сделать это

request.person = createObject('component','human');

отличие: первый создает объект и сохраняет его в области общего доступа, делает глубокую копию для запроса при каждом запросе (здесь экземпляр создается только один раз). Второй создает экземпляр каждый раз, когда делается запрос. между ними наверняка есть разница в производительности, потому что во втором методе экземпляр создается каждый раз. Я хотел бы знать, что именно является архитектурой, стоящей за созданием экземпляра, который делает его менее лучшим, чем первый !!

Просто кюри знать!

Ответы [ 3 ]

3 голосов
/ 23 февраля 2011

Coldfusion компилируется в Java, и когда вы вызываете функцию «createObject», вы создаете экземпляр этого класса.Вот некоторые ссылки, которые могут помочь объяснить немного больше:

http://www.bennadel.com/blog/325-ColdFusion-CreateObject-vs-Java-NewInstance-.htm

http://blog.objectorientedcoldfusion.org/2009/07/16/coldfusion-9-object-creation-performance/

0 голосов
/ 23 февраля 2011

Что там происходит?Ничего особенного на самом деле.

Для CFC init() - это просто метод, который используется для инициализации экземпляра.Это даже не требуется для CFC, если вам не нужен конструктор.Тем не менее, он часто включается в соглашение, принятое сообществом, которое возникло из-за того, что ColdFusion выбрал init() для вызова Java-конструктора. *

function init()
{
  // init vars in Variable scope if needed...

  return this;
}

В CF9, когда вы используете оператор new, онЯ позвоню вам init(), если он доступен, и не выдаст никакой ошибки, если ваш CFC не определил метод init().

* Когда речь идет о вызове методов Java, init()переводится, чтобы вызвать правильный конструктор класса Java.Если вы просто хотите вызвать статический метод класса, вызовите метод напрямую без init().

0 голосов
/ 23 февраля 2011

Насколько я понимаю, он запускает метод / функцию init внутри этого cfc, а затем запускает метод / функцию talk.

...