浅析微信小程序技术架构(原创)

本文分享了对微信小程序的看法。其技术架构清晰,JS负责业务逻辑,WXML和WXSS实现表现层,借助JSBridge调用底层API,降低开发门槛。还提到启动有延迟,介绍了小程序的生命周期,认为其架构比原生APP好理解,未来前景乐观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅析微信小程序技术架构(原创)

周末万里虎抽空体验了下微信小程序的DEMO,对小程序的开发有了一个基础的了解与认识,今天就来和大家分享一下我对小程序的看法。

从官方DEMO来看,小程序在技术架构上非常清晰易懂。JS负责业务逻辑的实现,而表现层则WXML和WXSS来共同实现,前者其实就是一种微信定义的模板语言,而后者类似CSS。所以对于擅长前端开发,或者WEB开发的广大开发者而已,小程序的开发可谓降低了不少门槛。

从上面的微信小程序架构图上可以清晰的看出,小程序借助的是JSBridge实现了对底层API接口的调用,所以在小程序里面开发,开发者不用太多去考虑IOS,安卓的实现差异的问题,安心在上层的视图层和逻辑层进行开发即可。

当我们在启动小程序的时候,你会发现首次启动的时候,会有点延迟的想象,这里其实是小程序正在从CDN和WEB服务器上下载资源导致的延迟。我个人感觉这个是目前小程序体验上的一点小缺憾,有延迟加载的感觉。

关于小程序的生命周期,可以分为两个部分来理解:应用生命周期(左侧蓝色部分)和页面生命周期(右侧绿色部分)。其中应用的生命周期是这样一个流程:1、用户首次打开小程序,触发 onLaunch(全局只触发一次)。2、小程序初始化完成后,触发onShow方法,监听小程序显示。3、小程序从前台进入后台,触发 onHide方法。4、小程序从后台进入前台显示,触发 onShow方法。5、小程序后台运行一定时间,或系统资源占用过高,会被销毁。 页面生命周期是这样的一个流程:1、小程序注册完成后,加载页面,触发onLoad方法。2、页面载入后触发onShow方法,显示页面。3、首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。4、当小程序后台运行或跳转到其他页面时,触发onHide方法。5、当小程序有后台进入到前台运行或重新进入页面时,触发onShow方法。6、当使用重定向方法wx.redirectTo(OBJECT)或关闭当前页返回上一页wx.navigateBack(),触发onUnload。同时,应用生命周期会影响到页面生命周期。

综上来看,小程序的技术架构上的清晰明了,相比沉重的原生APP开发而已要好理解的多。而近期小程序官方逐步的释放小程序的一些入口,由此可见小程序也将慢慢的得到微信官方更大的流量支持。万里虎个人还是非常看好小程序的未来,简单、高效、方便、快捷的用户体验,这些都符合一个好程序的特质。小程序也许会在不久的将来成为下一个金矿,吸引更多开发者涌入。


 

以下来自网友:

  1. 框架程序包含一个描述整体程序的 app 和多个描述各自页面的 page。一个框架程序主体部分由三个文件组成,必须放在项目的根目录。

 

文件作用
app.js小程序(全局)逻辑
app.json小程序(全局)公共设置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等
app.wxss小程序公共(全局)样式表

 

  1. 一个框架页面由四个文件组成:

文件类型作用
js页面逻辑
wxml页面结构,框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。
wxss是一套样式语言,用于描述 WXML 的组件样式。用来决定 WXML 的组件应该怎么显示。
json页面配置

按照『约定优于配置』的原则,一个框架页面至少包含js、wxml、wxss三个文件类型,文件名要一样,例如首页index.js、index.wxml、index.wxss,并且要放在同一文件夹下。页面注册时,文件名不需要写文件后缀,因为框架会自动去寻找路径.json,.js,.wxml,.wxss的四个文件进行整合。

### 微信小程序用户授权登录实现方法 #### 1. 授权登录的核心概念 微信小程序的授权登录机制依赖于微信开放平台提供的接口和服务。通过这一机制,可以获取用户的唯一标识符(openid),并在此基础上构建应用内的用户身份验证体系[^1]。 #### 2. 登录流程解析 整个登录过程分为以下几个环节: - **前端调用微信登录 API 获取 code** 小程序前端需调用 `wx.login` 方法来获得临时登录凭证 `code`。此凭证仅能使用一次,并用于后续向开发者服务器请求换取 session_key 和 openid[^3]。 ```javascript wx.login({ success(res) { if (res.code) { console.log('Login Code:', res.code); // 发送 code 至后端 } else { console.error('Login failed! ' + res.errMsg); } } }); ``` - **后端交换 session_key 和 openid** 开发者服务器接收到前端传递的 `code` 后,将其连同 appid 和 secret 提交至微信服务器的指定 URL 进行解码操作。返回的结果中包含用户的 openid 和 session_key[^2]。 请求地址如下: ``` https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code ``` - **会话管理与安全性保障** 应用不应直接将 session_key 返回给客户端,而应在内部存储以便保护敏感数据的安全性。通常情况下,可以通过 JWT 或其他方式生成自定义 token 并发送回小程序作为登录状态维持手段[^4]。 #### 3. 权限控制设计 除了基本的身份认证外,在实际项目开发过程中还需要考虑不同角色之间的访问权限差异。这可通过建立完善的 RBAC(基于角色的访问控制系统)模型完成。具体来说就是在数据库表结构设计阶段引入 roles 表以及 permissions 表并与 users 关联起来形成完整的权限管理体系。 ```sql CREATE TABLE IF NOT EXISTS `roles` ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), description TEXT ); CREATE TABLE IF NOT EXISTS `permissions` ( role_id INT, resource_name VARCHAR(100), action ENUM('read', 'write'), FOREIGN KEY(role_id) REFERENCES roles(id) ); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值