[混合开发]HybridApp分析!!!

HybridApp(混合应用)开发框架的优缺点分析 由于混合应用的开发具有灵活性、可移植性和易维护性等优点,Hybrid App(混合应用)的开发变得越来越流行,甚至成为一种烂大街的存在,大到全民超级 App 微信、支付宝,小到随便的一个独立电商 App 都是 Hybrid App 的“忠实粉丝”。同时,它还支持Hot Reload功能,可以实时预览代码的变化,提高开发效率。(2)跨平台支持:NativeScript 可以在多个平台上运行,包括 Android、iOS 和 Web,开发人员可以在一个代码库中编写应用程序,并在不同平台上进行测试和部署。 阅读详情

【引言】近年来随着移动设备类型的变多,操作系统的变多,用户需求的增加,对于每个项目启动前,大家都会考虑到的成本,团队成员,技术成熟度,时间,项目需求等一堆的因素。因此,开发App的方案已经变得越来越多了。曾经有一段HTML5的小浪潮,无数的人参与或者看到过一个讨论:原生开发还是混合开发,又或者是Web开发?到底最佳实践是怎样的,笔者认为只有实践过的人才会知道。尤其是在这个充满各种变数的移动互联网时代。

【摘要】笔者将从Hybrid App的开发现状出发,阐述Hybrid App的优缺点,同时对比Hybrid App与Native App的各自特性,最后探讨一下Hybrid App的新思想方向。

Hybrid App现状分析

Web App

毫无疑问Web App就是成本最低,最快速地解决方案了。尤其是近两年非常流行的响应式设计,Web App市场提供了非常好的实践场地。最近典型的Web App最佳案例是Sun天气应用了,其细节处理让人赞不绝口。

一般来说,拥有下面特点的就是一个Web App了:使用浏览器运行;纯Web前端架构,很多重要手机特性无法访问,例如联系人以及Push notification之类的;Single Page App;销售渠道多限于浏览器。

Hybrid App

所谓的Hybrid App其实会有不同的分支。而且会和Native应用有重合的地方。下面就说三种不同的解决方案。

方案一:使用PhoneGap、AppCan之类的中间件,以WebView作为用户界面层,以Javascript作为基本逻辑,以及和中间件通讯,再由中间件访问底层API的方式,进行应用开发。这种架构一般会非常依赖WebView层的性能。

方案二:使用Adobe Air、RubyMotion、Appcelerator或者是Xamarin这种非官方语言的工具,打包成原生应用的方式开发。为什么笔者会将它们定义为Hybrid App,主要是它们并没有很单纯地使用原生提供的语言进行开发,而是通过对开发者提供友好的开发工具,并折中地把这种开发语言转换成原生语言,最终打包出整个应用,所以也属于混合应用范畴。

方案三:在开发原生应用的基础上,嵌入WebView但是整体的架构使用原生应用提供,一般这样的开发由Native开发人员和Web前端开发人员组成。Native开发人员会写好基本的架构以及API让Web开发人员开发界面以及大部分的渲染。保证到交互设计,以及开发都有一个比较折中的效果出来,优化得好也会有很棒的效果。(当年Facebook Three20就使用该方案)

因此,Hybrid App有以下的特性:

  1. 开发时可能不采用或者大部分不采用原生语言,但是却有所有原生应用的特性;
  2. 架构方案会和原生有出入,基本由工具而定;
  3. 具有跨平台特性;
  4. 一般开发相对原生开发的方式要简单。

Native App

Native App毫无疑问是最可靠的方案。但是学习成本,人才成本,开发效率以及照顾不同平台的特性去考虑,都成为了开发人员心目中的一道坎。至于说这道坎是不可逾越的还是一道让你提高的坎,笔者觉得完全取决于你自己。基于种种因素的考虑,估计很多人就会选择折中的方案到了Hybrid App的开发行列当中,包括笔者自己也是这样过来的。

下面更多的内容都将围绕Hybrid App开发展开讨论。

Hybrid App在开发当中的优点和缺点

在Hybrid App的开发过程中,几种不同的方案笔者都有经历过。当然也经历到了Native App的开发阶段。在如此纠结复杂的过程中给了笔者不少的经验,下面笔者也会就自身的经验和大家分享这些方案当中的优缺点。对于初入行的朋友,笔者是从Web前端入行的,毕竟门槛较低,而且能够快速地培养自己的信心以及对代码的感觉。深入后就开始接触到移动开发这块了。所以会先从Hybrid App的第一种方案说起吧。

