Асинхронная загрузка Coldfusion javascript?

#javascript #asynchronous #coldfusion

#javascript #асинхронный #coldfusion

Вопрос:

Всякий раз, когда страница загружается с помощью Coldfusion, она загружает множество стандартных javascripts Coldfusion. Когда я запускаю Goolge PageSpeed Tools, он всегда жалуется на JavaScript, блокирующий рендеринг. По-видимому, Coldfusion имеет много javascript при загрузке страницы, например

 ...scripts/ajax/yui/yahoo-dom-event/yahoo-dom-event.js
...scripts/ajax/yui/aniax/yui/autocomplete/autocomplete-min.js
...scripts/ajax/yui/autocomplete/autocomplete-min.js
...scripts/ajax/messages/cfmessage.js
...scripts/ajax/package/cfajax.js
...scripts/ajax/package/cfautosuggest.js
...scripts/cfform.js
...scripts/masks.js
  

Все они считаются сценариями, блокирующими рендеринг. Я не могу найти никакой информации о том, как сделать их без блокировки рендеринга, потому что, очевидно, я не могу добавить параметр async=»async» в сценарий Coldfusion, который я не вижу. Как я могу сделать сценарий Coldfusion без блокировки рендеринга или я застрял с ним?

Может кто-нибудь, пожалуйста, пролить свет?

Комментарии:

1. Всякий раз, когда страница загружается с помощью Coldfusion, она загружает множество javascripts Coldfusion по умолчанию , что не соответствует действительности. Сценарии включаются только в том случае, если на странице используются компоненты пользовательского интерфейса CF. Включения генерируются сервером CF внутри. Это не то, что вы можете контролировать, AFAIK. В любом случае, независимо от того, что говорит Google, вам следует избегать использования компонентов пользовательского интерфейса CF, которые устарели, глючат и их сложно настроить IMO.

2. возможно, вы захотите взглянуть на github.com/cfjedimaster/ColdFusion-UI-the-Right-Way

3. Я бы посоветовал вам прекратить использование компонентов пользовательского интерфейса ColdFusion. Они устарели, плохо реализованы и крайне ограничены в функциональности. Во многих случаях вы можете сделать то же самое проще с другими библиотеками JavaScript.

4. Похоже, никому не нравится CF UI. Я использую его из-за его простоты. На самом деле я больше ничего не использовал. Все остальное — это дополнительное кодирование, в котором у меня не было опыта. Это основная причина. Тот, который я использую чаще всего, — это проверка CFFORM. CFFORM от Raymond at https://static.raymondcamden.com/cfuitherightway/index.html является неполным, поэтому я не могу его использовать. Есть ли полный набор пользовательского интерфейса для CFFORM еще где-нибудь?

5. Похоже, никому не нравится CF UI. Честно говоря, это из-за таких вещей 😉 Да, изначально они просты в использовании. Однако вы неизменно сталкиваетесь с ошибками и проблемами настройки, которые трудно преодолеть из-за реализации и возраста базовых библиотек (просто поищите в архивах). Хотя рекомендации Google здесь не входят в список проблем, они по-прежнему являются хорошей иллюстрацией ограничений, присущих элементам пользовательского интерфейса CF. Хотя технически это возможно, для этого требуется много сложных прыжков с обручем. Используя другую библиотеку, это было бы несложно…

Ответ №1:

Если вы действительно хотите что-то с этим сделать, вместо того, чтобы переписывать свой код пользовательского интерфейса, вы можете фактически получить выходные данные из буфера до того, как они будут отправлены клиенту, и изменить их. Ваши изменения могут быть такими же простыми, как удаление жестко запрограммированного списка тегов скриптов и замена их пользовательским файлом скрипта, который вы размещаете в своем webroot. Пользовательский файл скрипта будет просто объединять все содержимое других файлов скриптов.

Для этого:

  1. В onRequestEnd в application.cfc вы можете вызвать var outputBuffer = getPageContext().popBody().getBuffer() , который вернет тело для отправки клиенту.
  2. Запустите замены outputBuffer , найдите эти теги скрипта и удалите их с помощью регулярных выражений. Вы захотите отслеживать, действительно ли вы удалили какой-либо из них для использования в качестве флага на следующем шаге.
  3. Наконец, вы бы добавили к выходным данным свой новый тег master script, если ваш флаг, указывающий на то, что были сделаны замены, имеет значение true. После того, как вы это сделаете, буфер будет автоматически сброшен клиенту.

Я полагаю, что Adobe больше не обновляет файлы сценариев, поэтому вам в принципе не нужно беспокоиться о настройке версий вашего основного файла сценария для очистки кэша браузера.

Редактировать / Примечание: определенно избегайте использования CF UI, но мы не знаем, какова ваша ситуация прямо сейчас. Если у вас есть сотни или тысячи часов на переписывание, то, очевидно, переписывать все это, скорее всего, нецелесообразно в настоящее время.