- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
А давайте ваш тест поменяем, чтобы для каждой функции будет свой текст и мы уберём в конце дублирование функции в конце.
<?php
function get_time()
{
$t=microtime();
$t=explode(' ',$t);
$t=(float)$t[1]+(float)$t[0];
return $t;
}
$thisoutput=$thisoutput1=$thisoutput2=<<<EOF
</a></span></span><span class="tm-article-snippet__datetime-published"><time datetime="2021-07-17T11:55:11.000Z" title="2021-07-17, 14:55">сегодня в 14:55</time></span></div><!----></div><h1 lang="ru" class="tm-article-snippet__title tm-article-snippet__title_h1"><span>Google добавляет в Chrome режим HTTPS-First</span></h1><div class="tm-article-snippet__hubs"><span class="tm-article-snippet__hubs-item"><a href="/ru/hub/infosecurity/" class="tm-article-snippet__hubs-item-link tm-article-snippet__hubs-item-link_subscribed"><span>Информационная безопасность</span></a></span><span class="tm-article-snippet__hubs-item"><a href="/ru/hub/google_chrome/" class="tm-article-snippet__hubs-item-link tm-article-snippet__hubs-item-link_subscribed"><span>Google Chrome</span></a></span><span class="tm-article-snippet__hubs-item"><a href="/ru/hub/dns/" class="tm-article-snippet__hubs-item-link tm-article-snippet__hubs-item-link_subscribed"><span>DNS</span></a></span><span class="tm-article-snippet__hubs-item"><a href="/ru/hub/browser_extensions/" class="tm-article-snippet__hubs-item-link tm-article-snippet__hubs-item-link_subscribed"><span>Расширения для браузеров</span></a></span><span class="tm-article-snippet__hubs-item"><a href="/ru/hub/browsers/" class="tm-article-snippet__hubs-item-link tm-article-snippet__hubs-item-link_subscribed"><span>Браузеры</span></a></span></div><div class="tm-article-snippet__labels"><!----></div><!----><!----></div></div><!----><div lang="ru" class="tm-article-body"><div id="post-content-body" class="article-formatted-body article-formatted-body_version-2"><div xmlns="http://www.w3.org/1999/xhtml"><p>Google <a href="https://blog.chromium.org/2021/07/increasing-https-adoption.html" rel="noopener noreferrer nofollow">собирается повысить</a> безопасность пользователей Chrome с помощью новой функции, которая позволит автоматически обновлять веб-страницы до HTTPS. Режим HTTPS-First напоминает режим DNS-over-HTTPS в Firefox.</p><figure class="full-width "><img src="/img/image-loader.svg" alt="blog.chromium.org" title="blog.chromium.org" height="494" data-src="https://habrastorage.org/getpro/habr/upload_files/d12/208/e96/d12208e961ec1c4ddee464a2aca67cd5.gif" data-width="660"/><figcaption>blog.chromium.org</figcaption></figure><p>Как заявили в Google, с внедрением новой функции злоумышленники не смогут получить доступ к данным, передаваемым между веб-браузером и сервером, на котором размещен веб-сайт, поскольку конфиденциальная информация и учетные данные будут зашифрованы.</p><p>На данный момент примерно 90 % страниц в Chrome загружаются через HTTPS.</p><p>Однако в Chrome 94 браузер будет пытаться обновить все загружаемые страницы до HTTPS и начнет предупреждать пользователей при переходе на страницу, не поддерживающую данный тип шифрования.</p><p>«Основываясь на отзывах, мы рассмотрим возможность использования режима HTTPS-First по умолчанию для всех пользователей в будущем», — сообщают в Google. Там отмечают, что Mozilla планирует реализовать то же самое в Firefox.</p><p>Режим HTTPS-First внесет изменения в экран блокировки, который Chrome обычно отображает, когда сайт загружается по HTTPS. В качестве эксперимента Chrome 93 заменит значок замка на «более нейтральный», но индикатор «Небезопасно» будет по-прежнему отображаться на веб-сайтах, не поддерживающих HTTPS.</p><p>Даже в режиме HTTPS-First Chrome продолжит поддерживать HTTP-соединения, но наложит ограничения на загрузку определенных ресурсов, чтобы гарантировать защиту пользователей.</p><p>В мае в версии Chrome 83 <a href="https://habr.com/ru/news/t/502936/" rel="noopener noreferrer nofollow">начали развертывать</a> режим DNS-over-HTTPS. Браузер по умолчанию использует DoH для провайдера DNS, установленного в систему, при условии, что он поддерживает этот протокол. Если во время поиска будут обнаруживаться проблемы, то Chrome переключается на незашифрованный DNS. При этом браузер не использует DoH, если в системах Windows активен родительский контроль или определенные корпоративные политики. В апреле Chrome <a href="https://habr.com/ru/news/t/550210/" rel="noopener noreferrer nofollow">начал поддерживать</a> DoH в версии для Linux.</p><p>Microsoft также <a href="https://habr.com/ru/news/t/565390/" rel="noopener noreferrer nofollow">добавила</a> в ОС Windows 11 функцию DNS-over-HTTPS. </p></div></div><!----><!----></div><div class="tm-article-body__tags"><div class="tm-article-body__tags-links"><span class="tm-article-body__tags-title">Теги:</span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5Bgoogle%20chrome%5D" class="tm-article-body__tags-item-link">google chrome</a></span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5Bdns-over-https%5D" class="tm-article-body__tags-item-link">dns-over-https</a></span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5Bdoh%5D" class="tm-article-body__tags-item-link">doh</a></span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5Bhttps%5D" class="tm-article-body__tags-item-link">https</a></span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5B%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%5D" class="tm-article-body__tags-item-link">шифрование данных</a></span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5B%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%5D" class="tm-article-body__tags-item-link">трафик</a></span><span class="tm-article-body__tags-item"><a href="/ru/search/?target_type=posts&order=relevance&q=%5Bhttp%5D" class="tm-article-body__tags-item-link">http</a></span></div><div class="tm-article-body__tags-links"><span class="tm-article-body__tags-title">Хабы:</span><span class="tm-article-body__tags-item"><a href="/ru/hub/infosecurity/" class="tm-article-body__tags-item-link">
Информационная безопасность
</a></span><span class="tm-article-body__tags-item"><a href="/ru/hub/google_chrome/" class="tm-article-body__tags-item-link">
Google Chrome
</a></span><span class="tm-article-body__tags-item"><a href="/ru/hub/dns/" class="tm-article-body__tags-item-link">
DNS
</a></span><span class="tm-article-body__tags-item"><a href="/ru/hub/browser_extensions/" class="tm-article-body__tags-item-link">
Расширения для браузеров
</a></span><span class="tm-article-body__tags-item"><a href="/ru/hub/browsers/" class="tm-article-body__tags-item-link">
Браузеры
</a></span></div></div></article><div class="tm-article__icons-wrapper"><div class="tm-data-icons tm-page-article__counters-panel"><div class="tm-article-rating tm-data-icons__item"><div class="tm-votes-meter tm-article-rating__votes-switcher"><svg height="16" width="16" class="tm-svg-img tm-votes-meter__icon tm-votes-meter__icon_medium"><title>Всего голосов 2: ^0 и v2</title><use xlink:href="/img/megazord-v24.4c3730a5.svg#counter-rating"></use></svg><span title="Всего голосов 2: ^0 и v2" class="tm-votes-meter__value tm-votes-meter__value_negative tm-votes-meter__value_medium">-2</span></div><DIV class="v-portal" style="display:none;"></DIV></div><!----><span title="Количество просмотров" class="tm-icon-counter tm-data-icons__item"><svg height="16" width="16" class="tm-svg-img tm-icon-counter__icon"><title>Просмотры</title><use xlink:href="/img/megazord-v24.4c3730a5.svg#counter-views"></use></svg><span class="tm-icon-counter__value">1.1K</span></span><button type="button" class="bookmarks-button tm-data-icons__item"><span title="Добавить в закладки" class="tm-svg-icon__wrapper bookmarks-button__icon"><svg height="16" width="16" class="tm-svg-img tm-svg-icon"><title>Добавить в закладки</title><use xlink:href="/img/megazord-v24.4c3730a5.svg#counter-favorite"></use></svg></span><span title="Количество пользователей, добавивших публикацию в закладки" class="bookmarks-button__counter">
0
</span></button><!----><div title="Поделиться" class="tm-sharing tm-data-icons__item"><button type="button" class="tm-sharing__button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="tm-sharing__icon"><path fill="currentColor" d="M10.33.275l9.047 7.572a.2.2 0 010 .306l-9.048 7.572a.2.2 0 01-.328-.153V11c-8 0-9.94 6-9.94 6S-1 5 10 5V.428a.2.2 0 01.328-.153z"></path></svg></button><!----></div><DIV class="v-portal" style="display:none;"></DIV></div><!----></div></div><!----><div class="tm-page-article__additional-blocks"><!----><section class="tm-block tm-block_spacing-bottom"><!----><div class="tm-block__body"><div class="tm-article-author tm-page-article__author"><!----><div data-async-called="true" class="tm-user-card tm-article-author__user-card tm-user-card_variant-two-column"><div class="tm-user-card__info-container"><div class="tm-user-card__header"><div class="tm-user-card__header-data"><a href="/ru/users/maybe_elf/" class="tm-user-card__userpic tm-user-card__userpic_size-40"><div class="tm-entity-image"><img alt="" src="//habrastorage.org/getpro/habr/avatars/592/11d/4bc/59211d4bcd7f9afdadaef515b2b0706d.jpg" class="tm-entity-image__pic"></div></a><div class="tm-user-card__meta"><div title=" 399 голосов " class="tm-karma tm-user-card__karma"><div class="tm-karma__votes tm-karma__votes_positive">
105
</div><div class="tm-karma__text">
EOF;
$replace=$replace_str='<script>window.__INITIAL_STATE__={"adblock":{"hasAcceptableAdsFilter":false,"hasAdblock":false},"articlesList":{"articlesList":{"566102":{"id":"566102","timePublished":"2021-07-17T14:00:02+00:00","isCorporative":true,"lang":"ru","titleHtml":"Альтернативы Redux в 2021 году","editorVersion":"1.0","postType":"article","postLabels":[{"type":"translation","data":{"originalAuthorName":"Kristofer Selbekk","originalUrl":"https:\u002F\u002Fblog.openreplay.com\u002Fredux-alternatives-in-2021"}}],"author":{"id":"1220775","alias":"ru_vds","fullname":null,"avatarUrl":"\u002F\u002Fhabrastorage.org\u002Fgetpro\u002Fhabr\u002Favatars\u002Fe36\u002F812\u002Fd3d\u002Fe36812d3de38eb3d479d7a13228717ef.png","speciality":"Пользователь"},"statistics":{"commentsCount":0,"favoritesCount":1,"readingCount":102,"score":3,"votesCount":3},"hubs":[{"relatedData":{"isSubscribed":false},"id":"19791","alias":"ruvds","type":"corporative","title":"Блог компании RUVDS.com","titleHtml":"Блог компании RUVDS.com"},{"relatedData":{"isSubscribed":true},"id":"91","alias":"webdev","type":"collective","title":"Разработка веб-сайтов","titleHtml":"Разработка веб-сайтов"},{"relatedData":{"isSubscribed":true},"id":"357","alias":"javascript","type":"collective","title":"JavaScript","titleHtml":"JavaScript"},{"relatedData":{"isSubscribed":true},"id":"19327","alias":"reactjs","type":"collective","title":"ReactJS","titleHtml":"ReactJS"}]';
// экранируем замену, взято из FDE Grabber
$replace = preg_replace('#\$#', '\\\$', $replace);
$replace = preg_replace('#\\\(?=\d)#', '\\\\\\', $replace);
// /экранируем замену, взято из FDE Grabber
echo 'str_replace:';
$start = get_time();
for ($i=0; $i<25000; $i++){
$thisoutput=str_replace('<div class="tm-karma__text">',$replace_str,$thisoutput.$i);
}
echo "\t".(get_time()-$start)."\r\n";
echo 'preg_replace:';
$start = get_time();
for ($i=0; $i<25000; $i++){
$thisoutput1=preg_replace('@<div class="tm-karma__text">@',$replace,$thisoutput1.$i);
}
echo "\t".(get_time()-$start)."\r\n";
echo 'preg_replace i:';
$start = get_time();
for ($i=0; $i<25000; $i++){
$thisoutput2=preg_replace('@<div class="tm-karma__text">@i',$replace,$thisoutput2.$i);
}
echo "\t".(get_time()-$start)."\r\n";
PHP 8.1 на реальной машине:
вы написали ещё больший бред, потому, что у вас размножается значение $thisoutput2 / $thisoutput1 И с определённого момента вступает в силу pcre.backtrack_limit и preg функции уже начинают выдавать бредовый результат, тогда уж скорректируйте и поставьте, например в начале скрипта
@ini_set('pcre.jit',0);
@ini_set('pcre.backtrack_limit', 90000000);// BY DEFAULT IS 100000
@ini_set('pcre.recursion_limit', 90000000);// BY DEFAULT IS 100000
@ini_set('pcre.backtrack_limit', 5000000);
<?php
@ini_set('pcre.backtrack_limit', 5000000);
echo ini_get ('pcre.backtrack_limit');
echo "\r\n";
Могу и больше:
<?php
@ini_set('pcre.backtrack_limit', 5000000);
echo ini_get ('pcre.backtrack_limit');
echo "\r\n";
Могу и больше:
а теперь поставьте
@ini_set('pcre.jit',0);
@ini_set('pcre.backtrack_limit', 90000000);// BY DEFAULT IS 100000
@ini_set('pcre.recursion_limit', 90000000);// BY DEFAULT IS 100000
5000000 оказалось мало
Давайте тест до 1000 уменьшим:
А можно и до 100
а теперь поставьте
@ini_set('pcre.jit',0);
@ini_set('pcre.backtrack_limit', 90000000);// BY DEFAULT IS 100000
@ini_set('pcre.recursion_limit', 90000000);// BY DEFAULT IS 100000
5000000 оказалось мало
при таких условиях для вашего последнего скрипта у меня выдало
str_replace: 0.34097504615784
preg_replace: 1.2035641670227
preg_replace i: 1.2334840297699
@ini_set('pcre.jit',0);
@ini_set('pcre.backtrack_limit', 90000000);// BY DEFAULT IS 100000
@ini_set('pcre.recursion_limit', 90000000);// BY DEFAULT IS 100000
<?php
@ini_set('pcre.jit',0);
@ini_set('pcre.backtrack_limit', 90000000);// BY DEFAULT IS 100000
@ini_set('pcre.recursion_limit', 90000000);// BY DEFAULT IS 100000
echo ini_get ('pcre.jit');
echo "\r\n";
echo ini_get ('pcre.backtrack_limit');
echo "\r\n";
echo ini_get ('pcre.recursion_limit');
echo "\r\n";
PHP Version 8.1.17
не знаю при каких условиях у вас мог получиться такой результат
PHP 8.2 со старым процессором
str_replace: 0.33971881866455
preg_replace: 1.2024669647217
preg_replace i: 1.2356669902802
PHP 8.0 с процессором со спекулятивным исполнением
str_replace: 0.3405020236969
preg_replace: 0.48409795761108
preg_replace i: 0.4930419921875
VDS, PHP 7.4
Вообще бред, регулярки c i быстрее, при чём всегда.
Другой VDS, PHP 7.4
Не сказал бы, что сильная быстрее str_replace, раз 10 проверил
Другой VDS, PHP 8.1
На доли доли быстрее.
Windows 10. Перезагрузил свой apache, скорости в разы упали сразу. Весьма странно наблюдать такую регрессию. Возможно что-то уже сама ОС кэширует у себя.
25 000 - циклов
250 000 - циклов, уже не такие страшные показатели.
Самое смешное, что даже мой же тест из первого топика стал быстрее для str_replace 🤣
preg_replace: 0.2176
preg_replace i: 0.2169
str_replace: 0.0322
В песочнице вообще можно получить интересные результаты:
https://onlinephp.io/c/547d4
PHP 8.1
0
90000000
90000000
str_replace: 0.77543902397156
preg_replace: 1.2858679294586
preg_replace i: 0.83956909179688
PHP 8.1
0
90000000
90000000
str_replace: 0.63856887817383
preg_replace: 0.66068816184998
preg_replace i: 0.64235186576843
PHP 7.3
0
90000000
90000000
str_replace: 0.55451011657715
preg_replace: 0.57687377929688
preg_replace i: 0.58461213111877
А вот уже 7.0
0
90000000
90000000
str_replace: 0.48414707183838
preg_replace: 2.1467258930206
preg_replace i:
Fatal error: Maximum execution time of 3 seconds exceeded in /home/user/scripts/code.php on line 65
Вот и нашли мы точку отправную, когда всё было плохо. Тогда больше склоняюсь к ответу от vitor, что:
Если тестить на 7.2, то видно как скорость str_replace осталась ~ на прежнем уровне, а preg_replace выросла почти втрое.
Тем самым суть в том, что начиная с 7.2 можно использовать регулярки без сильной просадки в производительности. И чем новее версия PHP, тем меньше будет уже разница.