微信小程序 | 小程序配置和架构

news2024/11/15 18:33:38

🖥️ 微信小程序 专栏:小程序配置和架构
🧑‍💼 个人简介:一个不甘平庸的平凡人🍬

✨ 个人主页:CoderHing的个人主页

🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️

👉 你的一键三连是我更新的最大动力❤️


目录

一、小程序的双线程模型

二、不同配置文件的区分

小程序的配置文件

三、全局配置文件app.json

全局app配置文件

四、页面配置文件page.json

页面page配置文件

五、注册App实例的操作

注册小程序 - App函数

App函数中的参数

作用一:判断用户打开场景

作用二:定义全局App的数据

作用三: 生命周期函数

六、注册Page实例的操作

注册页面 - Page函数

注册页面时 做什么? 

Page页面的生命周期

上拉和下拉的监听


一、小程序的双线程模型

谁是小程序的宿主环境?  => 微信客户端

        宿主环境是为了执行小程序的各种文件:wxml文件 wxss文件 js文件

当小程序基于WebView环境下时 WebView的Js逻辑 DOM树创建 CSS解析 样式计算 Layout Paint(composite)都发生在同一线程,在WebView上执行过多的Js逻辑可能阻塞渲染 导致界面卡顿

以此为前提,小程序同时考虑了性能与安全,采用了目前称为「双线程模型」的架构。

双线程模型:

        WXML模块和WXSS样式运行于 渲染层,渲染层使用 WebView线程渲染(一个程序有多个页面,会使用多个 WebView的线程)。

        JS脚本(app/home.js等)运行于 逻辑层,逻辑层使 用JsCore运行JS脚本。

        这两个线程都会经由微信客户端(Native)进行中转交互。

二、不同配置文件的区分

小程序的配置文件

小程序的很多 开发需求 被规定在了 配置文件

  • 这样做可以更有利于我们的开发效率
  • 可以保证开发出来的小程序的某些风格比较一致
  • 如 导航栏 顶部TabBar栏 以及 页面路由

常见的配置文件有哪些?

  • project.config.json => 项目配置文件
  • sitemap.json => 小程序搜索相关
  • app.json => 全局配置
  • page.json => 页面配置

三、全局配置文件app.json

全局app配置文件

完整的可查看官方文档 =>  打开开发文档 => 框架 => 全局配置

属性

类型

必填

描述

pages

String[]

页面路径列表

window

Object

全局的默认窗口表现

tabBar

Object

底部tab栏表现

  • pages: 页面路径列表
  • 指定小程序由哪些网页组成,每一项对应一个页面的路径(含文件名)信息
  • 小程序所有页面都必须在pages中注册
  • window:全局的默认窗口展示
  • 用户指定窗口怎样展示,包含很多其他属性
  • tabBar:底部tab栏展示
  •  案例:

在app.json中进行tabbar配置

JSON
  "tabBar": {
    "selectedColor": "#ff8189",
    "list": [
      {
        "text": "首页",
        "pagePath": "pages/index/index",
        "iconPath": "assets/tabbar/home.png",
        "selectedIconPath": "assets/tabbar/home_active.png"
      },
      {
        "text": "收藏",
        "pagePath": "pages/favor/favor",
        "iconPath": "assets/tabbar/category.png",
        "selectedIconPath": "assets/tabbar/category_active.png"
      },
      {
        "text": "订单",
        "pagePath": "pages/order/order",
        "iconPath": "assets/tabbar/cart.png",
        "selectedIconPath": "assets/tabbar/cart_active.png"
      },
      {
        "text": "我的",
        "pagePath": "pages/profile/profile",
        "iconPath": "assets/tabbar/profile.png",
        "selectedIconPath": "assets/tabbar/profile_active.png"
      }
    ]
  },

四、页面配置文件page.json

页面page配置文件

每一个小程序页面也可以使用 .json 文件来对本页面的窗口表现进行配置

  • 页面中配置项在当前页面会覆盖 app.json 的 window 中相同的配置项。
  •  

enablePullDownRefresh 是否开启下拉刷新

onReachBottomDistance 距离底部还有多少距离 回调函数

 

 

五、注册App实例的操作

