首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货|携程Web组件跨端场景的实践

一、背景 我们开发 H5 营销活动后,通常会将营销活动的入口投放到多端,包括 App、小程序。常见的投放形式有:Native 原生页面、React Native 页面和小程序页面的内嵌弹窗。...但最终我们选择了一种更优解,利用环境变量,构建仅打包所需代码。 环境变量是应用程序运行时根据不同环境提供不同值的一种机制。...构建,这些环境变量会被静态替换。...一般来说原生小程序都会对请求进行封装,带一些特定的请求参数,并且对请求返回值做预先的处理,因此发送请求只能由小程序端以组件参数的形式传给 Web 组件。导航、埋点同理。...这导致小程序端显示,整体样式会比小程序的样式小一倍,最后的解决方案是编译小程序样式利用插件对尺寸*2。 另外为了优化图片加载性能,Web 组件的图片会使用 webp 格式。

18920
您找到你想要的搜索结果了吗?
是的
没有找到

使用 React Native 重写大型 Ionic 应用后,我们想分享一下这八个经验

这一点实际上与 React Native 无关,只是在编写应用的过程中,遇到一些奇怪的问题。而尽管我第一间使用了 Google 来搜索,但是并不能第一间找到合适的答案。...除非,你是写一些原生的组件,遇到一些莫名其妙地问题。 版本间差异太大,导致下游配套 开始编写 Growth 的时候,使用的 React Native 的版本是 0.42。...Growth 3.0 里面,使用了一些长的列表,如 awesome 列表,导致性能上不是很理解。在看到 React Native 0.43+ 之后,便升级到了 React Native 0.44。...这并不是一件容易的事,这会导致遇到一系列的问题,如我的持续集成会在 Travis CI 出现问题。 幸运的是,我使用的原生组件比较少,因此也没有遇到一些组件不能支持新版本的问题。...除此,一些未知的机型也会出现问题,尽管是个问题,但是由于数量较少就没有在意了。 对于写原生代码来说,这几乎是必备的手段。对于 WebView 来说,并不会存在太大的崩溃问题,除非使用了原生组件。

1.8K60

用JS开发跨平台桌面应用,从原理到实践

另外electron-react还可作为使用Electron + React + Mobx + Webpack技术栈的脚手架工程。 一、桌面应用程序 ?...3.3 系统API 为了提供原生系统的GUI支持,Electron内置了原生应用程序接口,对调用一些系统功能,如调用系统通知、打开系统文件夹提供支持。...例如:web页面管理原生GUI资源是很危险的,会很容易泄露资源。所以web页面,不允许直接调用原生GUI相关的API。...外来内容包含在 webview 容器中。 应用中的嵌入页面可以控制外来内容的布局和重绘。 与 iframe 不同, webview 应用程序不同的进程中运行。...10.1 崩溃 崩溃监控是每个客户端程序必备的保护功能,当程序崩溃我们一般期望做到两件事: 1.上传崩溃日志,及时报警 2.监控程序崩溃,提示用户重启程序 electron为我们提供给了crashReporter

6.9K50

百亿补贴通用H5导航栏方案

1.1 性能问题 ssr预渲染,无法对原生导航条进行预加载。对于百亿,便宜包邮等使用ssr预渲染的频道,因为原生导航栏无法进行预加载,导致上屏较慢等问题。...window.location.reload()刷新当前页面的时候,即便是js中隐藏了导航条,webview为了兼容一个线上问题,执行reload此时会先展示原生导航条,直到执行了js的隐藏逻辑,才会被隐藏...为了消除上面提到的过渡问题,业务链接中新增了qurey参数hideNavi=1 ,原生webview会通过该字段webview出现之前隐藏导航条。...但是因此也引发了一个风险:html加载失败,会造成无头的问题。因此需要webview配合改造,一旦监测到html加载失败,原生webview要展示原生导航条。 异常场景3:通天塔服务异常。...但是因此也引发了一个风险:html加载失败,会造成无头的问题。因此需要webview配合改造,一旦监测到html加载失败,原生webview要展示原生导航条。 异常场景3:通天塔服务异常。

22440

干货 | 三种主流快平台技术测评,你更青睐谁?