方案一(Web架构为重)

优点:

  1. 全Web开发,一定程度上有利于Web前端技术人员快速地构建页面样式;
  2. 有利于在不同的平台上面展示同一个交互层;
  3. 便于调试,开发的时候可以通过浏览器的方式进行调试,工具丰富。

缺点:

  1. 虽然说你可以专注在界面以及交互开发上了,但是这页会成为一个缺点,比如说要仿造一个iOS的默认设置界面,就需要大量的html以及css代码了,而且效果不一定和iPhone上面的界面一样好;
  2. 正因为这是跨平台的开发,所以还是这句话:兼容是前端的痛。了解过在Android机器上面的Web开发就知道这个痛了。比如前些年在Android设备上面写圆角,border-radius:10px,在Android的设备上面会出现毛边。
  3. 便于调试其实是在Web界面层的。但是实际上做Hybrid App开发的时候,你会遇到需求,进入手机的底层请求,做某些处理。比如说如果该应用有Push Notification服务的话,你就需要到底层,获取Push Notification发生时的数据,以及做相应的交互处理。当然类似PhoneGap这类框架,已经有很好的插件机制去帮助你解决类似的问题,当然还有Game Center之类的插件,具体的话可以到Github去关注PhoneGap官方的账户,资源非常丰富;

方案二(编译转换方式)

优点:

  1. 利用自己熟悉的语言,进行应用开发,比如RubyMotion,就是使用Ruby语言去做iOS开发,开发起来的话,代码量是数量级地下降啊。
  2. 部分开发工具提供跨平台的功能,让你的应用能够快速地发布到不同的平台上面。比如Mono社区的Xamarin,就是典型的例子了。使用C#语言,能够把你的应用发布到iOS,Android以及WinPhone市场上面;
  3. 开发出来的程序运行高效。大部分这种架构的应用,其实还是非常依赖底层的东西的,而且包括界面的东西,都是使用原生的API,效率就当然要比类似于PhoneGap这种架构要好了;

缺点:

严重依赖于其工具厂商提供的工具包,调试的时候就要有全套的工具。当然一般来说这些厂商都会以收费的形式发布他们的工具,相应的也有客服提供技术支持。遇到系统升级,第三方sdk升级,开发工具出现bug等,那么就要等待工具厂商解决了。相当于把风险压在对方身上了,自己却要承担责任。

方案三(Native架构为重)

优点:

  1. 这无疑是最稳定的Hybrid App开发方式了,交互层的效率上由Native的东西解决了,而且架构上基本就是在App内写网页,连App Store都是采用了该种方案;
  2. 开发时分工非常明确,底层的由iOS开发人员处理,上层的由Web前端开发人员处理;
  3. 有效的在线参数配置方式,以便于及时在线替换界面;

缺点:

  1. 团队至少需要两个工程师,一个是Web的,一个是iOS的。当然如果开发人员会两种技术也可独立承担;
  2. 还是运行效率,要权衡好多少界面采用Web来渲染,毕竟WebView的效率会相对降低,以前Facebook就是因为Web的渲染效率低下,把整个应用改为原生的解决方案。当然这里面可以通过优化来解决。但是优化也是有限度的,如Ruby创始人Matz所说优化要恰当(包括花的时间,技巧等),而且有时候的优化达到的回报率不一定达到你自己的期望。

Hybrid App和Native App开发对比

因为方案三中的思想基本上就是原生应用的开发思想了。这里要做的对比应该不算大,因此笔者不会做太多的阐述介绍两者的不同。但是如果是偏重Web架构的,或者是以方案二这种透过特殊工具开发的,就和原生开发有对比了。这次笔者暂时会以方案一拿来讨论。讨论中主要会以架构,代码管理上来讨论,当然也会说到部分细节。

架构讨论:

因为这是偏重于Web开发的应用,这里面就需要开发人员有很强烈的大型Web前端架构思想在里面。提到这里可能马上浮现在你脑海中的词语就是:angular.js,require.js,sea.js,backbone.js等。没错,这些工具都能够帮助你快速地梳理好思路,管理好你的Web应用。对开发者最友好的,发挥空间最大的非PhoneGap莫属了。所以笔者就会以PhoneGap应用展开讨论。(因为类似Sencha也有提供方案,但是Sencha本身是一个重量级的框架,而且有自己的思想在里头,加上他本身也提供开发工具,在这里就不适合讨论了。对于开发者来说可以根据自己的需求选择好工具)

