|
|
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть задача - проверять большое кол-во URL на запрет индексации в robots.txt Нагуглить ничего не удалось, поэтому изобретал свой велосипед Нужен взгляд со стороны, есть ли какие явные косяки и можно ли как-то оптимизировать код? Подозреваю, что можно сделать регулярками, но с ними совсем не дружу Заранее благодарен) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 02:20 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Разбираться в коде лениво, навскидку: - не знаю синтаксиса правил, но у тебя сейчас для каждого урла выполняется преобразование всех имеющихся правил, а потом тупой пробег по каждому элементу. Это самый большой убийца производительности. Расщепи правила до самого конца, загони хотя бы в сортированный список, чтобы поиск шёл бинарный, и будет уже прирост на порядок, а то и не один. - имеет смысл разделить списки на allow и disallow. т.к. логика "все, что не запрещено - разрешено", то достаточно пробегаться по disallow, и если урл найден, то уже искать его в allow - const у строковых параметров - избегать постоянного создания/удаления объекта st (кстати, а он и не удаляется - утечка памяти) - избегать перераспределения строк. RightStr(s, 1) заменяется на s[Length(s)]. Delete тоже не нужно, выполняй поиск по PosEx. Остальное надо смотреть исходя из синтаксиса правил. У тебя не увидел обработки символов подстановки, хотя они допустимы, емнип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 10:13 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Forx, TDictionary тебе случайно не поможет? http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Generics.Collections.TDictionary ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 10:24 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Василий №2, разделить списки на allow и disallow - сначала так и хотел делать, но в хелпе яндекса указано, что так больше не работает. Директивы Allow и Disallow из соответствующего User-agent блока сортируются по длине префикса URL (от меньшего к большему) и применяются последовательно. Если для данной страницы сайта подходит несколько директив, то робот выбирает последнюю в порядке появления в сортированном списке. Таким образом, порядок следования директив в файле robots.txt не влияет на использование их роботом. Сортировку в текущем коде по длине префикса пока не проверял, хочу общую концепцию отладить удаление объекта st - да, упустил, спасибо Еще нужно if isFind then break переносить в конец цикла, т.к. сейчас прерывание происходит на следующей итерации и Result не верное значение получает. Обработка символов подстановки - так для этого и делал Код: pascal 1. Т.е. Правило: /cat/*/subcat Делим на: /cat/ /subcat И последовательно проверяем на вхождения в URL (URL всегда относительный) По остальному - спасибо! Учту авторTDictionary тебе случайно не поможет? Возможно, пошел читать, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 11:17 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Forxразделить списки на allow и disallow - сначала так и хотел делать, но в хелпе яндекса указано, что так больше не работает. Тогда да Обработка символов подстановки - так для этого и делал Код: pascal 1. Т.е. Правило: /cat/*/subcat Делим на: /cat/ /subcat И последовательно проверяем на вхождения в URL (URL всегда относительный) По остальному - спасибо! Учту Уууу... тяжелый случай. Проверка на маску далеко не так делается - можно заюзать MatchesMask, или наваять свою простую функцию без лишних заморочек. КМК, твой код еще и некорректен - правило /cat/*/subcat может сработать на /subcat/foo/cat. В общем, весь код проверки на маску выкинуть. Вместо него при загрузке правил отмечать флагом правила с маской и без, при проверке - правила без маски проверять на StartsFrom, а с маской уже через отдельную функцию. Также, если такое допускается форматом, надо предусмотреть различие случаев путей от корня и со вхождением в любом месте; пути от корня проверяются быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 14:49 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
ForxНагуглить ничего не удалось, поэтому изобретал свой велосипед Исходники любого веб-сервера не предлагать?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2018, 14:50 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Василий №2, понял, вы правы, буду переделывать, спасибо! Но, кстати, Код: pascal 1. на /subcat/foo/cat не сработает, т.к. /cat/ <> /cat да и на /subcat/foo/cat/ т.к. Код: pascal 1. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 13:42 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Forx, За 100500 тыщ могу оптимизировать твой код Безналичный расчёт :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2018, 16:14 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, спасибо за предложение, но не думаю, что мне прям уж так необходим суперпупермегаскоростной код за 100500 ;) -- Использовать MatchesMask не получилось, т.к. она не правильно обрабатывает вложенность На данный момент получилось следующее: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2018, 03:05 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Только щас увидел Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2018, 03:14 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Forx, На x86 даст прирост, на x64 нет. На x64 нужно сначала сверять длину, а потом CompareMem ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2018, 03:54 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUForx, На x86 даст прирост, на x64 нет. На x64 нужно сначала сверять длину, а потом CompareMem При чем тут CompareMem? UStrEqual и так проверяет длины. Неужели есть извращенцы, заменяющие сравнение строк самопальным кодом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 10:05 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Василий №2, Код смотри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 18:17 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
Василий №2Неужели есть извращенцы, заменяющие сравнение строк самопальным кодом?Угу, недавно цельный топик был с SSE и AVX-ом! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2018, 21:28 |
|
||
|
Оптимизировать код (проверка URL на запрет в robots.txt)
|
|||
|---|---|---|---|
|
#18+
kep-koВасилий №2Неужели есть извращенцы, заменяющие сравнение строк самопальным кодом?Угу, недавно цельный топик был с SSE и AVX-ом! Лучше бы шустрые Move и ZeroMem намутили под х64... ну и Pos[Ex] для юникодных строк тоже не помешал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2018, 09:48 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39614583&tid=2041115]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 444ms |

| 0 / 0 |
