全文阅读时长6分钟,案例为真实事件改编,小程序名称、人名仅为代号,如有雷同……那我就改。

典型案例

在一个夜黑风高的夜晚,“xx饭很多”百度智能小程序悄然上线,目录结构如下:

├── pages
│   └── home
│       ├── index.js
│       ├── index.json
│       ├── index.css
│       └── index.swan
│   └── eat // 大口吃
│       ├── index.js
│       ...
│   └── meat // 肉
│       ├── index.js
│       ...
│   └── drink // 大碗喝
│       ├── index.js
│       ...
│   └── wine // 酒
│       ├── index.js
│       ...
│   ...
├── app.json
├── app.css
├── app.js

其中,app.jsonpages 包含了小程序的所有页面地址:

{...pages: ["pages/home/index","pages/eat/index","pages/meat/index","pages/drink/index","pages/wine/index",...]
}

为了能让自家小程序接入搜索流量,前端小明,第一时间在开发者平台提交了自然搜索资源:

功夫不负有心人,“xx饭很多”小程序终于被搜索引擎收录,可以搜到了。

……

数月后,在老板的英(zi)明(ben)指(bi)挥(po)下,“xx饭很多”小程序,功能不断迭,实现了满汉全席;而公司,为了提升流量傍大腿、砸银子,众多小程序页面都被投放了广告渠道。

与此同时,小程序体积变得愈发庞大,性能体验也遭到了严峻考验……

优秀如小明,怎会被难倒,他当即选择了分包加载,进行性能优化:

 // 分包A
├── packageA
│   └── eat
│      ├── index.js
│      ├── index.json
│      ├── index.css
│      └── index.swan
│   └── meat
│       ├── index.js
│         ...
│   └── ...
│ // 分包B
├── packageB
│    └── drink
│        ├── index.js
│       ...
│    └── wine
│        ├── index.js
│        ...
│    └── ...
├── pages
│    └── home
│      ├── index.js
│       ...
├── app.js
├── app.json
├── app.css

app.json 则变成了这个样子:

{// 主包配置"pages": ["pages/home/index",...],// 分包入口及配置"subPackages": [{"root": "packageA","pages": ["eat/index","meat/index",...]},{"root": "packageB","pages": ["drink/index","wine/index",...]}]
}

然而,包体积虽然小了——之前投放的地址,却失效了!

由于搜索引擎收录的是失效死链,“xx饭很多”小程序被降级了!

因为被降级,资源提交的配额减少了!

不仅如此,之前投放过的所有渠道,都需要协调资源从新替换,渠道的上线时间不可控……白花花的银子付诸流水!

老板龙颜大怒,小明束手无策……

求问:小明距离被开还有几天??

如何解决

其实,如果配置了小程序的自定义路由映射规则,小明的悲剧便不会发生。

app.json 中存在 routes 字段,框架则认为该小程序启用了自定义路由,将根据 routes 中的映射规则获取路径。

  // 主包配置"pages": ["pages/home/index",...],// 分包入口及配置"subPackages": [{"root": "packageA","pages": ["eat/index","meat/index",...]},{"root": "packageB","pages": ["drink/index","wine/index",...]}],// 自定义路由routes: [{"path": "home", // 投放入口,scheme中的path"page": "pages/home/index" // 真实的物理存储路径}, {"path": "eat","page": "packageA/eat/index"}, {"path": "drink","page": "packageB/drink/index"}, {"path": "wine","page": "packageB/wine/index"}, {"path": "meat","page": "packageA/meat/index"},...]
}

通过配置自定义路由,可以使源码结构与配置路径解耦,组织目录变得更加灵活,方便代码重构。

接下来,我们用一张图,简单说明下自定义路由的具体映射规则:

映射规则

规则还在哪里生效

使用自定义路由后,小程序框架相关的 api、组件、事件等也会采用新的路由规则:

包含path/url参数的api

swan.navigateToswan.switchTabswan.navigateToSmartProgramswan.openShare等 api 中的path、url参数;

// 以navigateTo为例,home为自定义路由的path,对应的真实物理地址是'pages/home/index'swan.navigateTo({url: 'home'});

导航组件

navigator组件的url属性;

// home为自定义路由的path,对应的真实物理地址是'pages/home/index'
<navigator url="home" />

分享、转发事件

页面的事件处理函数onShareAppMessage,返回对象的path字段;