从工具上看:

Angular.js

用于双向绑定,网络请求,视图管理等工作。

Require.js

javascript模块化工具,在使用较多的交互对象,PhoneGap插件的时候,你就会发现一个强大的模块化工具会在开发的时候提供极好的帮助。能够帮助你把整体的代码,管理得井井有条。

Jade Template Engine

模板引擎。笔者个人比较推荐使用Jade,而且笔者本人也在博客中多次写到Jade在不同场景下使用的技巧的有关文章。主要是jade的语法太简洁了,而且面向JS开发人员非常友好。如果你还没有开始使用模板引擎,赶紧加入这个队列吧,你已经落后了。

Jquery Mobile

如果你暂时还没有一个设计师,但是又急于构造一个应用出来。jquery mobile就提供了多套不同风格的模板,供你使用,而且还含有不同的交互动画等。而且也是跨平台的。当然实际场景中,笔者觉得你会花很多时间在写css上面,因为设计总是天马行空的。当然你还有很多工具啦,例如sass,以及less.js等。

PhoneGap.js或者Cordova.js

做Phonegap开发必须使用的代码库,用于和PhoneGap框架通讯。现在这个库已经改名了,是Cordova。具体为什么改名,得问Adobe咯。

PhoneGap Plugins

PhoneGap的插件能够帮助你快速地抵达手机的其他API上面,直接使用Javascript来操控这些底层的API。例如调用Push Notification的相应发生的事件。

从代码目录上面看混合应用中的Web层:

 /js
          mainView.js
          settingView.js
          networkObject.js
          renderObject.js

     /lib
          /PhoneGapPlugins
               push-notification-plugin.js
               pickerView.js
          PhoneGap.js
          zepto.js
          jquerymobile.js
          iscroll.js
          angular.js
          jade.js

     /css
          /mainView
               listItemTemplate.css
               questionListTemplate.css
          /settingView
          /personView
          /layout
               navigationBar.css
               tabButton.css
          app.css

     /template
          /mainView
               listItemTemplate.txt
               questionListTemplate.txt
          /settingView
          /personView
          /layout
               navigationBarTemplate.txt
               tabButtonTemplate.txt

     index.html
     app.js
     require.js

从代码的目录上面看,就是经典的静态网页文件的目录,非常简单。下面就用一句话来说说整个应用的运作过程吧:

打开PhoneGap应用 ->进入 index.html ->运行require.js ->加载应用资源 -> app.js 控制整个应用 -> angular.js 进行事件绑定以及视图渲染 ->视图渲染的时候会将数据和加载好的视图模板(template目录下的代码)处理 ->经过jade模板引擎 ->渲染到相应的位置上

就是如此简单。

看完了简单的PhoneGap应用后,笔者们来看看简单iOS应用在开发时候的代码目录吧。思路上还是非常相似的。在这里面,笔者不会深入代码部分去讨论具体的实现以及细节上的东西。

 demoApp
          /Resource
               navigationBar.png
               navigationBar@2x.png 
         /demoApp
               AppDelegate.h
               AppDelegate.m
               /SettingViewController
                    settingViewController.h
                    settingViewController.m
               /MainViewController
                    mainViewController.h
                    mainViewController.m
               /Supporting Files
                    demoApp-Info.plist
                    InfoPlist.strings
                    ...
          /plugin
               /AFNetworking
                    AFHTTPClient.h
                    AFHTTPClient.m
                    AFHTTPRequestOperation.h
                    AFHTTPRequestOperation.m
                    ...
          /Frameworks
               CoreData.framework
               UIKit.framework
          /Products
               demoApp.app

Objective-C 是一种通用、高级、面向对象的编程语言。Objective-C是承自Smalltalk的信息传递模型(message passing)。Objective-C里,与其说对象互相调用方法,不如说对象之间互相传递信息更为精确。Objective-C强调面对对象编程,且Objective-C中强制要求将类的(interface)与实现(implementation)分为两个部分。类的定义文件遵循C语言之惯例以 .h 为后缀,实现文件以 .m 为后缀。所以你会看到大量的类文件在里头,整个工程就是有不同的类构成的。(当然可能这么描述不太准确,但是便于大家理解)

