@vuejs_ru

Страница 1547 из 3900
Michael
02.11.2017
14:36:53
привет, коллеги! думаю, как бы прикрутить svg-иконки. у нас SPA без SSR, задачи вставлять через CSS нету, так что выбираю между разными способами инлайнинга в HTML 1) есть https://github.com/visualfanatic/vue-svg-loader - он просто читает svg-файл, прогоняет через SVGO и рендерит во vue-компонент 2) есть https://github.com/kisenka/svg-sprite-loader - собирает файлы в спрайт, возвращает объект с айдишником символа, который можно использовать в <use> - но есть возможность дописать "генератор рантайма", чтобы возвращал сразу компонент (есть пример для реакта https://github.com/kisenka/svg-sprite-loader/blob/master/examples/custom-runtime-generator/svg-to-icon-component-runtime-generator.js - для ву получилось сделать аналогичный за 20 минут) То есть клиентский код у обоих может быть одинаковым: <template> <button>Hi, <Icon /></button> </template> <script> let Icon = require("icon.svg") export default { components: {Icon} } </script> в первом не нравится, что он превращает svg в render-функцию (нафига?) во втором не нравится, что SVGO можно подключить только сбоку, соответственно каждый svg будет парситься дважды. и, главное, не могу понять, есть ли у спрайта преимущества перед тупой вставкой в код, если мы не используем svg из CSS. вроде при тупой вставке на каждое использование иконки будет генериться N дом-узлов, а для спрайта - только 2 (<svg> и <use>). с другой стороны, use вроде как порождает кусок shadow dom, который кажется копируется из источника. при этом при тупой вставке мы можем легко раскрашивать из CSS отдельные куски SVG, а для спрайта - только все целиком (или я не прав?) короче, пока накидал свой лоадер на основе vue-svg-loader, он тупо передает содержимое svg строкой в функцию, которая уже создает из нее компонент, всталяя svg через domProps: {innerHTML: ...}, - вроде работает, но прежде чем начать его активно юзать, хочу посоветоваться с умными людьми =)
я первое юзаю, доволен как слон. Код красивый.

Michael
02.11.2017
14:37:33
насчёт нафига, ответ простой: вртуалдом

надо тебе через д3 точку поправить. одну из 47 тысяч

Google
Michael
02.11.2017
14:37:57
и... вот так.

Илья
02.11.2017
14:38:36
я первое юзаю, доволен как слон. Код красивый.
ага, пасиб. а много иконок на странице бывает?

Stanislav
02.11.2017
14:39:13
привет, коллеги! думаю, как бы прикрутить svg-иконки. у нас SPA без SSR, задачи вставлять через CSS нету, так что выбираю между разными способами инлайнинга в HTML 1) есть https://github.com/visualfanatic/vue-svg-loader - он просто читает svg-файл, прогоняет через SVGO и рендерит во vue-компонент 2) есть https://github.com/kisenka/svg-sprite-loader - собирает файлы в спрайт, возвращает объект с айдишником символа, который можно использовать в <use> - но есть возможность дописать "генератор рантайма", чтобы возвращал сразу компонент (есть пример для реакта https://github.com/kisenka/svg-sprite-loader/blob/master/examples/custom-runtime-generator/svg-to-icon-component-runtime-generator.js - для ву получилось сделать аналогичный за 20 минут) То есть клиентский код у обоих может быть одинаковым: <template> <button>Hi, <Icon /></button> </template> <script> let Icon = require("icon.svg") export default { components: {Icon} } </script> в первом не нравится, что он превращает svg в render-функцию (нафига?) во втором не нравится, что SVGO можно подключить только сбоку, соответственно каждый svg будет парситься дважды. и, главное, не могу понять, есть ли у спрайта преимущества перед тупой вставкой в код, если мы не используем svg из CSS. вроде при тупой вставке на каждое использование иконки будет генериться N дом-узлов, а для спрайта - только 2 (<svg> и <use>). с другой стороны, use вроде как порождает кусок shadow dom, который кажется копируется из источника. при этом при тупой вставке мы можем легко раскрашивать из CSS отдельные куски SVG, а для спрайта - только все целиком (или я не прав?) короче, пока накидал свой лоадер на основе vue-svg-loader, он тупо передает содержимое svg строкой в функцию, которая уже создает из нее компонент, всталяя svg через domProps: {innerHTML: ...}, - вроде работает, но прежде чем начать его активно юзать, хочу посоветоваться с умными людьми =)
Я галпом собираю спрайт из символов, потом вебпак инлайнит его в index.html при сборке. Использую с помощью компонента, в который передаю id символа, где он вставляется в use

