Должен ли я оставить его для производства?
Да. Это дает вашим пользователям те же преимущества, которые вы получаете при разработке.
Насколько это медленно? Я даже не уверен, как это работает.
У меня нет времени, но, вероятно, он пренебрежимо быстр для ваших целей. Он проверяет дату последнего изменения фактического файла, генерирует хэш разницы в числе тиков и использует конкатенацию строк для добавления ее в URL. Вы можете проверить себя, потому что шаблоны t4 - это просто текстовые файлы. Код для этого выглядит в версии, которую я имею:
static DateTime CenturyBegin=new DateTime(2001,1,1);
public static string TimestampString(string virtualPath) {
if (!HostingEnvironment.IsHosted) return string.Empty;
string filePath = HostingEnvironment.MapPath(virtualPath);
return Convert.ToString((System.IO.File.GetLastWriteTimeUtc(filePath).Ticks-CenturyBegin.Ticks)/1000000000,16);
}
Если это не достаточно быстро для ваших целей, вы можете изменить метод, который добавляет метку времени к чему-то достаточно быстрому для вас. Менее точные, но более быстрые методы будут похожи на номер сборки сборки или что-то, что вы меняете вручную в процессе сборки. Придерживаясь значения по умолчанию, вы сделаете так, что только файлы, которые были изменены, будут кешированы недействительными.
Кто делает магию преобразования "/Content/nerd.jpg?2009-09-04T12:25:48" в "/Content/nerd.jpg"?
С помощью HTTP вы можете добавить строку запроса к любому запросу. Большинство реализаций сервера просто игнорируют строку запроса для статических файлов, однако они обрабатывают разные строки запроса как отдельные запросы, следовательно, получают обновления, как только они сделаны.
Даже если вы не измените файл, вы можете заставить браузеры перезагружать содержимое, просто изменив строку запроса url + на то, что клиент не кэшировал.