这就和丰富的Web前端有很大区别了,在Web前端开发里有HTML,CSS,JS三剑客,必须要用好这三个东西才可以把整个应用才可构建出来。但是在Native应用中,就很单一了。你只需要把握好Objective-C就可以了。因此对于原生应用来说,开发时只要遵守好规范,即使是一个新手参与开发,也可以快速地上手,看懂代码。因为模式已经定好,大家使用同一套的API。按着流程走就好了。当然学习Objective-C需要过程,但是对于拥有C语言,Java语言经验的开发者来说,是非常简单的事情。

当然,原生开发的缺点也很明显了,就是满足不了你的跨平台需求。

从代码目录上面看,其实也基本上看到笔者为什么使用多种JS库以及框架的原因了。主要的目的就是为了构建一个可维护的,具有规范性的Web应用。因为本身Javascript这门语言非常灵活,100个人可以具有100种风格,加上没有专门对于Javascript开设的课程,在过往都容易存在对这门语言的误解。基于种种的原因,就要约束好一个应用的代码风格,架构。此外,Javascript本身没有类的概念,所以在Javascript的面向对象编程中:Javascript的数据和成员封装很简单。没有类,完全是对象操作。这和Objective-C有很大不同。这个时候必须要有一种心态处理好整个Web应用:就是尽可能地抽象成对象,你的工作就是对象与对象之间存在交流。

另外有一些点是值得开发者注意的。对于原生应用来说,不管是iOS的,还是Android的,都会提供一套原生界面的库。以Objective-C为例子。如果笔者需要调用Alert,笔者只需要编写:UIAlertView * alertView = [[UIAlertViewalloc]init];,就把这个view声明好了。再去执行相应的方法,就可以了。但是对于Web应用来说,就需要编写<div id='alertView'><button>确定</button></div><script>$('#alertView').show();</script>

,一堆的css代码和html代码去实现。当然你会询问笔者,直接写 alert() 不就可以了吗?要是真这么简单的话,建议你在iOS的WebView中编写一下alert,实现:title 是提示,内容是:alert view,确定按钮的文字是:好的。你就知道WebView的限制在哪里了。

因此要完成JS在Web App开发当中的最佳实践,肯定要学习优秀的思想和实现方法了。在这篇文章里面,笔者们暂时先不去做这种深入的讨论。而是先把例子抛给大家,也许会在下一次讨论的时候,再详细深入以下这两个项目。

第一个是斯坦福的iOS开发公开课中的例子,使用objective-c实现,一个简单的卡牌游戏。这是经典的mvc开发了。项目地址如下:https://github.com/lbj96347/Stanford-W2013-CardGame,如果您正在使用Mac,那恭喜你,可以马上编译这个游戏进行测试以及代码浏览。

第二个是使用JavaScript编写的例子,实现同样的需求,做一个简单的卡牌游戏。但是使用的是HTML+CSS+JS开发。同样学习了继承以及mvc的思想。项目地址是:https://github.com/lbj96347/JSMatchismo ,再次恭喜你,不管使用什么电脑,都可以随时浏览代码以及运行该游戏。

Hybrid App的新思想

这两年多以来,因为市场的不同,也出现了不一样的需求,各个技术都有了新的发展。对于Hybrid App来说,其实都有了一些新的解决方案。为了解决问题其实最终思想都会被还原成以下几个点上:

  1. 根据需求,选择工具;
  2. 用适当的工具做适当的事情,有针对性地解决问题;
  3. 世界是平衡的,对于开发者来说,做的有用功越多,用户体验就越好,反之越差;
  4. 跨平台是一个"幌子",什么都做得到不代表什么都做得好

这也是笔者体验最深的几个点。而且你会发现Hybrid技术也基本在跟随这几个点来走。

根据需求,选择工具

如果你使用过Jquery Mobile,你做过过场动画(就是从一个view去到另一个view),过场动画在iOS的navigationController中很常见,而且很简单,效果很好很流畅。在Jquery Mobile中使用ajax,css去实现了,核心代码可能就几十行。可能跟iOS里面的差不多(如果包含动画),但是实际出来的效果却差强人意。会出现类似的问题:页面抖动,感觉不连贯,在部分的设备下运行缓慢。如果你的应用要求的体验并不是很高,例如一些新闻展示类应用,更强调排版。这里小小的体验差距,就可以忽略了。(因为英国BBC就是这么干的),但是如果你的应用非常强调体验细节,这里的解决方案可能就不适合了。或许你要做优化,但是优化的时间可能足以够你去学习更多的东西了。这样的话,你是继续选择用一个不成熟的工具,还是选择去学习一种新的语言呢?所以还是根据需求而定吧。

