目标在远方 發表於 2021-5-27 10:31:00

uni-app

<p>1.简介</p>
<p><code>uni-app</code>&nbsp;是一个使用&nbsp;Vue.js&nbsp;开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。</p>
<p>2.开发(混合开发注意点)</p>
<p>工具:HBuilderX&nbsp; &nbsp;&nbsp;官网下载:https://www.dcloud.io/hbuilderx.html</p>
<p>像素单位:rpx&nbsp; &nbsp; 框架本身已做好适配</p>
<p>项目中封装了缓存,vuex,请求等(具体讲)</p>
<p>3.案例是插市市场</p>
<p>4.原生App插件</p>
<p>5.条件编译【实现不同端不同效果,跨端兼容条件编译】</p>
<p>简介:条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。</p>
<p>官网详细介绍:https://uniapp.dcloud.io/platform?id=preprocessor</p>
<p>6.多端兼容注意写法:</p>
<p>&nbsp;</p>
<p>Js注意:非H5端,不能使用浏览器自带对象,比如document、window、localstorage、cookie等,更不能使用jquery等依赖这些浏览器对象的框架。因为各家小程序快应用都不支持这些对象。</p>
<p>Tag注意:uni-app的tag同小程序的tag,和HTML的tag不一样,比如div要改成view,span要改成text、a要改成navigator。</p>
<p>Css注意:推荐使用flex布局模型;单位方面,uni-app默认为rpx。这是一种可跨端的通用单位</p>
<p>工程目录注意:</p>
<ul>
<li>每个要显示的页面,都要放到pages目录下,新建一个页面所在的目录,然后放同名目录的vue文件,比如project/pages/lista/lista.vue,并且在pages.json里配置。这与小程序的策略相同。</li>
<li>自定义组件,放到component目录</li>
<li>静态资源如图片,固定放到static目录下。这是webpack、mpvue的规则</li>
</ul>
<p>定位注意:位置坐标系统一为国测局坐标系gcj02,这种坐标系可以被多端支持。老版5+的百度定位和百度地图使用的是百度私有坐标系bd09ll,这种坐标系需要转换。新版uni-app里的百度地图已经默认改为gcj02。高德地图不受影响,一直是gcj02</p>
<p>6.H5注意:</p>
<p>6.1:H5 发布到服务器注意:</p>
<p>6.1.1配置发行后的路径(发行在网站根目录可不配置),比如发行网站路径是 www.xxx.com/html5,在&nbsp;<code>manifest.json</code>&nbsp;文件内编辑 h5 节点,router 下增加 base 属性为 html5</p>
<p><img src="https://img2020.cnblogs.com/blog/1081354/202110/1081354-20211021151831804-1430639340.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>6.1.2点击菜单 发行-&gt; H5</p>
<p>6.1.3在当下项目下的&nbsp;<code>unpackage/dist/build/h5</code>&nbsp;目录找到出的资源,部署服务器(或者使用本地服务器预览),如需部署到相对路径(支持本地file协议打开)参考:https://ask.dcloud.net.cn/article/37432。</p>
<p>6.2&nbsp; H5引用第三方 js 的方式:</p>
<p>6.2.1通过 npm 引入(通过条件编译,只有是 h5 平台才 import 相应的库)</p>
<p>6.2.2 在&nbsp;<code>manifest.json</code>&nbsp;文件编辑 h5 节点的 template 属性,填写 html 模版路径,在 html 模版里面可以使用 script 的方式引入三方的 js,如下示例是加了百度统计的 html 模板部分代码,模版全部代码可参考:自定义模板&nbsp; &nbsp;自定义模板:https://uniapp.dcloud.io/collocation/manifest?id=h5-template</p>
<p>6.2.3 APP 和小程序的导航栏和&nbsp;<code>tabbar</code>&nbsp;均是原生控件,元素区域坐标是不包含原生导航栏和&nbsp;<code>tabbar</code>&nbsp;的;而 H5 里导航栏和&nbsp;<code>tabbar</code>&nbsp;是 div 模拟实现的,所以元素坐标会包含导航栏和tabbar的高度。为了优雅的解决多端高度定位问题,<code>uni-app</code>&nbsp;新增了2个css变量:<code>--window-top</code>&nbsp;和&nbsp;<code>--window-bottom</code>,这代表了页面的内容区域距离顶部和底部的距离。举个实例,如果你想在原生<code>tabbar</code>&nbsp;上方悬浮一个菜单,之前写&nbsp;<code>bottom:0</code>。这样的写法编译到 h5 后,这个菜单会和&nbsp;<code>tabbar</code>&nbsp;重叠,位于屏幕底部。而改为使用&nbsp;<span style="background-color: rgba(255, 0, 0, 1)"><strong><code>bottom:var(--window-bottom)</code></strong></span>,则不管在 app 下还是在h5下,这个菜单都是悬浮在&nbsp;<code>tabbar</code>&nbsp;上浮的。这就避免了写条件编译代码。当然仍然也可以使用 H5 的条件编译处理界面的不同。</p>
<p>6.2.4&nbsp;CSS 內使用&nbsp;<code>vh</code>&nbsp;单位的时候注意&nbsp;<code>100vh</code>&nbsp;包含导航栏,使用时需要减去导航栏和&nbsp;<code>tabBar</code>&nbsp;高度,部分浏览器还包含浏览器操作栏高度,使用时请注意。</p>
<p>6.2.5&nbsp;组件内(页面除外)不支持&nbsp;<code>onLoad</code>、<code>onShow</code>&nbsp;等页面生命周期。</p>
<p>6.2.6 为避免和内置组件冲突,自定义组件请加上前缀(但不能是 u 和 uni)。比如可使用的自定义组件名称:<code>my-view</code>、<code>m-input</code>、<code>we-icon</code>,例如不可使用的自定义组件名称:<code>u-view</code>、<code>uni-input</code>,如果已有项目使用了可能造成冲突的名称,请修改名称,另外微信小程序下自定义组件名称不能以 wx 开头。</p>
<p>7.调试工具</p>
<p>7.1 h5&nbsp; 运行于内置浏览器或运行到谷歌浏览器</p>
<p>7.2 小程序&nbsp; 微信开发者工具</p>
<p>7.3 app 运行 --&gt; 运行到手机或模拟器 --&gt; 选择设备 ,项目启动后,在下方的控制台选择&nbsp;<code>debug</code>&nbsp;图标。&nbsp; 【首先要链接设备】</p>
<p><img src="https://img2020.cnblogs.com/blog/1081354/202110/1081354-20211021155010570-1540228260.png"></p>
<p>&nbsp;</p>
<p>&nbsp;7.4 如果是调试<code>App</code>的界面和常规API,推荐编译到H5端内置浏览器;</p>
<ul>
<li>常用的开发模式就是<code>pc</code>上使用内置浏览器预览调dom,运行到真机上看<code>console.log</code>。如果是很复杂的问题才使用<code>debug</code>。</li>
</ul>
<p>7.5&nbsp; 部分manifest配置,如三方sdk配置,需要打包后生效的,可以打包一个自定义运行基座。打包自定义基座后运行这个自定义基座,同样可以真机运行和debug。打包正式包将无法真机运行和debug</p>
<p>8优化建议:</p>
<p>8.1 避免使用大图</p>
<p>8.1.1&nbsp;页面中若大量使用大图资源,会造成页面切换的卡顿,导致系统内存升高,甚至白屏崩溃。</p>
<p>8.1.2 尤其是不要把多张大图缩小后显示在一个屏幕内,比如上传图片前选了数张几M体积的照片,然后缩小在一个屏幕中展示多张几M的大图,非常容易白屏崩溃。</p>
<p>8.1.3&nbsp;对大体积的二进制文件进行base64,也非常耗费资源。</p>
<p>8.2 优化数据更新</p>
<p>8.2.1&nbsp;在&nbsp;<code>uni-app</code>&nbsp;中,定义在 data 里面的数据每次变化时都会通知视图层重新渲染页面。所以如果不是视图所需要的变量,可以不定义在 data 中,可在外部定义变量或直接挂载在vue实例上,以避免造成资源浪费。</p>
<p>8.3 长列表</p>
<p>8.3.1长列表中每个item并不一定需要做成组件,取决于你的业务中是否需要差量更新某一行item的数据,如没有此类需求则不应该引入大量组件。(点击item后背景变色,属于css调整,没有更新data数据和渲染,不涉及这个问题)</p>
<p>8.3.2 数据多时采用分页</p>
<p>8.3.3 如需要左右滑动的长列表,请在HBuilderX新建uni-app项目选新闻模板,那是一个标杆实现。自己用swiper和scroll-view做很容易引发性能问题。</p>
<p>8.4 减少一次性渲染的节点数量<br></p>
<p>页面初始化时,逻辑层如果一次性向视图层传递很大的数据,使视图层一次性渲染大量节点,可能造成通讯变慢、页面切换卡顿,所以建议以局部更新页面的方式渲染页面。如:服务端返回100条数据,可进行分批加载,一次加载50条,500ms 后进行下一次加载。</p>
<p>8.5 减少组件数量,减少节点嵌套层级</p>
<p>8.6 避免视图层和逻辑层频繁进行通讯</p>
<p>8.7 优化背景色闪白</p>
<p>8.7.1&nbsp;如果是新页面进入时背景闪白&nbsp;&nbsp;</p>
<ul>
<li>如果页面背景是深色,在vue页面中可能会发生新窗体刚开始动画时是灰白色背景,动画结束时才变为深色背景,造成闪屏。这是因为webview的背景生效太慢的问题。此时需将样式写在&nbsp;<code>App.vue</code>&nbsp;里,可以加速页面样式渲染速度。<code>App.vue</code>&nbsp;里面的样式是全局样式,每次新开页面会优先加载&nbsp;<code>App.vue</code>&nbsp;里面的样式,然后加载普通 vue 页面的样式。</li>
<li>app端还可以在pages.json的页面的style里单独配置页面原生背景色,比如在globalStyle-&gt;style-&gt;app-plus-&gt;background下配置全局背景色
<pre data-lang="json"><code class="lang-json"><span class="token string"><img src="https://img2020.cnblogs.com/blog/1081354/202110/1081354-20211021161535045-448049082.png"></span></code></pre>
</li>
</ul>
<p>&nbsp;</p>
<p>8.7.2 如果是老页面消失时背景闪白 Android上popin动画时,老窗体会有一个半透明消失的效果。这个半透明效果的背景色,可以根据需要调节为暗色系。 在pages.json里globalStyle下或指定页面下,配置app-plus专属节点,然后配置animationAlphaBGColor属性。</p>
<p>9.开发规范https://uniapp.dcloud.io/frame?id=%e5%bc%80%e5%8f%91%e8%a7%84%e8%8c%83</p>
<p><img src="https://img2020.cnblogs.com/blog/1081354/202110/1081354-20211022141037111-851206126.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<code>uni-app</code>&nbsp;可通过&nbsp;<code>process.env.NODE_ENV</code>&nbsp;判断当前环境是开发环境还是生产环境。一般用于连接测试服务器或生产服务器的动态切换。</p>
<p>注意:</p>
<ul>
<li>在&nbsp;<code>uni-app</code>&nbsp;中不能使用&nbsp;<code>*</code>&nbsp;选择器。</li>
<li>微信小程序自定义组件中仅支持 class 选择器</li>
<li>
<p><code>page</code>&nbsp;相当于&nbsp;<code>body</code>&nbsp;节点,</p>
</li>
<li>小程序不支持在css中使用本地文件,包括本地的背景图和字体文件。需以base64方式方可使用。</li>
<li>背景图:微信小程序不支持相对路径(真机不支持,开发工具支持)</li>
<li>使用本地路径背景图片需注意:</li>
<ol>
<li>为方便开发者,在背景图片小于 40kb 时,<code>uni-app</code>&nbsp;编译到不支持本地背景图的平台时,会自动将其转化为 base64 格式;</li>
<li>图片大于等于 40kb,会有性能问题,不建议使用太大的背景图,如开发者必须使用,则需自己将其转换为 base64 格式使用,或将其挪到服务器上,从网络地址引用。</li>
<li>本地背景图片的引用路径推荐使用以 ~@ 开头的绝对路径。</li>
</ol></ul>
<p>vue3的优势:</p>
<ul>
<li>响应式系统提升</li>
<li>虚拟DOM重写</li>
<li>更快,性能比Vue2快1.2~2倍(diff方法优化、静态提升、时间侦听器缓存、ssr渲染)</li>
<li>更小,按需编译,体积比Vue2更小</li>
<li>组合API,加强API设计一致性,实现逻辑模块化和重用</li>
<li>加强TypeScript支持</li>
<li>暴露了自定义渲染API</li>
<li>提高自身可维护性</li>
</ul><br><br>
来源:https://www.cnblogs.com/wanan-01/p/14816830.html
頁: [1]
查看完整版本: uni-app