当前位置: 首页 > news >正文

个人域名怎么做网站做阿里巴巴怎么进公司网站

个人域名怎么做网站,做阿里巴巴怎么进公司网站,如何做网站的薪酬调查,厦门市建设工程造价网站首页*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更新 *************************************优雅的分割线 ********************************** SimpleExecutor 前言 最近对App开发比较感兴趣因原生学习起来成本可能较大就把目光转向了大前端的跨端开发技术。说到跨端开发那么选择空间就是Flutter、RN、uniapp这几个了。 flutter最近比较热闹毕竟是谷歌出品。但我们不是炒作热点的媒体也不是忽悠你交学费的培训机构我们作为实际的跨平台开发者冷静的分析下这个东东。 flutter是Google为Fuchsia操作系统设计的应用开发方式。 Fuchsia OS要兼容廉价物联网设备要求对硬件的消耗降低并且为了避免与oracle的java打官司Fuchsia 使用了dart语言flutter界面库的方式。 从设计上来看这套方案的性能确实够高。dart虽然属于大前端范畴但dart是和java一样的强类型语言这让dart虚拟机可以做很多优化性能方面超出了js。 dart曾经与typescript竞争谁才是更好的js但不幸输给了typescriptchrome也放弃了内置dart虚拟机的计划。 不过dart团队没有解散几年后他们借助flutter再次出现在公众面前。 性能分析和写法的对比 flutter作为界面库注意它只是界面库dart语言是另一个项目它唯一要干的事情就是渲染界面。不像HTML5flutter界面库连视频、定位等都没有就是一个纯排版引擎绘制文字、按钮、图片等常用界面控件。 这个排版引擎的特点是简单、高性能。 在3大主流渲染引擎里webview、react native/weex、flutter复杂度依次降低渲染性能依次上升。uni-app是双渲染引擎webview和weex都内置了随便开发者使用切换 所以我们要清楚提升性能是有代价的你究竟想要灵活丰富的css3还是想要固定flex模式排版抑或是最简单但高性能的flutter排版开发便利性和运行性能不可兼得。 同时我们要明白性能的差别并不是因为Google的chrome团队、Android团队的技术比同公司的flutter团队差。而是flutter提供的布局写法是被限制过的解析快所以渲染快。 但通过这种方式提升性能的代价就是布局复杂的界面时flutter的代码嵌套的让人崩溃。 我们先举个例子同样的界面用HTML和flutter如何实现 smaple text .greybox { display: flex; align-items: center; justify-content: center; background-color: #e0e0e0; /* grey 300 / width: 320px; height: 240px; font: 18px } .redbox { background-color: #ef5350; / red 400 */ padding: 16px; color: #ffffff } var container new Container( // grey box child: new Center( child: new Container( // red box child: new Text( “smaple text”, style: new TextStyle( color: Colors.white, fontSize: 18.0, ), ), decoration: new BoxDecoration( color: Colors.red[400], ), padding: new EdgeInsets.all(16.0), ), ), width: 320.0, height: 240.0, color: Colors.grey[300], ); 可以看出从代码的写法来说flutter没有tag和样式的说法更没有选择器从头到尾只有dart语言它的界面控件是用dart代码new出来的每个控件的样式是在new的时候设置的json参数。 如果我们要嵌套布局就要不停的在dart里写child同时在dart里给child们设样式参数。上面的代码只是嵌套了1层实际开发中dom要嵌套好多层想象那样的代码。。。所以大家都诟病dart是“嵌套地狱”。 或者你可以这么理解这是一个只有js没有html和css的浏览器。你需要用js createElement来创建元素用js的style方法给每个element设style反正就是不能写html和css代码。前端都已经发展到各种mvc等视图逻辑分离的架构了也有了vue组件这种组件化模式方便用各种轮子快速完成界面。你是否能适应dart这种低效的界面开发模式从开发模式来讲这确实是一种倒退。 浏览器的html提供了tag和样式分离的写法还有各种各样的选择器但其实这也是有代价的。它导致webview初始化时要同时先启动webkit排版引擎来解析这些编写随性的html、css同时还要启动一个js引擎比如v8或jscore来解析里面的js。 而dart就很简单只启动一个dart引擎解析严格的dart语法它不会去操心有些标签未闭合要如何容错不会判断宽度320后面是px还是rem或者是动态计算百分比。 对比这2个引擎初始化时要干的事差别简直太大了。 所以从解析效率上flutter肯定比webview要高。但从编码灵活性上flutter写的代码嗯难看而低效 flutter使用的也是flex布局思想这是一个强嵌套布局模型比web常规排版引擎的嵌套更多。当界面复杂时flutter的代码要嵌套几十层每层的元素的json样式都和元素一起混写在dart代码里让人崩溃。 有人提出是否可以通过一种预编译的dsl来简化写法让flutter的开发不这么痛苦。 但这个难度太大了从严格转换为松散是简单的从松散转换为严格几乎是不可能的。 什么意思呢比如flutter代码转换web代码是很简单的flutter已经自带了这个功能。但是想反过来那可难了。 类似的还有把typescript转为js是容易的反之不是绝对不可行但会复杂到你宁愿去重写一套typescript代码。 flutter的性能高除了简单严格还有一个特点就是逻辑层与视图层统一运行在同一套dart虚拟机下。 我们知道rn和weex也是原生渲染的它们的性能高于webview。但同为原生渲染的怎么会慢于flutter呢其实不是原生渲染慢而是js和原生通信慢。 rn和weex都采用了独立的js引擎iOS是jscoreAndroid是v8最新版rn开始在Android上搞自己的js引擎从js与dart的比较上性能稍逊一筹。但这不是主要问题主要问题是rn、weex的js引擎和原生渲染层是两个运行环境。 当js引擎联网获取到数据后通知原生视图层更新界面时有一个跨环境的通信折损。同样当用户在屏幕上操作原生视图层时要给js引擎发送通知也会产生这个通信折损。 不过这种性能差别在大多数场景中用户是感受不到的。比较影响的场景是跟手式的js响应操作绘制帧动画。 这方面weex有个值得称赞的技术是BindingX它可以预定义规则让用户界面在原生层交互时通过预定义规则直接响应而无需传递给js层。在需要短时间内来回通信的场景时可以使用BindingX这类解决方案。它的性能和灵活性比rn更强了一些。 说回来flutter它只有一个dart引擎没有来回通信产生的性能问题。不过任何事情都是有利有弊的flutter在普通的界面绘制上效率虽然高但一旦涉及原生的界面反而会遇到更多问题。 前面已经说过flutter只是一个基础排版引擎缺少很多能力当我们需要在flutter界面上内嵌一个原生的视频播放扩展控件时flutter没有视频播放能力或者原生的高德地图sdk那么在拖动视频进度时、拖动地图时flutter一样会产生原生和dart之间的通信造成性能损耗。 事实上由于flutter是在一个类canvas环境绘制的想把一个原生控件嵌入flutter的布局里某些元素之间去排版还不是一件容易做到的事情坑很多。 每个人都想要一个像css3那样灵活写法的布局引擎他们给react native和weex提需求给flutter提需求。殊不知让这些产品团队实现了css3时他们的性能优势已经不再了他们相当于又实现了一遍webview。这种无意义的需求他们是不会受理了。 性能好有个度客观地讲rn/weex调用原生渲染的性能和flutter的渲染性能在用户体验上并没有明显区别甚至在很多场景下和webview渲染的小程序也没有明显区别。 也简单说说webview渲染小程序为什么性能高核心是预载。点击一个新页面时webview是提前创建好的不会走复杂的webkit、v8的初始化流程连开发者的js代码也是预载好的。所以点击新页面时它的渲染速度和原生应用没什么差别。当然也有个坏处就是启动慢。微信里启动小程序速度看着还行其实是微信在启动小程序之前就已经提前初始化了小程序运行环境。 即便是排版引擎ui库好用吗 不管是rn还是flutter有一个设计很不中国化。它们在iOS和Android平台上使用2套ui库。 比如flutter在iOS上写一个button要用CupertinoButton是iOS风格的控件在Android上则要用RaisedButton是Material风格的控件。 rn也是如此它的官方说法是learn oncewrite anywhere。它都不敢说write oncerun anywhere。因为它确实要求开发者写2套代码。 中国的开发者可没有这种习惯中国的每个开发者为了避免用户换手机后不会用自己的app都会使用中性的设计。 就连微信Android版底部的tab也是仿iOS而不是Material风格Material风格是把底tab放在顶部的并且左右滑动微信曾经有这样一个临时版本因为被用户吐槽很快就下掉了。 这种中外差异怎么造成的 国外Android手机其手机主界面就是强烈的Material风格。用户在Android主界面习惯的风格和使用方式如果启动一个App后不是这样会导致用户不会用了。 Google也一再给Android开发者强调App必须使用Material风格。这其实也是一个防止用户切换脱离Android的策略设计。 所以国外开发者的AppAndroid上都会遵循Material风格当然这种Material风格的App是上不了Apple的Appstore的。 这就导致他们默认就是要写2套ui的所以rn和flutter都是iOS、Android各自1套ui控件。 但在中国我们的国产Android Rom根本不是Material风格很多rom以仿iOS体验为卖点。 所以中国的App全都是贴近iOS的中性风格中国的用户换了手机不管是手机os本身还是App的使用都不会造成切换障碍。 rn和flutter这种“跨平台”排版引擎其跨平台性对于中国开发者而言又打了折扣。 其实类似小程序那样的ui风格是能够良好的跨iOS和Android的体验的不管用什么手机打开小程序都不会觉得有问题。 uni-app默认也是这种通用ui风格。uni-app的开发者只需要写一套界面ui就可以适应不同手机的用户真正的 write oncerun anywhere。 动态性 webview、rn/weex都有一个特点可以远程动态载入js代码可以更新本地的js代码。前端开发者认为动态性是天经地义的但其实flutter并不支持。 flutter是有编译优化概念的如果它提供动态性支持会影响它的性能。 业内有些开发者改造了flutter用一个独立的v8/jscore来加载动态js代码去操作flutter布局引擎的渲染。好像还有些人在追捧这样的方案简直是闲得蛋疼。 flutter本来没有跨环境通信的问题结果又弄了一个js引擎进来搞出了通信问题造成性能下降还把包体积增加了很大还不如直接用rn/weex。 除了flutterrn/weex/uni-app都可以动态热更新。 跨平台排版引擎和跨平台应用开发引擎的区别 有些人说他们的App用rn/weex、flutter。但是具体用它们做了什么呢 是整个App用了它们还是某个页面用了它们 一个页面跨平台和一个应用跨平台是完全不同的2个概念。 webview、rn/weex、flutter全部是渲染引擎webview因为HTML5的发展还算是多了一些能力比如位置服务、多媒体等。而rn/weex、flutter真的只是一个纯粹的排版引擎没有任何原生能力。 如果一个原生应用里某个不涉及原生能力的界面想跨平台那么这几个引擎都可以并且flutter的性能最高。所以能看到一些公司尝试把App中的个别原生交互较少页面使用flutter实现。 但如果一个完整的应用想用跨平台工具开发那就不是排版引擎的范畴了它需要应用开发引擎。 什么是跨平台应用开发引擎不但排版部分要跨平台开发API也要跨平台。 应用开发离不开os或三方sdk的能力调用如果是单纯的排版引擎一旦涉及os能力和sdk调用就必须iOS、Android的工程师配合编写不同的原生代码整合在一起。这就不跨平台了。 Airbnb曾是React Native 框架的倡导者和开发者代表。但他们于2019年正式发公告弃用了react native。 原因是什么 很简单react native并不能提升Airbnb的开发效率反而降低了他们的效率。 “本来我们可以只维护Android和iOS两套代码但现在我们要维护三套指多了一套react native的js代码这让我们很疲惫” – aribnb 开发者选用跨平台开发引擎本来是为了提高效率、降低成本。Airbnb正是在实践了几年后发现rn根本无法实现他选用跨平台引擎的初衷时无奈放弃了rn用原生开发重写。 要想真的提升开发效率降低开发成本那么跨平台开发引擎需要提供一个完整的应用开发平台包含所有常用的应用开发能力的跨平台。在不常用的部分提供插件市场以及免原生介入的插件使用方式。 在react native、flutter的社区也有不少三方提供的原生插件但是连Airbnb这样的国外开发者对此都不满意。更何况对于很多中国开发者常用的场景其对应的插件的质量、跨端性都难以商用。 更麻烦的是如果你不会原生开发就没法把这些插件与你的前端代码集成起来。 uni-app它的设计目标不是跨平台排版引擎而是跨平台应用开发引擎。 所以uni-app的排版部分可以选择小程序强化webview引擎和weex引擎可根据自己的需求切换。而能力层面uni-app提供了htmlplus API、Native.js、插件市场解决了原生能力js化的问题。 uni-app让开发者真的不用懂原生开发就能做出完整的跨平台应用。遇到极个别的需求开发者也可以去插件市场找人订做一个原生插件自己仍然使用js来集成仍然可以云端直接打包。 技术学习成本和难度 rn要求开发者学习react要求精通flex布局要求原生开发协作。 flutter要求开发者学习dart了解dart和flutter的API、要求精通flex布局要求原生开发协作。 weex已经内嵌到uni-app中就不单独提了。 uni-app要求开发者学习vue了解小程序。 很明显uni-app的学习成本太低了它没有附加专有技术全部使用公共技术。 学习成本和难度直接意味着开发成本、招聘成本、上线速度、上线风险。 另外dart究竟值不值得学是一个大问题。 Google的天才工程师也发明了go语言它确实有很多理论优势但实际上市场的主流仍然是c和c。 生态 任何开发引擎都离不开生态。 对于国外的开发者rn、flutter的生态肯定比uni-app好比如facebook登陆分享、Google地图等。 但对于国内的开发者那是反过来的中国开发者需要的全端推送UniPush集成了iOS、华为、小米、OPPO等众多原厂推送、各种国内登陆、支付、分享SDK、各种国内地图、各种ui库、以及Echart图表等都是在uni-app体系里这方面生态可比rn、flutter丰富多了。 其他端的跨端性 flutter和rn都是支持web技术的。但都是仅限于普通界面排版涉及定位、摄像头、相册什么的是要单独写代码的。 另外flutter的H5版嗯作为中国开发者你不会想要一个如此浓郁的Material风格的H5版的。。。 更何况这个Material ui库大的很编译出来的H5版要十几M的体积。 uni-app的H5端是包含完善的能力引擎的丰富能力都可以直接跨端使用风格也是跨端风格。uni-app的H5引擎体积只有1百Kgzip后只剩下30k不含vue、vue rooter比其他工具的引擎体积要小的多。 另外中国离不开小程序rn、flutter官方都不会支持小程序由于架构差异太大国内三方也做不到把rn代码良好的编译为小程序代码。uni-app则可以一套代码同时编译为iOS、Android、H5、微信小程序、支付宝小程序、百度小程序、头条小程序、QQ小程序。 结论 每种技术的诞生有其背后公司的目的。 但凡没有明确公司战略的技术除非是特别简单的技术否则很难商用因为为了商用要投入公司非常多资源。 flutter诞生的目的是为了Fuchsia OS是为了在下一个互联网大潮即万物互联的物联网年代提供一个类似Android在移动互联网位置的垄断性操作系统。 因为Google已经很明确不会在下一个时代使用Androidjava的路线了。 至于在Android上去java化那是Kotlin的使命与flutter无关。 跨iOS和Android平台开发这不是Google的战略目标。 但万物互联何时到来Fuchsia OS何时流行这在现实中是一个问号在Google内部也只是战略储备项目。 一个语言的流行不是一件简单的事情不是有优点就会流行它需要天时地利人和。 6年前我们就知道dart比js更好dart不应该消亡但想成为主流技术太难太难了。 同样我们也知道go比c更好但go还是起不来。 想靠flutter驱动dart流行是不现实的甚至是反过来的。跨iOS、Android开发在国外不是主流市场这点价值造就不出一个这么难建的生态。 所以dart能否流行是要打一个大大的问号的它可能会像go语言一样叫好不叫座。 写了这么多最后总结下flutter与uni-app的比较 flutter的相对优势性能好一丢丢。比rn有优势但比拥有bindingx的weex/uni-app在实际开发中没有很明显的差距。 flutter的相对劣势需要原生协作维护3套代码无法有效降低开发成本提升开发效率嵌套地狱代码难看难维护不支持热更新目前质量和成熟度很低github上的issue有5k很容易掉坑里原生可视控件融合不好比如webview、video、mapui库不适合国情学习成本高dart未来扑朔迷离再总结下rn和uni-app的比较 rn的相对优势rn的坑虽然比weex的少但uni-app已经填了weex的很多坑。这方面差别不大。rn的生态虽然比weex丰富。但uni-app是反过来的uni-app的国内应用生态丰富度超过了rn。rn的app冷启动比uni-app快。这个问题uni-app已经内部改进完毕下个版本发布就能解决。rn是纯单页的嵌入原生App比较灵活。而uni-app是应用整体的概念如果要内嵌入其他原生应用的话要求原生应用内嵌uni-app应用整体进来 rn的相对劣势需要原生协作维护3套代码无法有效降低开发成本提升开发效率不支持小程序发布到h5也无法直接发ui库不适合国情learn oncewrite anywhere学习成本高用人成本高不利于开发商降低开发成本rn是纯单页应用如果一个应用的页面很多用rn写会很崩溃变量污染和干扰严重。而weex/uni-app支持多页面页面之间上下文隔离写页面较多的大型应用更合适另外react在中国的市场占有率远不如vue。这也是中国与国外不同的特色情况。****************************************优雅的分割线*** **********************************分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更新 *************************************优雅的分割线 ********************************** SimpleExecutor
http://www.zqtcl.cn/news/271022/

相关文章:

  • 瑶海合肥网站建设东莞网站优化多少钱
  • pc蛋蛋游戏体验网站建设大型门户网站建设效果好吗
  • 昆明网站建设制作汽车之家官网网页版入口
  • 诸城建设局网站免费的创建个人网站
  • 网站建设工作下步打算上海搬家公司电话查询
  • 如何将自己做的网站推广出去大型网站方案
  • 深圳做网站排名哪家好贵阳景观设计公司
  • 做图片网站中英网站搭建报价表
  • 酒类网站该怎么做网站建设协议
  • 怎么打帮人 做网站开发的广告双语言网站模版
  • 企业网站建设的实验报告广告公司网站建设方案
  • 安徽茶叶商城网站建设贵阳市花溪区建设局网站
  • 广西网站建设制作推广普通话倡议书
  • 最新网站建设的模板下载小制作作文400字
  • 海南省城乡建设部网站首页央视新闻
  • 高端白酒品牌有哪些网站怎么做才能得到更好的优化
  • 北京安慧桥网站建设青之峰做网站
  • 免费制作网站的平台推广网站多少钱
  • 怎么增加网站的收录量广西建设厅网站地址
  • flash网站方案料神wordpress建站教程
  • 杭州 企业 建网站蚌埠网站优化
  • 网站建设的分类黄骅港最新招聘
  • 门户网站建设和检务公开自查搜索引擎排名优化价格
  • 湘阴网站建设如何建立自己的网站
  • 国外的ps网站网页源代码翻译器
  • 六安马昌友优化营商环境 助推高质量发展
  • wdcp 配置网站什么是搜索引擎营销?
  • 东莞网站上排名建设银行网站登录不进去
  • 陕西建设厅八大员官方网站服装公司做哪个网站
  • 福建省住房和城乡建设厅网站站群 网站如何做