当前位置: 首页 > news >正文 经典手机网站新型建筑模板价格多少 news 2025/10/21 22:11:01 经典手机网站,新型建筑模板价格多少,做网站资质荣誉用的图片,吉林省建设工程造价信息网站混合开发是指使用多种开发模开发App的一种开发模式#xff0c;涉及到两大类技术#xff1a;原生 Native、Web H5。原生 Native 主要指 iOS#xff08;Objective C#xff09;、Android#xff08;Java#xff09;#xff0c;原生开发效率较低#xff0c;开发完成需要重… 混合开发是指使用多种开发模开发App的一种开发模式涉及到两大类技术原生 Native、Web H5。原生 Native 主要指 iOSObjective C、AndroidJava原生开发效率较低开发完成需要重新打包整个App发布依赖用户的更新性能较高功能覆盖率更高Web H5主要由HTML、CSS、JavaScript组成Web可以更好的实现发布更新跨平台也更加优秀但性能较低特性受限。 跨平台开发是围绕着研发效能和用户体验两个主题去打造的通过在两者之间进行取舍诞生了多种跨平台解决方案。根据采用的渲染技术不同跨平台解决方案分为Web 渲染、原生渲染和自建渲染引擎渲染。 1 JSBrigde 和 WebView 1.1 JSBrigde 原生Native与Web端相互通信离不开JSBridge。JSBridge是以 JavaScript 引擎或 Webview 容器作为媒介通过协定协议进行通信实现 Native 端和 Web 端双向通信JS 向 Native 发送消息: 调用相关功能、通知 Native 当前 JS 的相关状态等。Native 向 JS 发送消息: 回溯调用结果、消息推送、通知 JS 当前 Native 的状态等。的一种机制。 JavaScript 是运行在一个单独的 JS Context 中例如WebView 的 Webkit 引擎、JSCore。由于这些 Context 与原生运行环境的天然隔离可以将这种情况与 RPCRemote Procedure Call远程过程调用通信进行类比将 Native 与 JavaScript 的每次互相调用看做一次 RPC 调用。如此可以按照通常的 RPC 方式来进行设计和实现。 目前主流的 JSBridge实现中都是通过拦截 URL 请求来达到 native 端和 webview 端相互通信的效果。 首先需要在 webview 侧和 native 侧分别注册 bridge其实就是用一个对象messageHandlers把所有handler函数储存起。然后在 webview 里面注入初始化代码 1创建一个名为 WVJBCallbacks 的数组将传入的 callback 参数放到数组内 2创建一个 iframe设置不可见设置 src 为 https://__bridge_loaded__ 3设置定时器移除这个 iframe。 最后在native 端监听 url 请求 拦截了所有的 URL 请求并拿到 url。首先判断 isWebViewJavascriptBridgeURL判断这个 url 是不是 webview 的 iframe 触发的具体可以通过 host 去判断。继续判断如果是 isBridgeLoadedURL那么会执行 injectJavascriptFile方法会向 webview 中再次注入一些逻辑其中最重要的逻辑就是在 window 对象上挂载一些全局变量和 WebViewJavascriptBridge属性。继续判断如果是 isQueueMessageURL那么这就是个处理消息的回调需要执行一些消息处理的方法。 1.2 WebView WebView 是移动端提供的运行JavaScript的环境是系统渲染 Web 网页的一个控件可与页面JavaScript交互实现混合开发。 简单来说WebView 是手机中内置了一款高性能 Webkit 内核浏览器在 SDK 中封装的一个组件。不过没有提供地址栏和导航栏只是单纯的展示一个网页界面。 WebView 可以简单理解为页面里的 iframe 。原生 app 与 WebView 的交互可以简单看作是页面与页面内 iframe 页面进行的交互。就如页面与页面内的 iframe 共用一个 Window 一样原生与 WebView 也共用了一套原生的方法。 其中 Android 和 iOS 又有些不同 Android目前是 基于 Chromium 内核。iOS 目前采用的是 WKWebView。 WebView 可以对url请求、页面加载、渲染、页面交互进行强大的处理。webview 去加载 url 并不像是 浏览器加载 url 的过程webview 存在一个初始化的过程。为了提升init 时间通常做法是 app 启动时初始化一个隐藏的webview等待使用当用户点击需要加载URL直接使用这个webview 来加载从而减少webview init 初始化时间。弊端就是带来了额外的内存开销。 2 Web渲染 Web 渲染方案的有如下特点 开发效率高采用 Web 技术对前端友好一次开发多端运行动态化好Web 技术的天然动态特性支持无需发版表现一致性佳Web 页面除了个别元素和属性的差异、多屏适配外其双端表现相对一致 性能较差页面采用 WebView 渲染页面加载耗时长功能受限于 WebView 沙箱能力有限难以承接复杂交互或是需要高性能的任务整体用户体验差。 Web 渲染本质上是依托原生应用的内嵌浏览器控件 WebView 去渲染 H5 页面并在原生应用中定义可供 H5 页面访问原生部分能力的接口 JSBridge从而实现 H5 和 Native 双向通信也进一步扩展 H5 端侧能力。因此H5 App 的渲染流水线和 Web 页面渲染相一致。从 WebView 初始化到 H5 页面最终渲染的过程如下 因此Web 渲染性能上也存在首屏渲染优化问题而且还多出一个WebView 初始化的问题可以通过 APP 启动的时候初始化一个常驻的隐藏WebView来处理。 针对资源加载所带来的白屏问题业界提出了离线包的优化方案。大体思路就是将原有从线上加载 H5 应用提前下发到本地通过 FileIO 或是内存等方式直接进行页面渲染达到接近原生的用户体验。 在这基础上业内又提出 h5 容器的技术解决方案h5 容器提供丰富的内置 JSAPI增强版的 WebView 控件以及插件机制等能力对原始版本的方案做了进一步功能高内聚和模块低耦合。 Apache Cordova 是一个开源的移动开发框架。它允许您使用标准 Web 技术 - HTML5、CSS3 和 JavaScript 进行跨平台开发。应用程序在针对每个平台的包装器内执行并依靠符合标准的 API 绑定来访问每个设备的功能例如传感器、数据、网络状态等。该框架的实现原理就是基于H5 容器Web 渲染技术。 Cordova 应用程序由几部分组成 Web App应用程序代码的实现地方采用的是 Web 技术应用运行在原生控件 WebView 中。HTML Rendering Engine应用的渲染引擎即 WebView该渲染引擎是页面和 Native 实现双向通信的桥梁。Cordova 插件提供了 Cordova 和原生组件相互通信的接口并绑定到了标准的设备API上。这使你能够通过JavaScript 调用原生代码这些核心插件包括的应用程序访问设备功能比如电源相机联系人等。Mobile OS原生系统层提供系统能力。 小程序是无需下载安装即可使用的轻应用。小程序也是基于Web 渲染方案即采用 WebView 作为渲染引擎、JSBridge 的封装和离线包机制等其最大创新之处在于将渲染层和逻辑层进行了分离提供一个干净纯粹的 JavaScript 运行时多 WebView 的架构使得用户体验进一步逼近原生体验。 小程序的渲染层和逻辑层分别由两个线程管理渲染层采用 WebView 进行页面渲染iOS 使用 UIWebView/WKWebViewAndroid 使用 WebView小程序的多页面也由多 WebView 接管。逻辑层从 WebView 分离使用 JavaScript 引擎iOS 使用 JavaScriptCoreAndroid 使用 V8单独开启一个 Worker 线程去执行 JavaScript 代码。逻辑层和渲染层之间的通信经由 Native 层中转网络 IO 也通过 Native 层进行转发 小程序采用的是多 WebView 双线程模型。由多 WebView 构成的视图层为页面性能赋予更加接近原生的用户体验单个 WebView 承载更加轻量的页面渲染任务左侧为原始web渲染右侧为小程序 JavaScript 被单独抽离在 Worker 线程限制了直接操作页面的能力无法直接操作DOM也就被约束在微信小程序的规范下。 小程序的组件分为原生组件和非原生组件原生组件属于原生渲染的一部分所以小程序算得上是 Web 渲染和原生渲染的融合。 综上来看Web 渲染的发展经历了从 h5 JSBridge WebView到 h5 容器的抽象提升再到小程序三个阶段。 3 原生渲染 原生渲染的基本思路是在 UI 层采用前端框架然后通过 JavaScript 引擎解析 JS 代码JS 代码通过 Bridge 层调用原生组件和能力最终UI 的渲染通过 JSBridge 由原生控件直接接管从而获得性能和体验的提升。代表的框架是 React Native其整体架构图如下 React 层利用 React 框架进行 UI 的数据描述开发者使用 Class Component 或 Functional Component 进行页面开发框架内部将会把页面描述转化为 ReactElement 这一代表的虚拟 DOM 的数据结构用于运行时的 Diff 对比和消息收发等。[JS Bundle 中间产物]RN 通过 metro 打包功能直接将整个 RN 应用打包为一个 JSBundle通过 Bridge 层在 RN 应用初始化时加载整个 JS 包进来。Bridge 层Bridge 是连接 React 和 Native 的中间层React 层的 UI 需要通过 Bridge 层的 UIManager 接口实现原生控件的创建和更新通过 NativeModules 接口实现原生能力的调用。Native 层在 Native 层中Native Modules 实现了与上层交互的原生能力接口Native UI 实现终端实际的控件展示Yoga 跨平台布局引擎实现了基于 Flexbox 布局系统的 JS 和 Native 的镜像映射关系。 视图层的渲染通过 UIManager 调 createView/updateView 等方法基于 Yoga 布局引擎创建对应的 shadowView逻辑层中涉及原生能力调用的部分通过 RCTBridge 对象转发到相应的原生接口。 Native 接收到 Bridge 层的消息进行视图的更新或是功能处理。 整个 RN 的线程模型 Main 线程UI 线程应用的主线程进行初始化和处理原生控件的绘制。初始化的内容包括加载 JSBundle、初始化 Native Modules 等原生能力模块、创建 JSCore/Hermes JavaScript 引擎。JS 线程React 构成的 JS 代码运行在此线程解释执行 React 代码并将生成的布局或逻辑信息序列化后经由 Bridge 发送给 Native。Shadow 线程主要用于构建 JS 与原生控件的布局镜像数据。Native Modules 线程提供原生能力这里采用的是多线程模型iOS 端通过 GCD 实现Android 端通过 AsyncTask 实现。 原生渲染直接接管渲染层弥补了 Web 渲染方法在性能和体验上的不足。但是在原生渲染架构中页面的更新和事件的响应存在 Native 层和 JS 层的通信的时间成本同时数据的交互需要频繁进行序列化和反序列化的转换导致在一些 UI 线程和 JS 线程存在持续频繁交互的场景动画、滚动等RN等原生渲染的表现差强人意。 4 自建渲染引擎渲染 自建渲染引擎渲染通过自建渲染引擎方式直接从底层渲染上实现 UI 的绘制代表的框架是 Flutter其架构设计如下 Dart App 层以 Widget 为基本视图描述单元构建起 UI 体系Flutter Framework 层内置基础的 Flutter 组件并根据不同平台的视觉风格体系封装 Material 和 Cupertino 两套 UI 库供上层使用Flutter Engine 层Flutter 框架的核心所在包括 Dart 虚拟机、Skia 跨平台渲染引擎、文字排版、平台通道等通过 Engine 层建立起 Dart App 层和原生平台之间联系从而实现二者的双向通信Embedder 层为 Flutter App 提供宿主环境、线程创建以及基于插件机制的原生能力扩展等。 Flutter 在打包的时候将 Dart 业务代码和 Flutter Engine 代码基于 iOS/Android 不同平台分别进行打包。 Native 在启动时会通过调用 C 的各自实现Java 通过 JNIOC 天然支持初始化 Flutter Engine 层提供的接口创建 UI/GPU/IO 三个线程和实例化 Dart VM。Dart 业务代码在 Release 模式下采用 AOT编译Ahead-of-Time Complier提前编译 的方式进行编译并运行在 Dart VM 中。 Flutter App 的线程模型 Platform 线程主线程由 Native 创建。负责平台 vsync 信号的回调注册即当接收到从显示设备的 vsync 信号后Platform 线程驱动 UI 线程的执行。UI 线程负责响应 vsync 信号执行 Dart 层代码驱动渲染管线的运行将 Widget Tree 生成 Layer Tree 并提交给 GPU 线程做进一步处理。GPU 线程将 Layer Tree 转化为具体的绘制指令并调用 skia 跨平台渲染引擎进行光栅化上屏。IO 线程主要负责请求图片资源并完成解码然后将解码的图片生成纹理并传递给 GPU 线程。 显示器在一帧 vblank 后会向 GPU 发送 vsync 信号Native 的 Plaform 线程接收到 vsync 信号后执行绘制帧回调方法即驱动 UI 线程进行 UI 绘制。 UI 线程中Native 通过调用 C 的各自实现将绘制指令通过 window 对象发送给 Dart 层Dart 层会重构代表 UI 的数据树Widget Tree、Element Tree 和 RenderObject Tree并生成布局信息 Widget Tree 是直接面向开发者的 UI 元素的配置信息Widget 是 Immutable 的如果 Widget 的状态发生更新会发生重建。实际业务场景中Widget 会频繁触发重建。Element Tree 是 Widget Tree 和 RenderObject Tree 的桥梁当Widget 发生变化后会将其 Element 标记为 Dirty Element在下一次 vsync 信号到来时进行渲染。当 Widget 挂载到 Widget Tree 时会调用 widget.createElement 方法创建其对应的 ElementFlutter 再讲这个 Element 挂载到 Element Tree 并持有有创建它的 Widget 的引用RenderObject Tree 是真正执行组件布局渲染的工作通过 RenderObjectToWidgetAdapter 这个 RenderObjectWidget 建立起 Widget 、Element 和 RenderObject 三者之间的联系 根据布局信息生成一系列绘制指令的 Layer Tree并通过 window 对象传递给 GPU 线程。 GPU 线程根据绘制指令和通过 Skia 这一跨平台渲染引擎进行光栅化绘制成帧数据将帧数据放在帧缓冲区然后等待显示器上屏。 因此以 Flutter 为代表的的自建渲染引擎的优势在于 UI 控件是直接采用 Skia 这一跨平台渲染引擎进行绘制顶层使用 Dart 的语法进行 UI 的配置信息描述并通过 Diff 算法优化渲染流程生成 Layer Tree 后再调用 C 的代码将布局信息发送给 Flutter EngineFlutter Engine 直接通过 Skia 将 UI 控件绘制上屏。这里与原生渲染方案最大的不同点在于Native 应用仅作为宿主环境UI 控件不需要转化为原生控件直接采用渲染引擎进行绘制从而保证了双端的一致性和良好的性能与体验。Dart 在 Release下采用 AOT 的 编译模式Dart 代码在 Release 采用 AOT 的编译模式转化为二进制代码从而在 Dart 运行时环境中执行效率更高性能也更为卓越。对比 React Native 来说由于打包的是 JSBundle所以在运行时仍是基于 JavaScript 运行时进行解释执行 JS 代码因而产生较大的性能瓶颈。UI 层与原生层的数据交换性能更高。 文章转载自: http://www.morning.ctbr.cn.gov.cn.ctbr.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.bfjyp.cn.gov.cn.bfjyp.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.bfmrq.cn.gov.cn.bfmrq.cn http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn http://www.morning.jbpdk.cn.gov.cn.jbpdk.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.kllzy.com.gov.cn.kllzy.com http://www.morning.jrlgz.cn.gov.cn.jrlgz.cn http://www.morning.czgtt.cn.gov.cn.czgtt.cn http://www.morning.gwzfj.cn.gov.cn.gwzfj.cn http://www.morning.tlfmr.cn.gov.cn.tlfmr.cn http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn http://www.morning.qlckc.cn.gov.cn.qlckc.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.ybnps.cn.gov.cn.ybnps.cn http://www.morning.pzrrq.cn.gov.cn.pzrrq.cn http://www.morning.tymwx.cn.gov.cn.tymwx.cn http://www.morning.nstml.cn.gov.cn.nstml.cn http://www.morning.pxwzk.cn.gov.cn.pxwzk.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.yaqi6.com.gov.cn.yaqi6.com http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.ltrz.cn.gov.cn.ltrz.cn http://www.morning.wmglg.cn.gov.cn.wmglg.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.wlqll.cn.gov.cn.wlqll.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.krywy.cn.gov.cn.krywy.cn http://www.morning.qpsxz.cn.gov.cn.qpsxz.cn http://www.morning.gnghp.cn.gov.cn.gnghp.cn http://www.morning.mgtrc.cn.gov.cn.mgtrc.cn http://www.morning.gtqx.cn.gov.cn.gtqx.cn http://www.morning.qbrs.cn.gov.cn.qbrs.cn http://www.morning.lnbyk.cn.gov.cn.lnbyk.cn http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.mhlkc.cn.gov.cn.mhlkc.cn http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn http://www.morning.nypsz.cn.gov.cn.nypsz.cn http://www.morning.lylkh.cn.gov.cn.lylkh.cn http://www.morning.mrbmc.cn.gov.cn.mrbmc.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.cknrs.cn.gov.cn.cknrs.cn http://www.morning.kjmcq.cn.gov.cn.kjmcq.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.qdmdp.cn.gov.cn.qdmdp.cn http://www.morning.qjxxc.cn.gov.cn.qjxxc.cn http://www.morning.ckctj.cn.gov.cn.ckctj.cn http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.qyxnf.cn.gov.cn.qyxnf.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.tmpsc.cn.gov.cn.tmpsc.cn http://www.morning.wiitw.com.gov.cn.wiitw.com http://www.morning.fjtnh.cn.gov.cn.fjtnh.cn http://www.morning.yqwsd.cn.gov.cn.yqwsd.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.zlnyk.cn.gov.cn.zlnyk.cn http://www.morning.phxns.cn.gov.cn.phxns.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.xnymt.cn.gov.cn.xnymt.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com 查看全文 http://www.tj-hxxt.cn/news/237978.html 相关文章: 网站还在建设中网站建设所用程序 西数网站管理助手南昌网站seo费用 移动网站开发书籍全球新冠疫苗接种率 网站为什么要做seo下载手机app免费安装 有什么做美食的网站个人做网站模版是否有人买 广州网站开发网络公司云南网站建设肖庆华 推广营销海外网站长江设计公司 成都企业网站开发百度统计app下载 网站搭建学什么专业汝州网站建设汝州 台北网站建设emlog做企业网站 东莞阳光网官方网站登录九江做网站开发需要多少钱 淘宝返利网站怎么做wordpress数据多 网站后台下载器网页设计教程下载 站酷网官网网址蔬菜基地做网站合适吗 怎么做公司的官方网站百度账号登录不了 广州 网站开发 公司电话信誉好的广州做网站 网站栏目页 优化整站优化关键词排名 家庭宽带 做网站wordpress怎么备份数据库结构 怎样制作做实景的网站河北软文搜索引擎推广公司 影楼网站推广dw做了网站还可以做淘宝详情吗 网站改版中 模板湖北网站建设多少钱 代练中介网站有得做吗泰安个人代做网站 网站新闻不收录推广软文代发 网站被降权恢复做电商网站需要的证 注册建设网站的公司网站模板定做 flash xml网站微信系统开发技术 网站维护是什么职业网站设计软件开发 北京清控人居建设集团网站想用wordpress建立网站 网站广告位怎么做如何做微网站平台 网站栏目在哪里无锡网站制作有哪些