另外一个例子。曾经有人跟笔者提及到,在使用HTML和CSS编写应用界面时确实很爽,但是效率不咋的。那为什么不尝试把应用内容直接搬到Canvas里面呢?构造一套足够强大的工具,一套足够彪悍的UI组件,把整个应用运行于Canvas中。这种想法是很好的,但是其实里面的短板页就出现了,Canvas的性能虽高,但是里面的元素组件多了你可以保证效果高?所有的东西都会依赖于JavaScript,这对于Javascript来说要构造足够强悍的面向对象的组件,也非简单之事,抛弃了CSS和HTML,意味着内部的设计组件能够高度定制,松耦合做得非常好。完全是实现了一套新的xcode和ui库啊。这就不是在解决一两个问题了。既然有这么一个工具,笔者为什么不选择更好的,例如Xamarin。

用适当的工具做适当的事情

做游戏的朋友估计就深有体会了。为了解决Canvas性能的问题,越来越多的人和应用厂商(尤其是浏览器厂商),提供一种解决方案就是希望将Canvas API和系统底层的API打通。意味着你只需要编写Canvas代码,实际做渲染的时候使用的是系统底层的东西,整体上提高了性能。例如Ejectahttp://impactjs.com/ejecta 这个东西。

对于开发人员来说用Javascript编写游戏逻辑以及做各种控制都非常舒服,而且因为用的API相同,放到PC上(放开性能问题),同样可以运行。这就真的做到了跨平台,但是又不缺乏效率。让笔者感触最深的就是@大城小胖在做混合应用(做游戏)时的做法,小胖的游戏架构。JS负责逻辑,引擎。JS Binding绑定原生OpenGL,让原生的来做复杂的渲染处理。HTML CSS可以处理UI(比如一些Button)。这就是典型的:让工具去做其擅长的事情。

跨平台是一个"幌子"

为什么这么说?笔者不是一直希望大家能够跨平台么?是的。但是要真的认清这个坎。从IE兼容,到目前多个浏览器的乱战,到iOS以及Android设备Web上的兼容,这不就是一个历史的例子嘛。跨平台不是不好,只是在一个时代里,你能够达到怎样的效果,真的是很难估量的。就好比你出国旅游,如果两国关系非常好,而且很多惯例法律一致,对你来说不会造成太多负担。但是如果语言不一样,生活习惯什么的都不同,你就很难适应。同样是人,你很难在不同的环境下生存。真正的跨平台,就意味着大家求同。这绝对不是一两天的事情,也非简单的事情。

那为什么还要跨平台。业务需求嘛。在这里必须就要遵守根据需求选择工具,用适当的工具做适当的事情,根据实际情况来作开发。如果可以,笔者觉得很有必要都了解一遍,这样的话各种开发的思想就会影响到你,你就能够分辨到什么是好什么是坏,做更好的选择。例如笔者刚刚说到的过场动画的例子。其实完全可以使用笔者说的混合应用中,方案三,去解决这个问题。你无非就是希望用navigationController做一个漂亮的过场动画嘛,在iOS中几句代码就实现了。

再说一个例子吧,如果你正在做一个todo-list的应用,其实无非就是简单存储数据以及做一些相关界面渲染。在使用原生的控件的话,有大堆的代码要写,而且还要处理好内存问题。但是其实如果使用Web的方式实现,比如backbone.js。总体代码可能100行左右。就把整个应用实现了,包括本地存储。你要做的事情就是把整个界面搭建得漂亮些。可能就1个小时的工作。但是如果用原生开发,很难保证到一个小时内完成,因为调试编译都需要时间吧?况且还有界面呢。

所以要认清跨平台这个"幌子",并非所有的问题都用同一个方法处理。笔者们要融汇贯通嘛!

总结和笔者的感受

对于做Web App的坑,其实挺多的。这里无法一一表达。但是相信实践过就会知道如何更好地绕过这些坑(例如笔者说的过场动画的例子)。那么对于开发者来说要有坚强的毅力,努力去实践,满足自己永远不能满足的好奇心,因为最终的经验会给你带来不一样的感受,stay hungry。同时笔者们必须保持一颗学习的心,不断地吸收有营养的思想,学习新的知识,不要太容易满足,stay foolish。每一种语言都会有其中的思想,每一种工具都有自己解决问题的方法论。多尝试就能够给自己带来更优秀的架构,更优秀的应用,提供给用户更好的体验。当然,也会有更好的回报。

