有两段Jquery代码,分别js实现分页功能代码两处功能,我需要二合一,但是网页的功能不变,可以改动html

当前位置:&&
本页文章导读:
&&&&?jquery 实现二级/三级/多级联动菜单的思路及代码&&&&&&
本文介绍使用jQuery的AJAX功能和asp.net来实现省市区的三级联动效果,其他二级、三级或多级联动也可以按照此方法完成。文章中涉及到的数据表为City,为方便管理。 设计此表如下 ID:自增长.........&&&&?JQueryEasyUI datagrid框架的基本使用&&&&&&
今天说说这个datagrid框架的基本使用,这个框架一直以来都是大家比较头疼的框架,尤其是Json数据的拼接,后台前台都很重要,使用这个框架,最重要的是仔细:无需废话,上代码了: 代码.........&&&&?Jquery中使用setInterval和setTimeout的方法&&&&&&
方法1. 应用jQuery的扩展可以解决这个问题。
代码如下:$(document).ready(function(){$.extend({
show:function(){
alert("ready");
}});setInterval("show()",3000);});方法2. 指定定时执行的函数时不要使用引号和括.........
[1]jquery 实现二级/三级/多级联动菜单的思路及代码
&&&&来源:&互联网& 发布时间:&
本文介绍使用jQuery的AJAX功能和asp.net来实现省市区的三级联动效果,其他二级、三级或多级联动也可以按照此方法完成。文章中涉及到的数据表为City,为方便管理。 设计此表如下 ID:自增长字段 City_Name:城市名称 City_Code:城市代码 我们根据城市代码来查询省、市、区。城市代码结构大致如下: 内蒙古:150000,呼和浩特:150100,新城区:150101。 其他地区代码与此一样,省级为省级编号+0000,市级为省级编号+市级编号+00,地区为省级编号+市级编号+地区编号。 City.ASPX代码为:
代码如下: &!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"& &html xmlns="http://www.w3.org/1999/xhtml"& &head runat="server"& &title&jQuery + ASP.NET实现三级联动&/title& &script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"&&/script& &style type="text/css"& #dpCity{ display: position:} #dpArea{ display:position:} &/style& &/head& &body& &div& 省:&asp:DropDownList ID="dpProvince" runat="server"&&/asp:DropDownList&
市:&asp:DropDownList ID="dpCity" runat="server"&&/asp:DropDownList&
区:&asp:DropDownList ID="dpArea" runat="server"&&/asp:DropDownList& &/div& &/body& &/html&
代码如下: jQuery(document).ready(function () { var dp1 = jQuery("#dpProvince"); var dp2 = jQuery("#dpCity"); var dp3 = jQuery("#dpArea"); //填充省的数据 loadAreas("", "dpProvince"); //给省绑定事件,触发事件后填充市的数据 jQuery(dp1).bind("change keyup", function () { var provinceID = dp1.attr("value"); loadAreas(provinceID, "dpCity"); dp2.fadeIn("slow"); }); //给市绑定事件,触发事件后填充区的数据 jQuery(dp2).bind("change keyup", function () { var cityID = dp2.attr("value"); loadAreas(cityID, "dpArea"); dp3.fadeIn("slow"); }); }); function loadAreas(val, item) { jQuery.ajax({ type: "post", url: "CityLoader.asmx/GetCityList", data: { code: val, a: Math.random() }, error: function () {
}, success: function (data) {
var json = eval(data); jQuery("#" + item).append("&option value='' selected='selected'&请选择&/option&"); for (i = 0; i & json. i++) { jQuery("#" + item).append(jQuery("&option&&/option&").val(json[i].c_code).html(json[i].c_name)); }; } }); }
后台代码:
代码如下: //实例类 public class CityModel { int _ string _ string _ public int ID { set { _id = } get { return _ } } public string CityName { set { _cityname = } get { return _ } } public string CityCode { set { _citycode = } get { return _ } } } //DAL层,返回DataTable,使用通用SqlHelper public DataTable CityList(string pcode) { string SQL = "SELECT * FROM city WHERE 1=1"; if (!string.IsNullOrEmpty(pcode)) { if (pcode.Substring(2, 2) != "00") { SQL = SQL + " AND RIGHT(citycode,2)&&'00' AND LEFT(citycode,4)=LEFT(@pcode,4)"; } else { SQL = SQL + " AND RIGHT(citycode,2)='00' AND LEFT(RIGHT(citycode,4),2)&&'00' AND LEFT(citycode,2)=LEFT(@pcode,2)"; } } else { SQL = SQL + " AND LEFT(citycode,2)&&'00' AND RIGHT(citycode,4)='0000'"; } SQL = SQL + " ORDER BY sorts ASC"; SqlParameter[] Param ={ new SqlParameter("@pcode",pcode) }; using (SqlConnection conn = new SqlConnection(DBUtility.SqlHelper.ConnectionStringLocalTransaction)) { DataSet ds = DBUtility.SqlHelper.ExecuteDataSet(conn, CommandType.Text, SQL, Param); return ds.Tables[0]; } } //BLL层,返回City的泛型列表 public List&CityModel& CityList(string code) { List&CityModel& list = new List&CityModel&(); DAL. CityDAL cd = new DAL.CityDAL(); DataTable dt = cd.CityList(code); if (dt.Rows.Count & 0) { for (int i = 0; i & dt.Rows.C i++) { CityModel cm = new CityModel(); cm.ID = int.Parse(dt.Rows[i]["id"].ToString()); cm.CityName = dt.Rows[i]["cityname"].ToString(); cm.CityCode = dt.Rows[i]["citycode"].ToString(); list.Add(cm); } }
CityLoader.asmx:
代码如下: /// &summary& /// CityLoader 的摘要说明 /// &/summary& [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class CityLoader : System.Web.Services.WebService { [WebMethod] public void GetCityList(string code) { CityBLL cb = new CityBLL(); StringBuilder sb = new StringBuilder(); List&CityModel& cm = cb.CityList(code); sb.Append("["); if (cm.Count & 0) { for (int i = 0; i & cm.C i++) { CityModel model = cm[i]; sb.Append("{"); sb.AppendFormat(@"""c_name"":""{0}"",", model.CityName); sb.AppendFormat(@"""c_code"":""{0}""", model.CityCode); sb.Append("}"); if (i & cm.Count - 1) { sb.Append(","); } } } sb.Append("]"); System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); System.Web.HttpContext.Current.Response.Write(sb.ToString()); } }
[2]JQueryEasyUI datagrid框架的基本使用
&&&&来源:&互联网& 发布时间:&
今天说说这个datagrid框架的基本使用,这个框架一直以来都是大家比较头疼的框架,尤其是Json数据的拼接,后台前台都很重要,使用这个框架,最重要的是仔细:无需废话,上代码了: 代码如下:&link href="jquery-easyui-1.3.2/themes/default/easyui.css" rel="stylesheet" type="text/css" /&&!--easyui最全的样式包也可单独引用你想使用的样式包--&&link href="jquery-easyui-1.3.2/themes/icon.css" rel="stylesheet" type="text/css" /&&!--easyui自带图片样式包,也可自行添加--&&script src="jquery-easyui-1.3.2/jquery-1.8.0.min.js" type="text/javascript"&&/script&&!--我使用的是easyui 1.3.2,基于jquery-1.8.0--&&script src="jquery-easyui-1.3.2/jquery.easyui.min.js" type="text/javascript"&&/script&&!--easyui的js包--&&script src="jquery-easyui-1.3.2/locale/easyui-lang-zh_CN.js" type="text/javascript"&&/script&&!--easyui的中文语言包,默认是英文--&&/head&&body id="layoutbody" &&div data-options="region:'north',title:'North Title',split:true" &&/div&&div data-options="region:'south',title:'South Title',split:true" &&/div&&div data-options="region:'east',iconCls:'icon-reload',title:'East',split:true" &&/div&&div data-options="region:'west',title:'West',split:true" &&/div&&div data-options="region:'center',title:'center title'" href="HTMLPage.htm" &&!--这里指向了一个htm页--&&/div&&/body&&/html&HTMLPage.htm代码: 代码如下:&script type="text/javascript" charst="utf-8"&//因为layout框架指向href时,只取html页面body中间的部分,所以该页面这样写即可//有datagrid包含属性较多,所以尽量使用js的方式初始化datagrid框架$(function () {$("#dg").datagrid({url: "GetJson.ashx", //指向一个一般处理程序或者一个控制器,返回数据要求是Json格式,直接赋值Json格式数据也可,我以demo中自带的Json数据为例,就不写后台代码了,但是我会说下后台返回的注意事项title: "数据展示表格",iconCls: "icon-add",fitColumns: false, //设置为true将自动使列适应表格宽度以防止出现水平滚动,false则自动匹配大小//toolbar设置表格顶部的工具栏,以数组形式设置idField: 'id', //标识列,一般设为id,可能会区分大小写,大家注意一下loadMsg: "正在努力为您加载数据", //加载数据时向用户展示的语句pagination: true, //显示最下端的分页工具栏rownumbers: true, //显示行数 1,2,3,4...pageSize: 10, //读取分页条数,即向后台读取数据时传过去的值pageList: [10, 20, 30], //可以调整每页显示的数据,即调整pageSize每次向后台请求数据时的数据//由于datagrid的属性过多,我就不每个都介绍了,如有需要,可以看它的APIsortName: "name", //初始化表格时依据的排序 字段 必须和数据库中的字段名称相同sortOrder: "asc", //正序columns: [[{ field: 'code', title: 'Code', width: 100 },{ field: 'name', title: 'Name', width: 100 ,sortable:true},//sortable:true点击该列的时候可以改变升降序{ field: 'addr', title: 'addr', width: 100,//这里可以添加这样一个方法,使其显示数据得到改变// formatter: function (value, row, index) {// if (value == "0") {// return "普通角色";// } else {// return "特殊角色";// }// }}]]//这里之所以有两个方括号,是因为可以做成水晶报表形式,具体可看demo});});&/script&&div id="tt"
fit="true"border="false"&&div title="Tab1"
border="false"&&table id="dg"&&/table&&/div&&/div&
这是前台请求数据时发送的数据;
Json格式数据一定要是双引号的,单引号无法显示数据哦;
数据格式如下: 代码如下:{ "total":239, "rows":[ {"code":"001","name":"Name 1","addr":"Address 11","col4":"col4 data"}, {"code":"002","name":"Name 2","addr":"Address 13","col4":"col4 data"}, {"code":"003","name":"Name 3","addr":"Address 87","col4":"col4 data"}, {"code":"004","name":"Name 4","addr":"Address 63","col4":"col4 data"}, {"code":"005","name":"Name 5","addr":"Address 45","col4":"col4 data"}, {"code":"006","name":"Name 6","addr":"Address 16","col4":"col4 data"}, {"code":"007","name":"Name 7","addr":"Address 27","col4":"col4 data"}, {"code":"008","name":"Name 8","addr":"Address 81","col4":"col4 data"}, {"code":"009","name":"Name 9","addr":"Address 69","col4":"col4 data"}, {"code":"010","name":"Name 10","addr":"Address 78","col4":"col4 data"} ] } 这里呢,后台传递数据很重要:
注意:表格Post或者get回来的请求中page:3 代表page为key,然后选择的当前页码为3rows:10 代表一页的大小为10后台返回的数据的格式为:{total:'',rows:[{},{}]} 只要包含了总数tatol字段,rows是具体的行数例如:Asp.Net MVC 例子:public JsonResult GetAllUserInfos(){int pageSize = 5;int pageIndex = 1;int.TryParse(this.Request["page"], out pageIndex);int.TryParse(this.Request["rows"], out pageSize);
pageSize = pageSize &= 0 ? 5 : pageSpageIndex = pageIndex & 1 ? 1 : pageI
var temp = db.UserInfo.OrderBy(u=&u.Sort).Skip&UserInfo&((pageIndex-1)*pageSize).Take&UserInfo&(pageSize).ToList&UserInfo&();Hashtable ht = new Hashtable();ht["total"] = db.UserInfo.Count();ht["rows"] =return Json(ht);}Asp.Net WebForm 例子:public void ProcessRequest(HttpContext context){context.Response.ContentType = "text/plain";var strWebName = context.Request["WebName"] ?? string.Evar GoodsNo = context.Request["GoodsNo"] ?? string.Eint categoryId = 0;
int pageIndex = 1;int pageSize = 10;
int.TryParse(context.Request["rows"], out pageSize);int.TryParse(context.Request["page"], out pageIndex);
decimal priceLeft = 0;decimal priceRight = 1000000;int goodsStatus = 0;decimal.TryParse(context.Request["PriceLeft"], out priceLeft);decimal.TryParse(context.Request["PriceRight"], out priceRight);int.TryParse(context.Request["CategoryId"], out categoryId);int.TryParse(context.Request["GoodsStatus"], out goodsStatus);var goodsQueryParamter = new GoodsQueryParamter();goodsQueryParamter.GoodsStatus = (Model.GoodsModel.GoodsStatusEnum)goodsS
var ds = goodsService.GetGoodsList(goodsQueryParamter);string json = string.E
if (ds != null && ds.Tables.Count & 0){System.Text.StringBuilder rowJson = new System.Text.StringBuilder();int colLen = ds.Tables[0].Columns.CDataColumnCollection col = ds.Tables[0].Cforeach (DataRow row in ds.Tables[0].Rows){System.Text.StringBuilder colJson = new System.Text.StringBuilder();rowJson.Append("{");for (int i = 0; i & colL i++){colJson.Append("\"" + col[i].ColumnName + "\":\"" + row[i].ToString() + "\",");}rowJson.Append(colJson.ToString().TrimEnd(','));rowJson.Append("},");}json = "{\"total\":" + ds.Tables[0].Rows[0]["sumGoods"] + ",\"rows\":[" + rowJson.ToString().TrimEnd(',') + "]}";}context.Response.Write(json);}
ASP.Net中有一个类也可以序列化Json格式数据;
[3]Jquery中使用setInterval和setTimeout的方法
&&&&来源:&互联网& 发布时间:&
方法1. 应用jQuery的扩展可以解决这个问题。
代码如下:$(document).ready(function(){$.extend({
show:function(){
alert("ready");
}});setInterval("show()",3000);});方法2. 指定定时执行的函数时不要使用引号和括号。
代码如下:$(function(){function show(){
alert("ready");}setInterval(show,3000);// 注意函数名没有引号和括弧! // 使用setInterval("show()",3000);会报“缺少对象” });
setTimeout()
   从载入后延迟指定的时间去执行一个表达式或者是函数;
仅执行一次 ;和window.clearTimeout一起使用.
setInterval()
   在执行时,它从载入页面后每隔指定的时间执行 一个表达式或者是函数;(功能类似于递归函数);和window.clearInterval一起使用.
补充说明:
这两个方法都可以用来实现在一个固定 时间段之后去执行JavaScript。不过两者各有各的应用场景。
实际上,setTimeout和 setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是 以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。不过这两个函数还是有区别的, setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代 码,而setTimeout只执行一次那段代码。虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通 过创建一个函数循环重复调用setTimeout,以实现重复的操作:
代码如下:showTime();function showTime(){
var today = new Date();
alert("The time is: " + today.toString ());
setTimeout("showTime()", 5000);}
一旦调 用了这个函数,那么就会每隔5秒钟就显示一次时间。如果使用setInterval,则相应的代码如下所示:
代码如下:setInterval ("showTime()", 5000);function showTime(){
var today = new Date();
alert("The time is: " + today.toString ());}
这两种方法可能看起来非常像,而且显 示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一 次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着 如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。 而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行 一次那个函数。如果要求在 每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想 由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处 理时间,那么最好使用setTimeout。
最新技术文章:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,E-mail:www_169it_(请将#改为@)网易 Android工程模板化实践
编写其实是非常机械的。
网易工程模板是什么? & 对于各个基础模块,我们团队封装了自己的 SDK,如网络库、本地存储库、页面管理库、图片库等。使用我们的工程模板生成的初始工程,就已经包含了我们提供的基础模块,产品团队的开发不需要再花费重复的时间做技术调研、选型、SDK封装集成等工作,而
10:23&&&[]
Android逆向工程 实践篇 上篇给大家介绍的是基础+小Demo实践. 如果没有看过的同学可以进去看看.(逆向工程 初篇)本篇主要给大家介绍如何反编译后修改源码, 并打包运行在手机上.先介绍下本篇文章用到的工具和资源.1: Android Killer 1.3.1.0 (工具)2
23:07&&&[]
。 这里只是概括下网易漫画App混编实践中,语言层面上,值得关注的几条实践总结。 2.1 Optional
上图为Optional在标准库中的定义,Optional其实为可解包的遵循NilLiteralConvertible协议的枚举类型。 在 Swift 中,nil用来表示值缺失,任何可选类型
12:47&&&[]
工程化可以自动化处理一些繁复的工作,提高开发效率,减少低级错误。更重要的是,还是文章开头的说的,前端工程化最大的意义在于给我们新的视角去看待前端开发,让前端开发可以做更复杂、更有挑战的事情! 这是前端工程化实践的第一篇博文,后续还有对之前零零散散的博文的总结。不过整体来说,webpack任务是最复杂
22:41&&&[]
端职责不清晰,沟通成本高,且容易引入问题; 6.工程化实践较为困难。 因此,基于踩过的种种坑,需要采取一种更为合理的解耦的方式,前后端分离开始进入研究范畴。
网易视频云采用的分离方式
为解决后端套页面的问题,视图层交由前端负责,并提前制定接口,确定交互方式。开发环境上,前后端隔离,后端依然
16:06&&&[]
XCoreRedux框架:Android UI组件化与Redux实践 @author: 莫川 /nuptboyzhb/ XCoreRedux源码+Demo:/nuptboyzhb/XCoreRedux 使用android
16:39&&&[]
的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验。本文将详细介绍Android平台插件式开发和动态加载技术的原理和实现细节,回顾携程Android App的架构演化过程,期望我们的经验能帮助到更多的Android工程师。
2014年,随着业务发展需要和携程无线部门的拆分
10:38&&&[]
使用了网易云信产品,建立了一个短信模板,然后根据这个模板想给用户发短信验证码,但是提交时却出错了,我在云信平台提交了一个帖子,请高人帮忙看下,万分感激!
http://bbs.netease.im/read-tid-701?ds=1
说明下,我发最普通的短信,是可以成功收到的。所以发送
21:18&&&[]
IM(Instant Messaging)在Android中可谓运用广泛。QQ,Wechat,陌陌等应用都可以看作IM实时通讯APP,实时通讯在社交类APP中运用范围较广,其功能看起来也是比较cool的。今天我们将研究一下android IM软件是如何实现的。像IM这种实施通讯软件,除非公司有比
13:43&&&[]
。 在实际的工程中,我们的服务器大多是基于Linux的,比如常见的 ubuntu、centos 等。这些操作系统有时并不提供图形化界面,这时候RStudio的服务器版本就派上用场了。启动RStudio Server后,进入在浏览器中进入某一个页面后就可以像桌面版一样使用RStudio编辑器。当R的代码在
21:00&&&[]
介绍 RStudio Server 是 RStudio 公司打造的一款基于 Web 的开源编辑器,如果你熟悉 RStudio的桌面版本,那么使用RStudio Server对你来说基本上没什么难度。 在实际的工程中,我们的服务器大多是基于Linux的,比如常见的 ubuntu、centos 等
12:06&&&[]
前言 虽然 Gradle 势头很猛,但是 Maven 依然是 Java 项目构建的优先选择,本文简要介绍一些 Maven 工程实践 多模块(multiple module) 如果工程比较复杂,或者预期后续会变的比较复杂,可以将工程分成多个模块,常用的分模块的方法:
core,核心代码) util
11:55&&&[]个人感觉跟国外的数据可视化作品比起来,目前国内实践着的大部分数据可视化作品都是渣!!!想当年,作为一度痴迷数据新闻可视化的学生,羡慕information is beautiful的光鲜外衣,自学起来一些数据新闻网站,作为英语渣被虐得一把鼻涕一把泪!!!让我去厕所哭会儿。&br&&br&不过功夫不负有心人,还是让我找到了几个国外质量较高的数据可视化工具或资源。既然,楼主问到了,就在这儿曝光十个。嗯,首先,没有被此书虐过的童鞋&a href=&///?target=http%3A///subject/4188345/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Beautiful Visualization (豆瓣)&i class=&icon-external&&&/i&&/a& 还是最好找一下虐,毕竟...............基数就是基础,不来不去,它就在那儿&br&&br&&b&帮助你更好地理解数据,这正是可视化的要义。工具,便是更好的帮你理解可视化&/b&。(好吧我承认这句话是我自创的)&br&&br&NO1. 我个人最喜欢的:&br&&a href=&///?target=http%3A//Visual.ly& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Visual.ly&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& &a href=&///?target=http%3A//visual.ly/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Visually | Content Marketing for Brands&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//Visual.ly& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Visual.ly&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 用社交网络功能来连接在世界各地的所有成员。设计师们通过提交自己的项目进入他们的网站画廊,从而能够对数据实现可视化。它理想的目标是提供一个接口,用于直接在浏览器中创建动态的信息图表。该工具目前未发布,虽然我听说过一些私人beta测试。你可以注册您的电子邮件地址以接收更新消息,并可能邀请测试。至于他们的网络功能,&a href=&///?target=http%3A//Visual.ly& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Visual.ly&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 提供了极少数的合作伙伴页面。这些类似于个人资料页面,您可以查看评论,喜欢,意见和信息图表意见,但这些都是有针对性的对大品牌 - 国家地理、易趣、Skype、CNN 等。&br&&img src=&/e282a7da62a645bc51e4fe_b.jpg& data-rawwidth=&1204& data-rawheight=&694& class=&origin_image zh-lightbox-thumb& width=&1204& data-original=&/e282a7da62a645bc51e4fe_r.jpg&&&br&NO2. &br&Better World Flux&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Better World Flux&i class=&icon-external&&&/i&&/a&&br&这是一款漂亮的可视化工具!Better World Flux 是一个可以互动信息、图形的网站。选择一个国家,根据指示操作,比如可以选择预期寿命或饮水作为指标。有一个小的视频演示如何操作,你可以在YouTube上观看(&a href=&///?target=http%3A///watch%3Fv%3Dxck1Alcyh2A& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/watch?&/span&&span class=&invisible&&v=xck1Alcyh2A&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)。&br&&img src=&/ab0a2aa113b2_b.jpg& data-rawwidth=&1196& data-rawheight=&878& class=&origin_image zh-lightbox-thumb& width=&1196& data-original=&/ab0a2aa113b2_r.jpg&&&br&&br&NO3.&br&We Feel Fine&br&&a href=&///?target=http%3A//www.wefeelfine.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&We Feel Fine / by Jonathan Harris and Sep Kamvar&i class=&icon-external&&&/i&&/a&&br&We Feel Fine 标榜为人类情感而探索,这是我见过最独特的可视化引擎之一。开始前要点击其主页上的大按钮,该应用程序将据此加载操作系统。&br&&p&沿上面一行,你会发现飞出选项对数据进行排序。其标准包括年龄,性别,气候位置,甚至日期。该项目提供了整个世界的喜怒哀乐情绪,在任何给定的点,数据超级详细!这是对人类来说,真正令人震惊的实验。&/p&&p&当你点击画布的任何地方,飞球会分散。如果您将鼠标放在他们中的一个,它会提供更多的细节,点击打开,顶部有一个全新的选项。许多结果都来自Twitter。情绪和情感的数据数量级是令人难以置信。&/p&&img src=&/bba2d7c641c_b.jpg& data-rawwidth=&1190& data-rawheight=&888& class=&origin_image zh-lightbox-thumb& width=&1190& data-original=&/bba2d7c641c_r.jpg&&&br&&p&NO4. &/p&Rss Voyage&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rss Voyage - RSS feed reader with a difference&i class=&icon-external&&&/i&&/a&&br&另一个我个人最喜欢,且确实有助于形象化各地数据的网络数据的网站。如果您登录到Rss Voyage, 你可以导入自定义RSS供稿到您的帐户一整个数据图。在他们的网页,你可以点击“开始”与默认提供的应用程序。在这种情况下Rss Voyage将拉动几个流行的博客,如纽约时报,瘾科技,卫报,等等。&br&&p&如果您通过移动图形,点击一个特定的文章的观点时,他将固定在屏幕上。这包括标题,简短描述,元数据连同它的URL出版日期。如果在任何时候你想开始创建自己的RSS可视化,所有你需要做的就是创建一个帐户!&/p&&p&注册是完全免费的,你可以在页面的底部创建通过注册表格您的帐户。作为另一奖励功能&/p&&p&Rss Voyage可以让你轻松设置全屏模式浏览风格的RSS源。&/p&&img src=&/d16ce18c68f3d9662add0a76018d02ea_b.jpg& data-rawwidth=&1204& data-rawheight=&862& class=&origin_image zh-lightbox-thumb& width=&1204& data-original=&/d16ce18c68f3d9662add0a76018d02ea_r.jpg&&&br&NO5.Revisit&p&&a href=&///?target=http%3A//moritz.stefaner.eu/projects/revisit/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&moritz.stefaner.eu&i class=&icon-external&&&/i&&/a&&/p&&p&客观来讲,Revisit是一种重新定义我们如何看待微博的工具。有了这个工具,你可以与一个或多个关键字的数据创建连接。您可以将额外的标题添加到您的图形和分享的链接(甚至到微博) 。&/p&&p&点击一个单独的分离线,关闭图形将显示更多细节。通常包括元数据,如时间发布和相关的关键字。搜索条件仅限于标准的Twitter符号,使用逗号分隔的关键字列表。&/p&&p&如果有兴趣,我建议查看位于同一网站的创作数据可视化等项目。&a href=&///?target=http%3A//moritz.stefaner.eu/projects/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Truth & Beauty&i class=&icon-external&&&/i&&/a&&/p&&img src=&/e013e299a9d9b0_b.jpg& data-rawwidth=&600& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/e013e299a9d9b0_r.jpg&&&br&&p&NO6.&/p&Tag Galaxy&p&&a href=&///?target=http%3A//www.taggalaxy.de/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tag Galaxy&i class=&icon-external&&&/i&&/a&&/p&&p&Tag Galaxy是一个非常独特的可视化工具。他们的主页干净且易于理解,因为标签Flickr上有单独的一个搜索表单。此外左下角设有为新用户一些流行的建议。只需输入一个词,然后按Enter,通过Flickr的照片就可在Tag Galaxy查询。&/p&&p&他们的渲染引擎复制我们的太阳系的中心,太阳代表主要搜索项的外观,外部行星的轨道代表类似的标签。这是我见过的最酷的可视化演示渲染和Flash之一。&/p&&p&注意,当您在每个星球上悬停它会为你提供一个小的预览数。这是发现在Flickr的该标签的询问的照片总数。点击太阳将打开相关照片缩略图的球体,而旋转的行星会增加他们的搜索字词的查询。当然,你可以找到更多有关照片通过点击弹出完整视图。&/p&&img src=&/30a1c3a6ce51fbeab75c7a_b.jpg& data-rawwidth=&1196& data-rawheight=&890& class=&origin_image zh-lightbox-thumb& width=&1196& data-original=&/30a1c3a6ce51fbeab75c7a_r.jpg&&&br&&p&NO7.&/p&Google Fusion Tables&br&&p&&a href=&///?target=http%3A///fusiontables/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&About Fusion Tables&i class=&icon-external&&&/i&&/a&&/p&&p&我们都知道的龙头企业是谷歌。他们的实验室的后面几年已经运行了一些很有趣的实验,Google Fusion Tables就是其中之一。你需要的是一个谷歌账户。此工具可以公开在网上共享数据,并建立自定义的可视化图形。&/p&&br&这些可以从csv或Excel电子表格导入。尽管目前并不支持。登录后,会发现公共数据列表的表格与演示。这些都在不断更新,新的用户提交 ,打开文档后,顶部的工具栏会有其他菜单可视化链接,自定义图形。&br&&img src=&/2c2fbd28a3ebcbbdb4c31_b.jpg& data-rawwidth=&1198& data-rawheight=&880& class=&origin_image zh-lightbox-thumb& width=&1198& data-original=&/2c2fbd28a3ebcbbdb4c31_r.jpg&&&br&NO8.&br&Dipity&p&&a href=&///?target=http%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&没有什么比我们在地球上的历史更有趣。已经有很多的事件在过去10年到20年,更不用说十年到百年! Dipity 是一个奇妙的工具,他用来创建和嵌入自定义的互动时间表。用户可以在重要日期进行标记,包括照片,链接,音频,视频和其他形式的媒体。&/p&&img src=&/fc967cdaa49dfc2c49a48f3b4dfd27a1_b.jpg& data-rawwidth=&1200& data-rawheight=&716& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&/fc967cdaa49dfc2c49a48f3b4dfd27a1_r.jpg&&&br&&p&该服务需要您在创建时间表前注册一个帐号。选择一个免费的计划,在日后他们提供升级到保费计划&a href=&///?target=http%3A///premium/plans& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/premium/plan&/span&&span class=&invisible&&s&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&。幸运的是,该网站会提供公共的最流行的时间表成员,所以你可以很容易地通过排序动态时间表去发现一个令人兴奋的细目清单。我个人最喜欢的是史蒂夫工作的生活和事业照片甚至直到2011完全格式化。&a href=&///?target=http%3A///StevePro/Steve-Jobs-Life-and-Career/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/StevePro/Ste&/span&&span class=&invisible&&ve-Jobs-Life-and-Career/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/p&&br&&p&NO9.&/p&WIkiMindMap&p&&a href=&///?target=http%3A//www.wikimindmap.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WikiMindMap&i class=&icon-external&&&/i&&/a&&/p&&p&说到独特的展示台,维基百科也是一个网络,虽然你没有看到尽可能多的开发商,但是Wiki包含一个大的离谱的数据量! WikiMindMap可以让你选择一个区域,然后输入网址的页面。&/p&&p&如果您的关键字不完全匹配了一个页面,应用程序将提供给您最亲近的建议。圆圈内产生的链接将引出到主Wiki页面,而刷新链接打开的选项的树。这些都是相关的链接拉断主维基页面协调您的关键字。它也很容易通过点击链接刷新图标切换到一个新的根节点。&br&&/p&&img src=&/ab0e33b97fbc61ebb2806c6_b.jpg& data-rawwidth=&1184& data-rawheight=&956& class=&origin_image zh-lightbox-thumb& width=&1184& data-original=&/ab0e33b97fbc61ebb2806c6_r.jpg&&&br&&p&NO.10&/p&Axiis- Browser Market Share&p&&a href=&///?target=http%3A//www.axiis.org/examples/BrowserMarketShare.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&axiis.org/examples/Brow&/span&&span class=&invisible&&serMarketShare.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&Axiis 是用于数据可视化软件的最流行的网站之一。在他们的网页,你可以把酷炫的程序下载到您的PC或Mac电脑上运行。&/p&&br&&p&W3Schools已经记录用户和跟踪浏览器几年了。 Axiis编制从与最流行的Web浏览器形成一个美丽的可视化图形。和众多上市的包括Safari浏览器,网景,IE浏览器和谷歌Chrome浏览器合作。名单尚未更新为 ,但我们可能会看到公布在未来数月更新的信息图表。&br&&/p&&img src=&/d9e3cb1163dbdbaabfda64_b.jpg& data-rawwidth=&1198& data-rawheight=&886& class=&origin_image zh-lightbox-thumb& width=&1198& data-original=&/d9e3cb1163dbdbaabfda64_r.jpg&&&br&&p&国内的话,做得好的应该是财新的数据新闻实验室和网易了。&/p&&p&文章原刊载于数据新闻网(&a href=&///?target=http%3A//1ke.co/user/383& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&jake的1KE主页&i class=&icon-external&&&/i&&/a&)。&/p&&p&作者Jake为网页与手机平台设计师。&/p&&p&请关注微信公众号:“wow1ke”&/p&&p&更多资料:&a href=&///?target=http%3A///%3Fcat%3D12& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&财新数据可视化实验室&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//1ke.co/course/110& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据很大你想看看?没有这些可视化工具你可能看不懂&i class=&icon-external&&&/i&&/a&&/p&
个人感觉跟国外的数据可视化作品比起来,目前国内实践着的大部分数据可视化作品都是渣!!!想当年,作为一度痴迷数据新闻可视化的学生,羡慕information is beautiful的光鲜外衣,自学起来一些数据新闻网站,作为英语渣被虐得一把鼻涕一把泪!!!让我去厕…
本人已投身于全新行业全新领域,既跟Flash没关系,也跟HTML5没关系,所以关于这类的技术问题,请大家不要再邀请我去回答。&br&&br&---------这是一条更新线(2017.2)---------我特别不喜欢挖坟,但是有3个原因看到这个问题不得不答:&br&1. 我曾经从事了15年的Flash和HTML相关工作,我经历过。这是鄙人的亲身经历,1999年开始接触Flash技术,2000年向Macromedia提交了Flash AS1的Math相关算法而成为beta tester,2003年是Macromedia Flash的dev volunteer, 2004年成为Macromedia在中国的第一个技术员工,2005年,Adobe并购Macromedia结束,进入Adobe做工程师,2008成为Flash Video与Flash Media Server的大客户技术经理,2009年成为Flash Platform Evangelist,2014年离开Adobe前,除了Flash,也参与了Adobe HTML5系列技术工具的相关工作。&br&2. 我现在是一家做HTML5技术公司白鹭引擎的技术合伙人,管理这家公司的研发团队,每天的工作都跟HTML5的Web技术相关。&br&3. 这个时间点回答这个问题貌似最好,因为一切答案正在浮出水面。&br&&br&好了,回到答题本身。&br&&br&&p&我本人对于Flash和HTML5两个技术领域的观点判断大致如下:&/p&&ul&&li&Flash已经走入软件生命周期的末期,但它仍颇具价值。&/li&&li&Flash不论当初多么辉煌,在它的生命周期里从未真正赢得移动领域。&/li&&li&HTML5已经重回轨道,未来取胜的关键则在移动领域。&/li&&li&虽然HTML5已经重回轨道,但要达到高度完善的技术普及状态,它必须进行几方面的突破。&/li&&/ul&&br&&p&Flash已经走入软件生命周期的末期,是的,万物皆有始终,更何况Flash。日到今日,Flash已经有21岁。21岁对于一个人而言,正属风华绝代之年,但是在软件领域里,存活21年实在算的上是一个老家伙了。说到衰落,必然要提崛起。21年的过程中,Flash经历了三次成功高峰,分别是1999年的网络动画时代,2005年的Flash Video时代与2008年的Web Game时代。这三次互联网领域的高峰,全部都被Flash赶上(不得不说命好运也好),并且这三次成功,引领了Flash在生命周期中的一次又一次产品形态上的变化。&/p&&br&&p&Flash Animation的流行引领了Flash的第一次成功,1999年,借着第一波互联网.com的热潮,由于当时HTML技术功能上的羸弱,大量被人所称道的Banner,动画,MTV都是借助Flash创作而来,这些充满神奇的交互效果充斥了每个网站,Flash在网页动画创作领域开始快速崛起。我当时的雇主美国Macromedia公司旗下的Flash,Dreamweaver和Fireworks被国人亲切的叫做网页三剑客,当时我主要泡闪客帝国(前身是边城浪子的回声资讯)和蓝色理想这两个Flash开发者聚集的论坛。2004年,借助着前几年Flash所取得的成绩,Macromedia公司被Adobe公司以34亿美金收购。2005年,Flash有史以来最重要的版本之一Flash 8(codename:8 ball)登场,这一版本里集成了2个最重要的功能,其中一个功能引领了后来YouTube和优酷土豆视频网站的成功,就是Flash Player里集成了Sorenson Spark H.263(VP6)的视频解码功能,而另一个功能为以后Flash可以创作更精彩的Web Game埋下伏笔,就是Bitmap和Bitmapdata位图操作的实现。2008年,Flash又“幸运”的赶上了社交游戏的浪潮,随着Zynga和Facebook的大获成功,Flash在社交游戏的技术领域独领风骚,之后的Stage3D技术又让Flash彻底统治PC网页游戏领域。在Flash最为巅峰的这么多年内,任何其他类似的技术都没有在与Flash竞争上胜出,期间也出现过若干“Flash Killer”,包括Silverlight,JavaFX,Lazslo和Unity Player。作为胜出者Flash自然有他的缘由,就是独一无二高度统一的Flash Player,强大的内容设计开发工作流,多年积累而成的强大的社区生态。&/p&&br&&p&水满则溢,月盈而亏。Flash开始走下坡路业界都认为是从苹果乔布斯的那篇檄文而起。没错,那篇檄文是Flash开始走下坡路的开始,后续的一系列对Flash的不利消息又接踵而来,都给Flash造成了沉重的打击。我这里给各位总结一下Flash由盛转衰的几个重要事件。它们分别是:&/p&&ul&&li&苹果iOS不支持Flash Player.&/li&&li&MACOSX系统不提供面向Flash Player的视频硬件解码能力调用。&/li&&li&Adobe Flash Player所建立的Open Screen Project(OSP)计划的推进不佳被终止。&/li&&li&Adobe宣布裁撤Flex团队,终止Flash Builder开发计划,并将Flex项目捐给Apache,这间接促成了Google AngularJS的大获成功,因为AngularJS的作者就是Flex的核心科学家。&/li&&li&Adobe不再开发Android系统的Flash Player后续版本。&/li&&li&Adobe宣布终止开发了80%的ActionScript4.0和AVM3.0项目。&/li&&li&Adobe终止了Stage3D的后续开发工作。&/li&&li&Adobe终止AIR SDK的ANE(Adobe Native Extension)和内置Webkit的开发维护。&/li&&li&Adobe裁撤整个中国研发中心,其中有很多工程师原属于Flash团队,其中包括Flash Player,Stage3D,CrossBridge(原Alchemy),骨骼动画以及Platform Evangelism。(很有趣,其中一部分工程师后来加入了Egret团队)&/li&&li&FireFox曾默认关闭Flash内容显示。(修正:Firefox是因为Flash的一个0-day漏洞默认关闭了Flash内容,在修复后,又重新开启。来源:&a href=&///?target=http%3A///article/firefox-now-blocks-all-versions-of-flash-player-by-default/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Firefox now blocks all versions of Flash Player by default&i class=&icon-external&&&/i&&/a&)&/li&&li&Google Chrome停用NPAPI的支持,并关闭PPAPI Flash Player的硬件加速。&/li&&li&Google Chrome将Flash内容默认关闭。(修正:Google Chrome宣布将智能化选择性的关闭Flash内容的显示。来源:&a href=&///?target=http%3A///article/amazon-ditches-flash-ads-amid-ad-industry-push-towards-html5-ads/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/article/amazo&/span&&span class=&invisible&&n-ditches-flash-ads-amid-ad-industry-push-towards-html5-ads/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&/ul&&p&可以说是一系列的坏消息,如果合在一起看,那简直是坏的不能再坏的消息了,其中很多的决策来自于Adobe自己,这有充分的理由让我们相信,Flash这个平台型的技术已经进入了最后的生命周期。但Flash给Web进化带来了很多有价值的推动。&/p&&br&&p&首先,在Flash最为鼎盛的时期,来自Adobe的官方统计,全球有将近200万的Flash开发者,这个群体不同于其他语言的开发者,可以说他们是一个独特的开发者群体,我们可以理解他们才是真正的“Full Stack”工程师,会开发游戏,会制作动画,会创作富媒体应用,甚至很多人还兼修美术,烹饪和刺绣。从2010年Flash开始走下坡路,这些Flash开发者陆续转型,他们成为了后来众多应用和游戏公司的中坚力量,目前市场上大量的Unity,Cocos的手游开发者,Egret Engine社区里近一半的HTML5开发者,甚至是大量的AngularJS和JQueryMobile的开发者,都来自于原来的Flash社区。&/p&&br&&p&其次,Flash开发生态为HTML5标准的进化带来了大量有借鉴价值的范本模型。Adobe通过Flash Professional工具开放了JSFL扩展;支持了JQuery Mobile和WebGL的输出,甚至于矢量绘图的动画都支持CreateJS的导出;Adobe将全球最流行的骨骼动画项目之一DragonBones转给了Egret继续原生和HTML5版本的开发工作;Flex项目的主程成为了Google AngularJS的作者;曾经流行的Flash游戏框架Flixel的作者后来又参与创作了HTML5游戏框架Phaser;被Adobe捐助给Mozilla组织的AVM2虚拟机的源码间接驱动了IonMonkey,SpiderMonkey项目中GC的更新换代和Flash转换HTML5项目Shumway的流行;Adobe的ActionScript3.0的语法方式被Egret Engine团队在HTML5的引擎产品设计上所借鉴;Stage3D项目后续促成了Away3D和Minko等原Flash3D项目完美转型HTML5技术领域。还有很多HTML5相关的视频和音频项目在过去几年的发展中大量的融合了Flash相关的媒体库来提供更多的功能支持,当今大量的HTML5 Video Player都是从原来的Flash领域变换而来。这一切都是Flash技术带给当今HTML5领域的财富。现实是很多人并未看到这些,看到的是当Apple宣布iOS不支持Flash技术开始,有些所谓的“专家”和“专业媒体”将Flash营造成HTML5的头号死敌的话题博取业界的更多眼球,其实他们并不关心Flash和HTML5为Web领域真正带来了什么,也不关心谁赢谁输,他们唯一关心的就是自己的知名度和访问量。&/p&&br&&p&接下来说说第二个观点,Flash从未真正赢得过移动领域。在开始这段之前,推荐各位在知乎看看我回答的这篇帖子“iOS不支持Flash的真实原因是什么?”&a href=&/question//answer/& class=&internal&&iOS 不支持 Flash 的真实原因是什么? - 知乎用户的回答&/a&。下面则是更多事实可以证明Flash一路走来,赢得了PC,丢掉了移动市场:&/p&&br&&p&1.在2004年,Flash跟中国移动对接动画标准一事,当时Flash Lite进入中移动动画标准评测流程之前,已经有两家利用Flash Player 6 SDK泄露的源码而做了山寨Flash播放器的公司在跟中移动对接了,一家韩国公司,一家中国公司,而且接触中移动的时间已经不短。Macromedia虽然是Flash官方,但是最后一个进场,而且当时中移动已经初定一家山寨Flash的产品成为标准,称之为MFlash。虽然中移动知道Macromedia是Flash的官方,技术更强,也乐意重新在中移动定制的功能机上使用Flash Lite标准,但是由于Macromedia坚持要求中移动承诺植入FL的设备总数,并按照单台1美金收取授权费。因为中移动是大公司,多少人挤破头想和中移动合作,但是Macromedia这家美国公司偏偏坚持成为标准,每台设备要收1美金。结果可想而知,Flash第一次错过了中国最大的移动运营商,很不幸的是,主导Flash播放器收取设备授权费的这个美国人跟着Macromedia一同进了Adobe,还被提升成为全球业务的高级总监,不幸的事情再次发生就自然而然了。&/p&&br&&p&2.Nokia当年太有钱了,这家公司带头支持了内置Flash Lite,也带头支付给Adobe了Flash的设备授权费用。这一行径使得Adobe坚持认为Flash在移动设备上能收取费用且必须收取费用,不论是任何厂商,都不例外。一刀切的收费策略也自然引发了当年很多大大小小手机厂商的不满,当然,这个Adobe CEO可能不知道,只有我们这些处在一线的员工才了解。但是这条线的决策当时由上面说到的那个美国人来负责时,KPI自然也是以能为公司贡献多少利润来衡量团队业绩的唯一标准。所以,只看眼前利益,不花大力气培养移动生态成了Flash错过移动市场的另一个主因。&/p&&br&&p&3.当年Adobe对于Flash播放器的源码访问已经到了无比严苛的地步,只有在美国注册且有实体研发的公司才能通过clean room的方式获取Flash Player的源代码进行移动设备的定制,其他硬件公司都必须通过引入Adobe授权的第三方Porting Partner的机制来获取定制后的Binary Build。这个流程简单描述就是,如果我是一家中国的手机公司,有植入Flash播放器的需求,而且愿意付费,那我要跟Adobe授权的一家Porting公司签协议,这家Porting公司注册在美国,研发在印度......印度,你懂的,然后印度人来中国找我,了解我的设备(&i&这里还有一个大问题,就是即使签署保密协议,但这家Porting Flash的公司必然知道我将来要发布到市场的新手机的所有硬件规格,妈蛋啊,我新手机保密还未上市就都让别人全知道了,有可能这家知道我的手机规格的公司还在为我的竞争对手做porting!虽然有了保密协议,好吧,就当是完全保密吧。&/i&),然后评估是否可以移植Flash,然后回印度在clean room里访问Flash源代码,进行移植。移植完成后,要把装有定制Flash Player Build的样机送回给美国Adobe进行认证和备案,符合一切QA认证流程后,告知我可以出货了。好吧,这个蛋疼的流程虽然我不知道当初是谁制定的,但是结果就是,我有款新上市的手机有植入Flash的计划,我要先把我的硬件信息全部公开给第三方进行评估,而且手机将来能否出货,要先等几个月的Porting和Certify的流程,还要先付给Adobe一笔预付款,最后可能手机上市日期因为种种原因流产了。。。这么死板不人性化的流程成为Flash错过移动市场的第三个主要原因。&/p&&br&&p&4.就是众所周知的苹果在iOS上屏蔽Flash的事件,虽然当年Adobe用了“We Love Flash, We Love Apple”极富煽情的公关方式来应对,但是然并卵,Flash错过了移动市场上的第一个大腿iOS。&/p&&br&&p&5.Adobe然后开始决定不再移动设备上花费大量的人力物力来维护和开发Flash播放器,所以接着又官方宣布了不再更新安卓版本的Flash Player的决定。转而鼓励开发者使用Adobe AIR的打包技术来将Flash内容打包为原生的解决方案,这个方案几乎成功的实现了Flash进入移动市场的目标,因为全球当时已经有数十万个iOS的app是通过Adobe AIR打包而成。但是突然,又发现了巨大的问题,那就是AIR SDK打包原生,要依赖Apple官方提供的原生系统扩展API,比如支付,GameCenter,文件访问等等。而Adobe AIR的ANE(Adobe Native Extension)则是一个黑盒,那就变成苹果只要升级系统或调整API,ANE如果不及时更新,所有AIR打包的原生app都被卡住,需要等待Adobe升级更新ANE包才可以继续保证app的正常运转。这一个无法逾越的深坑让大量的用AIR打包原生app的Flash开发者大倒苦水,对ANE的海量吐槽直接飞向Adobe总部。如果Adobe ANE团队及时关注产品反馈并及时更新,这一个跟XCode打包几乎一致的GCC/LLVM打包方案完全可以茁壮成长下去,可惜,Adobe又一次做了一个碉堡了的决策,将ANE美国研发团队裁撤,将工作转到印度班加罗尔做维护,又是印度,你又懂了。终于,Flash又一次错过机会。&/p&&br&&p&6.虽然黑莓当时内置了AIR,QNX的车载导航几乎都是Flash和AIR技术,但是市场太小了,一个倔强的浪头完全无法逆转整个形势了。&/p&&br&&p&所以我们可以认定Flash即使在PC上有过三次辉煌,但是它并未真正的赢得过移动市场,用一首诗来形容它的移动之路就是“待到秋来九月八,我花开后百花杀。冲天香阵透长安,满城尽带黄金甲”。在移动设备如日中天的今天,Flash本有机会开启并引领富媒体Web在移动设备上的革命,但它并非赢家。&/p&&br&&p&再来看第三个观点,HTML5已经重回轨道,未来取胜的关键则在移动领域。为什么这么讲。PC发展落后于移动已经是事实。今天,人手至少一台智能手机,移动流量超越了PC流量。技术为业务服务,业务由市场导向。HTML5狭义上是超文本链接标记语言第5版,单从名字上并无神奇之处,但广义而言,HTML5代表了新一代的HTML,CSS和JavaScript技术的总和,它可以跨平台,这在屏幕尺寸和分辨率林林总总的移动设备上简直就是天生的优势(天生就是东宫太子),响应式设计,跨操作系统,而且随着硬件计算能力的飞速进化,浏览器内核或者VM对于脚本型技术的性能瓶颈也在被逐渐抹平,在不是特别关注性能的应用开发上这个缺点渐渐被忽略不计。网络资源加载的尴尬也随着移动网络的速度飙升和使用成本的大幅降低而不再成为关键性的制约因素。HTML5虽然经历了&a href=&tel:&&&/a&年的重大技术低潮,一大波HTML5的技术先锋在这两年沉沙折戟,但是不妨碍它的跨平台,标准开放的技术本质,2014年后再次卷土重来。&/p&&br&&p&任何人都需要通过移动设备连接世界,获取信息。这个基于Touch的市场机遇远大于使用键盘鼠标的PC领域,每天若干的创新都在这里出现,内容层出不穷,且这个领域的内容呈现需要高度的跨平台,跨设备的适配性,HTML5这种开放性的Web技术成为这些创新的主要技术方案顺理成章,因为HTML的发展史就是一部互联网的发展史。&/p&&br&&p&PC浏览网络信息,仍然靠浏览器。但是移动设备浏览网络信息,app就是介质。微信,微博,手机助手,新闻客户端,所有Webview支持的app就可以很完美的采用HTML5技术。HTML5技术在移动设备上的用户场景原则上可以无限大,任何我们现在接触的app,都有使用HTML5进行制作开发的可能。突破浏览器对于HTML5的束缚是HTML5在移动设备上走向顶峰的必经之路。我经常跟人争论的一个话题就是,谁规定HTML5的标准化的执行和实现就一定要依赖于浏览器?用HTML5技术开发的内容,但是不用浏览器形态的方式去浏览,算不算是HTML5所涵盖的领域?&/p&&br&&p&另外,PC某些垂直领域在几年内仍然无法摒弃插件体系,尤其是页游市场。国内目前的页游市场是几百亿人民币的规模,而这个领域使用Flash Stage3D技术已经根深蒂固,从游戏创作的技术工作流程和性能要求上,HTML5的能力目前还无法达到那个高度,光从Flash Stage3D可以在PC调用DirectX和OpenGL,而HTML5只能调用WebGL这点来看就被完爆。而且Adobe Flash播放器已经在PC领域渗透超过10亿台终端,这个市场占有率还不能短时间内被取代,在Flash与HTML5的更新交替年代,与其等待PC市场漫长的自然更迭,HTML5为何不能从没有Flash的移动市场强势介入,成为跨平台富媒体内容的开发首选?&/p&&br&&p&最后一个观点是建立在第三个观点之上的,HTML5最广泛的被接纳与普及前,还要先解决以下几个关键问题。&/p&&br&&p&1.HTML5的标准化的能力推进需要更多参与制定厂商的通力协作,不要把商业的博弈及目标凌驾在标准化的普及之上,公心要大于私心,通力协作,才可能尽快实现更多具有前瞻创新技术标准草案的落地。HTML5规范虽然在2014年底终于定稿,但是这其中经历了太多的曲折,推进的过程中充满了各大浏览器厂商借助标准扩大行业话语权的暗战,目前,仍然有大量的创新标准无法在日新月异的移动领域市场快速被定案与普及。太多事实,给各位列举几个。CSS3的标准落地异常复杂,甚至于出现在开发者创建和声明CSS3新属性时,针对不同浏览器,一个属性要设定针对浏览器的众多前缀才能保证浏览器对它的支持,这么蛋疼的编写设定虽然是过渡方案,但是不得不说标准化落地过程中产生的各种额外代价都无形的转嫁给了开发者。另一个例子是关于WebGL,来源于&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&的数据统计,移动设备对于WebGL的支持率已经上升到有史以来的最高,超过8成支持WebGL内容的访问,这无疑是可喜的状况。但是从另一方面的比较则看出WebGL的进化仍面临巨大挑战。首先是,WebGL1.0从2011年起到现在已经近4年多几乎没有过任何能力上的进化,这几年全部都是标准规范草案定义能力的推进普及,变革速度相比起微软的DX12和Kronos组织全新一代的Vulkan技术的进化速度相比,简直惨不忍睹。当未来PC和主机游戏,甚至手机原生游戏都更多的可以从下一代的DX和Vulkan技术中全面获益,获得飞一样的提升时,我们HTML5的开发者们仍旧在为越来越多的设备终于支持WebGL而沉浸其中。好比有钱人又买别墅了,我还在为今年终于工资涨了几百而欢欣雀跃一样讽刺。如果HTML5技术想大成,不仅标准化的普及要快,功能性的创新也同样要快。&/p&&br&&p&2.HTML5相关开源项目(包括DOM,JavaScript/TypeScript,CSS)在github上无疑是总数世界第一。但是另外一方面,HTML5仍然需要更为强大,更有工作效率的工作流。我们需要在HTML5领域内有能跟其他领域一样世界级的工作流方案,强大的引擎,高度可视化的创意工具,云与端的计算完美结合,这些都能更有效的保证我们的工作成果和工作过程越来越专业。各行各业最顶级的创意开发工具,目前来看,没有一个是专门为HTML5技术而生的。例如Visual Studio虽然也可以支持HTML5和JS开发,但是相比C++,C#在VS中的集成工作流,待遇显然就是一个不招待见的“干儿子”。我们Web前端开发已经习惯用各种script editor,配合浏览器的developer tools,再配以各种node上的testing,build和publish工具,最后再通过Phonegap或者Cordova类似的打包来完成工作,这就是我们HTML5开发者的工作流,且我们认为已经很好了。但是这是我们被习惯被教育后采用的工作方式,是因为业界本就没有针对HTML5更高效专业的工作流。我天天弯着腰犁田,换个牛车替我就感觉很满足了,殊不知世界上有插秧机这种更高效的工具一样。正在使用的不代表就是最好的,因为更好的我们没见过。HTML5技术领域的创新绝对不能忽略更高度更自动化的工作流,这是一个高度繁荣市场的终极需求,不是某个通过terminal和command就能搞定一台机器的极客需求。&/p&&br&&p&虽然HTML5看似已经成了移动市场上实现网络富媒体交互技术的好选择,但是HTML5的技术未来并不是想象中的那么乐观,前路依然任重而道远。&/p&
本人已投身于全新行业全新领域,既跟Flash没关系,也跟HTML5没关系,所以关于这类的技术问题,请大家不要再邀请我去回答。 ---------这是一条更新线(2017.2)---------我特别不喜欢挖坟,但是有3个原因看到这个问题不得不答: 1. 我曾经从事了15年的Flash…
更新:appcode还有一个好用的功能就是整合了cocoa pods,你只要编辑了podfile,它就会自动提示你install&br&&br&1 AppCode 在编码效率上,远远高于xcode,其秉承了jetBrains一贯的“快捷键丰富,自动化程度高,代码提示无处不在,界面简洁”的特点。如果之前使用过jetBrains的其它产品,比如IntelliJ IDEA,基本上上手既爱上,甩xCode 一条大街无鸭梨。我的观点是:越是熟手,使用AppCode,越是能进一步提高编码效率,倒是生手,恐怕先习惯xcode更好一些。&br&&br&2 AppCode 之前的缺点是:interface builder的部分要依赖于 xcode,必须得在两个软件之间切换(虽然它可以帮助你自动切换),很不方便。但是AppCode 3 部分弥补了这个缺点,可以直接在AppCode 中进行xib文件的编辑。但是我感觉在xib这个问题上,尚不及xcode好用,所以我现在大多数时候都是在xcode里编辑界面,而在AppCode里写代码。这是AppCode需要改进的地方。&br&&br&3 在新建类的时候,没有像xcode一样的代码提示,这也是AppCode需要改进的地方&br&&br&4 AppCode的版本控制集成,又甩xcode一条大街,后者的版本控制实在太难用了。&br&&br&5 AppCode 3 的个人版,只要99美金,而不是200美金。而且,JetBrains时不时还在中国区半价销售。&br&&br&&img src=&/abbb2cee060dd8cf1cbd7ae2c4998880_b.jpg& data-rawwidth=&2096& data-rawheight=&546& class=&origin_image zh-lightbox-thumb& width=&2096& data-original=&/abbb2cee060dd8cf1cbd7ae2c4998880_r.jpg&&&br&&br&6 瑕不掩瑜,你,值得拥有。&br&&br&=====附:我个人常用的几个AppCode快捷键====&br&&br&1 Command + N
输入文件名快速跳转到该文件&br&2 shift + space (这个是可以根据自己的习惯调整的)任何时候都有用的代码提示&br&3 Control+shift+space 提示实例化方法&br&比如,我只需要输入 UIView *view = &br&然后 Control+shift+space&br&你就会看到&br&&img src=&/0c5ee1f38e1d5acf02dedd16ccb7a9df_b.jpg& data-rawwidth=&1378& data-rawheight=&544& class=&origin_image zh-lightbox-thumb& width=&1378& data-original=&/0c5ee1f38e1d5acf02dedd16ccb7a9df_r.jpg&&&br&4 用control + enter
可以根据属性自动生成 @synthesize 语句&br&&img src=&/c43be3cdb081f906a480a_b.jpg& data-rawwidth=&1450& data-rawheight=&526& class=&origin_image zh-lightbox-thumb& width=&1450& data-original=&/c43be3cdb081f906a480a_r.jpg&&&br&比如我录入 @property (nonatomic, strong) UILabel *statusL (录入过程中各种代码提示自不待言)&br&然后,control + enter ,然后选弹出菜单的 @synthesize... ,就会在m文件里自动生成&br&&br&5 用 control + enter 还能自动生成继承的方法体,自动实现申明了的方法 不一而足。&br&&br&6 option + enter 如果你使用了一个并未import到m或h中的一个类,会自动帮你加上 import或者@class&br&另外,选中一个协议,option + enter 可以自动实现这个协议中的必要方法&br&&br&7 在m文件中使用 cmd+i 可以选择一个要implement的协议中的方法,并自动生成方法体&br&&br&8 在m文件中使用 cmd +o 可以选择一个父类的方法,Override之,当然,也是自动生成方法体。&br&&br&9 cmd + w 选中光标所在的词,太常用了,还有一系列的有点类似emacs风格的光标操作快捷键。&br&&br&10 cmd + d 复制上一行(如果选中多行,就复制多行)
更新:appcode还有一个好用的功能就是整合了cocoa pods,你只要编辑了podfile,它就会自动提示你install 1 AppCode 在编码效率上,远远高于xcode,其秉承了jetBrains一贯的“快捷键丰富,自动化程度高,代码提示无处不在,界面简洁”的特点。如果之前使用过…
先从标题问题回答,按先后次序:&br&&ol&&li&书籍:多数书籍比较系统地介绍一些课题,由浅入深(gems 类例外,可当作业界 journel)。如果初接触一些新技术,尽量找相关专著。我把一些书分类在 &a href=&///?target=http%3A///doulist/1445744/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&計算機圖形: 入門/API類&i class=&icon-external&&&/i&&/a&。&/li&&li&会议/论文:有 SIGGRAPH、i3D 等学术会议,学术论文有几个缺点:太前沿未能应用、需要阅读很多背景资料。。&br&业界方面可以参考 GDC(&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GDC Vault&i class=&icon-external&&&/i&&/a&有部分免费的简报和视频)、GPU Pro 等&a href=&///?target=http%3A///doulist/1445745/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&計算機圖形: Gems類&i class=&icon-external&&&/i&&/a&书籍。&br&搜寻引擎可用 &a href=&///?target=https%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 或 &a href=&///?target=http%3A//academic./& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Microsoft Academic Search&i class=&icon-external&&&/i&&/a& 等。&br&&/li&&li&网站:各种官方网站会有基本的参考信息(Khronos、MSDN、Apple、NVidia、AMD、Imagination等)。&br&另外有问题可搜 &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Game Development Stack Exchange&i class=&icon-external&&&/i&&/a& 、&a href=&///?target=http%3A//mathoverflow.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MathOverflow&i class=&icon-external&&&/i&&/a&、&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stack Overflow&i class=&icon-external&&&/i&&/a& 等。现时有一个建专门的 &a href=&///?target=http%3A///proposals/74985/computer-graphics& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Graphics&i class=&icon-external&&&/i&&/a& 问答网站提案。我觉得知乎也是不错的,较缺乏的是有水平的问题。&br&有时候涉及的数学问题可以看 &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Wolfram MathWorld: The Web's Most Extensive Mathematics Resource&i class=&icon-external&&&/i&&/a&。&/li&&li&代码:如可取得源代码的引擎(Unreal、KlayGE等)、开源的demo/例子(近年的Direct3D官方例子也有一些论文的实现)、Unity 的 Asset store 、&a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Shadertoy BETA&i class=&icon-external&&&/i&&/a&等。工程上的问题通常不是单一技术的问题,需要考虑和多个系统的整合,以及工作流程等多方面问题,这时候参考主流引擎是一个不错的出发点。&/li&&/ol&之后对于问题描述中的 Metal,&a href=&///?target=https%3A///library/ios/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Introduction/Introduction.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Metal Programming Guide&i class=&icon-external&&&/i&&/a& 已经写得相当不错了,要看实际应用还是看包含 Metal 实现的引擎吧。
先从标题问题回答,按先后次序: 书籍:多数书籍比较系统地介绍一些课题,由浅入深(gems 类例外,可当作业界 journel)。如果初接触一些新技术,尽量找相关专著。我把一些书分类在 。会议/论文:有 SIGGRAPH、i3D 等学术会议,学术…
别闹,用AI做。&br&&b&路径混合&/b&可以达到你要的效果&br&示例:&br&这个你会画吧?(还是好多童鞋不会,最后有补充这个饼图的画法)&img src=&/303b6b0d75b4cbabf72a_b.png& data-rawwidth=&104& data-rawheight=&95& class=&content_image& width=&104&&&br&&br&画一个S形路径,然后首尾各一个&img src=&/b4d6e5b5a1e252a5c26fe2d1c2fdf37e_b.png& data-rawwidth=&414& data-rawheight=&488& class=&content_image& width=&414&&&br&然后选中两个圆形 上面菜单。对象——混合——建立。调整一下混合选项 我这里选择的是指定距离0.1mm,看起来很连贯了,这就ok.&img src=&/9bccd5d95557c9_b.png& data-rawwidth=&748& data-rawheight=&415& class=&origin_image zh-lightbox-thumb& width=&748& data-original=&/9bccd5d95557c9_r.png&&&br&然后我们选择这个混合和刚刚的S路径,对象——混合——替换混合轴&img src=&/4de21969b63dafa9e369d_b.png& data-rawwidth=&701& data-rawheight=&287& class=&origin_image zh-lightbox-thumb& width=&701& data-original=&/4de21969b63dafa9e369d_r.png&&当当当,搞定一个!&br&&img src=&/fe54ca1a781ca1acd49fba_b.png& data-rawwidth=&355& data-rawheight=&386& class=&content_image& width=&355&&&br&方形的那个也是一样的,两端的圆形换成菱形的花格子。效果如下&br&&img src=&/3f1feb03f14ffba746f3d9_b.png& data-rawwidth=&564& data-rawheight=&639& class=&origin_image zh-lightbox-thumb& width=&564& data-original=&/3f1feb03f14ffba746f3d9_r.png&&然后是那个O字,因为闭合曲线做出来的会有点奇怪,所以要分开一半一半的做,然后自己拼接一下吧。&img src=&/eddd2f015546fce378deb76_b.png& data-rawwidth=&379& data-rawheight=&399& class=&content_image& width=&379&&&br&还是蛮好玩的。&br&——————————————————————————————————————&br&补充下饼图的画法(两种方法)&br&方法1:画一根直线,然后双击&b&旋转工具&/b&调出旋转的面板,输入你想要的角度,这里20就是要把圆形18等分,然后单击复制按钮。&img src=&/24cf0c760e6d36858a7c_b.png& data-rawwidth=&802& data-rawheight=&609& class=&origin_image zh-lightbox-thumb& width=&802& data-original=&/24cf0c760e6d36858a7c_r.png&&然后按7次&b&
Ctrl+D &/b&即重复之前的操作.得到这个,全选,然后群组。&img src=&/e3bb96d0def75fd59996b8_b.png& data-rawwidth=&503& data-rawheight=&475& class=&origin_image zh-lightbox-thumb& width=&503& data-original=&/e3bb96d0def75fd59996b8_r.png&&&br&画一个圆,然后水平垂直居中对齐,&img src=&/1d045fed05a4fce1f714d4ba8525385d_b.png& data-rawwidth=&252& data-rawheight=&240& class=&content_image& width=&252&&&br&使用&b&路径查找器&/b&的&b&分割&/b&命令即可分割成18等分,解散群组之后分别填色就好。&img src=&/16d133e2fca224e9eef0cd_b.png& data-rawwidth=&232& data-rawheight=&151& class=&content_image& width=&232&&&img src=&/8bc9a7ce49fc4c1c922f0ca_b.png& data-rawwidth=&271& data-rawheight=&280& class=&content_image& width=&271&&&br&&br&&br&方法2:使用饼图工具&img src=&/df99cd39fe7c45b86958_b.png& data-rawwidth=&227& data-rawheight=&320& class=&content_image& width=&227&&&br&在弹出的表格里面按照需求填写数值相等的几列正数,要分几块就填几个好了,为了偷懒我填10个,填完右上角打钩确认&img src=&/46bd8be9184753eae4191_b.png& data-rawwidth=&719& data-rawheight=&385& class=&origin_image zh-lightbox-thumb& width=&719& data-original=&/46bd8be9184753eae4191_r.png&&这就有了。将其解散群组,分别填色就好了。&img src=&/b31f451c1eab_b.png& data-rawwidth=&107& data-rawheight=&110& class=&content_image& width=&107&&&img src=&/cbccb4b1dfe2f39ca630f1e060f119fa_b.png& data-rawwidth=&211& data-rawheight=&166& class=&content_image& width=&211&&&br&&br&&br&注意最后别忘了去掉描边.&br&然后是评论区里问的,像T这样的字母能不能画?答案是可以,不过你要把他画成一笔连起来的路径,如下:&img src=&/bb292cf01b021dd60ed193e12546dbea_b.png& data-rawwidth=&398& data-rawheight=&577& class=&content_image& width=&398&&&br&&img src=&/c5e40ab2cfebc0_b.png& data-rawwidth=&192& data-rawheight=&237& class=&content_image& width=&192&&或者你也可以用分开的笔画来拼&img src=&/456ac18c4356efbac3de56c03a33f87b_b.png& data-rawwidth=&175& data-rawheight=&249& class=&content_image& width=&175&&&img src=&/e1c68ef8390_b.png& data-rawwidth=&326& data-rawheight=&209& class=&content_image& width=&326&&&br&以上。
别闹,用AI做。 路径混合可以达到你要的效果 示例: 这个你会画吧?(还是好多童鞋不会,最后有补充这个饼图的画法) 画一个S形路径,然后首尾各一个 然后选中两个圆形 上面菜单。对象——混合——建立。调整一下混合选项 我这里选择的是指定距离0.1mm,看…
&p&首先推荐4本书&/p&&p&大型分布式网站架构设计与实践&/p&&p&&a href=&///?target=http%3A///.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/.ht&/span&&span class=&invisible&&ml&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&br&&p&大型网站技术架构:核心原理与案例分析&/p&&p&&a href=&///?target=http%3A///.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/.ht&/span&&span class=&invisible&&ml&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&br&&p&大型网站系统与Java中间件实践&/p&&p&&a href=&///?target=http%3A///.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/.ht&/span&&span class=&invisible&&ml&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&br&&p&分布式Java应用:基础与实践&/p&&p&&a href=&///?target=http%3A///.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/.ht&/span&&span class=&invisible&&ml&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&br&&p&貌似都是4位阿里人写的,一本一本的看吧,绝对会增强你的内功。下面是本人的一个简要小结,供参考。&/p&&img src=&/ede882ed260d7f8e1d0a24d_b.jpg& data-rawwidth=&515& data-rawheight=&28& class=&origin_image zh-lightbox-thumb& width=&515& data-original=&/ede882ed260d7f8e1d0a24d_r.jpg&&&p&&b&分布式架构的演进&/b&&/p&&p&&br&&b&系统架构演化历程-初始阶段架构&/b&&br&&img data-rawheight=&367& data-rawwidth=&516& src=&/13bd5a6612620fdf51c73_b.jpg& class=&origin_image zh-lightbox-thumb& width=&516& data-original=&/13bd5a6612620fdf51c73_r.jpg&&&br&初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP&br&&br&特征:&br&应用程序、数据库、文件等所有的资源都在一台服务器上。&br&&br&描述:&br&通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。&br&&br&&/p&&p&&b&系统架构演化历程-应用服务和数据服务分离&/b&&br&&img data-rawheight=&408& data-rawwidth=&510& src=&/c2ff4e51eecfe6a4038239_b.jpg& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/c2ff4e51eecfe6a4038239_r.jpg&&&br&好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver&br&&br&特征:&br&应用程序、数据库、文件分别部署在独立的资源上。&br&&br&描述:&br&数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。&br&&br&&/p&&p&&b&系统架构演化历程-使用缓存改善性能&/b&&br&&img data-rawheight=&525& data-rawwidth=&526& src=&/7f5890aefa3a065ea91baa33e928d59b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&526& data-original=&/7f5890aefa3a065ea91baa33e928d59b_r.jpg&&&br&特征:&br&数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。&br&&br&描述:&br&系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。&br&缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。&br&&br&&/p&&p&&b&系统架构演化历程-使用应用服务器集群&/b&&br&&img data-rawheight=&548& data-rawwidth=&576& src=&/66b50dff30d00d13a2a1963_b.jpg& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&/66b50dff30d00d13a2a1963_r.jpg&&&br&在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢&br&&br&特征:&br&多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。&br&&br&描述:&br&使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。&/p&&p&&b&系统架构演化历程-数据库读写分离&/b&&br&&img data-rawheight=&549& data-rawwidth=&568& src=&/e8cb08ede220e1fef72f85_b.jpg& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/e8cb08ede220e1fef72f85_r.jpg&&&br&享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢&br&&br&特征:&br&多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。&br&&br&描述:&br&使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。&/p&&p&&b&系统架构演化历程-反向代理和CDN加速&/b&&br&&img data-rawheight=&520& data-rawwidth=&711& src=&/a2db8db8b2d7500adf3f9_b.jpg& class=&origin_image zh-lightbox-thumb& width=&711& data-original=&/a2db8db8b2d7500adf3f9_r.jpg&&&br&特征:&br&采用CDN和反向代理加快系统的 访问速度。&br&&br&描述:&br&为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。&/p&&p&&b&系统架构演化历程-分布式文件系统和分布式数据库&/b&&br&&img data-rawheight=&526& data-rawwidth=&920& src=&/ea091b2c553ac707b091668_b.jpg& class=&origin_image zh-lightbox-thumb& width=&920& data-original=&/ea091b2c553ac707b091668_r.jpg&&&br&随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作&br&&br&特征:&br&数据库采用分布式数据库,文件系统采用分布式文件系统。&br&&br&描述:&br&任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。&br&分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。&/p&&p&&b&系统架构演化历程-使用NoSQL和搜索引擎&/b&&br&&img data-rawheight=&518& data-rawwidth=&936& src=&/7e25f96d31da7c8acc44_b.jpg& class=&origin_image zh-lightbox-thumb& width=&936& data-original=&/7e25f96d31da7c8acc44_r.jpg&&&br&特征:&br&系统引入NoSQL数据库及搜索引擎。&br&&br&描述:&br&随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。&/p&&p&&b&系统架构演化历程-业务拆分&/b&&br&&img data-rawheight=&520& data-rawwidth=&939& src=&/51faaff90df43279c82ffd6a6b587135_b.jpg& class=&origin_image zh-lightbox-thumb& width=&939& data-original=&/51faaff90df43279c82ffd6a6b587135_r.jpg&&&br&特征:&br&系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。&br&&br&描述:&br&为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。&br&&br&纵向拆分:&br&将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统&br&&br&纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。&br&&br&横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务&br&&br&横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。&/p&&p&&br&&b&系统架构演化历程-分布式服务&/b&&br&&img data-rawheight=&507& data-rawwidth=&960& src=&/9ef9ad51a11b36cacb2f408ceb928c82_b.jpg& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/9ef9ad51a11b36cacb2f408ceb928c82_r.jpg&&&br&特征:&br&公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。&br&&br&描述:&br&随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。&br&&br&&/p&&p&&b&Q:分布式服务应用会面临哪些问题?&/b&&br&&br&A:&br&(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。&br&(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。&br&(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?&br&(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定? &br&(5) 一个服务有多个业务消费者,如何确保服务质量?&br&(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化? &br&&br&&/p&&p&&b&Java分布式应用技术基础&/b&&/p&&img data-rawheight=&545& data-rawwidth=&700& src=&/b7cdb7ac16e2719f5fefe_b.jpg& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&/b7cdb7ac16e2719f5fefe_r.jpg&&&br&&p&&b&分布式服务下的关键技术:消息队列架构&/b&&/p&&img data-rawheight=&318& data-rawwidth=&732& src=&/9236baf21c201ec37b5cc089b8e09b3c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&732& data-original=&/9236baf21c201ec37b5cc089b8e09b3c_r.jpg&&&br&&p&消息对列通过消息对象分解系统耦合性,不同子系统处理同一个消息&/p&&p&&b&分布式

我要回帖

更多关于 java登录功能实现代码 的文章

 

随机推荐