[iOS]关于 App 混合(Hybrid)开发的优化,包括H5、Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)

  我们知道混合开发,可以节省很多成本(时间成本,经济成本等等),所以有很多公司比较钟爱这种开发形式,今天所讲的优化方式,也是我在我们公司的应用中实际用了的,而且我写的这个优化的 SDK 已经开源到 github 上了,有兴趣的同学可以下载来看一下,有不足的地方欢迎指正。这里给出链接:https://.

转载请注明出处:http://www.cnblogs.com/shisishao/p/6830736.html

-、首先,先介绍下什么是混合开发:

  我们通常把移动开发分为Web、Native和Hybrid,但其实Hybrid又可以细分的。最简单的是在Native中放一个WebView,然后加载一个兼容手机的网站,其实就相当于在用户的手机上建立一个快捷方式,也算是占据用户桌面的应急用法吧。用这种方法要注意检测网络是否正常,不正常要给予提示,否则苹果是不予通过的。第二种是将Web相关文件全部放在本地,数据库一样用Sqlite做本地存储,用户就算不联网也能工作,或者是以Native为主,在某些特定的模块才会用到WebView。

  其实要我说,只有第二种才算是真正的Hybrid。很重要的一点是Native和Web有没有交互,没有的不算,你直接在WebView中加载一个HTML页面,这算哪门子的Hybrid开发,这种也谈不上什么技术含量了,没什么好讲的。这种开发很难模拟Native的体验,用户一眼就看出这是网页,我说的Hybrid开发是那种多数用户看不出差别的,本篇博客也是针对于第二种形式进行优化的。

二、根据策略,实现不同场景的优化:(这里我们以 Web build生成的 js 文件为例,当然 Weex 也是同样的道理)

  1、如果你的应用中的 js 文件是部署到远程服务器的,也就是说每访问一个 Web 界面,都是根据 Url 去下载该页面的js文件然后再加载出来,这个时候其实就有个弊端了,也就是我每次进入同一个界面,都要下载一次该界面的 js 文件。那有没有办法,让我只需要下载一次,下次再进入就不用再下载,而是直接加载已经下载好的呢?答案是肯定的。接下来,我们就重点讲解,如何实现这个办法:就是应用启动的时候,我们先去下载所有 js 的压缩文件包-->然后解压-->替换-->访问-->加载,具体实现:

  (1)每次应用启动的时候,我们先请求一个后台接口,用来告诉我们:有没有新的 js 包要下载和下载地址,如果有就去下载,这个时候就有问题了,如果我的 js 包还没下载完成我就点进了某个 Web 界面怎么办,这个时候不就显示不出来了吗?别急,我们不是还有线上的服务器嘛,所以,每访问一个 Web 界面,我们先要判断本地(沙盒中或者叫硬盘中)有没有相应的 js 文件(可以根据Url链接来判断),如果有就访问本地的 js 文件,如果没有就去远程下载。这个时候不就解决了 js 包没下载完成就进入界面的问题了嘛,哈哈完美,所以,既然我们说的是优化,就不可能影响正常使用,而是在正常使用的基础上提升用户体验,要不怎么能叫优化呢。

  (2)更新 js 包:每次更新线上服务器的 js 文件的时候,这个时候应用要下载的 js 包也要一起更新,也就是要保持两份文件统一。

  2、如果你的应用中的 js 文件是集成在工程中的,也就是在你的 .ipa 包中。这个时候也会有一定的弊端,比如,我本身的Native代码没有什么更新,但是我的 js 文件更新了,这个时候就需要到 AppStore 上传一个新的版本,然后等待苹果漫长的审核。那有没有办法,让我在不提交新版应用的情况下更新掉旧的 js 包呢?当然是有办法滴呀,接下来就是见证奇迹的时刻:

  (1)这种场景跟第一种更新的方式大同小异,就是在每访问一个 Web 界面,我们先要判断本地(沙盒中或者叫硬盘中)有没有相应的 js 文件(可以根据Url链接来判断),如果有就访问本地的 js 文件,如果没有就访问工程中集成的 js 文件。

三、总结

  本次所讲的优化主要是,能提升用户体验,不至于让用户一打开你的应用就给人一种很 low 的感觉。各种 Web 界面都要加载半天,还有可能加载失败的情况。如果有同学想要优化这块东西的可以参考我上面说的我自己写的那个 SDK,场景考略的还是比较全了,因为是我们自己的应用在用,有什么问题欢迎留言讨论。

 