Michael
02.11.2017
14:39:36
ага, пасиб. а много иконок на странице бывает?
не оч. но теоритически может быть и больше. и будет..))

Илья
02.11.2017
14:40:19
Я галпом собираю спрайт из символов, потом вебпак инлайнит его в index.html при сборке. Использую с помощью компонента, в который передаю id символа, где он вставляется в use
ага, ну вот это подход из svg-sprite-loader, над которым я голову ломаю +) а вы понимаете, зачем нужен спрайт? или у вас есть обращения из CSS?

Michael
02.11.2017
14:40:37
надо тебе через д3 точку поправить. одну из 47 тысяч
тут косяк (д3 сам туда лазит), но теория та же

Николай
02.11.2017
14:41:26
Решение

Илья
02.11.2017
14:41:33
а, но у вас он физически инлайнится в HTML?

Michael
02.11.2017
14:41:48
Stanislav
02.11.2017
14:41:48
При сборке

Николай
02.11.2017
14:42:24
Nuxt.config.js добавил render: {resourceHints: False }

Google
Илья
02.11.2017
14:42:42
ясно, но это вроде значит, что спрайт не попадет в кеш (а у svg-sprite-loader попадет, потому что он физически сидит в js-бандле и вставляется в дом уже при загрузке)

Николай
02.11.2017
14:43:03
И теперь имею чистенький html с загрузкой пары файлов

Илья
02.11.2017
14:43:44
ну типа если юзер часто ходит на сайт

Stanislav
02.11.2017
14:44:19
Да оно там фигню будет весить. Отдельного запроса нет. Рендеринг страницы не тормозит

Sasha
02.11.2017
14:44:20
Michael
02.11.2017
14:44:35
ну типа если юзер часто ходит на сайт
не совсем. допустим, юзер заходит дважды. А юзеров 170к в день.

гы.

Илья
02.11.2017
14:45:33
ок, ну не суть +) короче, если я не хочу юзать svg в качестве фона из css, на спрайты можно забить и вставлять тупо в хтмл целиковый svg?

я вообще хотел это с автором svg-sprite-loader обсудить, он русский, но чет пока на связь не вышел, так что пристаю к вам )

Michael
02.11.2017
14:46:39
ок, ну не суть +) короче, если я не хочу юзать svg в качестве фона из css, на спрайты можно забить и вставлять тупо в хтмл целиковый svg?
Точно можешь. Насчёт кеша -- закешивается всё вышеуказанное. В данном случае, весь жс до обновления.

на самом деле, в качестве компонента вью это будет немного менее ошибко-генерящее

(error-prone)

в большом приложении скажется на поддержке

с другой стороны, если у тебя верстак есть огненный, можно ему отдать в ксске)

Илья
02.11.2017
14:48:28
не понял )

я сам довольно огненный ?

Michael
02.11.2017
14:49:00
не понял )
<my-svg /> куда глазастей, чем бэкграунды в отдельном ксс

Stanislav
02.11.2017
14:49:10
+

Michael
02.11.2017
14:49:28
значит, проще. значит, меньше вероятности запутаться и оставить багу рано или поздно.

Google
Michael
02.11.2017
14:49:54
другое дело, если ты угараешь по ксс и для тебя он приятнее кода. Тогда всё наоборот)

Илья
02.11.2017
14:49:59
а, ну это да, но я как бы сразу решил, что расставлять иконки из css мы не хотим )

Michael
02.11.2017
14:50:37
тогда не заморачивайся и грузи компонентом)

вот будут они слишком жирные, будешь складывать в отдельные подсборки и всё такое

в конце концов, вебпак плагин напишешь

Dmitry
02.11.2017
14:51:20
Подскажите, что делать <component :is="view"></component> изменяя view - меняю отображаемый компонент. Если внутри одного компонента делаю операции, изменяю переменные - при возвращении к нему - данные теряются. Как быть?

Michael
02.11.2017
14:51:22
там доки получше стали, кстати

мало инфы.

кого одного? другого?

