干货 | 微信小程序一键转百度小程序,携程火车票团队是这样做的

百度小程序调研&微信转百度 微信小程序转成百度小程序的转变内容,转变防范,以及百度小程序调研的记录 阅读详情

作者简介

张海明,携程火车票研发部开发经理。2015年加入携程,从事火车票Android、ReactNative和小程序相关研发工作。

一、前言

随着微信小程序的逐渐火爆,百度、支付宝等平台纷纷推出各自的小程序平台。面对众多平台,携程第一时间上线了自己的小程序。在带来巨大流量的同时,也带来了更多的工作量。如何保证各个平台小程序的质量、迭代速度以及减少工作量成为我们思考的问题。


二、概述

本文将根据携程火车票小程序团队从微信小程序转百度小程序的实践过程以及最终的实践成果,从以下几个方面来进行阐述:

  • 为什么要进行微信小程序转百度小程序

  • 微信转百度小程序的思路

  • 转化调整过程中遇到的问题以及解决方案

  • 实践成果及后续展望


三、为什么要进行微信小程序转百度小程序

在百度平台的小程序开放后,我们基于微信小程序的业务版本,快速投入资源,上线了第一版功能较为简单的小程序,去对市场进行试探。

经过了一段时间的观察,发现百度小程序的流量很可观,觉得有必要对百度小程序做对应的优化。我们当时面临的情况如下:

①因为需要保证微信小程序的质量,我们必须使用原生微信小程序进行开发。

②主流的小程序转换方式:如使用类似Taro、remax等框架,需要进行完整的开发,这需要投入很多的资源,且基于①的原因,我们无法复用到微信。

③使用百度原生语言开发:和②一样,在投入资源的情况下,可复用性不高。

④需要考虑后续扩展到其他小程序平台。

⑤微信小程序和百度小程序具有一定的相同点。

⑥使用内嵌H5没有原生API支持,部分功能受限(支付、分享等)。

⑦我们的主要工作在于自己的业务模块,基础构件已由框架同事全部支持。

基于上述情况,我们决定尝试用现有的微信小程序代码直接转换为百度小程序代码。


四、微信转百度小程序的目标及思路


4.1 微信转百度小程序的目标

参考技术社区的转换方案,结合我们自身的需要,我们拟出初步目标:支持微信小程序一键转换为百度小程序,且支持迭代转换。


4.2 微信转百度小程序的思路

一键转换工具我们选择了开源工具wx2swan ,在工具的介绍中,开发者提到了下面这句话:

工具帮你迁移80%的代码,可能只节省你50%的工作量。

而在初步实践中,也验证了开发者的观点,减少这50%的工作量也成了我们工作的重中之重。

在具体讨论时,我们主要有两个方案:

1)微信小程序代码转换后,进行代码搬运。

在转换后的代码上进行修改,配合百度小程序平台带来的某些差异进行处理。这种方案是我们最先提出的,但是该方案存在两个缺点。

①搬运代码进行修改,工作量较大,业务流程很有可能存在较多隐患,出现bug时,排查解决等也会耗费很多的时间;

②解决了我们当前的需要,但是当后面需要继续迭代百度小程序时,又会面临①中的问题,无法减轻更多的工作量。

我们团队继续讨论其他可行性,于是出现了第二个方案。


2)结合百度小程序的差异,基于现有的微信代码进行修改。

这个方案基本思路就是抹平两个平台的差异,做到微信小程序一套代码,转换后基本甚至完全可以在百度上运行。同样的,该方案的缺点我们也进行了分析。

①工作量大,需要在微信代码的基础上,一个一个页面的去趟"坑",如某些api的使用,页面展示差异等,并需要提出解决方案;

②业务流程、功能策略在两个平台上的差异需要做一定的修改,如分享、活动入口等。

但是该方案可以避免①中的持续迭代带来工作量问题,我们选择了该方案。


五、转化调整过程中遇到的问题以及解决方案


5.1 平台差异性抹平

这一部分的工作主要在API和平台某些特性如UI上。

