- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Написал я класс для чтения RSS.
Пример использования:
Этот пример можно посмотреть сейчас на fasion25.ru. Внизу - количество секунд на загрузку документа.
Сама по себе обработка занимает порядка 8 секунд (чуть меньше секунды на один rss-фид), сейчас там еще идет вывод дебаговой информации (по сути PHP-форматированный код).
Загрузил все эти RSS-фиды в гугл-ридер и очень удивился скорости загрузки...
Почему сделано массивом? Очевидно - для сортировки по дате (пользователю интересней самые последние новости).
Предзагрузка на google reader занимает примерно 4 сек (у меня к сожалению нету возможности встроить в google reader счетчик для предоставления более точных данных :) ). Возможно, что на гугл ридере сделано следующим образом - сначала данные парсятся, далее, после загрузки страницы, данные вынимаются при помощи AJAX.
Мой скрипт парсит данные примерно 8 секунд и примерно 10-15 секунд (у меня, например) тратится на загрузку самой страницы (ЭТО СЛИШКОМ МНОГО!).
Если выключить функции cURL для определения есть ли редирект (например на некоторых блогах я нашел редирект), то сэкономится примерно 1-2 секунды.
Парсинг происходит при помощи SimpleXML, но функционал еще не дописан немного, т.е. по идее, время на парсинг должно будет увеличиться еще втишь...
Хотя, если использовать PEAR::RSS, будет гораздо хуже (тупой класс, если честно)...
Может быть парсить "вручную"? Т.е. при помощи cURL получать весь контент и парсить как строку, не прибегая к использованию классов типа SimpleXML, DOMDocument, XML Parser (PEAR::RSS вообще отдельная статья - полил бы бензином и сжег эту гадость)... Какие идеи? )
Вопрос второй: если все результаты хранить в сессии, - сессия не треснет? (см дамп) )) Хранить всё это дело в БД не выгодно... А так - запарсил данные, запихнул в сессию, выдал юзеру страницу, передал количество резульатов, которое должно быть на странице... далее JS: пока (все записи не показаны) достаем при помощи AJAX из сессии очередную запись и показываем юзеру - пока он первые новости читает - подгрузятся все остальные...
Есть еще один вариант - показывать юзеру страницу, показывать его подписки, а тем временем, пока юзер думает, что ему делать, парсить данные втихушку :) Тогда нам пригодится таймер (setInterval), чтобы постоянно спрашивать серверный скрипт "уже готово?", когда он ответит "ага, забирайте!" - показывать данные...
Идеи/предложения/критика?...
Я бы подцепил SimplePie и сложил бы данные из лент в кеш - или в базу, или в файлы, а при запросе пользователя отдавал бы уже оттуда - на порядок быстрее.
А парсил бы скриптом по крону.
40 seconds for parse
3 seconds for load
43 total time for load
Может быть парсить "вручную"?
нужно. Это будет быстрее. Но Еще быстрее все будет происходить, если отказаться от PHP. Используйте любой настоящий CGI - Perl/TCL/Phyton.
При этом, еще использовать "ручную" загрузку самих лент. Это позволит вести паралельную обработку. Разделенные процессы очень сильно ускоряют программу.
Хранить всё это дело в БД не выгодно.
Очень выгодно. Просто не нужно использовать SQL. Текстовый файл - это тоже БД.
нужно. Это будет быстрее. Но Еще быстрее все будет происходить, если отказаться от PHP. Используйте любой настоящий CGI - Perl/TCL/Phyton.
Мда... давненько я не писал на Perl'е - видимо прийдется вспоминать...
При этом, еще использовать "ручную" загрузку самих лент. Это позволит вести паралельную обработку. Разделенные процессы очень сильно ускоряют программу.
Что за "ручная загрузка самих лент"?
И все же вопрос остался - есть ли ограничения на длину сессии? До сих пор хранил там небольшие строковые данные только...
Я бы подцепил SimplePie и сложил бы данные из лент в кеш - или в базу, или в файлы, а при запросе пользователя отдавал бы уже оттуда - на порядок быстрее.
А парсил бы скриптом по крону.
До SimplePie руки не доходят разобраться что-то - скачал уже давно, посмотрел и забросил... насколько я помню там RSS парсится как раз "вручную", т.е. как строковое данное.
По крону не надо, - это значит, что пользователь сможет видеть обновление только раз в определенное время... изначально это не так задумывалось...
40 seconds for parse
3 seconds for load
43 total time for load
Спасибо за тест. Что то чересчур долго ))) У меня результаты в разы лучше :) Хотя один фиг результаты плохие...
Вообще... про перл я как то позабыл - надо было с самого начала на перле делать... :(( Ну или по крайней мере этот скрипт...
Текстовый файл - это тоже БД.
Текстовый файл работает быстрей SQL? Ну я конечно сделаю тесты (на 5-10, 100-1000, 10.000-50.000 записей), но что-то мне кажется, что БД будет предпочтительней... Раньше просто как то даже не возникало желания протестить БД vs Файл...
И еще вопрос на засыпку, - а что собственно лучше? C++, Perl, Python, TCL? наверное C++, но на C++ парсить заколебусь, очевидно, - наверное будет как альтернатива на будущее...
Время доступа к текстовому файлу в разы меньше чем к БД, поэтому для хранения _уже упорядоченных_ данных (когда не нужно делать сложные отсевы или они делаются простым смещением бегунка чтения), это идеальный вариант.
Мне кажется что на C++ парсить вы не заколебетесь, ибо там есть почти все те же строковые функции что и в PHP, регулярки тоже туда подключаются. Но я бы предложил таки перл. С распараллеливанием процессов.
Что за "ручная загрузка самих лент"?
использовать модуль Net::Socket::NonBlock или подобный, который позволит одновременно вести загрузкув 16,32,64 потока
Текстовый файл работает быстрей SQL?
Да, значительно. Только нужно грамотно с ним работать. При объеме до 30-40Мб (Perl 5.10) он значительно быстрее MySQL, при этом мение ресурсозатратен.
Стараюсь нигде SQL не юзать. Медленно, грамоздко и очень много ограничений.
Не забывайте, что Perl, в самом начале, был создан тольок для парсинга/структурирования текста
И все же вопрос остался - есть ли ограничения на длину сессии?
Зачем в этой ситуации сесии вобще.
1. получили рсс, пропарсили и оставили лежать в виде результирующих файлов-файла.
2. Повторно читаем рсс ленту тольок по истечении времени ее актуальности или тупо каждый 10-20-30-60 минут. До это времени отдаем из сохранения.
C++, Perl, Python, TCL?
то, что быстрее работает на серваке и иметт необходимые модули
T.R.O.N добавил 11.11.2008 в 13:12
Время доступа к текстовому файлу в разы больше чем к БД, поэтому для хранения _уже упорядоченных_ данных (когда не нужно делать сложные отсевы или они делаются простым смещением бегунка чтения), это идеальный вариант.
Вы можете это доказать? Есть хоть какие-то тексты не из учебников?????
perl по-моему изначально был создан для генерации каких-то там отчетов... каким-то там сотрудником какой-то там фирмы, но потом вроде как разросся - спорить не буду, да и историю перла щас в лом читать :) Но работать с регулярными выражениями на нем помню мне жутко нравилось... Более полутора лет не писал на нем - сейчас вот залез на сайтик - вспоминаю...
:)
использовать модуль Net::Socket::NonBlock или подобный, который позволит одновременно вести загрузкув 16,32,64 потока
Это перловский, насколько я понимаю?...
T.R.O.N, посоветуете интернет-источники по Perl?... Можно на английском.
Всё дело в том, что у гугла когда добавляешь рсску она уже в 90 случаев из 100 распарсена и лежит в бд. Не будет ведь гугл для каждого пользователя хранить одни и те же данные отдельно. Поэтому там всё так быстро загружается - ведь нет никакого парсинга и скачивания рсс.
и еще каким лучше редактором пользоваться (лучше именно для perl написанный), - я качаю этот - надеюсь хороший.
So1 добавил 11.11.2008 в 13:46
Всё дело в том, что у гугла когда добавляешь рсску она уже в 90 случаев из 100 распарсена и лежит в бд.
Не правда... Я конечно признаю, что гугл использует просто какие то космические технологии, раз выдерживает такие нереальные нагрузки и выдает результаты (я про поисковик) за доли секунды, но не до такой же степени... Я добавил туда ленты и самой вежей новости было тогда 1 минута - гугл.ридер ее показал - хотите сказать он такой нереальный объем фидов парсит ежесекундно? ну или раз в 20-30 секунд? Сотни тысяч фидов.... не - не верю! (с)
Пусть тогда АПы PR выдает раз в 3 часа... ))
T.R.O.N, посоветуете интернет-источники по Perl?
http://activestate.com/index.mhtml именно его и пользую, как софт.
http://webscript.ru/stories.php3?topic=5
Я конечно признаю, что гугл использует просто какие то космические технологии, раз выдерживает такие нереальные нагрузки и выдает результаты (я про поисковик) за доли секунды, но не до такой же степени
поверьте, в гугле, как и яше - все достатчно просто. Все алгоритмы, как правло, - линейные. А значит имеют максимальную скорость исполнения. Все что может быть расчитано зарание - расчитано, и сохранено в виде дампов памяти переменных (кажется это называется бадзами Баркли/Барклая). Это самый быстрый способ хранения данных, но требует большие объемы памяти. Пердварительные данные готовятся другими серверами.
So1, У вас сейчас скрипт делает все последовательно, поэтому время складывается. А можно попытаться разделить все процессы.
Возможно даже построение псевдо клиент-сервер.
Т.е. бинарник(ведь он всегда быстрее работает, да и запушен не под web-сервером, что еще увеличивает скорость), на том-же си или делфе запущен и постоянно анализирует запрос к себе(появление файла или пайпа или еще чегонить). Получает этот сигнал, выполняет запрос к ленте и складывает результат.
А у серверного скрипта задача очень простая - дал запрос бинарнику - получил ответ - объединил начало страницы результат и конец.
T.R.O.N добавил 11.11.2008 в 14:31
Пусть тогда АПы PR выдает раз в 3 часа... ))
а Вы понимаете, почему именно он этого не делает? Или Вы считаете что это связано только со скоростью обработки?