精华内容
下载资源
问答
  • 【java并发系列】Fork/Join任务(转) 原文链接 当我们需要执行大量的任务时,有经验的Java开发人员都会采用线程池来高效执行这些任务.然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以...

    mac 给某个目录添加权限

    1  cd 到这个目录的上一层目录 2  sudo  chmod  -R 777 3 输入密码 4 完成

    【IHttpHandler】了解 IHttpHandler

    1 .概述 说明:HttpHandler是一个HTTP请求的真正处理中心.在HttpHandler容器中,ASP.NET Framework才调用HttpHandler的ProcessRequest成 ...

    ilog

    PCISV7-VHL [2015-11-13 13:51:36,038]>>>INFO>>>[ com.isoftstone.pcis.policy.app.pla ...

    rndc: connect failed: 127.0.0.1#953: connection refused

    [root@localhost sbin]# ./named -v bind 9.5.1-p3-v3.0.9 问题现象: [root@localhost sbin]# ./rndc flush -p ...

    【JAVA - SSM】之MyBatis开发DAO

    在SSM框架中的DAO层就是MyBatis中的Mapper,Mapper分为两部分:Mapper接口(JAVA文件)和Mapper映射文件(XML文件).DAO开发(Mapper开发)有两种方式:原始 ...

    UIWebView & javascript

    http://blog.163.com/m_note/blog/static/208197045201293015844274/ UIWebView是IOS SDK中渲染网面的控件,在显示网页的时候, ...

    Qt支持中文显示

    Qt支持中文显示<1>.在代码中添加以下代码 QTextCodec* codec = QTextCodec::codecForLocale(); if (codec != NULL) { ...

    【java并发系列】Fork&sol;Join任务(转)

    原文链接 当我们需要执行大量的小任务时,有经验的Java开发人员都会采用线程池来高效执行这些小任务.然而,有一种任务,例如,对超过1000万个元素的数组进行排序,这种任务本身可以并发执行,但如何拆解成 ...

    Mybatis &num;和&dollar;

    在mybatis的mapper文件中,对于传递的参数我们一般是使用#和$来获取参数值. 当使用#时变量是占位符,就是一般我们使用java jdbc的PrepareStatement时的占位符?,所有可 ...

    About the Mean Shift

    Mean Shift算法,一般是指一个迭代的过程.即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束. meanshift可以被用来做目标跟踪和图像 ...

    展开全文
  • 微信小程序并发的个人见解

    千次阅读 2017-10-29 17:01:35
    微信小程序的接口并发处理

    var http = {
        get:(url, obj = undefined) => {
            var promise = new Promise((resolve, reject) => {
                wx.request({
                    url: baseUrl+url,
                    method: 'GET',
                    header: {
                        'content-type': 'application/x-www-form-urlencoded',
                        'mid': mid,
                        'token': token
                    },
                    data: obj,
                    success: (data) => {
                        if (data.data.retcode == 1) {
                            resolve(data.data)
                        } else {
                            console.log('前端故障');
                            reject(data.errMsg)
                        }
                    },
                    fail:(msg) => {
                        console.log('后端故障')
                        reject(data.errMsg)
                    }
                })
            })
            return promise;
        },
        post: (url, obj) => {
            var promise = new Promise((resolve, reject) => {
                wx.request({
                    url: baseUrl+url,
                    method: 'POST',
                    header: {
                        'content-type': 'application/x-www-form-urlencoded',
                        'mid': mid,
                        'token': token
                    },
                    data: obj,
                    success: (data) => {
                        if (data.data.retcode == 1) {
                            resolve(data.data)
                        } else {
                            console.log('前端故障');
                            reject(data.errMsg)
                        }
                    },
                    fail: (msg) => {
                        console.log('后端故障')
                        reject(data.errMsg)
                    }
                })
            })
            return promise;
        }
    }

    先贴代码,自己修改,保存为common.js,在app.js中引用,在使用时直接调用htpp.get(url,obj)或者http.post(url,obj)即可,  

    这里封装了wx.request()方法,调用接口的返回值为promise对象,  

    小程序支持ES6的语法,可以使用promise(whatever).then((res)=>{whatever}).catch()的方法解决小程序函数并发的问题.  

    新手上路,有可改进的地方还不吝赐教.  

    展开全文
  • 复用场景上,既是通用功能,需要多场景多页面甚至多小程序复用,又是定制功能,需要各场景/页面/小程序区分处理。要做到各种情形下都有良好的交互体验,且健壮、高效、可复用、可扩展、可维护,还是相对比较复杂的。...

    189906714_1_20200507010020897

    登录涉及的面比较多:触发场景上,各种页面各种交互路径都可能触发登录;交互过程上,既需要用户提供/证明id,也需要后端记录维护,还需要保证安全性;复用场景上,既是通用功能,需要多场景多页面甚至多小程序复用,又是定制功能,需要各场景/页面/小程序区分处理。要做到各种情形下都有良好的交互体验,且健壮、高效、可复用、可扩展、可维护,还是相对比较复杂的。

    本文将探讨小程序登录过程中的一些主要需求和问题,以渐进迭代的方式提出并实现一个健壮、高效的登录方案。

    顺带一提,es6语法中的async/await、Promise、decorator等特性对于复杂时序处理相当有增益,在本文中也会有所体现。

    基础流程

    189906714_2_20200507010020975

    如上图所示,基础登录流程为:调用微信登录接口wx.login获取微信登录态

    调用微信用户信息接口wx.getUserInfo获取微信用户信息

    调用后端登录接口,根据微信用户标识及信息,记录维护自己的用户体系

    该流程主要基于以下考虑:交互上,用户只需在微信的授权弹窗上点击确认,不需要输入账号密码等复杂操作;

    体验上,可以直接获取微信昵称头像等作为初始用户信息,使用起来更亲切,传播时好友辨识度也更高;

    开发上,可以直接使用或映射微信用户标识,无需自己进行标识的生成和验证;

    安全上,微信已经在用户信息的获取、传输、解密等环节做了许多处理,安全性相对有保障。

    健壮流程

    拒绝授权问题

    问题:

    获取微信用户信息时,会出现一个授权弹窗,需要用户点击“允许”才能正常获取;

    若用户点击“拒绝”,不仅当次登录会失败,一定时间内后续登录也会失败,因为短期内再次调用微信用户信息接口时,微信不会再向用户展示授权弹窗,而是直接按失败返回。

    这样导致用户只要拒绝过一次,即使后来对小程序感兴趣了愿意授权了,也难以再次操作。

    方案:

    189906714_3_2020050701002138

    如上图所示,增加以下流程以处理拒绝授权问题:获取微信用户信息失败时,判断是否近期内拒绝授权导致;

    若为拒绝授权导致,则提示并打开权限面板,供用户再次操作;

    若用户依然未授权,则本次登录失败,否则继续后续流程。

    这样,用户拒绝授权只会影响本次登录,不至于无法进行下次尝试。

    登录态过期问题

    问题:微信登录态有效期不可控

    189906714_4_20200507010021147

    上图截自微信官方文档,从中可以看出:后端session_key随时可能失效,什么时候失效开发者不可控;

    要保证调用接口时后端session_key不失效,只能在每次调用前先使用wx.checkSession检查有效期或直接重新执行微信登录接口;

    前端不能随便重新执行微信登录接口,可能导致正在进行的其它后端任务session_key失效;

    此外,实践中发现,wx.checkSession平均耗时约需200ms,每次接口调用前都先检查一遍,开销还是蛮大的。

    如何既保证接口功能正确有效,又不用每次耗费高额的查询开销,成为了一个问题。后端登录态过期

    后端自身的登录态有效期也存在类似的问题,有可能在调用接口时才发现后端登录态已过期。

    方案:

    189906714_5_20200507010021225

    如上图所示,增加以下流程以处理登录态过期问题:调用数据接口时显式指明是否需要登录态,若需要则在接口调用前后自动加入登录态校验逻辑;

    接口调用前只校验前端登录态,不校验后端登录态,也不校验微信登录态,以节省每次校验开销;

    接口调用后校验后端及微信登录态,若后端返回登录态相关错误码,则重置前端登录态、重新登录、重新调用数据接口。

    这样,只有在真正需要重新登录的时候(无前端登录态/后端登录态失效/后端被提示微信登录态失效)才会重新执行登录流程;并且,一旦需要重新登录,就会自动重新触发登录流程。

    并发问题

    问题:

    189906714_6_20200507010021335

    如上图所示,页面各组件各功能有可能同时触发登录流程,可能会导致:额外性能开销,登录流程重复进行,登录接口重复调用;

    体验问题,连续多次弹窗,影响用户交互;

    逻辑问题,后一次登录刷新了前一次登录的session_key,导致前一次登录接口解码失败,返回异常结果。

    方案:

    189906714_7_20200507010021413

    如上图所示,加入免并发逻辑:若登录流程正在进行,则不重复触发登录流程,而是加入当前流程的监听队列,待登录结束时再一并处理。这样,任一时刻最多只有一个登录流程正在进行。

    流程实现

    时序控制

    189906714_8_20200507010021507

    如上图所示,目前登录流程已较为复杂,步骤较多,且大多是异步操作,每步成功失败需要区分处理,处理过程又会相互交织。如果直接在微信接口/网络接口提供的success/fail回调中进行逻辑处理,会造成:回调层层嵌套,影响代码书写和阅读;

    不同路径公共步骤难以统一提取;

    时序逻辑不直观,不易管理。

    因而采用Promise+async/await进行时序管理:

    将每个步骤Promise化:

    189906714_9_20200507010021647

    使用async/await管理整体时序:

    189906714_10_20200507010021741

    如以上代码所示,微信登录、获取微信用户信息、提示授权、打开权限面板等每一步都是异步操作,都要等待success/fail回调才能获得操作结果并发起下一个操作;但利用Promise+async/await,可以像普通流程一样,将这些操作线性组合,顺序处理。

    这样,就可以实现直观清晰的时序管理了。

    过期处理

    189906714_11_20200507010021866

    如以上代码所示,单独封装一个requestWithLogin函数,在数据请求前后加入登录态处理逻辑,可以保证数据请求会在有后端登录态时被发送/重新发送。

    并且,重新登录过程对数据接口调用方是完全透明的,调用方只需要知道自己的接口需不需要登录态,而无需进行任何登录态相关判断处理,重登录过程也不会对接口调用返回结果造成任何影响。

    这样,就可以实现登录态过期自动重新登录了。

    并发控制

    189906714_12_20200507010021975

    如以上代码所示,利用Promise可以被多次then/catch的特性(亦即,一个async函数调用结果可以被await多次),可以使用一个Promise来记录当前登录流程,后续调用直接对该Promise进行监听。

    这样,就可以实现登录流程免并发了。

    至此,我们就得到了一个功能可用、相对健壮、相对高效的登录模块。但依然还是存在优化空间的。

    场景优化

    二次授权问题

    问题:

    用户同意授权后,小程序可以访问到微信用户信息,并且一段时间内再次访问时,也不会重新出现授权弹窗;

    但是,如果用户长时间未使用小程序,或将小程序删除重进,则登录时会再次出现授权弹窗。

    一方面会对用户造成干扰,影响其浏览效率;另一方面,不利于流失用户召回。

    方案:

    再次授权场景其实并不是很必要:用户第一次授权时,开发者已经可以获得用户昵称、头像等用户信息和openid、unionid等用户标识;

    再次授权时,虽然用户信息可能有更新,但完全可以等用户进个人主页/编辑信息时再进行同步,没必要刚进小程序就弹窗;

    再次授权时,用户标识并不会变化;

    只调用微信登录接口,不触发授权,已经可以获得openid了,通过openid就可以从数据库中查找使用其上次授权时的用户信息和unionid等其它用户标识。

    因而,增加以下流程以优化二次授权场景:

    189906714_13_2020050701002254

    如上图所示,在微信登录接口调用成功之后,先尝试直接根据openid完成登录过程,若失败再去请求用户授权。

    这样,只有新用户才会出现授权弹窗;老用户、回归用户,都可以直接静默完成登录过程。

    场景适配问题

    问题:

    不同场景对登录行为可能有不同的期望:有些场景,希望只在需要时自动登录,如商品详情页,希望在用户点击留言、收藏等按钮时自动调起登录并完成留言、收藏等相应操作;

    有些场景,希望只尝试静默登录,如首页,希望对用户做个性化推荐和针对性投放,但又不愿弹窗阻挠用户;

    有些场景,希望保证前后端登录态一致,如微信接口数据解码。

    单一的登录流程很难满足这种多元的场景需求。

    方案:

    调用登录/要求登录的数据接口时支持指定场景模式:

    189906714_14_20200507010022132

    如上图所示,登录流程支持指定不同场景模式:通用模式,为默认模式,会自动调起登录并完成相应数据请求和后续操作;

    静默模式,只会尝试静默登录,不会尝试授权登录,成功与否均不影响页面功能和后续接口调用;

    强制模式,会重新登录,不管前端是否保有登录态,以保证前后端登录态同步。

    实现

    场景优化方案主要是增加了一些流程&判断,使用上文中的“时序控制”基本可以解决。

    主要难点在于,上文中的免并发机制不再适用。比如,静默模式正在进行时又触发了一个强制模式的请求,此时,应触发授权弹窗正常登录而不是监听使用静默模式的登录结果。

    如果拆成每个模式各自免并发,一方面,登录流程需重复书写,不便复用;另一方面,模式之间并发也存在风险。

    因而,引入公共步骤并合机制:

    189906714_15_20200507010022257

    如以上代码所示,将登录免并发改为每个公共步骤免并发,登录流程中就可以根据场景模式自由地进行步骤管理。

    这样,就可以实现对不同登录场景进行定制化支持。

    效果示例

    简洁起见,以下代码使用wepy框架写法,原生小程序/其它框架可类似参考。

    189906714_16_20200507010022382

    如以上代码所示,可以做到老用户/回归用户进入页面时自动悄悄登录,以提供更多个性化服务;新用户进入页面时不进行任何干扰,直到进行留言等操作时才自动出现授权弹窗,且授权完成后自动完成该次行为,无需用户再次操作。

    并且,这些过程对业务代码是完全透明的,业务代码只需要知道自己调用的接口是 必须登录/最好登录/必须第一次调用就登录/不用登录,并相应地指定 mode=common/silent/force/不使用requestWithLogin,即可。

    这样,我们的登录模块可以在不同场景指定不同登录逻辑,从而支持设计实现更多元更精细更流畅的登录交互。

    界面优化

    问题:

    获取微信用户信息时,直接出现系统授权弹窗有时候是很突兀的;使用自定义授权界面和价值文案进行引导,得当的话可以有效提高授权成功率。

    而且,从10月10号起,小程序将不再支持自动弹窗授权用户信息和自动打开权限面板,这两种操作必须使用组件由用户主动触发。彼时起,自定义界面将不再是优化,而会是必需。

    这意味着登录过程必须与页面dom耦合,之前的纯js逻辑不再适用。

    方案1:登录浮层

    在所有页面放置登录浮层,页面需要登录时则调起该浮层,经由浮层按钮完成授权及后续流程。

    实现浮层引入

    各个页面都需要存在登录浮层。可以将各种页面公共dom元素,包括登录浮层、网络异常界面、返回首页快捷导航、公众号关注组件等统一抽离成一个父公共组件,编写eslint规则要求所有页面统一引入,以此实现&保证登录时浮层存在。

    浮层无缝时序

    授权浮层AuthModal.wpy:

    189906714_17_20200507010022475

    登录模块login.js:

    189906714_18_20200507010022600

    如以上代码所示,虽然自定义浮层需要展示按钮、等待用户点击、处理点击、考虑用户不点击直接返回,交互流程相对复杂,但依然可以利用Promise使交互细节对外透明。打开浮层时返回一个Promise,在各个交互出口对Promise进行resolve,则使用时只需将其作为一个普通的异步过程对待。

    这样,就可以实现无缝接入自定义浮层授权。

    方案2:独立登录页

    需要授权用户信息时,跳转至一个专门的登录页面,页面中展示引导内容和授权,用户操作完毕后再自动返回先前页面。

    实现元素引入

    登录所需dom元素只在登录页引入即可。

    页面无缝时序

    由于小程序的代码包特性,各页面可以共享全局变量和全局函数;并且后一页面打开时,前一页面依然驻留在内存中,前一页面遗留的异步任务也依然会继续执行。因而,可以在前一页面设置监听,在登录页进行回调:

    授权全局数据模块userAuthHub.js:

    189906714_19_20200507010022679

    登录模块login.js:

    189906714_20_20200507010022788

    登录页login.wpy:

    189906714_21_20200507010022897

    如以上代码所示,虽然授权过程需要进行跨页面交互,但利用Promise和小程序代码包特性,可以在前一页面设置监听,登录页面进行回调。登录页面交互结束后,前一页面会自动继续执行登录流程,调用方无需进行返回刷新等额外处理,数据接口也会继续调用,用户无需再次操作。

    这样,就可以实现无缝接入跨页面授权交互。

    两种方案都可以实现自定义授权界面。内嵌浮层会增加一定维护成本和少量资源开销,但可以直接在当前页面完成登录交互,页面自定义空间也相对更大;独立登录页会来回跳转牺牲一定的交互体验,但可以把登录所需dom元素集中在登录页,减少维护成本和页面侵入。二者各有优劣,可以按需采用或混合使用。

    这样,我们的登录模块可以使用自定义授权界面,从而支持设计实现更雅观更精致的授权引导。

    复用优化

    多小程序间复用&定制

    问题:

    开发方可能同时维护着多个小程序,这些小程序使用着相同的后端接口和后端用户体系,又有着各自的小程序标识和使用诉求。

    一方面,希望登录模块可以统一维护,不需要每个小程序各自开发;另一方面,又希望各小程序可以进行差异化定制,包括小程序前端标识不一致等刚性差异,和授权提示文案、埋点、授权交互等个性差异。

    方案&实现:

    1、统一流程+个性化配置

    2、公共&默认流程由登录模块统一维护,各小程序直接复用;差异流程支持各小程序以配置的形式自定义扩展&覆盖。

    189906714_22_2020050701002338

    3、配置检查

    引入配置过程会存在一个潜在风险:触发登录时,小程序尚未完成登录模块配置。

    理论上,只要全局都使用同一个登录实例并在app.js顶部进行配置,应该就没有这样的时序风险。但复用方是不会自觉的,不一定会使用同一个实例,配置过程也不一定会被放在顶部,甚至有可能被放在某些异步数据返回之后。因而登录模块只导出唯一实例并加入配置检查环节以保证该逻辑健壮性:

    189906714_23_20200507010023132

    这样,就可以实现在多个小程序间复用登录模块,由登录模块统一维护整体时序和默认流程,同时支持各小程序进行差异性定制&扩展。

    多页面间复用&定制

    问题:

    不同页面对登录过程有时也存在定制需求,比如授权引导文案,有些页面可能希望提示“授权后可以免费领红包”,有些页面可能是“授权后可以为好友助力”/“授权后可以获得智能推荐”/... 诸如此类。

    方案&实现:

    在页面中设置钩子供其提供个性化配置。

    页面xxx.wpy:

    189906714_24_20200507010023350

    小程序级登录配置:

    189906714_25_20200507010023538

    这样,就可以实现所有页面共用登录模块的同时,支持每个页面进行定制化修改。

    这样,我们的登录模块可以在多小程序、多页面中复用,并支持各小程序、各页面进行差异性定制。从而实现更好的可维护性可扩展性:公共&默认流程统一维护,避免维护过程重复、分化、膨胀,减少整体维护成本,并降低各方迭代不及时风险;

    差异&定制流程各自扩展,扩展入口下放至各小程序各页面,扩展过程相互独立互不干扰,不会对其它小程序/其它页面造成任何影响。

    总结完整登录流程

    189906714_26_20200507010023647功能

    通过微信授权一键登录

    支持静默登录,用户授权一次过后不会再次被要求授权

    支持多种登录场景:通用、静默、强制

    支持自定义授权界面

    健壮性

    曾经拒绝授权,会提示&打开权限面板供二次操作

    登录态过期,会自动重新登录重新发送数据请求并正常返回请求数据

    登录流程&重试机制对调用方完全透明,页面使用时流程遗漏风险基本为0

    性能

    后端登录态惰性检测,减少每次查询开销

    公共步骤并合,减少并发成本

    登录操作与后续接口调用无缝衔接,减少返回刷新/用户重复操作成本

    可复用性、可扩展性、可维护性

    支持多小程序复用,公共流程统一维护,差异特性各小程序各自扩展;

    支持多页面复用,公共流程小程序统一配置,差异特性各页面各自扩展。

    展开全文
  • 微信小程序

    万次阅读 2019-10-25 09:26:30
    微信小程序的介绍和使用:小程序代码的注册、小程序框架的使用、数据交互......

    一、小程序简介

    微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是无需安装,用完即走,实际上是需要安装的,只不过小程序的体积特别小,下载速度很快,用户感觉不到下载的过程 )

    小程序刚发布的时候要求压缩包的体积不能大于1M,否则无法通过,在2017年4月做了改进,由原来的1M提升到2M

    可以干什么?

    • App进行互补,提供同App类似的功能,比App操作更加简洁的轻应用
    • 通过扫一扫或者在微信搜索即可下载
    • 用户使用频率不高,但又不得不用的功能软件,目前看来小程序是首选
    • 连接线上线下
    • 开发门槛低, 成本低

    相关资料

    微信公众平台:https://mp.weixin.qq.com/

    小程序开发工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

    小程序注册:https://mp.weixin.qq.com/wxopen/waregister?action=step1&token=&lang=zh_CN

    二、学习小程序需知知识

    ① 基本

    • 小程序没有DOM对象,一切基于组件化
    • 储备知识
      理解事件机制、组件化、数据绑定

    ② Flex 布局

    FlexFlexible Box的缩写,弹性布局,用来为盒状模型提供最大的灵活性。

    Flex属性(display:flex

    flex-direction表现
    row(默认值)主轴为水平方向,起点在左端
    row-reverse主轴为水平方向,起点在右端
    column主轴为垂直方向,起点在上沿
    column-reverse主轴为垂直方向,起点在下沿

    ③ 移动端适配方案

    • 物理像素
      屏幕的分辨率,设备能控制显示的最小单元,可以把物理像素看成是对应的像素点
    • 设备独立像素 & css像素
      设备独立像素,可以认为是计算机坐标系统中的一个点这个点代表一个可以由程序使用并控制的虚拟像素(比如:CSS像素,只是在Android机中CSS像素就不叫CSS像素了而是叫设备独立像素),然后由相关系统转换为物理像素
    • dpr比 & DPI & PPI
      • dpr:设备像素比,物理像素/设备独立像素 = dpr, 一般以iPhone6dpr为准 dpr = 2
      • PPI:一英寸显示屏上的像素点个数
      • DPI:最早指的是打印机在单位面积上打印的墨点数,墨点越多越清晰
    • 小程序适配方案
      iPhone6: 1rpx = 1物理像素 = 0.5px
      微信官方提供的换算方式:
      • iPhone6的物理像素个数为标准: 750
      • 1rpx = 目标设备宽度 / 750 * px
      • 注意此时底层已经做了viewport适配的处理

    三、开始使用

    3.1 小程序代码的构成

    文件作用
    *.jsonJSON 配置文件
    *.wxmlWXML模板文件
    *.wxssWXSS 样式文件
    *.jsJS 脚本逻辑文件

    ① JSON 配置

    小程序配置app.json
    当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部tab等。

    工具配置project.config.json
    小程序开发者工具在每个项目的根目录都会生成一个 project.config.json,你在工具上做的任何配置都会写入到这个文件,当你重新安装工具或者换电脑工作时,你只要载入同一个项目的代码包,开发者工具就自动会帮你恢复到当时你开发项目时的个性化配置,其中会包括编辑器的颜色、代码上传时自动压缩等等一系列选项。

    页面配置page.json
    对当前页面的配置,和app.json的配置内容相同,会覆盖全局配置中app.json的值

    ② WXML 模板

    充当的就是类似 HTML 的角色,区别:

    • 标签名字有点不一样
    • 多了一些 wx:if 这样的属性以及 `` 这样的表达式
      • 数据绑定:{{}}
      • 列表渲染:<wx:for>
      • 条件渲染:<wx:if>

    ③ WXSS 样式

    类似于css的角色。底层支持新的尺寸rpx,开发者可以免去换算的技巧

    ④ JS 逻辑交互

    一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击、获取用户的位置等等。在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作。

    备注:

    小程序中允许上传的文件:wxspngjpgjpeggifsvgjsoncermp3aacm4amp4wavoggsilk

    3.2 数据绑定 & 事件

    数据绑定

    数据绑定思想:同Vue一样数据可以初始化在当前页面的管理内存中的data中,页面中使用数据会自动去data里找。

    初始化数据:在当前页面的js

    Page({
    	data:{
    		msg:'Hello 小程序'
    	}
    })
    
    //修改数据
    this.setData({
    	msg:'Hello World'
    })
    

    事件

    方式:使用bindxxxcatchxxx

    • ​ 如果是使用bind绑定,则子级触发一定会触发父级
    • 如果是使用catch绑定,那么子级触发就不会触发父级(catch是在当前级停留,不会去当上一级)
    类型触发条件
    touchstart手指触摸动作开始
    touchmove手指触摸后移动
    touchcancel手指触摸动作被打断,如来电提醒,弹窗
    touchend手指触摸动作结束
    tap手指触摸后马上离开
    longpress手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发
    longtap手指触摸后,超过350ms再离开(推荐使用longpress事件代替)
    transitionend会在 WXSS transition 或 wx.createAnimation 动画结束后触发
    animationstart会在一个 WXSS animation 动画开始时触发
    animationiteration会在一个 WXSS animation 一次迭代结束时触发
    animationend会在一个 WXSS animation 动画完成时触发
    touchforcechange在支持 3D Touch 的 iPhone 设备,重按时会触发

    四、小程序框架

    4.1 注册小程序

    每个小程序都需要在app.js中调用App方法注册小程序示例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。

    // app.js
    App({
      onLaunch (options) {
        // Do something initial when launch.
      },
      onShow (options) {
        // Do something when show.
      },
      onHide () {
        // Do something when hide.
      },
      onError (msg) {
        console.log(msg)
      },
      globalData: 'I am global data'
    })
    

    整个小程序只有一个App实例,是全部页面共享的。开发者可以通过getApp方法获取到全局唯一的App示例,获取App上的数据或调用开发者注册在App上的函数。

    // xxx.js
    const appInstance = getApp()
    console.log(appInstance.globalData) 
    

    4.2 注册页面

    对于小程序中的每个页面,都需要在页面对应的 js 文件中进行注册,指定页面的初始数据、生命周期回调、事件处理函数等。

    //index.js
    Page({
        ...
    })
    

    4.3 页面生命周期

    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        msg: '开启小程序之旅'
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
        
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
        
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
        
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
        
      },
    
      /**
       * 页面相关事件处理函数--监听用户下拉动作
       */
      onPullDownRefresh: function () {
        
      },
    
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
        
      },
    
      /**
       * 用户点击右上角分享
       */
      onShareAppMessage: function () {
        
      }
    })
    

    4.4 页面路由

    方式操作
    打开新页面调用 API wx.navigateTo
    使用组件
    页面重定向调用 API wx.redirectTo
    使用组件
    页面返回调用 API wx.navigateBack
    使用组件
    Tab 切换调用 API wx.switchTab
    使用组件

    4.5 组件 & 模板的使用

    小程序提供的组件https://developers.weixin.qq.com/miniprogram/dev/component/

    模板的使用:

    // 定义模板
    <template name="page2Tmp">
      <view>
      	<text>{{title}}</text>
      </view>
    </template>
    
    // 使用模板
    <import src='/pages/template/page2-template.wxml'/>
    
    <template is='page2Tmp'  data="{{...item}}" ></template>
    

    item为遍历的对象,title为item中的一个属性

    4.6 API

    ① 获取用户信息

    // 获取登录用户的数据
    wx.getUserInfo({
      //withCredentials: true,
       success: (res) => {
          console.log(res);
          let user = res.userInfo;
          this.setData({
            user
          })
       }
    })  
    

    五、数据交互

    5.1 发送请求

    wx.request({ // 发送请求
      url: API_URL, // 请求的url
      header: { // 设置请求头
        'Content-type': 'json',
      },
      success: (res) => {  // 请求成功的回调函数
        // 隐藏提示加载信息
        wx.hideToast();
        console.log(res);  // 请求的成功的数据对象,注意是封装后的对象
      }
    })
    

    5.2 小程序设置

    1、小程序出于安全考虑所有的协议都是https协议,且如果没有在开发设置中配置请求的连接是无法访问指定的链接的。

    2、一个微信小程序的并发网络请求数量被限制在最多5个

    • 开发设置:详情-开发设置;部署也需要设置:还没研究
    • 部署也需要设置:还没研究

    5.3 不同页面的通信

    可以通过操作全局变量的进行数据通信:let appData=getApp()

    展开全文
  • golang微信小程序

    2018-11-25 22:22:53
    golang微信小程序具有高并发,低延迟,完全继承golang的优良传统,快捷简单
  • 开发前必读简要 基于大量无效开发,无法上线的案例,所以开发前部分知识十分重要;| 链接 微信小程序个人注册简单步骤 ... 微信开发者工具【项目】详解 ...为了方便大家了解并入门微信小程序,我将一些可能会需
  • 最近在开发微信小程序的时候发现了一个问题:使用wx.uploadFile时,其中的url如果是链接本地的请求(例如:https://localhost:8080/upload)Springboot后台服务程序开发工具将会报如下错误请求失败res.data请求失败res....
  • 微信小程序项目实战

    千次阅读 2019-08-30 16:23:10
    微信小程序项目实战
  • 第1章 《Python Flask构建微信小程序订餐系统》课程简介本章内容会带领大家通览整体架构,功能模块,及学习建议。让大家在一个清晰的开发思路下,进行后续的学习。同时领着大家登陆https://food.54php.cn(使用微信扫...
  • 号外:为读者持续整理了几份最新教程,覆盖了 Spring Boot、Spring Cloud、微服务架构等PDF。获取方式:关注右侧公众号"泥瓦匠BYSocket",来领取吧...解决方案实战可落地总结一、为啥要解决数据重复插入?问题起源...
  • 微信小程序 api 缓存方案 背景 为了应对用户流量大,减轻服务器的压力,减少网络请求次数,加快数据的显示,以及提高用户体验。我们现在需要把一些公共请求进行本地缓存,并且提供不同的更新策略给开发者选择。 前言...
  • 本人之前自学并发版了一个微信小程序(TXT音乐播放器),趁着还没忘,把常用的一些CSS样式总结在下方。微信小程序使用的css文件后缀为wcss,总的来说,与html中的css语法大致相同,但还是有一些特别的地方(有一些...
  • 点击播放 GIF 0.0M点击关注 不迷路点击播放 GIF 0.0...1. 服务器域名配置每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信。包括普通 HTTPS 请求(wx.request)、上传文件(wx.uploadFile)、...
  • 微信小程序作为一款轻量级的应用,因其有着较强的灵活性,开发成本低,推广裂变快等特点,在很多领域得到广泛的应用。本文基于小程序在电商领域的应用场景,将常见的安全问题进行分析汇总,整理成安全需...
  • 微信小程序介绍 ├—2-1 小程序是什么 .mp4 38.9 MB ├—2-2 小程序的作用 .mp4 3.9 MB ├—2-3 申请小程序的流程 .mp4 25.4 MB └—第3章 课程准备工作 ├—3-1 环境和虚拟机讲解.mp4 38.2 MB ├—3-2 虚拟机安装...
  • 微信小程序开发深入解读

    千次阅读 2018-07-11 16:06:11
    下面结合开发文档以及个人开发经验对微信小程序关键部分进行解读(不是入门教程,具体入门读者可以看官网),希望看完的读者对微信小程序有大概的认识或者有所启发。本文同步于个人博客 www.imhjm.com/article/597…...
  • 本文将结合具体的实战经验,主要介绍微信小程序的基础知识、开发中遇到的难点、项目的架构设计、最佳实践以及踩过的坑。文章内容较多,如果想看架构设计和躲坑技巧,请直接浏览后面的正文,简书没有目录,也挺伤感的...
  • 微信小程序资源汇总

    千次阅读 2018-08-20 17:18:47
    微信小程序汇总(10月16日更新小程序100+个教程或资讯与50+个Demo) 1:微信小程序官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 2:微信小程序简易教程:...
  • 本文将对微信小程序从开始开发到发布上线的详细过程进行讲解,欢迎大家加入微信群交流讨论,点击获取入群二维码 《超级颜值计算器》小程序源码托管在Github上,可自行clone修改: ...
  • springboot&微信小程序实战_开发说明

    千次阅读 2019-04-04 11:24:50
    微信小程序实战_开发说明 本项目采用的是springboot2.0与微信小程序实现前后端分离。 前台使用微信小程序与es6相关语法 后台使用 mysql数据库、druid连接池、mybatis ORM框架、redis 缓存、Nginx-fastDFS 文件...
  • 微信小程序的开发可以分为两个部分,一个是前端小程序界面开发,一个是后端微信小程序对接的接口开发。那么今天,我们主要的目的就是研究面向微信小程序的本地环境。 ​ 2.了解前后端分离架构 前端任务:结构后端...
  • 微信小程序之小程序图片压缩

    千次阅读 2018-05-07 11:14:21
    js里面 var requestCallback = function (err, data) {//请求结果 ...zhixing()//这是并发控制 根据业务自行处理 }); }, fail: function (error) { console.log(error) } }) }, 100) } }) } 页面要加上这个哦
  • **8月18日小程序Demo集合** ... [微信小程序Demo:股票分时图、K线图](简书) [微信小程序精品Demo:知乎日报](简书) [微信小程序Demo:事项助手(在日历上添加事件备注)](简书) [微信小程序D...
  • 微信小程序技术解读

    2020-06-04 07:13:59
    这期间,行业对微信小程序的关注经历了三个阶段。 第一个阶段是刚发布时的火热,大家都盼望这是“又一个公众号”,尝试从各个不同角度解读、预测小程序的价值所在,担心像几年前公众号刚上线时那样再次作出“误判...
  • 至今年2月,月活超500万的微信小程序已经达到237个,其中个人开发占比高达2成。因小程序的开发门槛低、传播快、收益,越来越多的开发者投入了小程序这一领域,由于整体开发水平层次不齐,会碰到越来越多的小程序...
  • 本文主要从什么是微信小程序微信小程序的介绍、小程序开发流程、小程序代码构成、小程序安装使用、配置分析、开发特点、实战项目等多角度手把手带你详解微信小程序。 第一章-什么是微信小程序?(以下都有直接用...
  • 微信小程序之旅 第1章 什么是小程序? 2017年度百度百科十大热词之一 微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用( 张小龙对其的定义是无需安装...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,160
精华内容 10,864
关键字:

微信小程序高并发

微信小程序 订阅