После многих споров и месяцев исследований и разработок мы переписываем частиVue
нижний слой, рефакторингuni-app
Фреймворк, который реализует сторону WeChatДвойная производительность и больше синтаксиса Vueслужба поддержки.
задний план
uni-app
заимствовано в началеmpvue
, чтобы добиться быстрой совместимости апплета WeChat, поблагодарите команду Meituan Dianping за их вклад в сообщество открытого исходного кода!
с использованиемuni-app
Разработчиков становится все больше и больше, а сложность бизнеса продолжает расти, и многие разработчики жалуютсяuni-app
Поддерживается мало синтаксиса vue, а в некоторых сценариях возникают проблемы с производительностью (особенно при наличии сложных компонентов на странице).Эти проблемы на самом деле вызваныmpvue
В результате механизма реализации мы кратко проиллюстрируем проблему производительности сложных компонентов на примере.
В начале рождения таких фреймворков, как mpvue/wepy, апплет WeChat не поддерживалПользовательские компонентыНевозможно сделать разработку с модифицированными компонентами; MPVUE/WEPY для решения этой проблемы, творческие компоненты VUE, написанные пользователями, компилируются в WXMLшаблон, в замаскированном виде реализует возможности компонентной разработки и улучшает возможность повторного использования кода, что является отличным техническим решением в технических условиях того времени. Однако это решение также вызывает компиляцию данных в компоненте Vue в данные на странице, и обновление данных компонента также будет вызываться на основе сопоставления пути.Page.setData
. Особенно на страницах со многими компонентами и большим объемом данных локальное обновление каждого компонента приведет к глобальному обновлению на уровне страницы, что приведет к огромным потерям производительности.
WeChat был запущен позжепользовательский компонент, На самом деле он поддерживает локальные обновления на уровне компонентов.После проверки мы обнаружили, что обновление данных на уровне компонентов имеет значительное улучшение производительности по сравнению с глобальным обновлением страницы.
Кроме того,mpvue
на слое Vuevnode
Сравнение и данныеdiff
Неполный расчет также будет потреблять некоторую производительность.
По этим причинам мы начали работу по переписыванию фреймворка на стороне WeChat.
Новые особенности
Удвойте производительность
Новыйuni-app
Скорректированные и переписанные частиVue.js
Базовая реализация в основном включает в себя:
- на основеПользовательские компоненты мини-программывыполнить
Vue.js
разработка компонента -
Vue
отмена слояvnode
В сравнении - более тщательный
diff
рассчитать,setData()
меньше данных для связи
После того, как новый фреймворк был переписан, мы построили следующую тестовую модель:
- Создайте интерфейс списка, каждый элемент списка является настраиваемым компонентом
- Установка загрузки DRIGGERS UPDATE DATA, читает статические данные из локальных каждый раз, и экраны сетевых различий
- Имеет время времени обновления данных, рендеринг страницы завершен, и разница во времени должна сравниться как показатель сравнения (потребление времени, единица в миллисекундах)
Затем используйте новую и старую платформы соответственно, проведите несколько тестов на одном и том же мобильном телефоне (vivo nex), найдите среднее значение и получите следующие результаты:
количество компонентов | Старый фреймворк (mpvue) | новая структура |
---|---|---|
200 | 204ms | 129ms |
400 | 280ms | 139ms |
800 | 341ms | 180ms |
1000 | 653ms | 196ms |
Судя по тестовым данным, производительность нового фреймворка удвоилась на сложных страницах! Особенно для страниц с большим количеством данных и более сложных компонентов, чем больше улучшение производительности!
Советы: мы также провели тест производительности для нескольких популярных кросс-энд фреймворков (таких как taro, wepy, chameleon и т. д.), и результаты работы uni-app также бросаются в глаза. так что следите за обновлениями.
Дополнительная поддержка синтаксиса Vue
Мы также улучшилиuni-app
Компилятор, который поддерживает больше синтаксиса Vue, как показано ниже:
- фильтр поддержки
filter
- поддерживать более сложные
JavaScript
выражение выражения - поддержка в
template
внутреннее использованиеmethods
функционировать в - служба поддержки
v-html
(такой жеrich-text
анализ) - Компоненты поддерживают встроенную привязку событий, например:
@tap.native
путь опыта
На данный момент разработка нового фреймворка завершена на стороне WeChat, а компиляторы других мини-программ и приложений пока остаются старой версии. Мы выпустили групповую бета-версию и пригласили разработчиков испытать ее на WeChat.
Разработчик создает его следующим образомvue-cli
И создайте проект uni-app, скомпилируйте и раздайте его в апплет WeChat:
# npm script
# 全局安装vue-cli
$ npm install -g @vue/cli
# 创建uni-app项目,会提示选择项目模板,初次接触建议选择 hello uni-app 模板
$ vue create -p dcloudio/uni-preset-vue my-project
# 进入项目目录
$ cd my-project
# dev 模式,编译预览
$ npm run dev:mp-weixin
# build 模式,发行打包
$ npm run build:mp-weixin
Переключение между старой и новой версиями
Чтобы не затрагивать старый проект,uni-app
Групповая бета-версия в настоящее время имеет две встроенные платформы, новую и старую, причем по умолчанию используется старая платформа.manifest.json
-> mp-weixin
-> usingComponents
Node включает новую структуру компиляции следующим образом:
// manifest.json
{
// ...
/* 小程序特有相关 */
"mp-weixin": {
"usingComponents":true //启用新框架编译,默认为false
}
}
Если вы используете новый синтаксис vue, обратите внимание, что этот новый синтаксис поддерживают только H5 и WeChat.При компиляции на другие платформы используйте условную компиляцию.
Советы:
- Чтобы обеспечить совместимость пользовательских компонентов, рекомендуется установить последнюю версию базовой библиотеки WeChat при запуске в инструменте разработчика WeChat.
- Когда вы познакомитесь с новым фреймворком, если у вас есть какие-либо вопросы или предложения, отправьте их на github.issue
Текущее состояние и будущее
После Праздника Весныuni-app
1.6, новый байт, превосходящий поддержку небольшой программной платформы; здесь реализуйте набор кода, 7-сторонний выпуск! 7-сторонняя включает: приложение (iOS / Android), апплет (WeChat / Alipay / Baidu / byte beating), платформу H5, см. ниже:
Приток большого количества энтузиазвых разработчиков Uni-App сообществу, существуют десятки единомышленников Uni-App Exchange, следующая картина показывает группу Exchange 500 QQ, создает группу, полную энтузиазм, которая находятся два дня, которые можно увидеть.
В настоящее время каждый день создаются тысячи проектов uni-app (включая тестовые проекты) с более чем 10 000 случаев.uniapp.dcloud.io/case. а такжеTaro
По сравнению со случаем универсального апплета WeChat в фреймворке,uni-app
изКроссовый корпусгораздо богаче.
В кросс-энд фреймворке апплетаuni-app
Возможно, самый используемый интерфейсный фреймворк с наибольшим количеством кросс-эндов.
В последнее время для активногоVue
Многотерминальная экология развития, авторuni-app
а такжеmpvue
Соревнование по разработке плагинов, совместно организованное командой, официально стартовало! Приглашаем всех разработчиков принять активное участие. Делая колеса и принося пользу сообществу, вы также можете выиграть еще один приз (iPhone Xs Max, дисплей 4K и другие призы), и вы можете выиграть больше одним махом ^_^,Нажми для деталей.
Следующий,uni-app
Команда будет продолжать работать на полной скорости и быстро улучшаться в следующих областях:
- Новый фреймворк uni-app совместим с другими платформами.
- Улучшение кросс-энд UI библиотеки uni-ui
- Внедрите больше нативного рендеринга на стороне приложения, чтобы повысить производительность системы.
- Окружающая экология дополнительно улучшается, например, отраслевые шаблоны, кросс-энд статистика и т. д.
«Рожден для разработчиков» — это не слоган, а позиционирование.
uni-app
Команда, как всегда, решит болевые точки разработки и повысит эффективность разработки для разработчиков!