использование cfhttp в нескольких файлах занимает слишком много времени - PullRequest
3 голосов
/ 27 апреля 2010

Я не знаю, возможно ли это, но просто хочу спросить, можем ли мы cfhttp или любой другой способ прочитать выбранный объем данных вместо того, чтобы помещать весь файл в CFHTTP.FileContent.

Я использую cfhttp и хочу прочитать только две последние строки из удаленных XML-файлов (около 20 из них) и прочитать две средние строки из некоторых текстовых файлов (около 7 из них). Есть ли способ, которым я мог бы просто прочитать эти конкретные данные вместо получения всех файлов, потому что это занимает много времени прямо сейчас (около 15-20 секунд). Я просто хочу сократить время выполнения моей страницы .cfm. Любые предложения ???

Ответы [ 3 ]

5 голосов
/ 27 апреля 2010

Хм, на самом деле никакого особого способа получить только части удаленных файлов.

Ты должен делать это каждый раз? Не могли бы вы извлечь файлы в фоновом режиме, записать их локально, и ваши текущие входящие запросы просто прочитали эти файлы? Сделать чтение удаленных файлов асинхронным входящим запросам?

Если нет, и вы используете CF8 +, вы можете использовать CFTHREAD для потоковой обработки различных запросов для параллельной работы: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_t_04.html

Вы можете использовать действие "join" в конце, чтобы дождаться завершения всех потоков.

Edit:

Вот отличное руководство от Ben Nadel по использованию CFThread для распараллеливания запросов CFHTTP:

http://www.bennadel.com/blog/749-Learning-ColdFusion-8-CFThread-Part-II-Parallel-Threads.htm

Есть еще кое-что:

27-30 последовательных HTTP-запросов не должны занимать 20-30 секунд. Это действительно не должно занимать 1-2 секунды, поэтому у вас могут возникнуть другие серьезные проблемы.

3 голосов
/ 28 апреля 2010

HTTP не может прочитать файл таким образом. Это не имеет ничего общего с ColdFusion.

Вы можете использовать некоторое интеллектуальное кэширование, чтобы несколько сократить время за счет более длительного времени при первом запуске, используя метод CFHTTP = "HEAD", который не делает.

У вас есть локальная копия страницы?

  • Нет, используйте метод CFHTTP = "GET", чтобы получить и сохранить его
  • Да, используйте CFHTTP method = "HEAD", чтобы проверить метку времени и сравнить ее с кэшированной версией. Если кеш более новый, используйте его, иначе CFHTTP method = "GET", чтобы получить и проанализировать нужный файл.

method = "HEAD" будет захватывать только заголовки http, а не весь файл, что немного ускорит процесс. В любом случае, вы делаете почти 30 файловых запросов, так что в любом случае это не будет мгновенным.

0 голосов
/ 28 апреля 2010

Как насчет того, чтобы попросить CF обслуживать только этот кусок файла с параметрами URL?

Так как это XML, я думаю, вы можете использовать xmlSearch () и возвращать только результат?

что касается текстового файла, вы можете передать стартовую строку & numOfLines и вернуть только эти строки в виде строки?

...