3大主流渲染引擎里,webviewreact native/weex、Flutter,复杂度依次降低,渲染性能依次上升。...别忘了webview的排版引擎也是世界级工程师用c写的。但通过这种方式提升性能的代价,就是布局复杂的界面,Flutter的代码嵌套的让人崩溃。...当界面复杂,Flutter的代码要嵌套几十层,每层的元素的json样式都和元素一起混写在dart代码里,让人崩溃。...当js引擎联网获取到数据后,通知原生视图层更新界面,有一个跨环境的通信折损。同样,当用户屏幕上操作原生视图层,要给js引擎发送通知,也会产生这个通信折损。...不常用的部分,提供插件市场以及免原生介入的插件使用方式。react native、Flutter的社区,也有不少三方提供的原生插件,但是连Airbnb这样的国外开发者对此都不满意。

2.1K20

React Native vs. Cordova、PhoneGap、Ionic,等等

因为这些框架使用的 WebView 来渲染 UI,所以我们将其称之为 WebView 框架。 WebView 框架是原生框架之上构建的。我们可以将前者视为运行在后者内部的模拟世界中。...它们每个应用中都内嵌了 Web 浏览器,并美名其曰 WebView!你 UI 中看到的所有,包括按钮、菜单和动画,都是浏览器的网页中运行的。...根据经验,识别出一个应用是否是使用 WebView 框架开发的并不难。通过一些小测试,比如滚动加速、键盘操作、导航和 UI 的流畅性。...如果这些操作达不到原生般的效果,那么累积后的效果将导致糟糕的用户体验。...当需要React Native 还提供了一种渗透到原生框架的方法,以实现我们希望应用中实现的任何原生功能。这有点像在黑客帝国中打电话。 ? 所以 WebView 框架一无是处喽? 不,当然不是。

3.2K40

React Native 导航:示例教程

移动应用程序由多个屏幕组成。构建移动应用程序时,首要考虑的是如何处理用户应用程序中的导航问题,例如屏幕的展示和屏幕之间的切换。...堆栈导航器还提供了类似于原生 iOS 和 Android 的过渡效果和手势。 注意,一个应用程序可以有多个堆栈导航器。...理解堆栈导航器与原生堆栈导航器的区别 React Native 中,我们有两个堆栈导航库: @react-navigation/stack 和 @react-navigation/native-stack...你还必须安装 react-native-gesture-handler 并在入口或根文件(index.js 或 App.js)的顶部导入它。跳过这一步通常会导致生产级别的崩溃,即使开发中工作正常。...这就是为什么我们可以 HomeScreen.js 上的一个按钮上使用它,当按下,会导致页面跳转到 AboutScreen,如下所示: <Button title="Go to About" onPress

16110

React Native 开发适配心得

比如,我们使用StatusBar做导航栏的时候,iOS平台下根视图的位置默认情况下是占据状态栏的位置的,我们通常希望状态栏下面能显示一个导航栏,所以我们需要为StatusBar的外部容器设置一个高度...比如,我们要开发一款应用需要用到导航组件,React Native组件中有NavigatorIOS与Navigator两个导航组件来供我们选择,从api doc中我们可以看出NavigatorIOS只支持.../img/check.png')} /> 提示:我们使用具有不同分辨率的图标,一定要引用标准分辨率的图片如require('./img/check.png'),如果我们这样写require('....性能问题 对于大多数想用React Native开发应用的开发者来说,都很关心React Native的性能问题,React Native和H5+WebView以及原生应用之间的性能对比是:WebView...从大多说采用React Native开发应用的开发者的反馈来看,React Native的性能是远大于WebView但略低于原生应用,毕竟React Native和原生语言之间还需要一个Bridge。

2.4K50

如何开发适配安卓和iOS双平台的React Native应用

比如,我们使用StatusBar做导航栏的时候,iOS平台下根视图的位置默认情况下是占据状态栏的位置的,我们通常希望状态栏下面能显示一个导航栏,所以我们需要为StatusBar的外部容器设置一个高度...比如,我们要开发一款应用需要用到导航组件,React Native组件中有NavigatorIOS与Navigator两个导航组件来供我们选择,从api doc中我们可以看出NavigatorIOS只支持...性能问题 对于大多数想用React Native开发应用的开发者来说,都很关心React Native的性能问题,React Native和H5+WebView以及原生应用之间的性能对比是:WebView...<React Native<原生应用。...从大多说采用React Native开发应用的开发者的反馈来看,React Native的性能是远大于WebView但略低于原生应用,毕竟React Native和原生语言之间还需要一个Bridge。

3.3K20

基于 Vue 和 TS 的 Web 移动端项目实战心得

