扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
前言
我们提供的服务有:网站建设、成都网站制作、微信公众号开发、网站优化、网站认证、酒泉ssl等。为1000多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的酒泉网站制作公司
为什么跨平台是发展趋势?
同一个应用,各个“端”独立开发,不仅开发周期长,而且人员成本高。同时,作为技术人员,也不应该满足于这种重复、低能的工作状态。在这样的形势下,跨平台的技术方案也受到越来越多人和企业的关注。
本篇文章我将从原理、优缺点等方面为大家分享跨平台技术
一. H5
说到跨平台,没人不知道H5。不管是在Mac、Windows、Linux、iOS、Android还是其他平台,只要给一个浏览器,连“月球”上它都能跑。
1.浏览器架构
下面,我们来看看让H5如此横行霸道的浏览器的架构:
浏览器由以上7个部分组成,而“渲染引擎”是性能优化的重中之重,一起了解其中的渲染原理。
2.渲染引擎原理
不同的浏览器内核不同,渲染过程会不太一样,但主要流程还是一致的。
分为下面6步骤:
从以上6步,我们可以总结渲染优化的要点:
以上就是浏览器端的内容。但H5作为跨平台技术的载体,是如何与不同平台的App进行交互的呢?这时候JSBridge就该出场了。
3.JSBridge原理
JSBridge,顾名思义,是JS和Native之间的桥梁,用来进行JS和Native之间的通信。
通信分为以下两个维度:
那么App内加载H5的过程是什么样的呢?
4.App打开H5过程
打开H5分为4个阶段:
这四步,对应的过程如上图所以,我们可以针对性的做性能优化。
5.优缺点分析
下面,我们进行H5的优缺点分析:
优点
缺点
虽然H5目前还存在不足,但随着PWA、WebAssembly等技术的进步,相信H5在未来能够得到越来也好的发展。
二.小程序
2018年是微信小程序飞速发展的一年,19年,各大厂商快速跟进,已经有了很大的影响力。下面,我们以微信小程序为例,分析小程序的技术架构。
小程序跟H5一样,也是基于Webview实现。但它包含View视图层、App Service逻辑层两部分,分别独立运行在各自的WebView线程中。
1.View
可以理解为h5的页面,提供UI渲染。由WAWebview.js来提供底层的功能,具体如下:
每个窗口都有一个独立的WebView进程,因此微信限制不能打开超过5个层级的页面来保障用户体验。
2. App Service
提供逻辑处理、数据请求、接口调用。由WAService.js来提供底层的功能,具体如下:
运行环境:
仅有一个WebView进程
3.View App Service通信
视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层将触发的事件通知到逻辑层进行业务处理。
4. 优缺点分析
优点
缺点
既然WebView性能不佳,那有没有更好的方案呢?下面我们看看React Native。
三.React Native
RN的理念是在不同平台上编写基于React的代码,实现Learn once, write anywhere。
Virtual DOM在内存中,可以通过不同的渲染引擎生成不同平台下的UI,JS和Native之间通过Bridge通信
1.React Native 工作原理
在 React 框架中,JSX 源码通过 React 框架最终渲染到了浏览器的真实 DOM 中,而在 React Native 框架中,JSX 源码通过 React Native 框架编译后,与Native原生的UI组件进行映射,用原生代替DOM元素来渲染,在UI渲染上非常接近Native App。
2.React Native 与Native平台通信
3.优缺点分析
优点
缺点
4.RN展望
虽然RN还存在不足,但RN新版本已经做了如下改进,并且RN团队也在积极准备大版本重构,能否成为开发者们所信赖的跨平台方案,让我们拭目以待。
既然React Native在渲染方面还摆脱不了原生,那有没有一种方案是直接操控GPU,自制引擎渲染呢,我们终于迎来了Flutter!
四.Flutter
Flutter是Google开发的一套全新的跨平台、开源UI框架,支持iOS、Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件。渲染引擎依靠跨平台的Skia图形库来实现,依赖系统的只有图形绘制相关的接口,可以在最大程度上保证不同平台、不同设备的体验一致性,逻辑处理使用支持AOT的Dart语言,执行效率也比JavaScript高得多。
1.Flutter架构原理
2.Dart优势
很多人会好奇,为什么Flutter要用Dart,而不是用JavaScript开发,这里列下Dart的优势
3.优缺点分析
优点
缺点
一、前言
Flutter开发,就需要对各种状态的管理,就是在请求数据的时候需要实时变化,各种交互变化等,在没有使用GetX之前使用Provider,用Provider的时候觉得真香,挺方便的,需要刷新的时候直接 notifyListeners(); 用了GetX之后觉得Provider太繁琐了。这边介绍下GetX的使用以及常用的方法。
二、 GetX
GetX 是 Flutter 上的一个轻量且强大的解决方案:高性能的状态管理、智能的依赖注入和便捷的路由管理。
1、相关优势:
三、使用
1、第一步 引入get
2、第二步
修改入口、配置路由
3、路由
Routes类
Pages类
4、状态管理
我一般一个page对应一个controller, controller来处理逻辑,控制page.
简单使用
5、依赖注入
依赖注入也是我喜欢的,可以减少很多工作。
第一步
第二步
6、跨页面交互
7、黑暗模式
可以参考前期写的博客。 黑暗模式的适配
前言
最近街边讨论买基金大佬们又多起来了,一些技术交流群也时不时看到某某某大佬在讨论股票,看来最近行情很好啊,虽然我不懂交易,但我总觉得可以做些什么来弥补我的不足,于是有了接下来要跟大家分享的“盯盘小工具”。
准备开干
那么接下来我的目标是开发一款PC端的桌面盯盘小工具,特点首先就是小、方便整天盯着电脑屏幕的白领们打开瞧瞧,省去费事各种操作;然后就是无需关注太多费脑筋的指标,所以能够显示名称和涨跌幅即可。有的上面的需求后,那就可以开始搬砖了,但是对于我这种只懂点Android皮毛又没做过桌面应用的人来说,简直是比登天还难,那该咋办?在夜深人静时,我恍然想起了Flutter,没错先来一张图:
还记得当时看Flutter的时候还是1.2版本,如今回过头来看,已经不是曾经那个Flutter了。
搬砖
为了实现这个小小的业余需求并且又能学习Flutter,于是我白天下班回来又开始不同场景不同程序语言的搬砖,重新安装了Flutter的最新开发环境,重新学习Flutter开发-万物皆widget。
功夫不负有心人
效果图展示
当前为最初版本,很多功能还不够完善,后续目标就是完善及优化,
GitHub项目地址:
致谢
为了实现这个小小的业余需求并且又能学习Flutter,我也参考了很多Flutter大佬的开源项目,在此感谢所有优秀的开源项目 _ 。
Mac环境下RN的安装之路:
前言:之前安装了Flutter环境,准备Flutter之路。。现在又准备安装一下React native环境配置... Mac终端源为~zsh
RN中文网 -- ( )里面看一下Mac的环境安装步骤
一、安装node
然后尝试着运行下 node -v 看看是否安装成功,并没有安装成功。
运行了一下 brew -v 查看了一下版本,是一两个月前的版本号,抱着试试的态度,brew update 升级一下版本号。
现在版本号为
然后再次运行 brew install node, 等待一会安装完毕,没有再报错 Error信息。
node -v 查看一下node的版本信息
二、 安装Watchman ( Watchman -- ( )则是由 Facebook 提供的监视文件系统变更的工具。安装此工具可以提高开发时的性能(packager 可以快速捕捉文件的变化从而实现实时刷新)。
(因为笔者是iOS开发,所以Xcode 和 Simulator都已经安装过了)
三、安装React Native的命令行工具(react-native-cli)
终端运行 rect-natice init MyApp 创建一个项目名为MyApp的项目,这一步第一次运行初始化需要一段时间,稍微等一下, 这里初始化后的目录直接是用户下目录了。我们可以cd到桌面你自己创建的某个目录,然后执行这段 init 命令
这里项目就初始化好了。
然后cd 到你的MyApp目录下,npm run ios(官网教程用yarn替代的 npm命令,我这边安装速度还好,就没有替换)
这里出现了一堆报错信息, 看到有个error是,项目中有Podfile,但是没有运行pod install,这里我们cd 到项目中ios目录下,运行pod install试试。
然后等待pod 安装完毕,这里等会可以直接用xcode启动APP尝试一下。
443 error了若干次、、经过一个多小时蛮长等待......
出现这个界面。下面就通过Xcode MyApp.xcworkspace 点击运行尝试一下
编译过程又几分钟、有种巨型组件项目既视感,千呼万唤始出来!!
然后我们在尝试一下刚刚无法完成的命令启动,cd 到项目目录
react-native run-ios
虽然警告很多、虽然模拟器启动的是iPhone11. 但总归成功启动官方默认项目了
以下就是react native环境安装及官方示例项目启动过程了。下一篇会记录一下,在现有原生项目添加 react native组件。
附:
vs code打开的话, App.js 还是有几个报错。这个目前还不知道原因
百度了一下,看有人说在setting.json 加入这句话 "javascript.validate.enable": false 即可,貌似加入后也不报错了。
衣带渐宽终不悔,为伊消得人憔悴。-柳永《凤栖梧》
2死生契阔,与子成说。执子之手,与子偕老。-佚名《诗经邶风击鼓》
3两情若是久长时,又岂在朝朝暮暮。-秦观《鹊桥仙》
4相思相见知何日?此时此夜难为情。-李白《三五七言》
5有美人兮,见之不忘,一日不见兮,思之如狂。-佚名《凤求凰琴歌》
6这次我离开你,是风,是雨,是夜晚;你笑了笑,我摆一摆手,一条寂寞的路便展向两头了。-郑愁予《赋别》
7入我相思门,知我相思苦,长相思兮长相忆,短相思兮无穷极。-李白《三五七言》
8曾经沧海难为水,除却巫山不是云。-元稹《离思五首其四》
9君若扬路尘,妾若浊水泥,浮沈各异势,会合何时谐?-曹植《明月上高楼》
10凄凉别后两应同,最是不胜清怨月明中。-纳兰性德《虞美人》
11还君明珠双泪垂,恨不相逢未嫁时。-张籍《节妇吟》
12如何让你遇见我,在我最美丽的时刻。为这,我已在佛前求了五百年,求他让我们结一段尘缘。-席慕蓉《一棵开花的树》
13嗟余只影系人间,如何同生不同死?-陈衡恪《题春绮遗像》
14相思树底说相思,思君恨君君不知。-梁启超《台湾竹枝词》
15自君之出矣,明镜暗不治。思君如流水,何有穷已时。-徐干《室思》
16相见争如不见,有情何似无情。-司马光《西江月》
17落红不是无情物,化作春泥更护花。-龚自珍《己亥杂诗》
18天不老,情难绝。心似双丝网,中有千千结。-张先《千秋岁》
19似此星辰非昨夜,为谁风露立中宵。-黄景仁《绮怀诗二首其一》
20直道相思了无益,未妨惆怅是清狂。-李商隐《无题六首其三》
21深知身在情长在,怅望江头江水声。-李商隐《暮秋独游曲江》
22人到情多情转薄,而今真个不多情。-纳兰性德《摊破浣溪沙》
23此情可待成追忆,只是当时已惘然。-李商隐《锦瑟》
24相思***多少,地角天涯未是长。-张仲素《燕子楼》
25问世间,情是何物,直教生死相许。-元好问《摸鱼儿二首其一》
26身无彩凤双飞翼,心有灵犀一点通。-李商隐《无题》
27兽炉沈水烟,翠沼残花片,一行行写入相思传。-张可久《塞鸿秋》
28平生不会相思,才会相思,便害相思。-徐再思《折桂令》
29一寸相思千万绪,人间没个安排处。-李冠《蝶恋花》
30十年生死两茫茫,不思量,自难忘,千里孤坟,无处话凄凉。-苏轼《江城子》
31今夕何夕,见此良人。-佚名《诗经唐风绸缪》
32天长地久有时尽,此恨绵绵无绝期。-白居易《长恨歌》
33在天愿作比翼鸟,在地愿为连理枝。-白居易《长恨歌》
34重叠泪痕缄锦字,人生只有情难死。-文廷式《蝶恋花》
35一个是阆苑仙葩,一个是美玉无瑕。若说没奇缘,今生偏又遇著他;若说有奇缘,如何心事终虚话?-曹雪芹《枉凝眉》
36春蚕到死丝方尽,蜡炬成灰泪始乾。-李商隐《无题》
37他生莫作有情痴,人间无地著相思。-况周颐《减字浣溪沙》
38尊前拟把归期说,未语春容先惨咽。-欧阳修《玉楼春》
39关关雎鸠,在河之洲。窈宨淑女,君子好逑。-佚名《诗经周南关雎》
40人生自是有情痴,此恨不关风与月。-欧阳修《玉楼春》
41此去经年,应是良辰好景虚设。便纵有,千种风情,更与何人说。-柳永《雨霖铃》
42只愿君心似我心,定不负相思意。-李之仪《卜算子》
43落花人独立,微雨燕双飞。-晏几道《临江仙二首其二》
44可怜无定河边骨,犹是春闺梦裏人。-陈陶《陇西行》
45千金纵买相如赋,脉脉此情谁诉。-辛弃疾《摸鱼儿》
46梧桐树,三更雨,不道离情正苦。一叶叶,一声声,空阶滴到明。-温庭筠《更漏子三首其三》
47结发为夫妻,恩爱两不疑。-苏武《结发为夫妻》
48寻好梦,梦难成。况谁知我此时情。枕前泪共帘前雨,隔个窗儿滴到明。-聂胜琼《鹧鸪天》
49一场寂寞凭谁诉。算前言,总轻负。-柳永《昼夜乐》
50天长路远魂飞苦,梦魂不到关山难,长相思,摧心肝。-《李白长相思二首其一》
51不要因为也许会改变,就不肯说那句美丽的誓言,不要因为也许会分离,就不敢求一次倾心的相遇。-席慕蓉《印记》
52愿我如星君如月,夜夜流光相皎洁。-范成大《车遥遥篇》
53鱼沈雁杳天涯路,始信人间别离苦。-戴叔伦《相思曲》
54执手相看泪眼,竟无语凝噎。-柳永《雨霖铃》
55诚知此恨人人有,贫*夫妻百事哀。-元稹《遣悲怀三首其二》
56换我心,为你心,始知相忆深。-顾敻《诉衷情》
57忆君心似西江水,日夜东流无歇时。-鱼玄机《江陵愁望有寄》
58春心莫共花争发,一寸相思一寸灰。-李商隐《无题六首其六》
59相思似海深,旧事如天远。-乐婉《卜算子》
60相恨不如潮有信,相思始觉海非深。-白居易《浪淘沙》
61玲珑骰影埠於梗�牍窍嗨贾�恢�浚�峦ン蕖堆盍�Α?
62忍把千金酬一笑?毕竟相思,不似相逢好。-邵瑞彭《蝶恋花》
63天涯地角有穷时,只有相思无尽处。-晏殊《玉楼春》
64都道是金玉良缘,俺只念木石前盟。空对著,山中高士晶莹雪;终不忘,世外仙姝寂寞林。-曹雪芹《终身误》
65人如风后入江云,情似雨馀黏地絮。-周邦彦《玉楼春》
66滴不尽相思血泪抛红豆,开不完春柳春花满画楼。-曹雪芹《红豆词》
67泪眼问花花不语,乱红飞过秋千去。-欧阳修《蝶恋花二首其一》
68瘦影自怜秋水照,卿须怜我我怜卿。-冯小青《怨》
69锺情怕到相思路。盼长堤,草尽红心。动愁吟,碧落黄泉,两处难寻。-朱彝尊《高阳台》
70若问闲情都几许?一川烟草,满城风絮,梅子黄时雨。-贺铸《横塘路》
71多情只有春庭月,犹为离人照落花。-张泌《寄人》
72花红易衰似郎意,水流无限似侬愁。-刘禹锡《竹枝词四首其二》
73若有知音见采,不辞遍唱阳春。-晏殊《山亭柳赠歌者》
74明月楼高休独倚,酒入愁肠,化作相思泪。-范仲淹《苏幕遮》
75思君如明烛,煎心且衔泪。-陈叔达《自君之出矣》
76生当复来归,死当长相思。-苏武《结发为夫妻》
77休言半纸无多重,万斛离愁尽耐担。-陈蓬姐《寄外二首其二》
78妾似胥山长在眼,郎如石佛本无心。-朱彝尊《鸳鸯湖棹歌》
79不知魂已断,空有梦相随。除却天边月,没人知。-韦庄《女冠子二首其一》
80同心而离居,忧伤以终老。-佚名《涉江采芙蓉》
81夜月一帘幽梦,春风十里柔情。-秦观《八六子》
82从别后,忆相逢,几回魂梦与君同。-晏几道《鹧鸪天三首其一》
83多情自古伤离别。更那堪,冷落清秋节。-柳永《雨霖铃》
84无情不似多情苦,一寸还成千万缕。-晏殊《玉楼春》
85唯将终夜长开眼,报答平生未展眉。-元稹《遣悲怀三首其三》
86别来半岁音书绝,一寸离肠千万结。-韦庄《应天长》
87相思一夜梅花发,忽到窗前疑是君。-卢仝《有所思》
88直缘感君恩爱一回顾,使我双泪长珊珊。-卢仝《楼上女儿曲》
89相思本是无凭语,莫向花牋费泪行。-晏几道《鹧鸪天三首其二》
90离愁渐远渐无穷,迢迢不断如春水。-欧阳修《踏莎行》
91若教眼底无离恨,不信人间有白头。-辛弃疾《鹧鸪天》
92开辟鸿蒙,谁为情种?都只为风月情浓。-曹雪芹《红楼梦引子》
93明月不谙离恨苦,斜光到晓穿朱户。-晏殊《鹊踏枝》
94临别殷勤重寄词,词中有誓两心知。-白居易《长恨歌》
95泪纵能乾终有迹,语多难寄反无词。-陈端生《寄外》
96还卿一钵无情泪,恨不相逢未剃时。-苏曼殊《本事诗》
97终日两相思,为君憔悴尽,百花时。-温庭筠《南歌子四首其二》
98欲寄彩笺兼尺素,山长水阔知何处。-晏殊《鹊踏枝》
99离恨却如春草,更行更远还生。-李煜《清平乐》
100鸿雁在云鱼在水,惆怅此情难寄.-晏殊《清平乐二首其二》
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流