возвращении куда? в маза рашу?

Илья
02.11.2017
14:54:52
ок, тогда последний вопрос =) у svg vue loader есть вот такая строчка: https://github.com/visualfanatic/vue-svg-loader/blob/4921cf1069f59db5a0a30b169ee001db72bd1755/index.js#L22 это типа содержимое svg подается на вход vue-компайлеру, а он возвращает render-функцию. меня почему-то этот момент смутил - оно точно затормозит сборку, и, скорее всего, затормозит рантайм (потому что при рендере компонента весь svg будет собираться обратно из vnode-ов) мне захотелось тупо зафигачить содержимое через innerHTML, что я на коленке и сделал =) вопрос: есть ли у моего решения недостатки?

Michael
02.11.2017
14:54:55
и какие переменные? в переменной view? каким образом?

Dmitry
02.11.2017
14:55:43
никакой стейт не будет нужен
А как потом данные подгружать? Брать этот уникальный модификатор из href? Или каким-то пропсом передавать?

Ilya
02.11.2017
14:55:59
не будет никакого href

props

Dmitry
02.11.2017
14:56:22
Я, кажется, разобрался. Keep-alive может сохранять состояние компонента. запоминает все свойства

Ilya
02.11.2017
14:56:25
почитай про vue-router

Michael
02.11.2017
14:57:05
Google
Илья
02.11.2017
15:02:22
ну на первый взгляд у твоего решения нет svgo optimizer'a
есть же ) я из него получаю готовую строку

Michael
02.11.2017
15:02:42
тогда у тебя велосипет с:

потому что у него по внутренней сути на первый взгляд то же самое, но немного более vue-way.

Илья
02.11.2017
15:04:08
ну смотри, у меня по сути ровно тот же код, что и у vue-svg-loader, но разница в том, как устроена рендер-функция

моя не собирает svg из vnode-ов, а вставляет его в innerhtml

Michael
02.11.2017
15:04:42
ааааа

ну если код свгшки не будет меняться

сам хтмл свгшки

но твой выигрышный

Admin
ERROR: S client not available

Илья
02.11.2017
15:05:13
ну вроде не должен

Michael
02.11.2017
15:05:28
ибо разница только в виртуалдоме

Илья
02.11.2017
15:06:11
ну и меня еще пугает мысль, что мы заставляем компайлер ву-шаблонов парсить что-то, что, во-первых, шаблоном не является, а во-вторых даже не нами написано

Michael
02.11.2017
15:06:12
может, есть, правда, подводные камни в кеше виртуалдома

Илья
02.11.2017
15:06:30
у меня свгшки экспортируются из фигмы, есть такой стремный сервис

Michael
02.11.2017
15:06:34
там где внодный вариант закешится и будет обновляться хитро, твой может перерисоваться целиком

но тут больше хз чем нет

думать немного уже надо

)))

Илья
02.11.2017
15:07:05
ну короче надо потестить, ок +) про кеш понял мысль, да

Google
Илья
02.11.2017
15:07:19
собсно надо почитать исходники и понять, как оно перерисовывается

Michael
02.11.2017
15:07:29
так что если свг не срака, то всё ок

если что найдёшь интересное, напиши, указав меня где-нибудь чтобы уведомление вылезло) интересно

Илья
02.11.2017
15:08:17
свг как минимум валидный xml, потому что он предварительно через svgo прогоняется, но все равно

окей =)

Michael
02.11.2017
15:08:36
ну хмл имеет неограниченный набор тегов

как минимум

на хмл вю может заругаться

и будет прав

а вот на хтмл нет

Илья
02.11.2017
15:09:24
ну там теоретически может возникнуть конфликт, если в спецуху свг добавят теги <component> и <template> ?

или например если где-то в проекте кто-то добрый зарегает глобально компонент <g> или <path> ?

Илья
02.11.2017
15:11:30
ну у себя я это могу контроллировать, а если делать какое-то отчуждаемое решение, то уже хз

вообще глобальная регистрация компонентов - это типа считается бэд пректис, или норм?

я все импортирую руками, но иногда подбешивает )

Michael
02.11.2017
15:12:26
это классическая тема про глобальные переменные. Слать такие решения куда подальше. А авторам пособие для чайников.

https://stackoverflow.com/questions/484635/are-global-variables-bad

Страница 1547 из 3900