Cordova 是什么

水一篇,在 黒之染:Cordova是什么? 问题中长答案的整理:


简单讲就是可以让你用丰富的前端经验写移动应用的东西。

  1. 它不会把你的前端页面变成 ios 原生的 objective-c 或者 android 的 java 代码,你的界面还是网页呈现的,渲染在 android 的 android.webkit.WebView 或 iOS 的 UIWebView 中。
  2. 不太像壳,更像是胶水,因为它不像框架一样团团包住你写的那部分内容,只是在运行在 WebView 中的 javascript 代码和原生代码之间建了一座沟通的桥梁, Ionic 这种东西才更像是壳。这个桥怎么搭下面写。
  3. 不是前端框架, bootstrap、angularjs、jqueryUI 这些是前端框架,可以和 Cordova 协作,但都不必要。

Cordova 原理

给两个链接: - webView:shouldStartLoadWithRequest:navigationType: public void addJavascriptInterface (Object object, String name)

第一个是 Cordova 在 iOS 上的原理,第二个是在 Android 上的原理。(不知道现在还是不是,我之前看的资料版本有点低)

第一个是 iOS 上 UIWebView 将要开始跳转地址的时候被调用,进而根据传入的地址作出反映。第二个是 Android 上用于使一个 Java 对象可以在 JS 中被访问,并调用其方法。

这就开启了两个平台上 JS 和原生代码之间的沟通窗口,这就是原理。 Cordova 在这个基础上构建了完善的一套体系,让我们可以以一种简单标准的流程写 Hybird 应用,它来负责这个 JS 与原生代码的沟通工作。

到这看得出,其实 原生代码是避不开的 ,想要利用系统的各项功能必须要写对应不同系统支持的不同语言的原生代码。但有很多写 Cordova 的程序员不懂这些也能写出东西来,靠的就是 丰富的插件

随便找一个 Cordova 插件,目录结构打开,大致是这样:

xxx@xxx:~/.../cordova-plugin-device
> tree
.
├── README.md
├── package.json
├── plugin.xml
├── src
│   ├── android
│   │   └── Device.java
│   ├── ios
│   │   ├── CDVDevice.h
│   │   └── CDVDevice.m
│   ├── ...
│   └── wp
│       └── Device.cs
└── www
    └── device.js

看到 src 文件夹底下的 ios、android、wp 这些文件夹了么,里面装的就是各个平台上的原生代码。用打包工具 build 的时候,就会对应的帮你复制到各个平台的项目文件夹去,并做好配置。

比如我写一个调用摄像头拍照片的插件,支持 android 与 iOS 两个平台,我就要针对这两个平台编写 两份 完成同样功能的原生代码,然后给一个统一的 JS 接口,由 Cordova 把这个接口暴露给写 Cordova 应用的人。他们就可以只用 JS 完成我写的插件承诺能够做到的功能,也就是拍一张照片。

也就是说 Cordova 写的应用理论上可以做到任何原生应用能做到的功能,而不是很多人误解的“局限很大”,确实是有局限,但不是局限在可能性上。

只用上面提到的两个“窗口”足以让你做到这里说的使用 JS 调用原生平台功能,但 Cordova 把这个过程简化、标准化,甚至生态化了。丰富的插件、活跃的社区还有详尽的文档,这些都极大方便了 Hybird 应用的开发过程。就好像只用 1010 可以构建整个互联网,但我们仍然需要操作系统一样。

所以真要一句话说到点上的话。。。就是可以让你用前端经验写移动应用的东西。

性能问题

界面部分是渲染在webview中的网页,通常来说应用逻辑也是js编写。性能是个大问题,但跨平台开发的便捷性又是个大优势。

好像为了追求性能,桌面应用可以用汇编编写核心代码一样,Cordova应用如果有哪部分成为了性能瓶颈也可以针对性用原生重写。

所以只要团队开发资源足够,逻辑代码部分的性能不是主要问题。但网页界面的性能就没什么好办法了(至少我没有。。。)

很多花哨的网站界面,普通点的电脑带着都费劲。对于移动设备上性能堪忧的webview来说,多加一个css的阴影可能都是得斤斤计较的支出了,这些遗憾只能看app需求自行权衡

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

这个男人让你的爬虫开发效率提升8倍

他叫 Kenneth Reitz。现就职于知名云服务提供商 DigitalOcean,曾是云计算平台 Heroku 的 Python 架构师,目前 Github...

1233
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-涉及的数据定义

以往回顾       我在之前的文章中都着重从AgileEAS.NET平台的介绍和开发指南两方面入手,参看AgileEAS.NET应用开发平台-系列目录和Agi...

2038
来自专栏IT技术精选文摘

ZStack 的伸缩性秘密(一)异步架构

ZStack 核心架构设计使得 99% 的任务异步执行,因此确保了单个的管理节点能够管理十万级的物理服务器,百万级的虚拟机,数万级的并行任务。

1092
来自专栏小巫技术博客

Android Junit单元测试-声明套件类

884
来自专栏程序人生 阅读快乐

Python核心编程(第3版)

《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包...

842
来自专栏美团技术团队

“小众”之美——Ruby在QA自动化中的应用

1993
来自专栏JavaEdge

设计模式实战 - 中介者模式

以终端销售商(以服务最终客户为目标的企业,如超市)为例,采购部门要采购IBM的电脑,它根据以下两个要素来决定采购数量。

1114
来自专栏腾讯Bugly的专栏

Luakit的前世今生

最近发布了一个跨平台的app开发框架Luakit。那怎么会想到做这样一个东西呢?

3374
来自专栏何俊林

微信小程序—仿芒果TV(已开源)

前言:1月9号(今天)是小程序上线的日子,各厂小程序,纷纷在线上发布,便用极其便捷,下面我体验的腾讯视频,及大众点评的小程序。 腾讯视频 ? 大众点评 ? 很...

3105
来自专栏Python攻城狮

GitHub 系列之「怎样使用 GitHub?」1.写在前边的话,为什么要写CitHub?2.GitHub 是什么?3.注册 GitHub

跟朋友在交流的时候听到求职的时候发现有些公司要附Github帐号,一个优秀的 GitHub 账号当然能让你增色不少。自己之前听说过,但没有花时间研究,最后花了时...

1263

扫码关注云+社区

领取腾讯云代金券