eact 在中后台业务里已经很好落地了,但对于 C 端(给用户使用的端,比如 PC/H5)业务有其特殊性,对性能要求比较苛刻,且有 SEO 需求。另外团队层面也希望能够统一技术栈,小伙伴们希望成长,那么如何能够完成既要、也要、还要呢?
本次分享主要围绕 C 端业务下得 React SSR 实践,会讲解各种 SSR 方案,包括 Next.js 同构开发,并以一次优化的过程作为实例进行讲解。其实这些铺垫都是在工作中做的 Web 框架的设计而衍生出来的总结。这里先卖个关子,自研框架基于 Umi 框架并支持 SSR 的相关内容留到广州 QCon上讲,感兴趣的同学可以来 5 月的QCon 全球软件开发大会广州站聊。下面开始正题。
曾和小弟讨论什么是 SSR?他开始以为 React SSR 就是 SSR,这是不完全对的,忽略了 Server-side Render 的本质。其实从早期的 cgi,到 PHP、ASP,jsp 等 server page,这些动态网页技术都是服务器端渲染的。而 React SSR 更多是强调基于 React 技术栈进行的服务器端渲染,是服务器端渲染的分类之一,本文会以 React SSR 为主进行讲解。
对于 SSR,大家的认知大概是以下 3 个方面。
? SEO:强需求,被搜索引擎收录是网站的基本能力。
? C 端性能:至少要保证首屏渲染效率,如果秒开率都无法保证,那么用户体验是极差的。
? 统一技术栈:目前团队以 React 为主,无论从团队成长,还是个人成长角度,统一技术栈的好处都是非常明显的。
诚然,以上都是大家想用 SSR 的原因,但对笔者来说,SSR 的意义远不止如此。在技术架构升级的过程中,如果能够同时带给团队和小伙伴成长,才是两全其美的选择。目前我负责优酷 PC/H5 业务,在优酷落地 Node.js,目前在做 React SSR 相关整合工作。玉伯曾讲过在 All in Mobile 的时代的尴尬——对于多端来说是毁灭性的灾难。押宝移动端在当时是正确的选择,但在今天获客成本过高,且移动端增速不足,最好的选择就是多端在产品细节上做
PK,PC/H5 业务的生机也正在于此。
然而历史包袱如此的重,有几方面原因。1)页面年久失修;2)移动端在 All in Mobile 时代并没有给多端提供技术支持,PC/H5 是掉队的,需要补齐 App 端的基本能力;3)技术栈老旧,很多页面还是采用 jQuery 开发的,对于团队来说,这才是最痛苦的事儿。
其实所有公司都是类似的,都是用有限资源做事,希望最少的投入带来最大化的产出。可以说,通过整合 SSR 一举三得,将 Node.js 和 React 一同落地,顺便将基础框架也落地升级,这样的投入产出是比较高的。
SSR 看起来很简单,如果细分一下,还是略微负责的,下面和我一起看一下从 CSR 到 SSR 演进之路。
客户端渲染 (CSR)
客户端渲染是目前最简单的开发方式,以 React 为例,CSR 里所有逻辑,数据获取、模板编译、路由等都是在浏览器做的。
Webpack 在工程化与构建方便提供了足够多便利,除了提供 Loader 和 Plugin 机制外,还将所有构建相关步骤都进行了封装,甚至连模块按需加载都内置,还具备 Tree-shaking 等能力,外加 Node cluster 利用多核并行构建。很明显这是非常方便的,对前端意义重大的。开发者只需要关注业务模块即可。
常见做法是本地通过 Webpack 打包出 bundle.js,嵌入到简单的 HTML 模板里,然后将 HTML 和 bundle.js 都发布到 CDN 上。这样开发方式是目前最常见的,对于做一些内部使用的管理系统是够的。
CSR 缺点也是非常明显的,首屏性能无法保障,毕竟 React 全家桶基础库就很大,外加业务模块,纵使按需加载,依然很难保证秒开的。
为了优化 CSR 性能,业界有很多最佳实践。在 2018 年,笔者以为 React 最成功的项目是 CRA(create-react-app),支付宝开发的 Umi 其实也是类似的。他们通过内置 Webpack 和常见 Webpack 中间件,解决了 Webpack 过于分散的问题。通过约定目录,统一开发者的开发习惯。
与此同时,也产生了很多与时俱进的最佳实践。使用 react-router 结合 react-loadable,更优雅的做 dynamic import。在页面中切换路由时按需加载,在 Webpack 中做过代码分割,这是极好的实践。
以前是打包 bundle 是非常大的,现在以路由为切分标准,按需加载,效率自然是高的。
Umi 基于 react-router 又进步增强了,约定页面有布局的概念。
复制代码
export default { routes: [ { path: '/', component: './a' }, { path: '/list', component: './b', Routes: ['./routes/PrivateRoute.js'] }, { path: '/users', component: './users/_layout', routes: [ { path: '/users/detail', component: './users/detail' }, { path: '/users/:id', component: './users/id' } ] }, ], };
这样做的好处,就有点模板引擎中 include 类似的效果。布局提效也是极其明显的。为了演示优化后的效果,这里以 Umi 为例。它首先会加载 index 页面,找到 index 布局,先加载布局,然后再加载 index 页面里的组件。下图加了断点,你可以很清楚的看出加载过程。
在 create-react-app(cra)和 Umi 类似,都是通过约定,隐藏具体实现细节,让开发者不需要关注构建。在未来,类似的封装还会有更多的封装,偏于应用层面。笔者以为前端开发成本在降低,未来有可能规模化的,因为框架一旦稳定,就有大量培训跟进,导致规模化开发。这是把双刃剑,能满足企业开发和招人的问题,但也在创新探索领域上了枷锁。
预渲染 (Prerending)
SPA(单页面应用) 的主要内容都依赖于 JavaScript(bundle.js) 的执行,当首页 HTML 下载下来的时候,并不是完整的页面,而是浏览器里加载 HTML 并 JavaScript 文件才能完成渲染。用户在访问的时候体验会很好,但是对于搜索引擎是不好收录的,因为它们不能执行 JavaScript,这种场景下预渲染 (Prerending) 就派上用场了,它可以帮忙把页面渲染完成之后再返回给爬虫工具,我们的页面也就能被解析到了。
CSR 是由 bundle.js 来控制渲染的,所以它外层的 HTML 都很薄。对于首屏渲染来说,如果能够先展示一部分布局内容,然后在走 CSR 的其他加载,效果会更好。另外业内有太多类似的事件了,比如用 less 写 css,coffee 写 js,用 markdown 写博客,都是需要编译一次才能使用的。比如 Jekyll/Hexo 等著名项目,它们都非常好用。那么基于 React 技术,也必然会做预处理的,Gatsby/Next.js 都有类似的功能。将 React 组建编译成 HTML,可以编译全部,也可以只编译布局,对于页面性能来说,预渲染是非常简单的提升手段。其原理 JSX 模板和 Webpack stats 结合,进行预编译。
? 编译全部:纯静态页面。
? 只编译布局:对于 SPA 类项目是非常好,当然多页应用也可以只编译布局的。
生成纯 HTML,可以直接放到 CDN 上,这是简单的静态渲染。如果不直接生成 HTML,由 Node.js 来接管,那么就可以转换为简单的 SSR。
无论 CSR 还是静态渲染,都不得不面对数据获取问题。如果 bundle.js 加载完成,Ajax 再获取的话,整个过程还要增加 50ms 以上的交互时间。如果预先能够得到数据,肯定是更好的。
类似上图中的数据,放在 Node.js 层去获取,并注入到页面,是服务器端渲染最常用的手段,当然,服务器端远不止这么简单。
服务器端(SSR)
纯服务器渲染其实很简单,就是服务器向浏览器写入 HTML。典型的 CGI 或 ASP、PHP、JSP 这些都算,其核心原理就是模板 + 数据,最终编译为 HTML 并写入到浏览器。
第一种方式是直接将 HTML 写入到浏览器,具体如下。
上图中的 renderToString 是 react SSR 的 API,可以理解成将 React 组件编译成 HTML 字符串,通俗点,可以理解 React 就是当模板使用。在服务器向浏览器写入的第一个字节,就是 TTFB 时间,然后网络传输时间,然后浏览器渲染,一般关注首屏渲染。如果一次将所有 HTML 写入到浏览器,可能会比较大,在编译 React 组件和网络传输时间上会比较长,渲染时间也会拉长。
第二种方式是就采用 Bigpipe 进行分块传输,虽然 Bigpipe 是一个相对比较”古老“的技术,但在实战中还是非常好用的。在 Node.js 里,默认 res.write 就支持分块传输,所以使用 Node.js 做 Bigpipe 是非常合适的,在去哪儿的 PC 业务里就大量使用这种方式。
以上 2 种方法都是服务器渲染,在没有客户端 bundle.js 助力的情况下,第一种情况除了首屏后懒加载外,客户端能做的事儿不多。第二种情况下,还是有手段可以用的,比如在分块里写入脚本,可以做的的事情还是很多的。
复制代码
res.write("<script>alert('something')</script>")
渐进混搭法(Progressive Rehydration)
渐进混搭法是将 CSR 和 SSR 一起使用的方式。SSR 负责接口请求和首屏渲染,并客户端准备数据或配合完成某些生命周期的操作。
首先,在服务器端生成布局文件,用于首屏渲染,在布局文件里会嵌入 bundle.js。当页面加载 bundle.js 成功后,客户端渲染就开始了。通常客户端渲染过程都会在 domReady 之前,所以优化效果是极其明显的。
Bigpipe 可以使用在分块里写入脚本,在 React SSR 里也可以使用 renderToNodeStream 搞定。React 16 现在支持直接渲染到节点流。渲染到流可以减少你的内容的第一个字节(TTFB)的时间,在文档的下一部分生成之前,将文档的开头至结尾发送到浏览器。当内容从服务器流式传输时,浏览器将开始解析 HTML 文档。渲染到流的另一个好处是能够响应。 实际上,这意味着如果网络被备份并且不能接受更多的字节,则渲染器会获得信号并暂停渲染,直到堵塞清除。这意味着您的服务器使用更少的内存,并更加适应 I / O 条件,这两者都可以帮助您的服务器处于具有挑战性的条件。
最简单的示例,你只需要 stream.pipe(res, { end: false })。
复制代码
// 服务器端 // using Express import { renderToNodeStream } from "react-dom/server" import MyPage from "./MyPage" app.get("/", (req, res)=> { res.write("<!DOCTYPE HTML><HTML><head><title>My Page</title></head><body>"); res.write("<div id='content'>"); const stream=renderToNodeStream(<MyPage/>); stream.pipe(res, { end: false }); stream.on('end', ()=> { res.write("</div></body></HTML>"); res.end(); }); });
当 MyPage 组件的 HTML 片段写到浏览器里,你需要通过 hydrate 进行绑定。
复制代码
// 浏览器端 import { hydrate } from "react-dom" import MyPage from "./MyPage" hydrate(<MyPage/>, document.getElementById("content"))
至此,你大概能够了解 React SSR 的原理了。服务器编译后的组件更多的是偏于 HTML 模板,而具体事件和 vdom 操作需要依赖前端 bundle.js 做,即前端 hydrate 时需要做的事儿。
可是,如果有多个组件,需要写入多次流呢?使用 renderToString 就简单很多,普通模板的方式,流却使得这种玩法变得很麻烦。
React SSR 里还有一个新增 API:renderToNodeStream,结合 Stream 也能实现 Bigpipe 一样的效果,而且可以有效的提高 TTFB 时间。
伪代码
复制代码
const stream1=renderToNodeStream(<MyPage/>); const stream2=renderToNodeStream(<MyTab/>); res.write(stream1) res.write(stream2) res.end()
如果每个 React 组件都用 renderToNodeStream 编译,并写入浏览器,那么流的优势就极其明显了,边读边写,都是内存操作,效率非常高。后端写入一个 React 组件,前端就 hydrate 绑定一下,如此循环往复,其做法和 Bigpipe 如出一辙。
Next.js 同构开发
Node.js 成熟的标志是以 MEAN 架构开始替换 LAMP。在 MEAN 之后,很多关于同构的探索层出不穷,比如 Meteor,将同构进程的非常彻底,使用 JavaScript 搞定前后端,开创性的提出了 Realtime、Date on the Wire、Database Everywhere、Latency Compensation,零部署等特性,其核心还是围绕 Full Stack Reactivity 做的,这里不展开。简言之,当数据发生改变的时候,所有依赖该数据的地方自动发生相应的改变。本身这些概念是很牛的,参与的开发者也都很牛,但问题是过于超前了。熟悉 Node.js 又熟悉前端的人那时候还没那么多,所以前期开发是非常快的,但一旦遇到问题,调试和解决的成本高,过程是非常难受的。所以至今发布了 Meteor 1.8 也是不温不火的情况。
Next.js 是一个轻量级的 React 应用框架。这里需要强调一下,它不只是 React 服务端渲染框架。它几乎覆盖了 CSR 和 SSR 的绝大部分场景。Next.js 自己实现的路由,然后 react-loadable 进行按照路由进行代码分割,整体效果是非常不错的。Next.js 约定组件写法,在 React 组件上,增加静态的 getInitialProps 方法,用于 API 请求处理之用。这样做,相当于将 API 和渲染分开,API 获得的结果作为 props 传给 React 组件,可以说,这种设计确实很赞,可圈可点。
Nextjs 式的一键开启 CSR 和 SSR,比如下面这段代码。
复制代码
import React from 'react' import Link from 'next/link' import 'isomorphic-unfetch' export default class Index extends React.Component { static async getInitialProps () { // eslint-disable-next-line no-undef const res=await fetch('https://api.github.com/repos/zeit/next.js') const json=await res.json() return { stars: json.stargazers_count } } render () { return ( <div> <p>Next.js has {this.props.stars} </p> <Link prefetch href='/preact'> <a>How about preact?</a> </Link> </div> ) } }
在 scr/pages/*.js 都是遵守文件名即 path 的做法。内部使用 react-router 封装。在执行过程中
优点
Next.js 的做法成为行业最佳实践并不为过,通过简单的用法,可有效的提高首屏渲染,但对于复杂度较高的情况是很难覆盖的。毕竟页面里用到的 API 不会那么理想,后端支持力度也是有限的,另外前端自己组合 API 并不是每个团队都有这样的能力,那么要解此种情况就只有 2 个选择:1)在 SSR 里实现,2)自建 API 中间层。
自建 API 中间层是最好的方式,但如果不方便,集成在 SSR 里也是可以的。利用 Bigpipe 和 React 做好 SSR 组合,能够完成更强大的能力。限于篇幅,具体实践留在 QCon 全球软件开发大会(广州站)上分享吧。
用 SSR 最大的问题是场景区分,如果区分不好,还是非常容易有性能问题的。上面 5 种渲染方式里,预渲染里可以使用服务器端路由,此时无任何问题,就当普通的静态托管服务就好,如果在递进一点,你可以把它理解成是 Web 模板渲染。这里重点讲一下混搭法和纯 SSR。
混搭法通常只有简单请求,能玩的事情有限。一般是 Node.js 请求接口,然后渲染首屏,在正常情况性能很好的,TTFB 很好,整体 rt 也很短,使用于简单的场景。此时最怕 API 组装,如果是几个 API 组合在一起,然后在返回首屏,就会导致 rt 很长,性能下降的非常明显。当然,也可以解,你需要加缓存策略,减少不必要的网络请求,将结果放到 Redis 里。另外将一些个性化需求,比如千人千面的推荐放到页面中做懒加载。
如果是纯服务器渲染,那么要求会更加苛刻,有时 rt 有 10 几秒,甚至更长,此时要保证 QPS 还是有很大难度的。除了合并接口,对接口进行缓存,还能做的就是对页面模块进行分级处理,从布局,核心展示模块,以及其他模块。
除了上面这些业务方法外,剩下的就是 Node.js 自身的性能调优了。比如内存溢出,耗时函数定位等,cpu 采样等,推荐使用成熟的 alinode 和 node-clinic。毕竟 Node.js 专项性能调优模块过多,不如直接用这种套装方案。
Node.js 在大前端布局里意义重大,除了基本构建和 Web 服务外,这里我还想讲 2 点。首先它打破了原有的前端边界,之前应用开发只分前端和 API 开发。但通过引入 Node.js 做 BFF 这样的 API Proxy 中间层,使 API 开发也成了前端的工作范围,让后端同学专注于开发 RPC 服务,很明显这样明确的分工是极好的。其次,在前端开发过程中,有很多问题不依赖服务器端是做不到的,比如场景的性能优化,在使用 React 后,导致 bundle 过大,首屏渲染时间过长,而且存在 SEO 问题,这时候使用 Node.js 做 SSR 就是非常好的。
当然,前端开发使用 Node.js 还是存在一些成本,要了解运维等技能,会略微复杂一些,不过也有解决方案,比如 Servlerless 就可以降级运维成本,又能完成前端开发。直白点讲,在已有 Node.js 拓展的边界内,降级运维成本,提高开发的灵活性,这一定会是一个大趋势。
未来,API Proxy 层和 SSR 都真正的落在 Servlerless,对于前端的演进会更上一层楼。向前是 SSR 渲染,先后是 API 包装,攻防兼备,提效利器,自然是趋势。
尾理论 : 网络时代兴起的一种新理论,由于成本和效率的因素,当商品储存流通展示的场地和渠道足够宽广,商品生产成本急剧下降以至于个人都可以进行生产,并且商品的销售成本急剧降低时,几乎任何以前看似需求极低的产品,只要有卖,都会有人买。这些需求和销量不高的产品所占据的共同市场份额,可以和主流产品的市场份额相比,甚至更大。
长尾效应,“头”(head)和“尾”(tail)是两个统计学名词。正态曲线中间的突起部分叫“头”;两边相对平缓的部分叫“尾”。从人们需求的角度来看,大多数的需求会集中在头部,而这部分我们可以称之为流行,而分布在尾部的需求是个性化的,零散的小量的需求。而这部分差异化的、少量的需求会在需求曲线上面形成一条长长的“尾巴”,而所谓长尾效应就在于它的数量上,将所有非流行的市场累加起来就会形成一个比流行市场还大的市场。
马太效应:(Matthew Effect),指强者愈强、弱者愈弱、好的愈好,坏的愈坏,多的愈多,少的愈少的现象
羊群效应:也称从众效应,指人们经常受到多数人影响,从而跟从大众的思想或行为,也被称为“从众效应”。人们会追随大众所同意的,将自己的意见默认否定,且不会主观上思考事件的意义。羊群效应是诉诸群众谬误的基础。
霍桑效应:指那些意识到自己正在被别人观察的个人具有改变自己行为的倾向。
TMT:数字新媒体,或叫TMT(Technology,Media,Telecom)产业。TMT是电信、媒体和科技三个英文单词的缩写的第一个字头,整合在一起,实际是未来电信、媒体科技(互联网),包括信息技术这样一个融合趋势所产生的大的背景,这就是TMT产业。
PDCA:这是一种用于持续改进产品的框架,计划(Plan)+执行(Do)+检查(Check)+处理(Act),在初期确定发展目标和达到发展目标所需的关键任务,然后按照计划执行,并不断检查计划的执行情况,并给予及时的处理意见。
用户任务的闭环:指的是一系列帮助用户完成任务的环节,这些环节可以应对任务可能出现的各种情况。
MVP:是指的Minimum Viable Product,最小可行产品,即用最低的成本实现一个尽可能展示核心概念的产品,产品团队可以通过它收集到尽可能多的用户反馈和数据,从而评估这个产品能带来的效益。
CRUD:创建(Create)、检索(Retrieve)、更新(Update)、删除(Delete),有时候也简称“增删改”这是面向对象设计中最常用的4个基本方法。说来这是数据库里的必备的知识,但作为互联网公司的产品经理,这也是经常会提起的功能点。
现金牛产品:是指利润率超高的产品,并且利润占公司总利润的很大比例,比如魔兽世界,一度占据九城90%的收入,曾经是九城最重要的现金牛。有一些平台产品本身就是最大的现金牛产品,比如百度的搜索,既是平台又是现金牛。
平台产品:就是能通过自身的资源优势拉动其他产品的产品。平台产品具有强大的生命力和拉动能力,如果成功,往往是一家公司的基石。例如QQ、百度、Google、微软等。
ARPU : (Average Revenue Per User)即每用户平均收入,用于衡量电信运营商和互联网公司业务收入的指标。
CPC : 网络中最常见的一种广告形式,它是英文单词Cost Per Click的缩写意思就是每次点击付费广告
SPAM:互联网上到处散布垃圾广告消息的现象。在搜索引擎上的Spam通常也称为作弊。搜索引擎营销中所说的SPAM是专门针对那些欺骗搜索引擎的信息。搜索引擎垃圾技术是利用不道德的技巧去提高自己搜索引擎上的排名。不诚实的网站管理员就是利用这样的手段去欺骗搜索引擎从而获得较高的排名。
病毒式营销:源于英文词汇viralmarketing。常用于进行网站推广、品牌推广等。利用的是用户口碑传播的原理,在互联网上,这种“口碑传播”更为方便,可以像病毒一样迅速蔓延,因此病毒性营销成为一种高效的信息传播方式,而且,由于这种传播是用户之间自发进行的,因此几乎是不需要费用的网络营销手段。
BRD:Business Requirements Document (商业需求文档)
是基于商业目标或价值所描述的产品需求内容文档(报告)。其核心的用途就是用于产品在投入研发之前,由企业高层作为决策评估的重要依据。其内容涉及市场分析,销售策略,盈利预测等,通常是供决策层们讨论的演示文档,一般比较短小精炼,没有产品细节。
针对人群:一般都是针对老版或CEO或者项目总负责人
MRD:Market Requirements Document (市场需求文档)
该文档在产品项目过程中属于“过程性”文档。是市场部门的产品经理或者市场经理编写的一个产品的说明需求的文档。该文档在产品项目过程中属于“过程性”文档。该文档是产品项目由“准备”阶段进入到“实施”阶段的第一文档,其作用就是“对年度产品中规划的某个产品进行市场层面的说明”,这个文档的质量好坏直接影响到产品项目的开展,并直接影响到公司产品战略意图的实现。该文档在产品项目中是一个“承上启下”的作用,“向上”是对不断积累的市场数据的一种整合和记录,“向下”是对后续工作的方向说明和工作指导。
针对人群:一般都是商务、运营、市场人员
PRD:Product Requirements Document (产品需求文档)
该文档是产品项目由“概念化”阶段进入到“图纸化”阶段的最主要的一个文档,其作用就是“对MRD中的内容进行指标化和技术化”,这个文档的质量好坏直接影响到研发部门是否能够明确产品的功能和性能。
针对人群:一般都是项目组、开发组、测试组、策划组、体验组人员
FSD:Functional Specifications Document (功能详细说明文档)
功能详细说明。有一点像“概要设计”,在BRD、MRD和PRD的基础上,这步就开始往开发衔接了,产品UI、业务逻辑的细节都要确定,细化文档并保持更新。相应的,有很多内容,比如表结构设计,要由项目经理来编写了。
C2C:Consumer to Consumer(顾客对顾客)
消费者个人间的电子商务行为。比如一个消费者有一台电脑,通过网络进行交易,把它出售给另外一个消费者,此种交易类型就称为C2C电子商务。
例如:淘宝网 拍拍网 易趣网
B2B:Business to Business(商家对商家) 模式:垂直,综合,自建,关联
指企业与企业之间通过专用网络或Internet,进行数据信息的交换、传递,开展交易活动的商业模式。它将企业内部网和企业的产品及服务,通过 B2B 网站或移动客户端与客户紧密结合起来,通过网络的快速反应,为客户提供更好的服务,从而促进企业的业务发展。
O2O:Online to Offline(线上线下电子商务)
将线下的商务机会与互联网结合,让互联网成为线下交易的平台,这个概念最早来源于美国。O2O的概念非常广泛,既可涉及到线上,又可涉及到线下,可以通称为O2O。主流商业管理课程均对O2O这种新型的商业模式有所介绍及关注。
例如:百度 阿里 腾讯
P2P:person to person (个人对个人)
P2P金融指个人与个人间的小额借贷交易,一般需要借助电子商务专业网络平台帮助借贷双方确立借贷关系并完成相关交易手续。借款者可自行发布借款信息,包括金额、利息、还款方式和时间,实现自助式借款;借出者根据借款人发布的信息,自行决定借出金额,实现自助式借贷
例:人人贷
B2C:Business to Consumer(商家对个人)
“商对客”是电子商务的一种模式,也就是通常说的直接面向消费者销售产品和服务商业零售模式。
企业例如:阿里巴巴
UCD:User Centered Design(以用户为中心的设计)
在进行产品设计、开发、维护时从用户的需求和用户的感受出发,围绕用户为中心进行产品设计、开发及维护,而不是让用户去适应产品。无论产品的使用流程、产品的信息架构、人机交互方式等,以UCD为核心的设计都时刻高度关注并考虑用户的使用习惯、预期的交互方式、视觉感受等方面。
UX:User Experience Design(用户体验)
UX设计指以用户体验为中心的设计。UX设计师研究和评估一个系统的用户体验,关注与该系统的易用性,价值体现,实用性,高效性等。
UI:User Interface(用户界面)
泛指用户的操作界面,包含移动APP,网页,智能穿戴设备等。
UI设计主要指界面的样式,美观程度。而使用上,对软件的人机交互、操作逻辑、界面美观的整体设计则是同样重要的另一个门道。
UGC:User Generated Content(用户原创内容)
它并不是某一种具体的业务,而是一种用户使用互联网的新方式,即由原来的以下载为主变成下载和上传并重。
例如:豆瓣网 优酷土豆 WIKI
CLI:Command-line Interface(命令行界面)
是指可在用户提示符下键入可执行指令的界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
(LINUX的命令行界面就是典型的CLI)。
GUI:Graphical User Interface(图形用户界面)
采用图形方式显示的计算机操作用户界面。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置,以”各种美观而不单调的视觉消息“提示用户”状态的改变“,势必得比简单的消息呈现花上更多的计算能力。
NUI:Natural User Interface(自然用户界面)
一种更加简单、更加直观、更加自然的程序–Project Natal 。
UED:User Experience Design(用户体验设计师)
UED是进行产品策划的主力之一,他们用自己的知识、经验、设计能力拿出设计方案。UED不只是互联网专家,还是行业专家。能够用自己的互联网知识来设计出行业专家想实现的操作,而付诸以商业营销。
SEO:Search Engine Optimization(搜索引擎优化)
SEO是指通过对网站进行站内优化和修复(网站Web结构调整、网站内容建设、网站代码优化和编码等)和站外优化,从而提高网站的网站关键词排名以及公司产品的曝光度。
(SEO这个大家可以去唐杰的个人博客站看。他应该是90后这一代中最早接触互联网的,也是90后从事这个行业的第一批人。而他在转产品时就是学习的SEO。他的博客里面也有很多关于产品的。我感觉受益良多,大家有想的可以去看看。互联网产品经理@唐杰)
SNS:Social Networking Services(社会性网络服务)
指社交网络服务,包括了社交软件和社交网站。也指社交现有已成熟普及的信息载体,如短信SMS服务。SNS的另一种常用解释:全称Social Networking Site,即“社交网站”或“社交网”。SNS也指Social Network Software,社交网络软件,是一个采用分布式技术,通俗地说是采用P2P(Peer to Peer)技术,构建的下一代基于个人的网络基础软件。
KPI:Key Performance Indicator(关键绩效指标)
通过对组织内部流程的输入端、输出端的关键参数进行设置、取样、计算、分析,衡量流程绩效的一种目标式量化管理指标,是把企业的战略目标分解为可操作的工作目标的工具,是企业绩效管理的基础。KPI可以使部门主管明确部门的主要责任,并以此为基础,明确部门人员的业绩衡量指标。建立明确的切实可行的KPI体系,是做好绩效管理的关键。关键绩效指标是用于衡量工作人员工作绩效表现的量化指标,是绩效计划的重要组成部分。
IM:Instant Messaging(即时通信)
目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。 不容置疑,Internet已经成为真正的信息高速公路。从实际工程应用角度出发,以计算机网络原理为指导,结合当前网络中的一些常用技术,编程实现基于C/S架构的网络聊天工具是切实可行的。
一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。 例如:信鸽、视高科技的视高可视协同办公平台、263EM、群英CC2010、通软联合的GoCom、腾讯公司的RTX、IBM的Lotus Sametime、点击科技的GKE、中国互联网办公室的imo、中国移动的企业飞信、华夏易联的e-Link、擎旗的UcStar等
JD:Job Descriptions(职位描述、职位界定)
对经过职位分析得到的关于某一特定职位的职责和工作内容进行的一种书面记录其成果叫工作说明书(job description),日文中工作描述就是给工作画像,是把工作所具有的一些特征用白描的手法写下来。
它主要包括八项具体内容信息:
职务基本信息,职务目的,管理权限,工作关系,责任范围与影响程度,工作业绩衡量标准,任职的基本要求和高绩效的要求,薪资收入标准与变化的条件与要求等。
LBS:Location Based Service(基于位置的服务)
是指通过电信移动运营商的无线电通讯网络或外部定位方式,获取移动终端用户的位置信息,在GIS平台的支持下,为用户提供相应服务的一种增值业务
意指与定位相关的各类服务系统,简称”定位服务”。
PV:page view(页面浏览量)
通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。网页浏览数是评价网站流量最常用的指标之一,简称为PV。监测网站PV的变化趋势和分析其变化原因是很多站长定期要做的工作。 Page Views中的Page一般是指普通的html网页,也包含php、jsp等动态产生的html内容。来自浏览器的一次html内容请求会被看作一个PV,逐渐累计成为PV总数。
UV:unique visitor(网站独立访客)
指通过互联网访问、浏览这个网页的自然人。
对于使用真实IP上网的用户,UV和IP的数值是相同的
IP是一个反映网络虚拟地址对象的概念,UV是一个反映实际使用者的概念,每个UV相对于每个IP,更加准确地对应一个实际的浏览者。使用UV作为统计量,可以更加准确的了解单位时间内实际上有多少个访问者来到了相应的页面。
DAU:Daily Active User(日活跃用户量)
常用于反映网站、互联网应用或网络游戏的运营情况。DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),这与流量统计工具里的访客(UV)概念相似。
RSS:Really Simple Syndication(简易信息聚合)
一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。
RSS目前广泛用于网上新闻频道。
SS和Atom是一种信息聚合的技术,都是为了提供一种更为方便、高效的互联网信息的发布和共享,用更少的时间分享更多的信息。
SDK:Software Development Kit(软件开发工具包)
一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
OTA:Online Travel Agent(在线旅行社)
旅游消费者通过网络向旅游服务提供商预定旅游产品或服务,并通过网上支付或者线下付费,即各旅游主体可以通过网络进行产品营销或产品销售
VP:Vice President (副总裁)
副总统、副总裁、副总监等职位,泛指所有的高层副级人物。
AVP:Assistant Vice President (副总裁助理)
副总裁助理,协助加强业务线日常运营管理,协助主管副总裁完成流程优化、绩效管理、质量与风险管理等工作的协调和推进
HRD:Human Resource Director (人力资源总监)
目前很多公司设立了HRD的职位,其实说白了就是人力资源总监/主管HRD(Human Resource Director)。
COO:Chief Operating Officer(运营总监)
又称首席运营官。该职位要全面负责公司的市场运作和管理;参与公司整体策划,健全公司各项制度,完善公司运营管理;推动公司销售业务,推广公司产品,组织完成公司整体业务计划;建立公司内部信息系统,推进公司财务、行政、人力资源的管理;负责协调各部门工作,建立有效的团队协作机制;维持并开拓各方面的外部关系;管理并激励所属部门的工作绩效。
CMO:Chief Marketing Officer (市场总监)
指企业中负责市场运营工作的高级管理人员,又称作市场部经理、营销总监。
PM:Product Manager(产品经理)、Production Manager(生产经理)、Project Manager(项目经理)
项目的管理者,在有限的资源约束下,运用系统的观点、方法和理论,对项目涉及的全部工作进行有效地管理。即从项目的投资决策开始到项目结束的全过程进行计划、组织、指挥、协调、控制和评价,以实现项目的目标。
URL:Uniform Resoure Locator(统一资源定位器)
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
(说白了就是链接、URL链接)
SKU:Stock Keeping Unit(库存量单位)
即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。
SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。
SPU:Standard Product Unit (标准化产品单元)
是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。
ROI:Return On Investment(投资回报率)
通过投资而应返回的价值,即企业从一项投资活动中得到的经济回报。
ERP:Enterprise Resource Planning(企业资源计划)
由美国 Gartner Group 公司于1990年提出。企业资源计划是 MRP II(企业制造资源计划)下一代的制造业系统和资源计划软件。
关注公众号:PMP项目管理之家、才聚项目管理PMP暨NPDP考试中心
北京一骑当千网络科技倾力打造的全新Q版策略手游《群英天下》,将于9月28日上午10点正式在安卓平台全面开启不删档测试。
《群英天下》以Q版画风打造融合策略、战斗、卡牌、养成等多种玩法于一体的多元化游戏体验,作为策略手游玩法新思路的开拓者,《群英天下》在创造了丰富宏观策略玩法体系的基础上,将微观战场极具视觉冲击力的战斗指挥体验也融入游戏的核心玩法当中。玩家在《群英天下》中,不但能作为运筹帷幄的主公在大战略玩法上烧脑,更能统领三军真正进入战场,化身发号施令的三军统帅带领将士们走向胜利。
[声势浩大的激萌战场]
首先《群英天下》让人眼前一亮的莫过于微观战斗中两军对垒的宏大战斗场景。或注重大战略体验或注重战场对战体验,而二者只能选其一是传统策略手游长期以来饱受诟病的问题。《群英天下》在面对策略手游固有弊病的问题上力主革新,提出“战斗指挥”和“战略体验”并重的新方案。
在《群英天下》的战斗系统中,玩家毫无疑问将作为战局走向的主导因素进入战场当中,所有将领都需要在玩家的号令之下才能发挥全部实力,通过对敌我战场态势的洞察,决定何时何地让将领们施放技能,先让敌方的哪位将领光荣领盒饭等等。以及在《群英天下》引人入胜的攻城战斗中,强有力的攻城重武器将加入战场开启一场更为震撼的攻城作战,充分发挥各个位置将领的作用,保护己方攻城武器攻击顺利,让辅助将领守护好阵营的后排支援火力,都是攻城最终能否成功的关键。
[多元融合的策略体验]
策略玩法作为游戏的核心所在,《群英天下》力图为玩家带来一场多元融合的多元化策略玩法新体验。在微观战场中玩家策略的重要性自是不必多言,而在宏观的策略体验上,也远非调兵遣将,排布阵型那么单调。
游戏的卡牌、养成等玩法都将作为构成策略体验的重要一环,《群英天下》跳出时间对游戏背景的限制,以中国古典神话为代入,玩家以时间穿越者的身份进入游戏当中。时间尺度上的自由为游戏带来了囊括各个历史时期的海量传奇将领,而海量传奇将领又拥有各自的基础属性和将领技能,这不但意味着每位将领擅长的作战位置的多样,更为玩家的策略体验提供了无限的创造空间,如何巧妙地搭配这些传奇将领,让他们彼此协同构成一个空前强大的整体,如何利用战前侦察的情报针对敌方阵型派出最具针对性的强大军团,以及如何运用好游戏的养成系统,让团战中最具性价比的将领优先得到迅速的提升等等,策略、战斗、卡牌、养成等元素环环相扣开启多元玩法有机融合的全新多元化游戏体验。
手游行业的媒体老师们提前体验了这款游戏,他们体验完之后就说了一句话!
腾讯视频:https://v.qq.com/x/page/q0721olxh00.html
优酷视频:http://v.youku.com/v_show/id_XMzg0MDA5NjAwMA==。html
flash代码:http://player.youku.com/player.php/sid/XMzg0MDA5NjAwMA==/v.swf
9月28日上午10点,《群英天下》已准备好迎接全体安卓平台的主公们执掌帅印!
97973手游网声明:97973手游网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
*请认真填写需求信息,我们会在24小时内与您取得联系。