Сокращение путей

Подготовили: Евгений Рыжков и Тимур Лисица Дата публикации: 27.02.2011

Если представить себе, что дизайн — это королева, а контент — король, то пропускная способность — это королевский придворный, который поддерживает все дела, происходящие в дворце. Так как любой нетривиальный рисунок будет содержать многие десятки пар координат, элемент <path> имеет сокращенный вариант записи, чтобы представить путь минимальным количеством байт.

Команды горизонтального и вертикального lineto

Вертикальные и горизонтальные линии — банальность в графике. Логично, что это в первую очередь требует оптимизации. Горизонтальная линия определяется командой H, за которой следует абсолютная x-координата, или командой h, за которой идет относительная x-координата. Аналогично и с вертикальными линиями: команда V, за которой абсолютная y-координата и v — с относительной.

Сокращение Эквивалент Эффект
H 20 L 20 current_y нарисовать линию к абсолютному положению (20, current_y)
h 20 L 20 0 нарисовать линию к (current_x+20, current_y)
V 20 L current_x 20 нарисовать линию к абсолютному положению (current_x,20)
v 20 l current_x 20 нарисовать линию к (current_x, current_y+20)

Таким образом, мы получим прямоугольник с размерами 15 единиц в ширину и 25 единиц в высоту, с координатами верхнего левого угла (12, 24).

<path d="M 12 24 h 15 v 25 h -15 z" />

Обозначения сокращений для путей

Пути можно сократить, придерживаясь следующих правил:

  1. Можно ставить несколько серий координат после L и l, так же как делали это в элементе <polyline>. Ниже приведен код, где все шесть маршрутов рисуют один и тот же ромб (рис под кодом). Первые три — в абсолютной системе координат, следующие три — в относительной системе. Третий и шестой маршрут демонстрируют интересный прием — если Вы поставите несколько пар координат после moveto, все пары после первой будут считаться предшествующими lineto. Можно также ставить несколько одиночных координат после horizontal lineto и vertical lineto, хотя это делать бессмысленно. H 25 35 45 — тоже самое, что и H 45, а v 11 13 15 — тоже самое, что и v 39.
    <path d="M 30 30 L 55 5 L 80 30 L 55 55 Z" />
    <path d="M 30 30 L 55 5 80 30 55 55 Z" />
    <path d="M 30 30 55 5 80 30 55 55 Z" />
    <path d="m 30 30 l 25 -25 l 25 25 l -25 25 z" />
    <path d="m 30 30 l 25 -25 25 25 -25 25 z" />
    <path d="m 30 30 25 -25 25 25 -25 25 z" />
    
    сокращения path
  2. Все ненужные пробелы можно убрать. Нет необходимость ставить пробел после каждой командной буквы, если все команды состоят только из одной буквы. Нет необходимости ставить пробел между числом и командой, так как командная буква не может быть частью числа. Не нужно ставить пробел между положительными и отрицательными числами, так как знак минус не может быть частью положительного числа. Сократим третий и шестой маршрут из предыдущего списка:
    <path d="M30 30 55 5 80 30 55 55Z" />
    <path d="m30 30 25-25 25 25-25 25z" />
    
    Еще пример «правила упущения пробелов» продемонстрирован при создании прямоугольника с шириной в 15 единиц, высотой = 25 и координатами верхнего левого угла (12, 24):
    <path d="M 12 24 h 15 v 25 h -15 z" /> <!-- original -->
    <path d="M12 24h15v25h-15z" /> <!-- shorter -->
    

Куда дальше

По теме

Показать комментарии