Vim, отложите отступ в глобальной конфигурации

Chromium/Chrome действительно не кэширует DNS-запросы дольше минуты.

Интересно, что из bugs-chromium — Issue 164026 — DNS TTL не учитывается с 21 апреля 2011 г.

Единственный кеш DNS в системе находится в Chrome, и он не учитывает ТТЛ. Нам нужно либо исправить хром и/или добавить промежуточный кеш который правильно обрабатывает TTL.

Ответ в заявке от 4 декабря 2012 г.:

HostCache в настоящее время предполагает TTL=60 с для всех положительных результатов. С участием асинхронный преобразователь DNS, мы планируем использовать TTL=max(60s, server_reported_ttl), то есть не менее 60 с. Смысл в том, чтобы улучшить производительность кэша. (Когда CDN NS обеспечивает TTL=10-20 с, и это получение всех подресурсов занимает более 30 секунд, нам часто приходится повторно запрашивать одно и то же имя хоста во время загрузки одной страницы.)

Заявка закрыта 10 октября 2013 г. по следующим причинам:

Chrome на CrOS использует асинхронный преобразователь DNS, который учитывает TTL = max (60s, > server_reported_ttl)

Я закрываю это как WontFix (устарело/работает по назначению).

Это известная проблема уже много лет; их внутренний преобразователь DNS игнорирует TTL записей DNS и кэширует DNS-запросы только на 1 минуту.

В течение многих лет пользователи запрашивали функцию, позволяющую изменить это поведение по умолчанию, но Google так и не создал ее.

В прошлом вы могли отключить внутренний преобразователь DNS в chrome://flags, в настоящее время он функционально больше не доступен.

Подводя итог, можно сказать, что это функция, т.е. он делает это по дизайну.

(Я изначально написал, что это никогда не может быть изменено, что, очевидно, не соответствует действительности.Решительный человек может либо перекомпилировать Chromium, либо взломать бинарники Chrome. ).

Итак, в качестве дополнения: существует множество задокументированных свидетельств того, что инженеры Google не намерены соблюдать значение TTL по умолчанию в полученных ответах DNS в Chrome/ium.

Из Отрицательное кэширование DNS-запросов (DNS NCACHE)

Как и в случае с кэшированием положительных ответов, распознаватель имеет смысл ограничение на то, как долго он будет кэшировать отрицательный ответ...

Хотя подразумевается, что преобразователь может/должен наложить максимальный лимит на кеширование ответа DNS, ограничение в 1 минуту в Google Chrome может быть слишком низким.

П.С. На самом деле я нашел ответ на то, что беспокоило меня в течение многих лет, когда я искал статистику Chrome, чтобы ответить на этот вопрос: Chrome: DNS-запросы со случайными DNS-именами: вредоносное ПО?

PPS Из приведенного ниже кода видно, что отрицательные ответы не кэшируются (TTL=0).

Из https://chromium.googlesource.com/chromium/src/net/dns/host_resolver_impl.cc

  99 // Default TTL for successful resolutions with ProcTask.
 100 const unsigned kCacheEntryTTLSeconds = 60;
 101 
 102 // Default TTL for unsuccessful resolutions with ProcTask.
 103 const unsigned kNegativeCacheEntryTTLSeconds = 0;
 104 
 105 // Minimum TTL for successful resolutions with DnsTask.
 106 const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;

1518   // Called by ProcTask when it completes.
1519   void OnProcTaskComplete(base::TimeTicks start_time,
1520                           int net_error,
1521                           const AddressList& addr_list) {
1522     DCHECK(is_proc_running());
1523 
1524     if (dns_task_error_ != OK) {
1525       base::TimeDelta duration = base::TimeTicks::Now() - start_time;
1526       if (net_error == OK) {
1527         UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackSuccess", duration);
1528         if ((dns_task_error_ == ERR_NAME_NOT_RESOLVED) &&
1529             ResemblesNetBIOSName(key_.hostname)) {
1530           UmaAsyncDnsResolveStatus(RESOLVE_STATUS_SUSPECT_NETBIOS);
1531         } else {
1532           UmaAsyncDnsResolveStatus(RESOLVE_STATUS_PROC_SUCCESS);
1533         }
1534         base::UmaHistogramSparse("Net.DNS.DnsTask.Errors",
1535                                  std::abs(dns_task_error_));
1536         resolver_->OnDnsTaskResolve(dns_task_error_);
1537       } else {
1538         UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackFail", duration);
1539         UmaAsyncDnsResolveStatus(RESOLVE_STATUS_FAIL);
1540       }
1541     }
1542 
1543     if (ContainsIcannNameCollisionIp(addr_list))
1544       net_error = ERR_ICANN_NAME_COLLISION;
1545 
1546     base::TimeDelta ttl =
                                              # always  0 seconds
1547         base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds);
1548     if (net_error == OK)
                                              # always 60 seconds 
1549       ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds);  
1550 
1551     // Source unknown because the system resolver could have gotten it from a
1552     // hosts file, its own cache, a DNS lookup or somewhere else.
1553     // Don't store the |ttl| in cache since it's not obtained from the server.
1554     CompleteRequests(
1555         MakeCacheEntry(net_error, addr_list, HostCache::Entry::SOURCE_UNKNOWN),
1556         ttl);
1557   }

1
16.10.2016, 22:56
2 ответа

Плагины синтаксиса и типов файлов могут заменять ваши настройки по умолчанию. Причина в том, что они применяются позже, когда файл открывается, а не при запуске vim.

Чтобы обойти это, вы можете сделать что-то вроде:

autocmd FileType * set nocindent

Обычно это приводит к вызову set nocindent каждый раз при открытии файла.

Измените * на c , если вы хотите, чтобы это применялось только к файлам c .

0
28.01.2020, 01:09

@Michas: Насколько я знаю, мы можем переопределить среду нашего Vim, используя параметр "-u", встроенный в команду vim. Например:

1) Создание файла, скажем, ~ / .yourvim, со следующими материалами:

set nocindent
set noautoindent

2) Затем добавьте в свой файл ~ / .bashrc эту строку

alias vim="vim -u ~/.yourvim"

3) Выйдите из текущего терминала, откройте новый, и вы можете попробовать с новой средой vim.

Я использую этот трюк, чтобы определить свой собственный vim. Конечно, мы можем предоставить больше параметров в файлах "~ / .yourvim", а также в команде "alias". Пока что он работает на моем Debian 8 с vim версии 7.4.

Есть другой способ: изменить или создать (если он не существует)

~/.vimrc

поместить следующие строки в последний файл

set nocindent
set noautoindent

Выйти из текущего терминала, открыть новый и попробовать. Удачи!

0
28.01.2020, 01:09

Теги

Похожие вопросы