(一)性能效果
原文链接: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来看,这些问题还不是很明显,开发过程中还要看项目具体情况来进行调研调整.大家请拭目以待!有经验的朋友欢迎批评指正.