混合型APP兼具原生型APP软件良好用户交互体验的优势和网页型APP软件跨平台开发的优势,并且其开发成本和网页型APP软件接近,其开发效率也远高于原生型APP软件。混合型APP已经被众多企业所认可。最近,Ruby on Rails作者David发表了一篇关于如何进行混合开发移动APP的文章,现对该文章进行一个全面的梳理并转述,以供读者阅读、参考。

文章中首先提到了37signals在2013年前就进行了混合开发的许多尝试,不过当时HTML在移动端的性能还不尽人意。而当今,在移动APP开发设计时,移动设备的计算能力已经非常强大,对于信息处理等应用来说HTML应用的运行效果和原生应用的效果差别不大,采用混合开发的方式已经是非常合适了。

文章中还列举了他们三代移动产品的演进,第一代产品是通过原生外壳并嵌套WebView来实现。第二代产品是原生外壳加上原生导航界面,只有具体页面才是HTML形式。当前,他们正在因地制宜地选择需要使用原生开发的功能进行着开发第三代产品。纵观三代产品的开发,从之前的100%HTML到现在的90%HTML加上10%原生代码,他们已经做到了使得APP原生部分和HTML部分的体验几乎没有什么区别。混合开发模式在技术方面主要是处理WebView的集成、Web页面的加载以及原生内容与HTML内容之间的交叉链接。HTML方面,他们使用Rails Web应用以支持Web和移动两大平台。在这种开发模式下,因为大部分的代码逻辑在Web服务器端,所以这些代码可以随时修改代码并发布,从而大大减轻了开发人员的工作量、提高了Bug修复效率以及降低了开发的复杂度和维护成本。

文章最后还提出了混合开发模式对原生开发模式的挑战,如APP中有很多地方需要原生开发、在原始应用上已经花了很多时间且使得UITableView看起来效果非常好以及许大公司本身的开发风格就是喜欢耗时耗力的原生开发等情况。

总之,混合开发应该能够成为当下移动开发策略的一个重要选择,如最近发布的Qt 5.4正式版就重新设计了与 HTML5 Web交互的引擎,推出了基于ChromiumQt WebEngine,从而实现了对HTML5和QT混合开发的支持。

另外,David还对用户的一些疑问进行了回答,如Derick用户提出的如何解决Android浏览器渲染速度慢的问题、用户Mike Waite提出的如何决定哪些功能要用原生开发的问题、用户Kevin提出的如何扩展和支持离线访问的问题等,更多问题以及David的答复,参见文章的评论部分

Ruby on Rails创始人DHH谈如何进行混合移动APP开发的更多相关文章

  1. 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),那么我们来探讨 ...

  2. 利用最新版的RubyMine2016.2开发Ruby On Rails 程序

    经过我的前两篇博文 ”Ruby On Rails环境搭建“ 和”Ruby On Rails 环境搭建MySQL数据库连接“ 我们已经具备了开发Ruby On Rails程序的一切要素,但是天天对着do ...

  3. Ruby on Rails vs. PHP vs. Python

    开发者在开发web应用时,往往会对平台的选择感到困惑,而web专家通常会建议:要考虑几个因素,这些因素包括周转时间.质量.跨浏览器兼容性.与其他框架的整合.数据安全性.易于访问性等. 在考虑了这些因素 ...

  4. Ruby on Rails 单元测试

    Ruby on Rails 单元测试 为什么要写测试文件? 软件开发中,一个重要的环节就是编写测试文件,对代码进行单元测试,确保程序各部分功能执行正确.但是,这一环节很容易被我们轻视,认为进行单元测试 ...

  5. Ruby on Rails (ROR)类书籍

    Ruby on Rails (ROR)类书籍下载地址及其他(整理) Ruby on Rails 如此之热,忍不住也去看了看热闹,现在把一些相关的电子图书下载地址整理下,方便有兴趣的朋友. 2006-0 ...

  6. Ruby on Rails 开发笔记

    安装 Ruby on Rails Install Rails: A step-by-step guide 创建应用 # 创建新的应用程序 $ rails new blog $ cd blog # 启动 ...

  7. 【转】Ruby on Rails中select使用方法

    在Ruby on Rails中真的有一堆Select helper可以用,我们经常容易混淆.常见的有三个..select, select_tag, collection_select(其余的什么sel ...

  8. Ruby on Rails

    Ruby on Rails 是一个可以使你开发,部署,维护 web 应用程序变得简单的框架.在2004年7月,由Rails的创始人大卫·海纳梅尔·韩森从37signals公司的项目管理工具Baseca ...

  9. Linux超快速安装Ruby on Rails

    Linux超快速安装Ruby on Rails 时间 2014-11-25 11:45:11 Flincllck Talk 原文  http://www.flincllck.com/quick-ins ...

随机推荐

  1. vs2012关闭IDE硬件加速设置

    对于我这样的老古董电脑是很有必要的设置! 如图所示:

  2. sql server 获取每一个类别中值最大的一条数据

    /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 ...

  3. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  4. Unix网络编程代码 第13章 守护进程和inetd超级服务器

    1. 概述 守护进程是在后台运行且不与任何控制终端关联的进程.unix系统通常有很多守护进程在后台运行,执行不同的管理任务.    守护进程没有控制终端通常源于它们由系统初始化脚本启动.然而守护进程也 ...

  5. iOS 手机淘宝加入购物车动画分析

    1.最终效果 仿淘宝动画 2.核心代码 _cartAnimView=[[UIImageView alloc] initWithFrame:CGRectMake(_propView.frame.size ...

  6. Java基础知识强化之集合框架笔记32:集合之可变参数的概述和使用

    1. 可变参数的概述和使用: (1)可变参数:定义方法的时候不知道该定义多少个参数(2)格式:     修饰符  返回值类型  方法名(数据类型… 变量名){   }  注意: 这里的变量其实是一个数 ...

  7. Bash关闭输出(关闭正确、错误输出)

    利用&>重定向,不输出任何内容: echo hello &> /dev/null 关闭正确输出: echo hello 1> /dev/null 关闭错误输出: ec ...

  8. 设置div中文字超出时自动换行

    一.对于div强制换行1.(IE浏览器)white-space:normal; word-break:break-all;这里前者是遵循标准.#wrap{white-space:normal; wid ...

  9. 为什么选择我--ReactJS

    在页面中如何大面积操作DOM的话,性能肯定是一个很大的问题,然而聪明的ReactJS实现了Virtual DOM技术,这是他的亮点之一.将组件的DOM结构映射到这个Virtual DOM对象上,并且R ...

  10. java的List接口的实现类 ArrayList,LinkedList,Vector 的区别

    Java的List接口有3个实现类,分别是ArrayList.LinkedList.Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复. 3个具体实现类的区别如下: 1. Array ...