关于作者

李秉骏(@CashLee李秉骏),HTML5技术活跃分子,HTML5梦工场高级成员,投入Web开发多年。高中开始编写独立运营的电子商务网站。近年多进行移动应用前后端的开发,并尝试将混合应用开发技术运用于实践当中。

uniapp:嵌入本地html页面 需要用到的组件:web-view web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。 注意事项: 小程序仅支持加载网络网页,不支持本地html 补充说明:app-vue下web-view组件不支持自定义样式,而v-show的本质是改变组件的样式。即组件支持v-if而不是支持v-show。 小程序端 web-view 组件一定有原生导航栏,下面一定是全屏的 web-view 组件,navigationStyle: custom 对. 阅读详情

相关推荐

移动混合开发面试题及参考答案

混合开发(Hybrid App)是一种结合了原生开发和网页开发技术的移动应用开发方式。它在一个应用中集成了原生代码和网页代码,旨在利用两者的优势。从技术架构角度来看,混合应用的外壳通常是用原生代码编写的,例如在 iOS 上使用 Objective - C 或 Swift,在 Android 上使用 Java 或 Kotlin。这个原生外壳作为容器,负责承载和管理内部的网页内容。内部的网页部分一般基于 HTML、CSS 和 JavaScript 等前端技术构建。

大模型大数据攻城狮的专栏 1444

理解跨平台技术

开发一个APP运行在Android手机需要一套代码,运行在ios操作系统的手机又需要一套代码,为了使同一套代码能运行在不同的操作系统上解决多端独立开发的问题,跨平台技术便应运而生。Android 应用采用 Java 或 Kotlin 编写,iOS 应用采用 Objective-C 或 Swift 编写,Web 端采用 HTML /CSS/JavaScript 编写。当需要开发支持多端的应用,每一端都需要独立研发、测试,一直到上线,以及后续的维护工作,工作量成倍增涨,势必延长研发周期。

Ipkiss Studio 1224

保姆级避坑指南:用Keil和J-Flash搞定凌思微LE5010蓝牙芯片的首次程序下载

本文提供了一份详细的保姆级避坑指南,帮助开发者使用Keil和J-Flash工具完成凌思微LE5010蓝牙芯片的首次程序下载。文章重点解决了算法文件混淆、协议栈漏烧和仿真器连接异常等常见问题,并详细介绍了开发环境配置、协议栈烧录和下载接口的物理层奥秘,助力开发者高效完成蓝牙开发任务。

weixin_28739079的博客 468

Hybrid App开发实战

 Hybrid App开发实战 作者 李秉骏 发布于 2013年9月4日 | 5 讨论 新浪微博腾讯微博豆瓣网TwitterFacebooklinkedin邮件分享更多34 稍后阅读 我的阅读清单 【引言】近年来随着移动设备类型的变多,操作系统的变多,用户需求的增加,对于每个项目启动前,大家都会考虑到的成本,团队成员,技术成熟度,时间,项目需求等

软件行业技术文化交流。 779

广工计组f4b 8位12指令微程序CPU设计实验报告(内含可通过代码以及波形图)

实验目的:模型机是计算机的缩细模型,通过它可以理解计算机整机的结构和功能,理解CPU,存储器,中断控制器,接口的结构及实现逻辑和各部件之前的接口关系。本实验是设计一个8位模型计算机。:一条机器指令可以分解成一个微操作序列,这些微操作是计算机最基本的,不可再细分的操作。:在微程序控制的计算机中。将控制部件向执行部件发出的各种控制命令成为微命令,它是构成控制序列的最小单位。微命令和微操作是一一对应的。微命令是微操作的控制信号,微操作微命令的执行过程。2.:微指令是若干微命令的集合。

weixin_63692154的博客 4705

在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合

本文介绍了在Mac上搭建本地AI工作流的方法,结合Dify平台和DeepSeek模型。Dify是一个开源的大语言模型应用开发平台,支持可视化AI应用开发。部署步骤包括:1)安装Homebrew和Docker;2)克隆Dify代码库;3)配置环境变量并启动服务。同时,使用Ollama工具本地部署DeepSeek模型,将其集成到Dify中创建聊天助手。通过配置模型接口和新建应用,用户可以在本地环境中实现AI对话功能。这种方案既保证了数据隐私,又提供了灵活的AI应用开发能力。