Page({data: {title: 'xx饭很多信息列表'},onShareAppMessage() {return {title: this.data.title,content: 'xx饭很多信息列表',imageUrl: '',// home为自定义路由的path,对应的真实物理地址是'pages/home/index'path: 'home',success(res) {// 分享成功},fail(err) {// 分享失败}};}
});

打开小程序的方法

调起小程序的相关sdk,其中的path字段

// 该方法使用前,需要引入调起sdk的文件
window.swanInvoke({appKey: '4fecoAqgCIUtzIyA4FAPgoyrc4oUc25c',// home为自定义路由的path,对应的真实物理地址是'pages/home/index'path: 'home', query: {id: 1,type: 'a'}
});

routes的框架原理

前置名词解释Swanjs是百度智能小程序的前端框架,NAFramework代表小程序框架客户端层,server为小程序服务端。

调起小程序和使用swan.navigateTo为例,简单说下框架层对于自定义路由都做了啥:

结尾

总之,简单的routes配置只需几分钟,未雨绸缪千秋万代——愿小明们不再哭泣~

程序拍了拍你:来看看如何避开路由雷区相关推荐

  1. 垃圾分类毕设java程序_垃圾“拍一拍”,分类不用愁!生活垃圾分类查询小程序上线啦...

    垃圾种类太多? 分类容易搞混? @乐清人 注意啦,拿起手机就能查! 11月6日,生活垃圾分类查询系统登陆乐清市综合行政执法局官方微信公众号,输入垃圾名称即可快速了解垃圾所属哪一类,还有拍照识别查询,教 ...

  2. android版本新 老程序不能用_微信拍一拍功能不知道怎么用?教你拍好友和拍自己...

    微信是我们几乎每个人每天都必须要使用的通讯.社交,以及支付等环节的APP.昨天微信最新版本悄悄上线了一个隐藏"彩蛋"功能--微信拍一拍,支持用户在群聊和个人对话中提醒对方. 目前最 ...

  3. php网站源码 闪拍拍卖转拍 微拍堂自动挂售竞拍程序 H5拍卖商城系统+app

    php网站源码 闪拍拍卖转拍 微拍堂自动挂售竞拍程序 H5拍卖商城系统+app友情链接:1,友情链接列表 2,添加友情链接 文章管理:1,发布文章 2,文章列表 3,文章分类管理 广告管理:1,广告列 ...

  4. 微信“拍一拍”,竟然可以使用Python实现,你get到了吗?

    最近微信"拍一拍"火遍了各大微信群,并迅速占据了热搜话题榜 于是我突发奇想,决定用pyhton自动实现微信"拍一拍",没想到还真给搞成功了,整个过程才用了30行 ...

  5. 一份 Hadoop 面试 【避坑指南】 拍了拍你!

    在热招的开发岗面试中,Hadoop.HDFS 题被面试官选中的几率非常大,也是 HR 的杀手锏之一,常会被问的有以下几种面试题: 1. HDFS 的架构设计是怎样的? 2. HDFS 的读写流程是怎样 ...

  6. 微信“拍一拍”新增“炸一炸”功能;爱奇艺 CEO:会费涨价是行业必然趋势;微软终止 Windows 10X 开发|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  7. 阿里 P8 员工招聘私人助理被辞退;微信上线「拍一拍」功能;FreeBSD 11.4 释出 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  8. 微信推出史上最简单「拍一拍」新功能,仅需一行代码,好友们都玩疯了!

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 You will meet two kinds of people in l ...

  9. 微信新功能,拍一拍的背后,暗藏着商机

    微信的「拍一拍」功能刚上线,就在微博热搜上挂了三天! 之后,虽然大家吐槽着"拍一拍"功能无聊,但世间万物,都逃不过一个"真香"定律. "拍一拍&quo ...

最新文章

  1. 通过style来控制隔行显示不同颜色 .
  2. Python--day47--mysql索引注意事项
  3. 从mysql 5.7 到 mysql 8.0
  4. 如何 循环 字母 php,PHP-php循环打印a-z字母的疑惑
  5. php getcount_PHP中关键字interface和implements详解
  6. Vue或React多页应用脚手架
  7. mysql存储ip地址_MySQL怎样存储IP地址
  8. javascript动态改变窗口大小
  9. js回文数的四种判断方法
  10. 好用的论文翻译工具集锦
  11. cad插件_CAD素材与插件合集
  12. android判断是华为手机,华为手机怎么辨别真假?华为手机真伪验证多种方法
  13. javascript测试题和参考答案----试题源自牛客网
  14. Md5,base64加密
  15. ffmpeg常用操作 - 录屏 - 转码
  16. phpstorm的使用方法
  17. 冬季下肢静脉曲张如何治疗
  18. cordova 微信支付
  19. linux下openvpn服务搭建
  20. Tensorflow与keras学习 (3)——循环神经网络RNN

热门文章

  1. PostgreSQL系统表 pg_stats
  2. 测试相关--一些常见的测试思想
  3. [Tomcat,Servlet]解决罕见情况导致的错误javax.servlet.ServletException: Error instantiating servlet class
  4. 利用科大讯飞语音合成模块SDK实现ROS语音交互
  5. jks cer 证书生成
  6. 全球及中国汽车用热固性复合材料行业发展趋势分析及十四五规模预测报告2021年版
  7. Asterisk CLI命令大全
  8. CEPH存储文件系统操作
  9. 360浏览器如何屏蔽某搜索网站的热搜
  10. 跑通GVINS——港科大新作