注册小程序 - App函数

每个小程序都需要在app.js中调用App函数 注册小程序实例

  • 在注册时 绑定对应的 生命周期函数
  • 在生命周期函数中 执行对应的代码
  •  

注册App时,我们一般会做什么?

  • 1 判断小程序的进入场景
  • 2 判断生命周期函数,在生命周期中执行对应的业务逻辑,如:某个生命周期函数中进行登录操作或请求网络数据;
  • 3 因为App()实例只有一个, 并且是全局共享的(单例对象),所以我们可以将一些共享数据放在这里;

App函数中的参数

作用一:判断用户打开场景

小程序打开场景较多:

  • 常见打开场景:小程序列表中,群聊中,微信扫描等..
  • 可在开发文档中打开
  •  

如何确定场景:

  • 在onLaunch和onShow生命周期回调函数中,会有options参数,其中有scence值
  •  

作用二:定义全局App的数据

可以在Object中定义全局App的数据

定义的数据可以在其他任何网页中进行访问:

作用三: 生命周期函数

在生命周期函数中,完成应用程序启动后的初始化操作

  • 登录操作
  • 读取本地数据(拿取token等..)
  • 请求整个应用程序所需要的数据
  •  

六、注册Page实例的操作

注册页面 - Page函数

小程序中的每个页面 都有一个对应的js文件 其中调用Page函数注册页面实例

在注册时,可以绑定初始化数据、生命周期、事件处理函数等..

 

注册一个Page页面时 一般需要做什么?

  • 生命周期函数中发送网络请求,从服务器获取数据
  • 初始化一些数据 方便被wxml展示
  • 监听wxml中的事件 绑定对应的事件函数
  • 其他监听等..(下拉刷新,上拉加载等..)

注册页面时 做什么? 

Page页面的生命周期

上拉和下拉的监听

监听页面的下拉刷新和上拉加载更多:

步骤一:配置页面的json文件

 

步骤二:代码中进行监听

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript:cookie和storage

cookie 用于客户端存储会话信息。在浏览器中会对cookie做一些限制: ❑ 不超过300个cookie; ❑ 每个cookie不超过4096字节; ❑ 每个域不超过20个cookie; ❑ 每个域不超过81920字节。 每个域能设置的cookie总数也是受限的&#xf…

(5)Pytorch数据处理

Pytorch 数据处理 要点总结 1、功能 Dataset:准备数据集,一般会针对自己的数据集格式重写Dataset,定义数据输入输出格式 Dataloader:用于加载数据,通常不用改这部分内容 2、看代码时请关注 Dataloader中collate_fn 传入…

分布式部署:第一章:zookeeper集群和solrcloud及redisCluster集群搭建

2.1 Zookeeper集群简介 2.1.1为什么搭建Zookeeper集群 大部分分布式应用需要一个主控、协调器或者控制器来管理物理分布的子进程。目前,大多数都要开发私有的协调程序,缺乏一个通用机制,协调程序的反复编写浪费,且难以形成通用、…

17、基于Mybaits、Vue、axios、Element-ui的JavaWeb项目

目录 1、项目功能介绍 ​编辑 2、环境准备 创建项目 准备数据库 准备Mybatis核心配置文件 创建实体类与Mapper映射文件 补全项目结构 1、在pom.xml中导入相关依赖 2、导入axios、vue的js文件 3、导入Element-ui 3、查询所有功能的实现 3.1、后端的实现 3.1.1、d…

【人工智能与机器学习】——朴素贝叶斯与支持向量机(学习笔记)

📖 前言:朴素贝叶斯(Naive Bayes)和支持向量机(Support Vector Machine,SVM)是两种不同的机器学习算法,它们都用于分类。朴素贝叶斯算法基于贝叶斯定理来进行分类,它是一…

内存优化之掌握 APP 运行时的内存模型

在上一章,我们已经从操作系统的维度了解了一个进程的内存模型。这一节,我们将维度继续上升,从应用层出发看看一个 App 运行时的内存模型是怎样的。从 App 运行时的内存模型中我们可以知道导致内存增长的源头,从源头出发&#xff0…

【RCNN系列】Faster RCNN论文总结及源码