特性(UI)上差异处理如下:

  • icon-font使用base64方式差异,百度小程序不支持woff2:统一使用了truetype

    @font-face {font-family: "xxx-iconfont";
      src: url('data:application/octet-stream;bas...') format('truetype');
    }
    
    
    .ifont-add:before {
      font-family: 'xxx-iconfont';
      content: "\e7f8";
    }
    
  • for循环和判断条件一起使用时,百度小程序会生成空dom:for循环使用block嵌套

    <block wx:for="{{arr}}" wx:for-item="s" wx:key="{{index}}">
        <view class="cls"wx:if="{{some condition}}" data-index="{{index}}" bindtap="taptap">
            <view class="cont">{{s.name}}</view>
        </view>
    </block>
    
  • 百度小程序中swan不支持位运算:移至至js中

  • 百度小程序中swan 运算符 < <= 导致页面展示异常:已反馈至百度开发者中心,暂时改写

  • ...其他不再赘述

JavaScript层的处理

这一部分工作由框架同事提供,主要包含以下两个方面:

  • 劫持Page/componet。提供统一的Page示例和Componet实例,来与各小程序的生命周期进行兼容。

  • 通过注入wx/swan,劫持api,统一挂载到全部的对象上。对于我们业务BU的使用,只需要通过globalAPI.API的方式调用即可。


5.2 wxs改写

wxs是微信小程序特有的脚本语言(不同于JavaScript),可使用在wxml中,部分场景下可以快速且优雅的解决问题,但是具有一定的限制,比如该部分和JavaScript代码隔离,且不能调用小程序提供的API等。

在转换百度时,该功能不能正常使用,所以我们放弃了该功能,逻辑全部在JavaScript中实现。

5.3 H5数据传递

部分业务流程中,如果需要跳转至H5页面,且需要H5传递数据,则H5页面需引入百度sdk。

5.4 业务差异化处理

这一部分我们定义了全局的平台判断:

initConfig() {
        //根据appid判断各平台
      //channel代表平台
      //requestChannel用于请求头,便于标识服务端识别
      switch (appId) {
          case baiduAppid:
                config.channel = 'Baidu';
                config.requestChannel = "RequestChannel.Baidu";
                break;
            default:
                config.channel = 'WX';
                config.requestChannel = "RequestChannel.WX";
                break;
        }
        //定义全局平台属性,方面调用
        config.isCtripApp = config.channel === 'WX';
        config.isBaiduApp = config.channel === 'Baidu'
        Object.assign(global.config, config)
    }

在具体业务场景时,我们通过判断平台,来做不同的表现。

PageInit:
this.data = {
    isBaiduApp:global.config.isBaiduApp
}
UseIt:
if(this.data.isBaiduApp){
    //do your business
}

另一部分,在网络请求中,我们也是在header中追加了平台的信息,以方便后台服务进行业务控制:

header: {
    'request-type': `${global.config.requestChannel}`
  }

5.5 工作流的制定

为了不影响微信小程序的工程,我们使用git分支进行操作。

  • --->首次开发

  • 基于release_wx新建develop_baidu分支;

  • 对于百度小程序的适配,全部在develop_baidu分支进行;

  • 使用develop_baidu进行转换,生成的代码拷贝至百度小程序仓库并提交;

  • --->迭代开发

  • release_wx merge至develop_baidu分支;

  • 对于有修改的代码进行检查

  • 使用develop_baidu进行转换,生成的代码拷贝至百度小程序仓库并提交;


六、实践成果及后续展望


根据之前设定的目标,微信小程序调整后基本完成的预期的目标:

在微信小程序代码的基础上,支持一键转成百度小程序,且可进行持续的迭代更新。

而在此过程中,我们摸索出来的较为稳定的开发方式、流程,是我们对其他小程序推进更新的有益尝试。

按照此方式,我们业已完成了对快应用的适配,并有计划推广至其他平台。也期待对于和我们一样,在以微信小程序开发为主,其他平台尝试转译的同学有一定帮助。

【推荐阅读】


2019携程技术峰会