Linda的自动化测试之旅 1536

移动开发技术历史演化简介h5,跨平台,原生的各种技术实现方案的简单介绍

移动端的开发技术是指针对移动设备如智能手机和平板电脑等便携终端进行应用程序和服务创建的过程。本文将主要介绍一下移动端的开发技术的历史进化历程。讲述h5,跨平台,原生的各种技术实现方案和他们各自的优势与不足。移动开发,不仅是编程技术的集合,更是一种全新的思考方式和解决问题的方法。它要求开发者站在用户的角度,考虑到各种使用场景,兼顾美观与实用性,实现技术与艺术的完美结合。从原生应用到跨平台解决方案,从简单的工具到复杂的游戏,移动开发正以前所未有的速度不断创新,满足着亿万用户的个性化需求。

超级博客 2564

基于云平台的ATS系统微服务架构方案研究

在当前智慧地铁的升级转型过程中,城市轨道交通ATS系统面临着稳定性差、运维方 式繁琐和故障应急处理效率低等问题。为此,提出一种基于云平台的ATS系统微服务架构方案; 研究了ATS系统在云平台上的微服务总体架构、ATS应用的微服务划分和设计、容器部署方式 及通信交互模式,可实现系统松耦合和易扩展,达到节约计算资源、提高系统稳定性和运营效 率的目的

mi_lan1的博客 966

uniapp 在hybird下的html文件中加载保存在本地_doc文件夹下的json文件

