《30天,App开发从0到1》这本书我们已经用时15周分享了其中的大部分内容,今天,为大家节选的是本书的附录精华部分——编码优化。很多程序员都会遇到的问题,打好基础,才能成为“大狮”!
1.弹出键盘优化处理
输入框位于设备屏幕下半部份的应用场景,config.xml 中的键盘弹出模式参数 softInputMode务必设置为 resize 模式,或者使用 UIInput 相关模块。
为了让应用看起来更接近原生,尽量配置 config.xml 中的 softInputBarEnabled 参数来隐藏 iOS 键盘上面的工具条。也可以在 openWin 或 openFrame 的时候通过 softInputBarEnabled 参数来单独指定。
2.项目字体优化处理
可以根据项目的需要引入外部字体,但是要控制外部字体文件的大小,字体文件不宜过大。
Android 上默认有 3 种字体:sans、serif 和 monospace,在开发人员不指定的情况下默认为sans,这 3 种字体在开发过程中都是通过字体名进行引用,系统会自动对应到内置字体文件。但是对于外部的字体文件,Android 上无法实现通过引擎配置后成为内置的字体文件,只能通过 @ font-face 的方式在每个页面中重复加载,每一个要使用外部字体的 Window 或 Frame 都要引入 一遍。如果字体体积过大会占用大量内存,影响页面的加载速度。
iOS 可以在 config.xml 文件中进行外部字体文件的配置,配置完成后就可以像系统内置字体 一样在页面中指定了,无需在每个 Window 或 Frame 中通过 @font-face 的方式引入。
3.同步/异步逻辑优化处理
对于文件、数据库、偏好设置等操作推荐使用同步接口 ( 方法名增加 Sync 后缀 ) 来简化代码的实现,以解决异步 callback 层次过深的问题。
4.日志打印优化处理
正式版本应关闭或删除测试联调时使用的 console.log 控制台打印显示方法,严禁正式版本出现供测试联调使用的 alert 信息。
可考虑封装统一的日志打印显示方法在测试联调时使用,方便控制日志打印功能的开启和关闭。测试联调优先使用控制台打印命令 console.log,避免或减少使用 alert 方法进行测试联调, 防止正式版本有遗漏,弹出测试数据信息。
5.用户体验优化处理
对于内容数据存在动态更新情况的页面,应实现页面下拉刷新功能以保证用户可以手动刷新页面数据。
根据业务场景优化用户体验,考虑实现对 app 进入后台和回复前台的事件监听和逻辑处理。 在异常处理逻辑需要显示异常信息时,根据异常的重要程序选择使用 alert 或 toast 方式进行提示。 要注意 api.alert 会阻塞线程,强制用户点击后程序才能继续执行,适合在需要用户明确确认的场景内使用。
窗口关闭处理是在开发过程中根据需要处理 Android 的 keyback 事件和 iOS 的回滑手势。
Android 上要在 Window 中才能监听到 keyback 事件,Frame 中无法监听到 keyback 事件;
在 iOS7 以上的系统上可以在 openWin 的时候通过设置 slidBackEnabled 参数来实现是否支持回滑手势关闭窗口的功能。
在后台关闭非当前显示页面时,应设置 animation:{type:"none"},关闭动画效果方式,以免页面关闭动画影响当前显示页面的渲染,从而降低用户体验。
6.性能优化处理
尽量不对 Object 和 Array 拓展原型方法,有可能导致 iOS 系统的 App 闪退。同时避免不必要的 DOM 操作,浏览器遍历 DOM 元素的代价是昂贵的。当一个元素出现多次时,将它保存在一个变量中。
避 免 使 用 如 jQuery、jQuery Mobile、SenchaTouch、Bootstrap 等“ 重 型 框 架 ”。jQuery 和SenchaTouch 等框架的事件流设计思想及其内部文档模型会严重拖慢 UI 响应速度。同时,框架内部 Timer 不断刷新页面,频繁占用 CPU/GPU 资源,会拉低页面响应速度,严重影响用户体验。
也要尽量减少使用第三方样式、脚本库或框架。摆脱对 $ 函数的依赖,转变思想,养成自己动手的习惯。移动端对 HTML5、CSS3 和 ECMAScript5 的支持较好。如某些需求不得不使用 一些第三方脚本时,应使用对移动端支持良好且目标性强、功能单一的框架。如 :api.js、zepto.js、swipe.js、doT.js 等。
默认样式设置、DOM 操作和字符串处理推荐使用 APICloud 前端框架(api.js 和 api.css)。
7.窗口切换优化处理
避免出现任何卡顿、闪屏、白屏等情况;要保证动画效果流畅,不能出现丢帧的情况要理解并控制窗口好切与界面渲染之间的关系,要适时更新 UI,如果 Window 或 Frame 中所加载的静态页面内容过多,建议等动画执行完毕再进行页面的加载和渲染。无论是 Android 还 是 iOS 系统,在进行窗口切换的时候,如果窗体本身正在进行渲染(Window 或 Frame 所加载的 网页没有渲染完毕),则会影响切换动画运行的流畅性,出现卡顿或丢帧的情况。
建议在打开 Window 或 Frame 的时候,如果所加载的静态网页不能快速的渲染完毕。为了不影响窗体切换动画的执行,可以在切换动画执行完毕后再进行动态数据的加载和界面的刷新。