关于使用ionic2的性能和安全性调研

(一)性能效果

原文链接:Improving-the-performance-of-your-ionic-application,颇有删改,不对之处欢迎指正

Hybrid App最担心的问题,然而Ionic已经让我们看到hybrid app是有可能获得好的性能效果,但是有时为了让延迟卡顿的地方更顺滑,采取一些优化依然是必须的。

1.原生的滚动

这个实现可能会给你最高的流畅性加成。除了使用默认的Javascript的滚动,ionic提供了使用原生滚动的选择。

我们可以选择在每个view中开启它,在ion-content标签中放置这样的属性:

   overflow-scroll="true"

或者可以对所有view开启它:

  $ionicConfigProvider.scrolling.jsScrolling(false);

2.Crosswalk

Crosswork为App提供了一套Chrome Webview,获得了更好的性能效果和稳定性。

Ionic推荐在老版本的Android设备中(4.0-4.3)使用Crosswalk,然而我也发现即使是在更新的Android设备(4.3+)中,也能有巨大的性能提升。CSS动画的提升是最能感觉到的。

运行这条指令可以为我们的项目添加Crosswalk

 $ ionic browser add crosswalk

如果体积上的增加成为了麻烦,crosswalk lite可能值得你考虑。它比正常Crosswalk项目的小一半,这也意味着它删除了一些功能:

目前仅支持Android

不支持更高级的特性比如WebRTC

3.使用GPU Hack

不用担心,只需要实现一些很小的hack。当使用CSS动画时,采用这两种方式:

-webkit-transform: translateZ(0);

-webkit-transform: translate3d(0,0,0);

这两条语句可以强制创建一个新的图层并把渲染交给GPU而不是CPU。这有可能加速你的动画,但亲身测试是这里的关键。

4.使用Ionic生命周期事件

你可能已经感觉到了某些卡顿和磕巴在跳转到另一个页面时。我们可以避免这种延时,通过在Ionic生命周期的事件中包装好数据。

假设我们需要加载一些职位信息,我们可以在beforeEnter事件中使用这个调用

$scope.$on('$ionic.beforeEnter', function()

{

appointmentsService.getAllAppointments();

}

这个事件会在我们将要进入view时触发,使过渡动画时几乎没有卡顿。

(二)  关于ionic的安全性

作者:鲁小夫

链接:www.zhihu.com/question/28468459/answer/41622094

来源:知乎

引用一  :  写过 js混淆器,谈一些浅显的个人看法。

个人认为,js的不可读化处理分为三个方面:压缩(compression)混淆(obfuscation)加密(encryption)。 (不可读化处理,这是我自己发明的术语,一切会增加代码不可读性的代码转换, 都可以这么叫,“增加代码不可读性”可能是代码转换的结果或者目的).

1. 压缩

这一操作的目的,是让最终代码传输量(不代表代码量, 也不代表文件体积)尽可能小。压缩js的工具,常见的有:YUI Compressor、UglifyJS、Google Closure Compiler 等。

通常在代码压缩的过程中,只改变代码的语法,代码的语义和控制流不会有太大改变

常见做法是把局部变量缩短化,把一些运算进行等价替换等。代码压缩对于代码保护有一些帮助,但由于语义和控制流基本没变,起不了太大作用

在压缩层面上,代码不可读只是一种附带伤害,不是最终目的。

2. 混淆

这一操作的目的,是让代码尽可能地不可读,主要用作代码保护。

让代码不可读,增加分析的难度,这是唯一目的。混淆过后文件体积变大一倍也没关系,代码量变多也没关系,运算慢50% 也没关系。

常见的做法有:分离常量、打乱控制流、增加无义代码、检查运行环境如果不对就罢工,等等。

在混淆层面上,代码不可读是最终目的。

值得一提的是,Google Closure Compiler 的 Advance Level Compression 会压缩类和对象的成员,其压缩结果很难分析,也可以认为是一种混淆,但兼容性不太好。

广告时间:我写的 js混淆器,中文名叫 “看起来很厉害的 JS 编译器”, 英文名叫做 The Impressive JS.Segment.Compiler ,看起来很厉害的 JS 编译器

3. 加密

说实话我很难对加密做一个定义,因为加密在Web界有太多歧义了。

有加密就有解密,意味着加密操作可逆,密文可以明文化

就这样看来,在Web界,可以称之为加密的东西包括:HTTPS传输、JavaScript实现对称加密或者不对称加密等等。

这样看来,不可逆的代码压缩和混淆就不能列入加密这个范畴了。

代码加密意味着:将代码明文进行可逆的变换(加密),生成密文;将密文进行逆变换(解密),可以还原明文;最终运行环境运行的是解密代码

结语

实际上大家对压缩、混淆、加密这三个概念还是挺不清晰的,我在这里说一些个人见解,希望有帮助。

在现实项目中,我是多种手段结合的:

对于不需要做代码保护的项目,比如个人博客,做代码压缩,加快载入速度,这就够了。

对于需要做一些代码保护,防止抄袭的项目,可以在源码中加入一些开发者的信息和防护代码,然后混淆和压缩。很不幸的是,我这方面总是做得不太好,防君子防不了小人啊哈哈。

引用2 :  登录注册还是用https安全。

作者:lebornjose

链接:www.zhihu.com/question/28468459/answer/136543578

来源:知乎

在客户端base64或者md5什么的真心没用,我直接监听到你所谓的密文,然后用脚本发起一个http请求就可以登录上去了。

http在网络上是明文传输的,代理和网关都能够看到所有的数据,在同一局域网内也可以被嗅探到,你可以开个wireshark抓下局域网的包试试看。

我认为加密也没有提高什么攻击难度,因为攻击者就没必要去解密原始密码,能登录上去就表示目标已经实现了,所以,难度没有提高

prod的优化启动速度 - 这个是在ionic2的QQ群里面大神说的

在编译命令的最后加上--prod会让app的启动速度加快。

ionic build android --release --prod

无论是debug版本还是release版本都适用。

附上  : 关于js的加密:www.jianshu.com/p/83f81d1c0de7

ionic开源项目

小结  : 其实对于APP性能方面的考量,个人认为有3点

1.启动速度 2. 运行是否流畅 3.崩溃率. 就目前已经使用ionic2开发上线的APP来看,这些问题还不是很明显,开发过程中还要看项目具体情况来进行调研调整.大家请拭目以待!有经验的朋友欢迎批评指正.

你可能感兴趣的:(关于使用ionic2的性能和安全性调研)