5G、人工智能等热门话题云集

11月9日上海

戳下方图片直达

↓↓↓

STK12与Python联合仿真(一):环境搭建 STK仿真python接口,安装与测试 阅读详情

相关推荐

告别模糊与偏色:使用RKISP Tuner为RK3588s+IMX415进行图像质量调优的实战心得

本文详细介绍了如何使用RKISP Tuner为RK3588s+IMX415进行图像质量调优的实战经验。从调试环境搭建到3A算法优化,再到画质增强模块的深度调参,提供了全面的技术指导和参数建议,帮助工程师解决噪声、色偏和细节模糊等常见问题,显著提升成像质量。

weixin_28729205的博客 452

微信小程序跳转第三方网页、第三方小程序。

微信小程序跳转第三方网页、第三方小程序。微信小程序跳转第三方网页跳转第三方网页的问题微信小程序跳转第三方小程序 微信小程序跳转第三方网页 最近需要做一个小程序跳转携程的功能,首先考虑到的是跳转到携程的h5页面。查了下携程的页面为https://m.ctrip.com(跳转第三方h5时只能是https的根页面)。其步骤为下图所示。 跳转代码示例goXieCheng(){ uni.navigat...

weixin_43860852的博客 1万+

从零开始安装使用opengauss数据库(高斯数据库)

openGauss(高斯数据库)的环境配置、安装方法、基本使用方法

qq_43764807的博客 1万+

获取 小程序 appId 的方法

获取 小程序 appId 的方法

奇妙方程式的博客 2132

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 632

十一、机器学习进阶知识:径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

本文对径向基神经网络(RBFNN)的理论基础及建模步骤进行介绍,之后使用Python实现基于RBFNN的数据预测,通俗易懂,适合新手学习,附源码及实验数据集。

weixin_42051846的博客 1万+

微信小程序转码百度小程序

其实很简单的,相似度本身就很高下面开始教大家怎么转码 1,首先你要下载百度小程序IDE(最新版本) 点击代码搬家 2,选择你要转码的微信小程序目录 3,选择你百度小程序的目录(空目录)用来保存转码后的代码 4,最后一步 开始转码 即可 appid可以不填写,根据代码会有一些小小的瑕疵,需要进一步略微的二次开发,希望能帮助到大家 记得关注小编噢!!! 喜欢上方小...

前端_李嘉豪 7662

C#与西门子PLC S7-1500 S7协议PLC读写数据

/获取对应长度的字符串。//将val字符串转换为字符数组。//String写入。//String读取。//PLC类型 IP地址 机架号 槽号。1.类库使用S7netplus。

softshow1026的博客 5576

实现微信小程序跳转到外部网站

由于微信小程序的URL传参的特性,如果参数带有特殊字符且不进行数据转换,微信会截取数据,导致传递的数据不完整。到百度网站,这个中间页面会充当一个代理,从而规避直接跳转时可能遇到的问题。有时候在小程序中直接跳转到某些网站会存在一些。函数,对参数进行转换特殊字符。时,需要把对象数据转。

qq_45897045的博客 2733

Cloud Connector RFC 访问控制深度实践:为 SAP BTP ABAP environment 打通安全、可控的远程连接

本文是一份面向企业ABAP团队与平台工程团队的Cloud Connector RFC访问控制配置指南。文章详细介绍了虚拟主机/实例号、负载均衡、资源白名单等核心概念,并提供了从零开始的配置流程。主要内容包括:通过Cloud Connector建立安全隧道的价值(零暴露、最小权限)、两种连接类型(无负载均衡/带负载均衡)的配置方法、资源白名单设置技巧,以及两个典型应用场景(Custom Code Migration远程检查与BAPI调用)的实操案例。指南基于SAP官方文档,包含落地经验与避坑建议,可帮助团队快

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1644

微信小程序跳转外部网站