时间: 2024-12-30 04:04:34

[iOS]关于 App 混合(Hybrid)开发的优化,包括H5、Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)的相关文章

博客园的IOS客户端“我的博客园”已发布到AppStore

已知Bug: 评论博客提示有问题,发布成功,提示发布失败了. 功能介绍: 博客列表浏览:博客内容查看,博客评论查看,发评论,收藏/取消收藏博客,浏览作者的其他博客. 新闻列表浏览:新闻内容查看,查看新闻评论. 个人中心:显示我的博客显示,发布博客:闪存功能. 用户登录,注销: 设置:app的设置.隐藏底栏,离线数据,双击全屏等等设置. App Store地址:https://itunes.apple.com/cn/app/wo-de-bo-ke-yuan/id873544434 iTunes截图

我的第一篇博客记录我的IOS生涯

这是我的第一篇博客,只为了记录我在IOS开发旅程中得成长之路,一直觉得能发表几百篇的都是大牛,一直都是我崇拜的对象,我希望现在的一小步能成为将来的一大步,坚持每天发表一篇博文,养成一个良好的每天学习新知识的习惯,希望多年以后点开这第一篇博客能感叹当初的自己是多么的幼稚,但也感谢当年的坚持!come on!活着就是为了改变世界!

Web前端,HTML5开发,前端资源,前端网址,前端博客,前端框架整理 - 转

Web前端/H5开发,前端资源,前端网址,前端博客,前端框架整理 - 转 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v2.2 免费的编程中文书籍索引 前端书籍 前端免费书籍大全 前端知识体系 免费的编程中文书籍索引 智能社 - 精通JavaScript开发 重新介绍 JavaScript(JS 教程) 麻省理工学院公开课:计算机科学及编程导论 JavaScript中的this陷阱的最全收集--没有之一 JS

iOS开发中遇到的坑 韩俊强的博客( 草稿)

从事iOS开发有些年月了,从最开始的磕磕绊绊,不知所措,到现在的遇到困难都能快速做出最佳方案处理,中间经历了不可或缺的痛苦.在项目开发中,本人有用印象笔记记录的习惯,所以很多重复出现的坑,很快迎刃而解,而不在同一个地方摔倒两次.为此,特意总结了一下开发中经常遇到的坑,有些可能和你形成共鸣,有些在你看来或许是小儿科,不喜勿喷. A valid provisioning profile for this executable was not found. 解决问题所在:发布证书无法运行在真机上!!!

iOS中 项目开发易错知识点总结 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [_contactTextFiled resignFirstResponder]; return YES; } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRan

iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客

原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比較专业.识别率也非常高真对语音识别是比較精准的,可是非常多开发人员和我一样期望离线识别,而讯飞离线是收费的:请求次数来讲.两者都能够申请高配额,针对用户较多的差点儿都一样. 基于免费而且支持离线我选择了百度离线语音识别.比較简单,UI设计多一点,以下写一下教程: 1.首

《深入浅出MySQL数据库开发、优化于管理维护》基础篇学习笔记

MySQL数据库物理文件默认存放位置:C:\ProgramData\MySQL\MySQL Server 5.5\data\MySQL通过配置my.int的datadir属性来指定数据库的物理存放位置. 一.DDL语句:1.创建数据库:create database test; 2.删除数据库:drop database test; 3.描述表:desc emp; 4.删除表:drop table emp; 5.修改表:(1)修改表类型:alter table emp modify ename

iOS中 按钮和标题完美各种排列/完美教程 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 前言:最近常常用到按钮和相应标题的组合,当按钮设置图片加标题时,触发范围较小,不易触发,最重要的是还要调试偏移量,相信研究过的开发者都很头疼这一点,那我我就想解决,于是在网上研究了一番,个人总结封装了一个,觉得很棒,推荐给大家! 下面看教程: 整体是对UIButton的自定义封装: //UIButton+UIButtonSetEdgeInsets.h #import <UIKit/UIKit.h> @inte

iOS中 语音识别功能/语音转文字教程详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:最近研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比较专业,识别率也很高真对语音识别是比较精准的,但是很多开发者和我一样期望离线识别,而讯飞离线是收费的:请求次数来讲,两者都可以申请高配额,真对用户较多的几乎都一样.基于免费并且支持离线我