之前的文章(跳转链接)中,路径在离线打包后不可读取,所以想了两个办法来解决。 方法一(推荐): 加载时耗时较少,唯一的问题就是url参数长度有限制,但也不必担忧,因为文件的路径不会过长。 1、在getData.js文件中封装获取文件绝对路径的方法: const filePath = function() { return plus.io.convertLocalFileSystemURL("_doc/MY_DATA.json"); } export default { getdatas,

D_lunar的博客 3108

四旋翼无人机控制算法实战:从PID到MPC的路径跟踪

本文深入探讨了四旋翼无人机控制算法的演进路径,从基础的PID控制到高级的MPC算法,详细解析了各类算法的原理、实现技巧及适用场景。通过实战案例对比分析,为开发者提供从算法选型到参数调优的全方位指导,助力提升无人机飞行控制的精度与稳定性。

weixin_29090917的博客 242

基于simulink的智能驾驶领域--智能车道保持辅助系统仿真

LKAS通过摄像头等传感器检测车辆相对于车道线的位置,并自动调整转向,以帮助驾驶员保持在车道内行驶。将摄像头传感器模块的输出连接到车道线检测模块的输入端口,再将车道线检测模块的输出连接到转向控制器模块的输入端口,最后将转向控制器模块的输出连接到车辆动力学模型的转向输入端口,形成闭环控制系统。上升时间是指系统从初始转向角上升到目标转向角所需的时间,调节时间是指系统进入并保持在目标转向角一定范围内的所需时间。该控制器将根据摄像头传感器的数据调整车辆的转向角,以保持车辆在车道内行驶。

xiaoheshang_123的博客 163

Hybrid混合开发 和 JSBridge 的使用

JSBridge 简单来讲,主要是 给 JavaScript 提供调用 Native 功能的接口,让混合开发中的『前端部分』可以方便地使用平台的地图定位、相册、摄像头等 Native 功能。 实际上,JSBridge 就像其名称中的『Bridge』的意义一样,是 Native 和非 Native 之间的桥梁,它的核心是 构建 Native 和非 Native 间消息通信的通道,而且是“双向通信”的通道。

csdn_aiyang的博客 1402

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1016

混合开发Hybrid App有哪些优势和不足?

从当前移动开发的实际情况来看,移动端的开发方式三分天下:纯原生(Native App)、混合开发(Hybird App)、网页应用(Web App)。纯原生(Native App):是在 Android、iOS 等移动平台上利用提供的开发语言、开发类库、开发工具进行 App 软件开发。比如 Android 是利用 Java、Eclipse、Android studio;iOS 是利用 Objective-C 和 Xcode 进行开发。

POHOU23的博客 682

leetcode134 加油站

题目如下 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说明: 如果题目有解,该答案即为唯一答案。 输入数组均为非空数组,且长度相同。 输...

ayang818 's blog 234

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

移动端开发——混合开发Hybrid的介绍

一、移动应用开发的方式 1、目前主要有三种(如上图): Native App : 本地应用程序(原生App) Web App:网页应用程序(移动web) Hybrid App:混合应用程序(混合App) native app是原生安卓或ios程序员写的手机app。 hybrid app是混合app。 可以是安卓或iosf程序员写一部分,然后前端写html代码,把html代码给安卓或ios嵌套进去; 也可以是直接的html网站,将其打包,嵌套一个app壳(在壳里面,其实就是只做了一个内嵌浏览器)。

World_Mei的博客 7623

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Hybrid app混合开发的一些经验和总结

总而言之,混合移动应用开发模式是当前移动应用的主流开发模式,其门槛低、具跨平台优势,实用且可伴随科学技术的发展而不断得到改进,极适用于移动应用的开发。相信小程序替代混合开发中 H5 页面承载的业务也会越来越受开发者的关注和认可,让我们拭目以待!

m0_72622669的博客 4728

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

系统盘点混合开发Hybrid App的优劣

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。

军火库 304

Hybrid APP混合开发的一些经验和总结

写在前面: 由于业务需要,接触到一个Hybrid APP混合开发的项目。当时是第一次接触混合开发,有一些经验和总结,欢迎各位一起交流学习~ 1、混合开发概述 Hybrid App主要以JS+Native两者相互调用为主,从开发层面实现“一次开发,多处运行”的机制,成为真正适合跨平台的开发。Hybrid App兼具了Native App良好用户体验的优势,也兼具了Web App使用HTML5跨平台开...

weixin_43553234的博客 538

APP开发模式分析

目录 理解APP相关概念 关于混合开发(Hybrid App) 几种APP开发方式对比 混合开发框架/平台选择 理解APP相关概念 APP应用分为webAPP、混合APP、源生APP。而移动端能目前支持的应用,除了APP还有小程序。先看看webAPP、混合APP、源生APP、小程序的区别。 1、webAPP 只用web语言开发的,基于移动浏览器的应用。 webAPP优势: 跨平台兼容性很好,开发速度快...

戰士博客 1662

移动端应用APP的分类(WebApp、HybridApp、 NativeApp),挑战华为社招

列举常用的ES6特性:箭头函数需要注意哪些地方?拓展:var方式定义的变量有什么样的bug?Set数据结构拓展:数组去重的方法箭头函数this的指向。手写ES6 class继承。

2301_76348206的博客 916

混合开发 - 原生 js

一、原生语言: 苹果手机:ios系统,由swift和c++/object-c语言编写,后缀名为 ipa(ios开发的安装包的后缀名) swift语言是一种开源的语言 安卓手机:android系统,由java(android)语言编写,后缀名为apk 开源的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FexkZS6h-1581643539945)(https://...

weixin_45554114的博客 431

HybridApp

iOS Hybrid 框架 - PhoneGapiOS Hybrid 框架 Hybrid App 开发(开篇)本系列会介绍本人在 Hybrid App 开发当中的经验,从简单的基本常识到高级的开发技巧,全部大概包含 10 篇左右的文章,由于本人时间和精力有限,所以不定期更新。 【腾讯 bugly 干货分享】解耦 —Hybrid H5 跨平台性思考跨平台,是 H5 最重要的能力之一。而 Hybr

760

iOS 混合开发 —— 方案分析

混合开发方案分析比较 Native、Hybird、React Native、Weex 方案分析 http://www.jianshu.com/p/20a3d10a4d57 Hybird Cordova/PhoneGap:侧重于JS与原生的交互,开发简单,但性能差,如触摸时反应不灵敏。 AppCan:性能还行,使用简单,但要提交代码给AppCan的服务器才能打包,相信有追求的企业是...

weixin_30409849的博客 156

混合开发模式下主流移动开发平台分析

关键字:AppCan 移动开发平台 移动应用Hybrid App在过去的两年中已经成为移动界的核心话题,但是作为一名Web开发者来说要如何站在移动互联网的浪潮之巅呢?是选择学习原生开发,研究Java、Object-C、C#等语言,还是选择继续使用网页开发,容忍HTML5功能的局限性?就在开发者左右为难的情况下Hybrid App作为一个折中的解决方案诞生了。那么究竟什么才是Hybrid App...

huidaoli 1597
上一篇: WebAPP(H5)与原生APP的交互设计区别
下一篇: Android中Java与JavaScript交互的几种方式
Manaasdfasdf
博客等级 码龄11年 131粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值