下面是关于笔者我小程序八股文笔记,终于也来博客做同步的更新啦。下面给个图来概览一下吧。
这里是具体的目录情况,但在我的博客share中,我并不会完全按照下面篇章来。
那么在这里的第一篇章,笔者我主要想介绍两个部分的内容:一个是小程序的基础/背景,另外一个是小程序与其他平台的区别。
这一部分主要介绍小程序的基本架构
,优缺点,开发的流程等。
💡 体积限制的个人感受:在打包小程序上面时,发现图标资源体积占用高,无法上传(微信小程序只有2M的大小,这样导致无法开发大型一些的小程序),所以后面一些大的图像资源使用的时网络资源请求的形式。
详情
优势:
无需下载安装,随搜随用,用完即走,入口众多,使用便捷快速,服务请求快,流量大,也容易被接受,开发成本低,降低兼容性限制,可靠安全,具有良好的用户体验。
劣势:
开发及发布的限制多(体积限制,资源限制),样式单一,依托微信或其他平台,推广面相对较窄,用户留存率相对较低。
简单来说就是标记语言wxml,样式语言wxss,逻辑代码语言js,配置语言json.
全局主题文件:
app.js 可以在里边监听生命周期函数、声明全局变量
小程序逻辑文件,主要用来注册小程序全局实例,编译时会和其他页面的逻辑文件打包成一个JavaScript文件,项目中不可缺少。
app.json 小程序的全局配置(页面路径、网络超时时间、底部tabBar 、导航背景颜色等)
程序公共设置文件,配置小程序全局设置,项目中不可缺少。
app.wxss
小程序主样式表文件,类似于HTML的css文件,主样式表文件中设置的样式,在其他页面文件中同样有效,该文件不是必需的。
页面文件:
WXML:是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。
页面的结构文件,用来设计页面的布局、数据绑定等,相当于HTML页面中扩展名为html文件,其在页面中不可缺少。
WXSS:是一套样式语言,用于描述WXML组件样式。
页面样式表文件,用来定义页面中用到的各类样式表。若.wxml文件内联样式及app.wxss文件内的样式表定义同本页面的样式表定义相同时,内联样式优先于.wxss文件样式,.wxss文件样式优先于app.wxss文件样式,该文件不是必需的。
js:处理逻辑,网络请求。
页面逻辑文件,在该文件中编写javascript代码以控制页面逻辑,其在页面中不可缺少。
json 配置当前页面标题和引入组件等
页面配置文件,其在页面中不可缺少。
微信小程序使用的是WXML+WXSS+JS来进行应用程序的搭建,本质上是一个单页应用,所有的页面渲染和事件处理都在一个页面内进行,但可以通过微信客户端调用原生的各种接口。与网站不同,小程序是一个双线程框架,也就是说渲染线程和 JS 线程是互相别独立的。与采用Vue开发的网站相似,小程序也是基于数据驱动的框架,也就是说UI和数据是分离的。
这一部分主要介绍小程序的以及它与网站,uniapp等其他前端的区别与联系
直观的说小程序中没有DOM和BOM对象,也无法对npm包进行管理
浏览器中JS
Node中的JS
小程序中的JS
NPM: 是包管理系统、NPM是目前最大的开原库生态系统,通过各种NPM扩展包快速的实践一些功能。
Native: 就是原生的模块,通过这个模块来使用JavaScript语言本身不具有的一些能力(native方法简单的讲,即Java调用非Java代码的接口)。
WXSS和CSS类似,不过在CSS的基础上做了一些补充和修改。
在WXSS中,引入了rpx尺寸单位。引用新尺寸单位的目的是,适配不同宽度的屏幕,开发起来更简单。
在小程序中,规定所有手机的屏幕宽度都是750rpx,所以在不同尺寸的屏幕下1rpx的宽度都不同。
在iphone6手机下,屏幕宽度是375px,所以1rpx=0.5px。
wxss尺寸单位rpx的引入,来提升不同屏幕的适配体验,750rpx = 375px;
单位 1rpx(Rpx) = (屏幕宽度/750)px
提供了全局的样式和局部样式,仅支持部分css选择器
项目根目录中的 app.wxss 会作用于所有小程序页面
局部页面的 .wxss 样式仅对当前页面生效
外联样式导入不同,wxss 使用@import标识符来导入外联样式。没有 Body
;样式可直接使用 import
导入
wxss
的图片引入需使用外链地址
其中相比H5
,小程序与其的区别有如下:
小程序可以视为只能用微信打开和浏览的H5
,小程序和网页的技术模型是一样的,用到的 JavaScript
语言和 CSS
样式也是一样的,只是网页的 HTML
标签被稍微修改成了 WXML
标签
运行环境的不同
传统的HTML5
的运行环境是浏览器,包括webview
,而微信小程序的运行环境并非完整的浏览器,是微信开发团队基于浏览器内核完全重构的一个内置解析器,针对小程序专门做了优化,配合自己定义的开发语言标准,提升了小程序的性能。
开发成本的不同
只在微信中运行,所以不用再去顾虑浏览器兼容性,不用担心生产环境中出现不可预料的奇妙BUG
渲染方式与 H5 不同
小程序一般是通过 Native 原生渲染的,但是小程序同时也支持 web 渲染,如果使用 web 渲染的方式,我们需要初始化一个WebView 组件,然后在 WebView 中加载 H5 页面;所以当我们开发一个小程序时,通常会使用 hybrid 的方式,即会根据具体情况选择部分功能用小程序原生的代码来开发,部分功能通过 WebView 加载 H5 页面来实现。Native 与 Web 渲染混合使用,以实现项目的最优解;这里值得注意的是,小程序下,native 方式通常情况下性能要优于 web 方式。
小程序特有的双线程设计
H5 下我们所有资源通常都会打到一个 bundle.js 文件里(不考虑分包加载),而小程序编译后的结果会有两个bundle,index.js封装的是小程序项目的 view 层,以及 index.worker.js 封装的是项目的业务逻辑,在运行时,会有两条线程来分别处理这两个bundle,一个是主渲染线程,它负责加载并渲染 index.js 里的内容,另外一个是 Service Worker线 程,它负责执行 index.worker.js 里封装的业务逻辑,这里面会有很多对底层api调用。
slot
是作为组件属性传递给父组件的,父组件可以通过访问slot
属性来获取子组件中的填充内容。而在 Vue 中,slot
则是作为一个自定义属性存在于组件中,可以通过访问该属性来获取子组件中的填充内容。this.data
属性是不可以同步到视图的,必须调用this.setData
slot
是作为组件属性传递给父组件的,父组件可以通过访问slot
属性来获取子组件中的填充内容。而在 Vue 中,slot
则是作为一个自定义属性存在于组件中,可以通过访问该属性来获取子组件中的填充内容。小程序直接 this.data
属性是不可以同步到视图的,必须调用this.setData
个人认为,如果是新项目,且没有旧的 h5 项目迁移,则考虑用小程序原生开发,好处是相比于第三方框架,坑少。 而如果有 老的 h5 项目是 vue 开发 或者 也有 h5 项目也需要小程序开发,则比较适合 wepy 或者 mpvue 来做迁移或者开发,近期看wepy几乎不更新了,所以推荐美团的mpvue。 而如果如果团队前端强大,自己做一套框架也没问题。
各有各自的优点,都又有缺点
小程序的优点:
小程序的缺点:
原生App优点:
原生App缺点:
小程序和微信公众号都是微信生态系统内的重要组成部分,具有各自的优势和劣势。
微信小程序是一种应用程序,类似于普通的手机应用,可以在微信中直接运行,而不需要安装到手机系统中。而微信公众号则是一种公众号服务平台,类似于官方网站,需要通过微信搜索或扫码关注后才能使用。其实,从更加现实的角度简单来说,公众号是引流平台,小程序是成交平台。
【小程序八股文】系列之篇章二 | 小程序的核心机制
下篇笔记链接:【待更新】
下篇笔记内容:【待更新】
原创笔记,未经同意请勿转载
码字不易