Статьи

Некоторые классные вещи в Люси

Я действительно мало говорил о Люси с момента первого объявления несколько месяцев назад. Кажется, что происходит много «вещей», и, честно говоря, я решил, что просто увижу, где все устроится позже в этом году. Так уж сложилось, что я попал на документ cfapplication для Люси, и я был очень удивлен увиденным. Вот несколько классных вещей, которые Люси делает с приложениями по сравнению с ColdFusion. Возможно, это еще не все, но вот что я нашел и что мне показалось классным или интересным.

Кстати, на всякий случай это неочевидно — этот список взят из документации по тегу cfapplication и представлен в качестве аргументов для тега. Каждое из них работает как значения «this» в App.cfc. Это подразумевается, но это не может быть очевидно из самих документов.

action

Так что это попадает в «интересное, но не уверенное, что я бы использовал это» ведро. Lucee предоставляет actionатрибут для приложений, который позволяет обновлять настройки для существующего приложения. Лично, изменение настроек приложения на лету кажется плохой идеей, но кажется, что что-то должно существовать, и это здорово, что его поддерживают. Я уверен, что люди скажут мне множество причин, почему это имеет смысл в дикой природе, и, честно говоря, мне все равно, это просто делает меня счастливым, что его поддерживают. (Хорошо, мне все равно, и хотелось бы услышать некоторые практические применения для этого.)

sessionStorage

Это круто, черт возьми. Вы можете использовать базу данных для хранения сеансов, а не просто обычную оперативную память Вы можете настроить DSN в админке, включить эту функцию, установив флажок «Хранилище»:

Lucee_Server_Administrator

Пока я писал это, мне было любопытно, как это можно сделать в коде App.cfc. Я только сейчас обнаружил, что администратор Lucee фактически скажет вам, как определить ваш DSN в коде. ЭТО ЭПИЧНО.

Shot2

Одна интересная вещь, которую это позволяет — это специальные запросы к базе данных для таких вещей, как проверка количества активных сеансов или сбор данных сеанса в целом. Теперь это возможно с API мониторинга сервера в ColdFusion, но это только для Enterprise и требует доступа на уровне администратора. Это потребует запроса к базе данных.

bufferOutput

Я должен был попросить помощи по этому вопросу — спасибо Гарри Кляйну и Герту Францу из Google Lucee. Я собираюсь процитировать Герт здесь:

Если есть ошибка или прерывание внутри функции или тега молчания, а параметр outputoutput установлен в true, любой сгенерированный вывод будет видимым. Если установлено значение false, оно вообще не будет генерировать никакого вывода.

Интересный. Видимо, это помогает в потреблении памяти. Я не понимаю как, но я доверяю Герту и Гарри.

requestTimeout

Вы знаете, как установить значение тайм-аута запроса в теге cfsetting? Из того, что я вижу, это то же самое, но для приложения. Ницца.

componentPaths

Похоже, что Lucee поддерживает отображения для cfinclude, пути пользовательских тегов для пользовательских тегов и пути компонентов для CFC. Это похоже на хорошее разделение проблем. Я копаю это.

typeChecking

Хорошо — вы знаете, как отключить проверку типов в Администраторе ColdFusion? Это может быть хорошим приростом производительности. Я видел, что это значительно помогает приложениям Model-Glue. Ну, это то же самое, но на уровне приложений.

compression

Это позволяет включить сжатие GZip для приложения. Мне кажется, что это должно быть сделано на веб-сервере, а не на сервере приложений, но, да, он работает хорошо и его невероятно легко включить. Вот страница с отключенной настройкой:

shot3

Затем я добавил this.compression=true;в свой App.cfc:

shot4a

Это довольно большое изменение там.

suppressRemoteComponentContent

Так что да, это странно. Представьте себе плохой код, подобный этому:

remote function sayhello() {
writeoutput("MOO");
return "hello #now()#";
}

Как вы можете видеть, я и выводю материал, и возвращаю значение. Если вы установите для параметра подавления значение false, вы фактически увидите «MOO» на удаленном выходе. Я не вижу причин, почему вы бы этого хотели.

localmode

Этот был довольно запутанным. @nicholasc на Slack помог мне понять это. Учитывая эту строку в методе x=1;, по умолчанию это записывает в область видимости переменных, если только local.x не был установлен. Если вы используете this.localmode="modern"в своем App.cfc, он будет установлен вместо локальной области. Это похоже на отличную идею.

tag

Моя любимая перемена Вы можете указать пары атрибут / значение по умолчанию для тегов в вашем приложении. Вот пример, который я взял из документов:

this.tag = {
"location":{
"addtoken":true
}
};

Я волнуюсь, люблю это. Я помню, как спорил с этим в ColdFusion около 5-ти версий назад. В то время я был обеспокоен тем, что некоторые настройки где-то модифицируют код, и разработчики запутались, но наличие его в app.cfc позволяет легко ссылаться и замечать.

locale/ timezone/ webcharset/resourcecharset

Все они применяют различные настройки языка / типа локали к вашему приложению.

scopeCascading

Хорошо, я солгал — это моя любимая особенность. Если вы выводите переменную без области видимости, это определяет процесс поиска. У вас есть три значения. «Стандарт» — это ваша стандартная таблица поиска, в которой будут отображаться переменные, CFI, URL, форма и cookie. «Small» будет поражать только переменные, URL и форму. Мой любимый, хотя «строгий». Если вы укажете это, он будет смотреть только на область действия переменных. Мои личные правила всегда должны охватывать все, кроме переменных, поэтому я определенно одобряю это изменение.

И больше…

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

Но…

Да … это то, что мне нравится. Это именно тот тип языковых изменений, ориентированных на разработчиков, который я хотел бы видеть в ColdFusion 12.

В этот момент кто-то может присоединиться и предложить мне зарегистрировать ER в трекере ошибок Adobe. Я, конечно, мог бы — но я предполагаю, что команда Adobe ColdFusion естественно отслеживает то, что делает Люси. Это просто имеет смысл. Конечно, они смотрят Люси, смотрят на разработчиков, которые в восторге от этого, и принимают это к сведению. Предполагать иначе — значит предполагать, что команда ColdFusion настолько отсоединена от сообщества разработчиков, что считает, что не имеет значения, что делают другие движки CFML. И, конечно, это не может быть так.