Spirit 是移动 Web 开发规范,基于日常开发的沉淀,总结了字体、交互、性能等方面的最佳实践,是移动Web开发的指导标准。
以下规范建议,均是Alloyteam
在日常开发过程中总结提炼出的经验,规范具备较好的项目实践,强烈推荐使用
使用无衬线字体
body { font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif;}
iOS 4.0+ 使用英文字体 Helvetica Neue,之前的iOS版本降级使用 Helvetica。中文字体设置为华文黑体STHeiTi。 需补充说明,华文黑体并不存在iOS的字体库中(http://support.apple.com/kb/HT5484?viewlocale=en_US), 但系统会自动将华文黑体STHeiTi兼容命中系统默认中文字体黑体-简或黑体-繁
Heiti SC Light 黑体-简 细体 Heiti SC Medium 黑体-简 中黑 Heiti TC Light 黑体-繁 细体 Heiti TC Medium 黑体-繁 中黑
原生Android下中文字体与英文字体都选择默认的无衬线字体
4.0 之前版本英文字体原生 Android 使用的是 Droid Sans,中文字体原生 Android 会命中 Droid Sans Fallback 4.0 之后中英文字体都会使用原生 Android 新的 Roboto 字体 其他第三方 Android 系统也一致选择默认的无衬线字体
设置全局的CSS样式,避免图中的长按弹出菜单与选中文本的行为
a, img { -webkit-touch-callout: none; /* 禁止长按链接与图片弹出菜单 */}html, body { -webkit-user-select: none; /* 禁止选中文本(如无文本选中需求,此为必选项) */ user-select: none;}
Android
低端机与2G
网络场景下性能 注意!发布前必要检查项
所有图片必须有进行过压缩
考虑适度的有损压缩,如转化为80%质量的jpg图片
考虑把大图切成多张小图,常见在banner图过大的场景
加载性能优化, 达到打开足够快
数据离线化,考虑将数据缓存在 localStorage
初始请求资源数 < 4
注意!
图片使用CSS Sprites 或 DATAURI
外链 CSS 中避免 @import 引入
考虑内嵌小型的静态资源内容
初始请求资源gzip后总体积 < 50kb
静态资源(HTML/CSS/JS/IMAGE)是否优化压缩?
避免打包大型类库
确保接入层已开启Gzip压缩
尽量使用CSS3代替图片
初始首屏之外的图片资源需延迟加载 注意!
单页面应用(SPA)考虑延迟加载非首屏业务模块
运行性能优化, 达到操作足够流畅
避免 iOS 300+ms 点击延时问题 注意!
缓存 DOM 选择与计算
避免触发页面重绘的操作
Debounce连续触发的事件(scroll/resize),避免高频繁触发执行
尽可能使用事件代理,避免批量绑定事件
使用CSS3动画代替JS动画
避免在低端机上使用大量CSS3渐变阴影效果,可考虑降级效果来提升流畅度
HTML结构层级保持足够简单,推荐不超过 5 个层级
尽能少的使用CSS高级选择器与通配选择器
Keep it simple
在线性能检测评定工具使用指南
访问 Google PageSpeed 在线评定网站
在地址栏输入目标URL地址,点击分析按钮开始检测
按 PageSpeed 分析出的建议进行优化,优先解决红色类别的问题
关于 Spirit:
Spirit(勇气号),美国航天局NASA派往Mars(火星)的第一艘探测器。
移动Web开发是一块新的领域,甚至有很多坑,这一点与人类从未踏上的Mars(火星)相似。为了避免开发者重复遇到相同的问题,我们创建了Mars项目(view on Github),收集与归纳移动Web开发中常见的问题。
Spirit正是为了Mars而生,Mars项目中归纳的问题,会放到Spirit中解决,并沉淀到开发工具(JM与JMUI)以及开发规范中,真正建立移动Web开发的集成解决方案。
五、rule规则 在 Boost.Spirit 中,解析器由规则组成。由于规则通常基于 Boost.Spirit 提供的解析器,因此没有明显的区别。例如, boost::spirit::ascii::digit 既可以是解析器,也可以是规则。通常,规则指的是更复杂的表达式,例如 qi::int_ % ','。 在迄今为止的所有示例中,规则都直接传递给 boost::
目录 一、Boost.Spirit库介绍 二、 boost::spirit::qi::parse()解析格式 三、解析器 一、Boost.Spirit库介绍 本章介绍库 Boost.Spirit。 Boost.Spirit 用于开发文本格式的解析器。例如,您可以使用 Boost.Spirit 开发解析器来加载配置文件。 Boost.Spirit 也可以用于二进制格式,尽管它在这方面
Spirit 是什么 简单来说,Spirit 是一个 parser generator,功能与 Yacc,ANTLR 类似,且也是基于 EBNF 来描述文法,再基于文法生成 parser,但与前面这些工具相比,它最大的不同点在于它使用了 C++ 代码来对文法进行描述,通过非常残暴的模板编程技巧,在编译阶段就生成了相应的 parser。从使用者的角度来看,文法是用代码进行描述的,因此它天
四、行动 到目前为止,本章中的示例只检测到两件事:解析器是否成功以及解析器在哪里结束。但是,解析器通常以某种方式处理数据,正如您将在下一个示例中看到的那样。 Example 11.9. Linking actions with parsers #include <boost/spirit/include/qi.hpp> #include <string> #include <ios
实现功能 boost::spirit::classic相关的测试程序 C++实现代码 #include <boost/spirit/include/classic.hpp> #include <boost/spirit/include/phoenix1.hpp> #include <iostream>
json spirit 完整的时间轴控制,导入和导出JSON,检查动画,直观的界面,实时编辑,易于理解的API,针对速度和实时反馈:创建和管理Web动画时,您可能希望在图形用户界面中进行所有操作。 在本文中,我们将介绍Patrick Brouwer为Web动画设计者提供的称为Spirit的最新工具。 我们将学习它如何改变您在网络上创建动画的方式。 让我们动起来! 起床并跑步 精神分为三个部分,要求
30min 问了一下项目 知道哪些网络协议(阿巴阿巴,说了一堆名词,结果一个也没有具体问) 算法题 两数之和,力扣第一题(??) 了解哪些安卓前沿技术 项目中有没有遇到性能方面的问题 ps:感觉像KPI
本文向大家介绍B/S(Web)实时通讯解决方案分享,包括了B/S(Web)实时通讯解决方案分享的使用技巧和注意事项,需要的朋友参考一下 B/S的实时通讯实现起来比较麻烦,因为http协议是无状态的,导致一些实时消息通知和聊天等功能比较难以实现,本文主要简述几种自己之前常用的几种方式。 1、传统的HTTP协议是无状态的 传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器
标题 内容 类型 通用 支持布局 N/S 所需脚本 https://c.mipcdn.com/static/v2/mip-stats-mta/mip-stats-mta.js 说明 MIP 腾讯移动分析mta组件基于腾讯移动分析 H5分析接入,请参照 API 将参数配置在 MIP 页。目前事件追踪支持 click, mouseup, 其它事件暂不支持。 示例 MIP 提供腾讯移动分析的插件,提供实
腾讯 一面 mysql索引结构? redis持久化策略? zookeeper节点类型说一下; zookeeper选举机制? zookeeper主节点故障,如何重新选举? syn机制? 线程池的核心参数; threadlocal的实现,原理,业务用来做什么? spring DI的原理; 四次挥手; gc root选择; 标记清除算法的过程,标记清楚算法如何给对象分配内存空间? cms算法的缺点; 二
二面结束秒挂,鉴定为KPI 秋招最无语的面试,语气让人极其不舒服,全程冷场好几次😅跟一面面试官没法比 ———————————————————————————————————————— 一面面试官人很好,体验很不错 先问实习经历,看我是iOS实习,问了下做的工作,然后问了很多iOS的知识(不具有普遍性就不写了),一开始还能勉强答,越问越深,被问懵了(吐槽一下,这哪里是校招,问的感觉跟社招一样了)
pcg移动客户端实习 一面(3.12,接近2h) 忘记录音了,有点不记得了 https是怎么加密的 拷打项目 手搓高精度加法,带小数 设计模式了解吗,你知道哪些设计模式(观察者模式,单例模式) 用你熟悉的语言实现单例模式(只是听过,不会写) 手搓生产者消费者模式 二面(3.14) HR面(3.18) offer(3.20) 占坑慢慢补
1、自我介绍 2、要不咱们先聊一些基础知识?你对Java的面向对象特性是怎么理解的? 3、如何理解方法的重载和重写?如果两个方法返回类型不一样,会被认定是重载吗? 4、除了写多个类的方式,还有其他方式来实现多态性吗? 5、如何理解static关键字? 6、抽象类和接口的区别是什么? 7、Java中的同步机制了解吗?在开发中同步有哪些实现方式?了解底层原理吗? 8、你刚才提到了单例模式,在实际开发中
最近在准备面试,看了很多大厂的面经,抽空将腾讯面试的题目整理了一下,希望对大家有所帮助~ 一面 1、mysql索引结构? 2、redis持久化策略? 3、zookeeper节点类型说一下; 4、zookeeper选举机制? 5、zookeeper主节点故障,如何重新选举? 6、synchronized原理 7、线程池的核心参数; 8、ThreadLocal的实现,原理,业务用来做什么? 9、Spr