目录 组件库[6] JSBridge[7] 路由堆栈管理(模拟原生 APP 导航)[8] 请求数据缓存[9] 构建预渲染[10] Webpack 策略[11] 基础库抽离[12] 手势库[13] 样式适配...h5 开发,可能会遇到下面几种情况: 开发都是浏览器进行开发调试的,所以需要避免调用 native 的接口,因为这些接口浏览器环境根本不存在; 有些情况需要区分所在环境是 android webview...如果是 webview 加载网页,也可以通过 webview 加载失败的钩子监控网页崩溃等。 如何监控网页崩溃?...: https://reactjs.org/ [6] 组件库: #组件库 [7] JSBridge: #jsbridge [8] 路由堆栈管理(模拟原生 APP 导航): #路由堆栈管理模拟原生-app...-导航 [9] 请求数据缓存: #请求数据缓存 [10] 构建预渲染: #构建预渲染 [11] Webpack 策略: #webpack-策略 [12] 基础库抽离: #基础库抽离 [13] 手势库

3.4K21

移动 web 最佳实践(干货长文)

h5 开发,可能会遇到下面几种情况: 开发都是浏览器进行开发调试的,所以需要避免调用 native 的接口,因为这些接口浏览器环境根本不存在; 有些情况需要区分所在环境是 android webview...如果是 webview 加载网页,也可以通过 webview 加载失败的钩子监控网页崩溃等。 如何监控网页崩溃?...同样,发起请求,也不是实时读取,无法做到和 native 同步,导致页面逻辑出错。 两种解决办法: 各位可以选择适合自己项目的方式,有更好的处理方式欢迎留言。...: https://reactjs.org/ [6] 组件库: #组件库 [7] JSBridge: #jsbridge [8] 路由堆栈管理(模拟原生 APP 导航): #路由堆栈管理模拟原生-app...-导航 [9] 请求数据缓存: #请求数据缓存 [10] 构建预渲染: #构建预渲染 [11] Webpack 策略: #webpack-策略 [12] 基础库抽离: #基础库抽离 [13] 手势库

2.7K61

移动 Web 最佳实践(干货长文,建议收藏)

h5 开发,可能会遇到下面几种情况: 开发都是浏览器进行开发调试的,所以需要避免调用 native 的接口,因为这些接口浏览器环境根本不存在; 有些情况需要区分所在环境是 android webview...如果是 webview 加载网页,也可以通过 webview 加载失败的钩子监控网页崩溃等。 如何监控网页崩溃?...同样,发起请求,也不是实时读取,无法做到和 native 同步,导致页面逻辑出错。 两种解决办法: 各位可以选择适合自己项目的方式,有更好的处理方式欢迎留言。...: https://reactjs.org/ [6] 组件库: #组件库 [7] JSBridge: #jsbridge [8] 路由堆栈管理(模拟原生 APP 导航): #路由堆栈管理模拟原生-app...-导航 [9] 请求数据缓存: #请求数据缓存 [10] 构建预渲染: #构建预渲染 [11] Webpack 策略: #webpack-策略 [12] 基础库抽离: #基础库抽离 [13] 手势库

2.4K10

我们是如何将 Cordova 应用嵌入到 React Native 中

那么,我们仍然只能在旧的 WebView 上编写,或者跳转到相应的 React Native 页面上。前者导致了不好的开发体验,后者则会导致不好的用户体验。...原先我们用 Cordova 调用摄像头,界面超难定制,而使用 React Native 则便得很轻松 当我们 WebView 里,可以轻松地调用任何原生组件,体验上也不比原生应用差 因此,主要工作就变成了...生产环境,Android 需要将路径放到 file:///android_asset/ 目录下: let source; 实际上,那一点也适用于 iOS, iOS 打包的时候,我们也需要将 WebView...过去我们 Cordova 是调用原生代码,便是 WebView Cordova 原生插件(PS:感兴趣读者可以阅读:Cordova插件 / 混合应用插件开发: hello,world解析》里,...这时,需要在原生代码里,发出相应的事件: cordova.getActivity().runOnUiThread(new Runnable() { Cordova里,只是 WebView 监听原生代码发出的事件

4.8K60

React Native开发之react-navigation库详解

众所周知,多页面应用程序中,页面的跳转是通过路由或导航器来实现的。...DrawerNavigator:用于实现侧边栏抽屉页面的导航组件。 需要说明的是,由于react-navigation3.x版本进行了较大的升级,所以使用方式上与2.x版本会有很多的不同。...,由于react-native-gesture-handler需要依赖原生环境,所以需要使用link命令链接原生依赖,命令如下: react-native link react-native-gesture-handler...headerMode:定义返回上级页面动画效果,选项有float、screen和none。 最后,入口文件中以组件的方式引入StackNavigatorPage.js文件即可。...headerTruncatedBackTitle:设置上个页面标题不符合返回箭头后面的文字显示的文字。 headerRight:设置导航栏右侧展示的React组件。