以跳转百度为例,点击一个按钮,跳转到百度(百度的网页还是在小程序中打开) wxml: <view > <button bindtap='to'>点击跳转</button> </view> js: to: function (e) { wx.navigateTo({ url: '/pages/out/ou...

全场梦游c的博客 6418

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2398

干货 | 小程序跨端框架实践之Remax篇

作者简介汽车票前端研发团队,致力于提供更便捷更智慧的出行方式,关注前端技术方向的探索和实践。一、项目背景随着小程序在用户规模和商业化上取得的极大成功,各大平台都推出了自己的小程序。然而这...

携程技术 1545

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何获取第三方小程序的AppID和path

一、获取小程序的AppID的方法: 打开第三方小程序,点击右上角的“。。。”图标,选择“更多资料”,就可以看到AppID了 二、获取小程序path的方法: 登录,点击右上角的工具,进入后是下面的页面 ...

PDDcute的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

微信小程序跳转到其他网页(外部链接)

1.开发的时候,我们难免碰到要跳转到其他网页中去那该怎么实现呢?2.例如我想点击一个按钮,跳转到百度(百度的网页还是在小程序中打开)3.wxml   1. index.wxml   (按钮页面)&lt;view class='wrapper'&gt; &lt;button class='wepay' bindtap='goBaidu'&gt;点击跳转&lt;/button&gt; &lt;...

xinzi11243094的博客 3万+

干货 | 携程火车票Rematch框架实践

作者简介滨峰,携程开发经理;国春,携程高级开发工程师。本文主要介绍携程火车票模块在进行新业务开发和老代码重构时,使用rematch状态管理框架的实践经验总结,包括在过程中暴露出来的一系...

携程技术 844

干货 | 响应式设计在携程火车票的应用

作者简介永利,携程开发经理,专注于Web领域的探索。一、什么是响应式设计?可能很多人脑海中已经出现了这样一个动画,当浏览器中页面尺寸不断变化时,内容也在随之变化。简单说,响应式网站设计...

携程技术 449

微信小程序跳转其他外部网站上

** 微信小程序跳转其他外部网站上需要步骤如下: ** 1例如我想点击一个按钮,跳转到百度(百度的网页还是在小程序中打开) 2wxml 1. index.wxml? ?(按钮页面) 点击跳转 2.out.wxml? (百度页面), //放心你没有看错就这么一行就行了 3.谨记,要在app.json中配置一下路由, “pages”:[ “pages/a/a”, “pages/b/b” ], 3...

weixin_45355998的博客 2625

【微信小程序调用百度API实现图像识别功能】----项目实战

本章主要讲述:如何更快的上手小程序,如何搭建一个页面以及跳转到另一个页面,如何调用百度API接口实现图像识别技术,如何在微信小程序的后台添加合法域名,计算机毕业设计(小程序,网页设计,数据库,php开发等)

如果能帮助你,我深感荣幸 7417

微信小程序web-view跳转

h5项目中跳转外部连接可使用的标签解决。

weixin_60885570的博客 5415

css中content:"" 编码与显示效果

css代码 .cross{ width: 20px; height: 20px; background-color: #F3F9FF; border-radius: 10px; border: 1px solid #DBE6EF; display: inline-block; position: relative; bottom: 2

lijie627239856的博客 4737

微信小程序跳转第三方页面

工作

weixin_53802588的博客 7546

微信小程序跳转页面的不同方法

微信小程序的跳转

weixin_71247694的博客 3643

微信小程序页面跳转(三种方法)

微信小程序制作页面跳转三种方法

qq_54000767的博客 3万+

微信小程序的页面跳转和参数传递 —— 微信小程序教程系列(6)

页面跳转可以使用微信小程序提交的api :wx.navigeteTo

michael的博客 7万+

干货 | 携程火车票Flutter最佳实践

作者简介本文为联合撰稿,作者为携程火车票Flutter团队,致力于跨端快速、高性能开发。背景在竞争激烈的移动时代,各大互联网公司都在争相抢夺市场,如何提高研发效率,快速迭代产品成为非常重...

携程技术 913
上一篇: 程里人 | 携程程序猿/媛的1024
下一篇: 沙龙回顾 | 移动互联网下的测试工程效率提升,含PPT和视频
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值