目标检测论文总结 【RCNN系列】 RCNN Fast RCNN Faster RCNN 文章目录目标检测论文总结前言一、Pipeline二、模型设计1.RPNHead2.Anchors3.RPN(Region Proposal Networks)4.RPN正负样本划分阈值5.训练策略三、总结前言 一些经典论文的总结。 一、Pipel…

RK3568平台开发系列讲解(驱动基础篇)Linux内核面向对象思想之继承

🚀返回专栏总目录 文章目录 一、私有指针二、抽象类三、接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在面向对象编程中,封装和继承其实是不分开的:封装就是为了更好地继承。我们将几个类共同的一些属性和方法抽取出来,封装成一个类,就是为了通过继承最大化…

【云原生】devops之jenkins中pipeline语法(2)

前言: pipeline语法分类一般来说,有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。 二、阶段步骤 (1)post 根据pipeline块或者stage块(阶段)完成的状态来进行一个或者多个附加步骤(取决…

搭建高性能数据库服务⭐《Sharding-JDBC+Canal》⭐

本文主要记录本周的学习内容,搭建mysql的高性能数据库服务 源于 现最多被使用的数据库还是Msql,而MySQL本身不是一种分布式型数据库,在高性能要求下,简单的主从、复制已无法满足高性能要求。 而本文主要在提供读者一种高性能方案…

Java学习之equals方法练习

目录 第一题 题目要求 我的代码 创建Person类 main类 结果 重写equals 重写后的结果 老师代码 思路 结果 总结 Interger类 源代码 String类 源代码 第二题 运行结果 第三题 知识点 运行结果 第一题 题目要求 判断两个 Person 对象的内容是否相等,…

SQL开窗函数之基本用法和聚合函数

开窗函数 当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询。窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列值和聚合后的结果…

python之模块使用

目录 一、模块 二、标准模块 collections模块 三、异常处理 四、文件操作 一、模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 新建util…

day17【代码随想录】找出字符串中第一个匹配项的下标 、重复的子字符串

文章目录前言一、找出字符串中第一个匹配项的下标(力扣28)二、重复的子字符串(力扣459)前言 1、找出字符串中第一个匹配项的下标 2、重复的子字符串 一、找出字符串中第一个匹配项的下标(力扣28) 给你两个…

LeetCode HOT 100 —— 200 .岛屿问题

题目 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该…

有意思,圣诞节自己做一个装饰圣诞帽头像的APP!

话说又到了一年一度到别人到节日,圣诞节,还记得去年的时候,朋友圈疯狂转发到圣诞帽嘛,在圣诞节为自己到头像增加一款圣诞帽还是蛮应景的。 我们的目标就是是这样的 ❝ 当然,如果你对过程不感兴趣,那么直接到…

总结本人学习b站黑马前端课程,各部分案例汇总

目录 1.Ajax: 对应课程: b站黑马JavaScript的Ajax案例代码——新闻列表案例 b站黑马JavaScript的Ajax案例代码——评论列表案例 b站黑马JavaScript的Ajax案例代码——聊天机器人案例 b站黑马JavaScript的Ajax案例代码——图书管理案例 2.ES6面向对…

HTML-如何让网站变成灰色?

在某些特定的时候,我们经常会看到网站会将整体布局设置成灰色色调,以示哀悼。 那么这是怎么实现的呢? 我去查了下相关的文章,发现是通过CSS的 过滤器函数 实现的,详见:grayscale()。 grayscale:对图片进…

MySql性能优化(三)执行计划详解

执行计划 执行计划执行计划概述idselect_typetabletypepossible_keyskeykey_lenrefrowsextra官网地址 在具体的应用当中,我们排查sql有没有走索引,性能如何,需要查看Sql语句具体的执行过程,以方便我们调整sql来加快sql的执行效率。…

如何通过 IntelliJ IDEA 来提升 Java8 Stream 的编码效率

小新再次推荐一篇 ,主要是讲如何通过 IntelliJ IDEA 来提升 Stream 的编码效率,算是一个小技巧,经常使用 Java8 Stream 流的小伙伴们,可以试下,能够提升工作效率哦! 一、Java8 Stream API 的不友好性 Java…