Назад | Перейти на главную страницу

оптимизация производительности файла proxy.pac

Я перенаправляю определенные веб-сайты через прокси с файлом proxy.pac.

В основном это выглядит так:

if (shExpMatch(host, "www.youtube.com"))
    { return "PROXY proxy.domain.tld:8080; DIRECT" }
if (shExpMatch(host, "youtube.com"))
    { return "PROXY proxy.domain.tld:8080; DIRECT" }

На данный момент этим методом перенаправлено около 125 сайтов. Однако я планирую добавить к нему еще несколько доменов, и я предполагаю, что в конечном итоге это будет список из 500-1000 доменов.

Важно не перенаправлять весь трафик через прокси.

Как лучше всего оптимизировать этот файл с точки зрения производительности?

Спасибо

Если вы просто проверяете равенство, используйте '==' для сравнения. Функция shExpMatch позволяет использовать выражения оболочки (* и? В их значениях оболочки DOS), поэтому второй аргумент должен быть проанализирован. Сценарий запускается в браузере один раз (или реже) за запрос, поэтому производительность не является проблемой, но он делает код более понятным, если вы напишете, что значит yuo.

Я бы также использовал переменную для хранения прокси-выражения. Вероятно, это не сэкономит память во время выполнения, поскольку повторяющийся литерал, вероятно, будет использоваться повторно, но это упростит чтение кода.

Есть хорошая информация о http://www.proxypacfiles.com/ включая примеры и извлеченные уроки.

Я думаю, что производительность зависит от того, какой браузер / программа использует файл .pac, но вы можете найти некоторые рекомендации Вот которые включают:

  • Скорость выполнения файла зависит от способа построения аргументов в файле PAC, а не от общей длины файла. Файлы PAC последовательно выполняют команды. Следовательно:
    • Не используйте чрезмерные функции исключения, так как это может замедлить работу.
    • Поместите аргументы или исключения, которые имеют высокую вероятность выполнения, в начале файла. Например, поиск частных IP-адресов должен быть в начале.
  • Избегайте использования сложных регулярных выражений для уменьшения размера файла PAC. Это может сделать его менее эффективным.
  • Сначала проверьте исключения из простых правил.
  • Поместите проверки с высокой вероятностью вверху.
  • Сведите к минимуму использование регулярных выражений.
  • Используйте эффективные регулярные выражения и избегайте захвата совпадений, которые не будут использоваться.
  • Поскольку возврат происходит немедленно, избегайте использования еще с участием если заявления.
  • Для однострочных операторов if () не требуются скобки начала {и конца}.
  • Тщательно рассмотрите использование (чрезмерное использование) isResolvable (), dnsResolve () и isInNet () из-за потенциальных проблем с производительностью DNS.
  • Попробуйте сгруппировать похожие исключения в более крупный цикл if. Например, вместо проверки 10 хостов с помощью xyz.google.com в большом операторе OR, преобразуйте его во внешний оператор if, который применяется, если хост имеет * .google.com, а затем проверьте 10 хостов.
  • Проверяйте IP-адреса в отдельном цикле if.
  • Каждая открытая фигурная скобка должна иметь соответствующую закрывающую фигурную скобку, а каждая открытая скобка должна иметь соответствующую закрывающую скобку. Одна из наиболее распространенных ошибок при создании файлов PAC - это потеря счетчика открывающих и закрывающих круглых и квадратных скобок.
  • Избегайте использования внешних или глобальных переменных и функций.

Кроме того, есть http://pacparser.manugarg.com/ инструмент, который можно использовать для проверки файлов .pac.

Как обычно: хеши или деревья.

Я бы использовал хеширование: извлеките первый (или несколько символов) запрошенного доменного имени (также исключив «www.»), Чтобы выбрать соответствующий список шаблонов.