Scala неявный def, возвращающий A с B

Моя рекомендация заключается в том, что вы опускаете большинство дополнительных тегов закрытия и все дополнительные атрибуты, с которыми вы можете справиться. Многие IDE будут жаловаться, поэтому вам не удастся избежать некоторых из них, но, как правило, лучше для меньшего размера файла и меньше беспорядка. Если у вас есть генераторы кода, определенно опускайте конечные теги, потому что вы можете получить от них хороший размер. Обычно это не имеет значения, так или иначе.

Но когда это имеет значение, тогда действуйте на нем. В недавней моей работе я смог уменьшить размер моего визуализированного HTML с 1,5 МБ до 800 КБ, исключив большую часть генерируемых атрибутов конца и избыточного значения для открытого тега, где текст элемента был таким же, как и стоимость. У меня около 200 тегов. Я мог бы реализовать это совсем по-другому, но это будет больше работы ($$$), поэтому это позволяет мне легко сделать страницу более отзывчивой.

Просто из любопытства я обнаружил, что если я удалю кавычки вокруг атрибутов, которые им не нужны, я мог бы сэкономить 20 КБ, но моей среде IDE (Visual Studio) это не нравится. Я также с удивлением обнаружил, что очень длинный идентификатор, который генерирует ASP.NET, составляет 20% от моего файла.

Идея о том, что мы могли бы получить какую-либо значимую часть HTML строго достоверно, была ошибочной в первом место, так что делайте все, что лучше всего подходит для вас и ваших клиентов. Большинство инструментов, которые я когда-либо видел или использовал, скажут, что они генерируют xhtml, но они действительно не работают на 100%, и в любом случае нет никакой пользы для строгого соблюдения.

0
задан Dmytro Mitin 2 March 2019 в 08:27
поделиться

1 ответ

Следующий код компилируется:

  trait Alg[T]

  trait LowPriorityAlg {
    implicit def bAlg: Alg[B0] =  ???
  }
  object Alg extends LowPriorityAlg {
    implicit def aAlg: Alg[A0] =  ???
    implicit def combineAlg[AB, A: Alg, B: Alg](implicit ev1: AB <:< A, ev2: AB <:< B): Alg[AB] = ???    
  }

  trait A0
  trait B0

  val comb: Alg[A0 with B0] = Alg.combineAlg[A0 with B0, A0, B0]

  val comb1: Alg[A0 with B0] = implicitly[Alg[A0 with B0]]
0
ответ дан Dmytro Mitin 2 March 2019 в 08:27
поделиться
Другие вопросы по тегам:

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