5.7K10

基于 Vue 和 TS 的 Web 移动端项目实战心得

目录 组件库[6] JSBridge[7] 路由堆栈管理(模拟原生 APP 导航)[8] 请求数据缓存[9] 构建预渲染[10] Webpack 策略[11] 基础库抽离[12] 手势库[13] 样式适配...h5 开发,可能会遇到下面几种情况: 开发都是浏览器进行开发调试的,所以需要避免调用 native 的接口,因为这些接口浏览器环境根本不存在; 有些情况需要区分所在环境是 android webview...如果是 webview 加载网页,也可以通过 webview 加载失败的钩子监控网页崩溃等。 如何监控网页崩溃?...将服务响应的 cookie,持久化到本地,在下次 webview 启动,读取本地的 cookie 值,手动再去通过 native 往 webview 写入。...: https://reactjs.org/ [6] 组件库: #组件库 [7] JSBridge: #jsbridge [8] 路由堆栈管理(模拟原生 APP 导航): #路由堆栈管理模拟原生-app

2.2K10

React Native——一次学习,随处编写

将原来使用原生代码实现的UI小部件包装成React Native的自定义组件 Widget移动应用程序开发中被广泛使用,它们有官方发布的,也有第三方开源的,还有开发者自行开发的。...但因为所有的渲染都由Web相关技术来完成,使用WebView无法得到真正原生的用户体验,并且WebView无法做到与原生代码双向通信、无缝衔接。...React Native不排斥WebView开发,并且为WebView提供了相应的组件,可以ReactNative中实现部分界面通过WebView呈现。...笔者写本书,市场上700元级的入门Android,手机内存配置都达到了2GB,1500元级的中低端手机内存配置达到了4GB。手机用户基本上感觉不到应用程序多占了几十兆内存。...也就是说,2016年年初,使用React Native框架开发Android移动应用程序老手机上运行还是会遇到问题。

1.6K20

打造属于自己的博客app——基于react native和博客园接口

一个react native UI库 lodash JS函数库 react-native-autoheight-webview webview解决方案 react-native-vector-icons...react native icon组件 项目结构 代码全部source目录里,其他代码有react native自动生成,当然,index.js相关入口文件有调整,source中目录简单介绍一下:...之前版本的react native 的页面导航没有一个很好的解决方案,最大的问题就是页面切换的卡顿,很多第三方的导航组件使用起来性能更差,还不如自己开发。...html展示的解决方案 展示webview一直是一个头疼的问题,虽然通过 https://js.coach 可以找到很多webview的解决方案,大部分看起来很好的解决方案是将html转成原生的jsx节点...我使用的是react-native-autoheight-webview 这个组件,原始的webview组件必须设置高度,react-native-autoheight-webview可以不用设置高度,

1.2K50

WKWebView

其他的区别如下: 1,UIWebView是UIKit框架的一部分,可以应用程序内使用,无需导入任何内容;而WKWebView使用的是WebKit.framework,使用的时候需要导入到应用程序中。...当电话链接被点击,电话应用程序就会启动并拨打该号码。...按指定的因子缩放页面内容,并将结果居中指定的点上。 导航 allowsBackForwardNavigationGestures。布尔值,指示水平滑动手势是否会触发后退列表导航,默认为NO。...当使用 Https 协议加载web内容,使用的证书不合法或者证书过期需要使用该方法. - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge...一般而言,但WKWebView因一些稀奇古怪的原因导致Crash的时候就会回调该方法。

5.9K20

推荐一个检测 JS 内存泄漏的神器

虽然这种架构能够提供更快的用户交互、更好的开发者体验和更像原生应用程序的感觉,但是客户端维护 Web 应用的状态会让内存的管理变得更加复杂。...相比之下,他们管理 Web 浏览器内存方面做的工作并不多。当分析新 Facebook.com 的内存使用情况,发现客户端的内存使用情况和内存不足 (OOM) 崩溃的数量一直攀升。...视图中,堆中的每个 JavaScript 对象或原生对象都是一个图节点,堆中的每个 JavaScript 引用都是一个图的边。... 2021 年上半年, Facebook.com 上的 OOM 崩溃减少了 50%。...这意味着单个 React 组件泄漏可能会导致页面对象的重要部分泄漏,从而导致巨大的内存泄漏。

2.7K20
领券