整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

We Are Coming !育知同创首期iOS培训精英班震撼来袭!

然人生的幕布已经拉开,就一定要精彩的演出。

既然前进的脚步已经跨出,风雨坎坷也不能退步。

2016年3月21日,育知同创Native、Hybrid、React Native混合式开发培训首期iOS精英班震撼开讲!阳光、活泼、正能量,是iOS精英班同学们的面貌。育知同创,将成为他们的梦工厂,接下来的四个月,他们将携手共进,全力以赴!

育知同创首期iOS精英班开班典礼

育知同创,做别人做不到的高品质教育

开班典礼伊始,活泼大方的职业规划卢老师,向同学们介绍了两位大牛iOS讲师,黎老师(Lucien)和郭老师(David)。

首先是温文尔雅的郭老师(David)向学员们全面的分析了目前iOS行业情况。在David老师的分析中,可以了解到,近几年软件开发行业一直处于快速的发展和演变过程中。据现有iOS系统手机所占市场份额,以及iOS在其他领域的可能性运用,iOS开发人才一直处于紧缺状态,目前企业高薪聘请依然难以找到足够多的iOS软件开发人才,在未来几年,市场仍会出现供不应求的趋势。David老师还说,iOS的可替代性是非常小的,所以目前大家所担心的人才饱和并不是真正意义上的饱和,是iOS软件初级开发人才饱和。而育知同创培养的是中高级iOS开发人才,我们的师资、我们的教学,足以做到别人做不到的高品质教育、制定名师授课!同学们很认同David老师的观点,也对自己当初的选择充满信心。

郭老师(David)为大家分析市场前景

全新课程体系,带你体验课程独有魅力

接着David老师的行业分析后,为了让同学们对自己所学的课程有更加清晰透彻的了解,黎老师(Lucien)凭借自身丰富的经历,用其独到的见解为学员详细、生动的阐述了接下来学习的iOS课程体系。Lucien老师是中国React Native视频公开课第一人,国内Native+Hybrid+React Native课程体系开拓者,混合式+跨平台研发引领者,国内首批Swift项目发起人。从事过多年JAVA、Linux、C++、Objective-C、Swift、HTML5相关产品研发。因授课经验丰富,实战性强,课堂气氛活跃,因此曾受邀录制过日本东京电视台财经一小时节目。技术能力强,被学生誉为“Bug终结者”。所以对于iOS课程体系的讲解,Lucien老师是及其自信的,也因为他强大的知识储备让在座的学员都大为感叹。

Lucien老师强调,育知同创的iOS课程体系,专注于混合式(OC+Swift+HTML5)+跨平台(React Native)研发培训课程,分别用OC 、Swift、React Native实现不同项目。这样的课程不仅可以让学员感受不同语言的优势,而且可以体验React Native研发跨平台的魅力。Lucien老师的讲解既让学员对iOS有了更深的了解,也让学员对今后所学内容有了更大的兴趣。

黎老师(Lucien)讲解课程体系

高精尖培养策略,不一样的匠心品质

针对大家最关心的就业问题,职业规划卢老师也为大家进行了详细的讲解。通过首期iOS精英班可以看出,首先育知同创注重高品质教学,严格控制班级人数,指定名师授课。其次育知同创拥有企业合作精英团队,每位职业规划老师都具有丰富的企业资源和职业塑造能力,严格的管理制度,第一天入学即施行企业打卡形式签到,定期为学员讲授职业素养课程,举办技术讲座等。最后育知同创拥有顶尖教学设备,苹果MacBook Pro(MD318CH/A)笔记本电脑,15.4英寸屏幕,英特尔酷睿i7处理器,8GB内存容量;500GB硬盘容量;独立显卡。育知同创采取的是高精尖培养策略,因此育知同创能培养出企业真正需要的互联网高端人才,就业问题自然也就迎刃而解。

育知同创iOS学习设备苹果MacBook Pro

接下来的四个月,是同学们将目标变为实践,让梦想照亮现实的四个月。

既然选择了远方,便只顾风雨兼程。

既然目标是地平线,留给世界的只能是背影。

四个月后的你们,一定会感谢现在努力的自己!

北方网教育频道 新闻纠错、投诉及爆料热线:022-23601753

、公开课网站:

网易云课堂

网易公开课

多贝网络公开课

传课网

腾讯课堂

腾讯微讲堂

学堂在线

中国大学MOOC

优酷教育频道

爱课程

2、外语学习网站:

多语言学习网站

沪江英语网 最具人气的英语学习交流互动平台。

译言网

看电影学英语(一款英语学习软件)

朗播网 一个主推“在线练习”的英语学习平台。

100教育 雅思、托福、四六级

七彩英语 英语原版电子书下载。

91外教网

可可英语

VOA 英语 VOA 在线收听。

普特英语听力网

有道学堂

海词在线词典翻译 最专业的网络词典。

易改网 一款英语写作辅助软件。

拓词

扇贝网背单词 科学有效的词汇训练和测试。

别忘单词网

易呗网

沪江CC课堂 英语、日语、汉语、法语、育儿

幼教、中小学课堂、职称等学习。

世界各国语言学习网站

Visuwords 视觉化单词间的关系

声同小语种论坛

51Talk无忧英语 网上平价英语培训专家,真人外交一对一在线英语培训。

朴川英语 从一对一托福培训开始,个性化线上英语培训平台。

句酷批改网 基于语料库和云计算基数的英语作文自动在线批改服务。

新东方

魔力学院 采用标签化做题思路,地图化学习路径的GMAT自适应学习系统。

3、考研网站:

研究生招生信息网

隶属于教育部的以考研为主题的官方网站,是教育部唯一指定的研究生入学考试网上报名及调剂网站。

主要提供研究生网上报名及调剂、专业目录查询、在线咨询、院校信息、报考指南和考试辅导等多方面的服务和信息指导。

网易考研

中国教育在线考研

考研加油站

无忧考研

考试吧考研

沪江考研

中国考研网

免费考研网

考研共济网

新东方考研

考研论坛

人大经济考研

知识宝库论坛

白云黄鹤考研版

考研网

4、就业/实习网站:

应届毕业生网 应届生毕业生求职、交流、互动的平台。

乔布简历 个人简历制作网站。

过来人公开课 主要提供和职场相关的教程。

极梦网 大学生实习、比赛、国际信息平台。

锐普PPT

过来人求职网

兼职猫

简历酷 在线简历制作平台。

五百丁简历 提供模板下载、简历在线制作,网页简历等服务。

海投宣讲会 集合了全国重点高校官方就业信息网的招聘信息

简历模板

师兄帮帮忙

8点后 求职辅导及职业发展领域的互动版知乎

牛客网 专业IT笔试面试备考平台,最全求职题库,全面提升IT编程能力

5、国外学习网站:

Coursera | Online Courses From Top Universities. Join for Free 免费大型公开在线课程项目

Udemy Online Courses - Learn Anything, On Your Schedule 一个在线教和学的平台

edX 国外大规模开放在线课堂平台

Khan Academy 关于数学、历史、金融、物理、化学、生物、天文等科目的内容

Open Yale Courses 耶鲁大学公开课

Free Online Course Materials MIT公开课

The Open Education Consortium 美国的一个教育资源开放平台,汇聚了全球范围顶尖大学的各种教育资源

Adobe KnowHow 国外开放教育平台

Online Programming Bootcamp for Serious Developers Ruby领域的网上视频

优达学城 (Udacity) - 传授硅谷的名企官方课程 一个提供免费大学教育国外网站

Learn web development and design online free html/css/javasctipt/php/mysql学习

thenewboston.org 提供计算机领域相关视频

Student reviews of online courses on Computer Science, Business, Design, Data Science, Humanities and more 国外视频教程点评网站

Learn to code by doing | Code School 在线网站制作教育平台

Video-Trainings von video2brain, Europas führendem Anbieter 在线视频教育网

Home - NovoEd 提供经济管理及创业类课程,由斯坦福大学教师发起,重视实践环节

MOOCs - start to enjoy learning now 德国IT在线课程OpenHPI

No Excuse List 国外的一个学习网站导航

Free Online Courses - FutureLearn 英国开放大学MOOC平台

Free Online Courses For Everyone 澳洲最具代表性的MOOC平台

AcademicEarth.org - Free Online Courses From Top Colleges 开放课程汇总

Math lessons for lasting insight. 极为精妙的且直观的概念解释,涉及数学、经济及编程

http://www.lynda.com/ 软件使用技巧培训

http://mathispower4u.yolasite.com/ 数学学习

mathispower4u 改变一种思维方式

Education’s First Video and Active Learning Platform | Echo360 Higher Education's First Active Learning Platform

Smashing Magazine 面向专业的web开发者、设计者

Homepage - Grovo 帮助那些不熟悉互联网的创业者和企业用户快速地掌握使用互联网技巧

Open Culture - The Best Free Cultural and Educational Media on the Web. 国外一个收集名校公开课的网站

CreativeLive: Free Live Online Classes 向创业者提供一些创业培训课程,内容涵盖摄影、商业、软件、设计等

Saylor Academy 国外一个线上学习资源分类精选站点

https://www.craftsy.com/ 汇聚各行业顶尖人物精美录制的课程

The Best in Adaptive Learning Technology | Knewton 致力于为每一个人指定个性化学习方案

6、程序员网站:

CSDN首页-全球最大中文IT社区

51CTO.COM - 技术成就梦想 - 中国领先的IT技术网站

开源中国 - 找到您想要的开源项目,分享和交流

博客园 - 开发者的网上家园

Stack Overflow - Where Developers Learn, Share, & Build Careers 国外知名IT界技术问答社区(翻墙访问)

SegmentFault 专业面向开发者的中文技术问答社区

CodeCloud - Sharing the solutions to the problems about ios,java,linux,android,javascript,xcode,swift,python,html5 为码农提供计算机技术资源与资讯

酷 壳 - CoolShell

结构之法 算法之道 - CSDN博客

Linux网站导航,Linux网址大全,Linux排名,Linux屏幕抓图

程序源代码,开发,分享,采购 - CodeForge.cn

dewen.io - 这个网站可出售。 - 最佳的dewen 来源和相关信息。编程社交问答

程序员之家-疯狂程序员的自我修养之地,高级程序员招聘场所

最代码-最全面,最专业的源代码分享网站 一个很全面的代码分享网站,近万名用户分享超过1万份高质量的代码

Ruby China 国内最权威的Ruby社区

Railscasts China 视频教程,帮助中国Rails/Ruby社区中的程序员更快更方便的掌Rails/Ruby开发技术

牛客网-专业IT笔试面试备考平台,最全C++JAVA前端求职题库,全面提升IT编程能力 知名互联网公司历年程序员笔试面试题

实验楼 - 在线做实验,高效学编程 以实验为核心的IT在线教育网站

https://www.oxcoder.com/ 互联网程序员在线笔试平台,帮企业高效招聘程序猿,也方便程序员找工作

7、Web开发网站:

PHP100中文网 - 中国第一档PHP资源分享门户

PHP China-最棒的PHP中文社区

ThinkPHP框架 | 中文最佳实践PHP开源框架,专注WEB应用快速开发8年!

http://www.html5cn.org/ 中国最大的HTML5中文门户

前端网(QDFuns) - WEB前端开发工程师专业网站,一站式服务平台!

http://itercast.com/ Linux视频学习及问答网

客来乐互联网收银台 - 实体商业精准营销平台 Linux运维工程师学习

CodeCombat: Learn to Code by Playing a Game 通过游戏学习javascript

8、IT培训机构网站:

兄弟连官网-PHP培训_Linux培训_HTML5培训_UI设计培训_Java培训_Python培训_大数据培训

Drupal, Node.js, Bootstrap, React 视频教程 网页设计学习

http://www.iphonetrain.com/video/ IOS开发培训视频教程

尚硅谷_全套Java视频,Android视频,HTML5前端视频,百万谷粉推荐 免费JAVA视频教程

智能社www.zhinengshe.com | 专注前端 培训专家 最经典的javascript视频教程(专注前端培训)

iOS视频教程,Android视频教程,OC语言视频教程,C语言视频教程,Java视频教程 - 千锋教育 IOS/Android开发视频教程

云知梦-PHP培训_太原PHP培训_山西PHP培训_Linux培训_HTML5培训_小程序培训_微信培训_APP培训

训练计划 (冷启动)

年来,前端技术日新月异,前端已经不仅仅是网页,更多的开始由狭义向广义发展。

先后涌现出了具备后端能力的node,具备移动开发能力的react native,具备游戏渲染能力的cocos2d-js,以及iOS上的热修复技术JSPatch等等新技术。

咋一看,几乎各个端都被JavaScript攻陷,大有一统江湖之势。

究竟,JavaScript如何做到上天入地无所不能?JavaScript真的能一统江湖吗?

乱世出英雄:JavaScript的诞生故事要从JavaScript的由来说起。

高能瞎扯淡版,正经脸的同学可以忽略

有人的地方就有江湖,有江湖的地方就有纷争。

故事要从当年的浏览器之战说起。

时间回到1994年,

(→ 那时候我还是个宝宝~ #天真脸#)

景兄弟横空出世,并自带神器网景导航,战斗力爆表,势如劈竹,瞬时间威震天下。

一出世就武装到牙齿,武力值这么高还自带兵器,这个科学吗?

港真,我也觉得不科学,也许跟熊孩子哪吒、女汉子雅典娜是一个品种吧?

这一切北方的老前辈微软大湿,都看在眼里,不甘天下尽归景兄弟这个初出茅庐的毛孩子,大湿积淀多年,潜心修炼一年,终于带着大杀器IE 1.0出关了,誓于景兄弟争个高低。

自此景兄弟的网景导航 VS 微软大湿的IE 的军备战争开始。

景兄弟仔细掂量,微软大湿财大气粗,内功深厚,臣妾实在是办不到啊啊啊啊啊啊。

景兄弟紧急召集门人商议对策,有一门人曰:”以我们微薄之力硬磕,是万万使不得的。如今我们,一是宜施行合纵之策,抱大腿,组成联盟!二是避其锋芒,出奇招致胜。“

于是景兄弟依照此策略,一方面找到了当时德高为重的另一位前辈SUN,组成了开发者联盟。

(微软大湿:握草,联盟都粗来了,那我是不是得搞个部落?)

另一方面,景兄弟找到了锻造大师布兰登,请布大师帮忙升级兵器网景导航,大师就是大师,不费吹灰之力就完成了强化升级,然而布大师突发奇想,本来这是近距离攻击兵器,要是有多一个远距离攻击的能力那岂不是更好?Just do it. 想罢大师就加了一个远距离攻击的feature。于是有了自带远距离攻击能力的网景导航2.0。景兄弟一看这么流弊心里甚是欢喜,不过远距离攻击的技能叫做LiveScript,感觉不是特别Fashion。特然想到这不是跟SUN前辈联盟嘛,SUN家的Java正是独霸武林之时。不如把名字改成跟Java有关,蹭一把东风,蹭点光环。一拍脑袋,JavaScript!!!众门人一听:”好好好,JavaScript 流弊炫酷吊炸天!“

果然第一节下半场,景兄弟携强化过的网景导航2.0 战个痛快,那是杠杠的!人家一问,你咋还能远程攻击,你这个远程攻击用的是啥?答曰:JavaScript。“JavaScript,一定是跟SUN家Java是一个系列产品,一定很流弊!”#光环加成,各种膜拜脸#

微软大湿亏了一场,痛定思痛,也要搞远程攻击功能,果然不久,就祭出了同样带有远程攻击能力的IE 3.0,鉴于景兄弟的远程攻击叫做JavaScript,J开头的感觉应该比较流弊,所以微软大湿的叫做JScript。

然后战争就从地面贴身肉搏战,开始逐步升级到了远距离核战争。

正所谓,城门失火,殃及池鱼。这么打下去苦逼的是搬砖的页面仔,就是我这种,到处都是雷区,无处下脚。

最后到了1997年,“联合国安理会秘书长”艾玛(ECMA)出来调停,多方签署了“核不扩散条约”,约束各种远程攻击武器的使用,这才走上了正轨。

1995年SUN开发了Java技术,这是第一个通用软件平台。Java拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。Java也伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。名噪一时。

1994年Netscape公司成立,并推出了自己的浏览器的免费版本 Netscape Navigator,很快就占有了浏览器市场。到了 1995 年,微软公司开始加入,并很快发布了自己的 Internet Explorer 1.0。

1995年,当时在Netscape就职的Brendan Eich(布兰登·艾克),正为Netscape Navigator 2.0浏览器开发的一门名为LiveScript的脚本语言,后来Netscape与Sun Microsystems组成的开发联盟,为了让这门语言搭上Java这个编程语言“热词”,将其临时改名为“JavaScript”,日后这成为大众对这门语言有诸多误解的原因之一。

JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与SUN达成协议的结果。

==> 所以,JavaScript和Java其实没有半毛钱关系。

JavaScript推出后在浏览器上大获成功,微软在不久后就为Internet Explorer 3.0浏览器推出了JScript,以与处于市场领导地位的Netscape产品同台竞争。JScript也是一种JavaScript实现,这两个

JavaScript语言版本在浏览器端共存意味着语言标准化的缺失,对这门语言进行标准化被提上了日程,在1997年,由Netscape、SUN、微软、宝蓝等公司组织及个人组成的技术委员会在ECMA(欧洲计算机制造商协会)确定定义了一种名叫ECMAScript的新脚本语言标准,规范名为ECMA-262。JavaScript成为了ECMAScript的实现之一。ECMA-262 第五版,即是ES5。

==> ECMA-262,包括ES5, ES6等是一个标准,JavaScript是ECMAScript的一个实现。

完整的JavaScript实现应该包含三个部分:

在网景导航2.0和IE 3.0出现之后的几年间,网景和微软公司不停的发布新版本的浏览器,支持更多的新功能。自此拉开了浏览器之战的序幕。这场浏览器之战到现在还在继续,以下一张图看清楚过程。

从浏览器之战可以看出,各家浏览器比拼的大致两个方面视觉体验(渲染排版)和速度(脚本运行)。

==> 所以一个完整的浏览器组成,至少包含两个部分:

补充一个市面常见浏览器的内核和JavaScript引擎搭配:

其他JavaScript引擎,Rhino,由Mozilla基金会管理,开放源代码,完全以Java编写,可以看做SpiderMonkey的Java版。

注意:webkit不单单只是一个排版引擎,webkit = 排版引擎 + JavaScript引擎。

==> 所以,JavaScript是动态语言,它的运行都是基于JavaScript引擎,引擎大都是由静态语言实现C++、Java、and so on。JavaScript的能力也是由引擎赋予。不管是浏览器环境中是window,亦或是node环境中的process,均是由引擎提供。

(番外:Mozilla的人不知道为啥特别喜欢猴子,经常以猴子命名技术,所以看到带Monkey的,十有八九估计是他们搞的。)

诺曼底登陆:JavaScript Binding/Bridge 桥接技术

在浏览器环境中,DOM、BOM、window对象、setTimeout/setInterval,alert,console等方法均不是JavaScript自身具备的能力,而是浏览器native实现,然后通过JavaScript引擎注入到JS运行的全局上下文中,供JS使用。

鉴别方式,在调试器console中打出来,带有[native code]的即是:

讲道理:

  1. JavaScript运行 → 依赖于JavaScript引擎 ← 浏览器集成了JavaScript引擎,同时通过JavaScript引擎注入native代码工JS脚本使用

  2. 发散一下思维,只要有JavaScript引擎,就能运行JS脚本,不管有没有浏览器!只是缺少浏览器提供的alert,window等方法。

  3. 既然浏览器可以往JavaScript引擎中注入代码,赋予JS脚本在网页中特殊的能力,同理我们可以自己集成JavaScript引擎,自己定义自己的方法往JavaScript引擎中注入,赋予JS更多更强的自定义能力!

    注入的关键是:值类型相互对应,Obj映射class的一个实例,function映射一个句柄或者引用

JavaScript数值型中的坑

JavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此

这就是说,在JavaScript语言的底层,根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时JavaScript会自动把64位浮点数,转成32位整数,然后再进行运算。由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。尽量避免使用JavaScript做精准计算和密集计算。

根据国际标准IEEE 754,JavaScript浮点数的64个二进制位,从最左边开始,是这样组成的。

  • 第1位:符号位,0表示正数,1表示负数

  • 第2位到第12位:储存指数部分

  • 第13位到第64位:储存小数部分(即有效数字)

    符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。

    IEEE 754规定,有效数字第一位默认总是1,不保存在64位浮点数之中。也就是说,有效数字总是1.xx…xx的形式,其中xx..xx的部分保存在64位浮点数之中,最长可能为52位。因此,JavaScript提供的有效数字最长为53个二进制位(64位浮点的后52位+有效数字第一位的1)。

内部表现公式:(-1)^符号位 1.xx…xx 2^指数位

精度最多只能到53个二进制位,这意味着,绝对值小于2的53次方的整数,即-(253-1)到253-1,都可以精确表示。

而大部分的后端语言,C++、Java、Python等的long型都是可以支持到64位,因此long型数据从后端语言传给JavaScript会发生低位截断。遇到这种情况一般使用String处理,如需要在JavaScript中做long型计算,需要自行实现计算器。

有了自行往JavaScript引擎中注入的想法,接下来就是分析可行性。

大部分是JavaScript引擎是使用C++编写,如果自己的程序使用的是C++可以很方便的进行注入,如果是OC,可以使用OC和C++混编的形式。

其他语言怎么破?

要在一门静态语言上与动态语言JavaScript相互调用,最便捷的方式是找到一个这门语言实现的JavaScript引擎(开源),直接进行集成,注入。如果没有,则需要使用多一层桥接,把这门语言的接口暴露给C++,再由C++实现的JavaScript引擎将接口注入供JavaScript使用。

服务端集成思路&实践:

nodeJS中的桥接

我们都知道nodeJS,但是nodeJS的运行依赖于Google的V8 引擎,V8是C++实现,底层使用C++实现底层功能,比如网络,数据库IO,对外暴露一个构造器接口注入到上下文中,注意此处暴露的只是一个构造器接口而不是一个创建完的实例。然后实现了一个require的hook函数。当使用require加载一个JS模块时,跟网页中使用AMD 的require并无异样,当使用require加载系统库,既是C++的模块时,会调用暴露出来的构造器接口,得到一个实例对象。不管是装载JS模块还是装载C++模块,得到的都可以看做是一个Module Object,node会将装载完的模块缓存到binding_cache中,下次在别处的代码中使用require装载模块时,就会先去binding_cache中查找,如果找到了则返回该module object,如果没找到再执行上面的装载流程。

这就是node的基本原理:C++封装底层操作,通过V8注入,使得JS脚本有网络和IO能力

基于Spring的桥接

以上说到的几个都是C++层面的应用,那么经典的Java怎么玩?是不是Java就必须是静态语言的玩法,没有办法像C++之类的,可以使用JS的动态特性?

当然不是。这个时候,我们需要说起前面介绍过的一个JS引擎 Rhino,Rhino是完全由Java编写,可想而知,Rhino几乎就是为Java应用而生的。

用法是这样:

  1. 首先在我们的Java应用中集成Rhino;

  2. 所有的IO操作,网络操作等,都封装成service,并提供增删改查,setter && getter等多种方法

  3. 通过spring,把这些service bean注入到Rhino中;

  4. 把业务逻辑写到JS代码中,JS代码调用多个已注入的Java service处理业务逻辑,拼装数据返回!

好处:修改业务逻辑不需要修改Java代码,也就是不需要重新编译和部署,只需要刷新下跑在Rhino中的JS代码即可。以往Java应用的一个痛点是部署,需要重新编译,打包,部署重启服务器,现在以这种形式开发,可以达到服务端的热更新和热部署。既可以享有Java服务的稳定性和可靠性,又可以享有JS的灵活性。

这种技术和用法在差不多十年前就有过,前EMC的工程师基于EMC著名的商业产品Documentum,设计了一套Java开源的中小企业CMS系统Alfresco,在该系统中实现了这种技术,这种技术基于spring,叫做spring-surf,做了一个胶水层。可以看做小十年前的node吧。

Demo,使用spring-surf框架的系统中一个webscript模块

  1. categorynode.get.xml定义URL拦截器和权限控制;

  2. .get指明是处理GET请求,RESTful;

  3. 在categorynode.get.js中调用已注入的Java Bean处理业务逻辑;

  4. 若为网页请求返回.html.ftl,若为Ajax,返回.json.ftl;

(此处配套使用的是FreeMarker模板引擎)

==> categorynode.get.desc.xml

==> categorynode.get.js

==> categorynode.get.html.ftl

==> categorynode.get.json.ftl

移动端集成思路&实践:

React Native中的桥接

React Native目前也是异常火爆,RN程序的运行依赖于Facebook的RN框架。在iOS、Android的模拟器或是真机上,React Native使用的是JavaScriptCore引擎,也就是Safari所使用的JavaScript引擎。但是在iOS上JavaScriptCore并没有使用即时编译技术(JIT),因为在iOS中应用无权拥有可写可执行的内存页(因而无法动态生成代码),在安卓上,理论上是可以使用的。JavaScriptCore引擎也是使用C++编写,在iOS和安卓中,JavaScriptCore都做了一层封装,可以无须关心引擎和系统桥接的那一层。iOS/Android系统通过JavaScriptCore引擎将定制好的各种原生组件注入,如:listview,text等。

Cocos2d-JS中的桥接

cocos2dx是游戏开发中非常常用的游戏渲染引擎,有一系列的产品,如:cocos2dx(C++),cocos2d-lua(lua), cocos2d-js(JavaScript)等多个产品。其中最新退出的是cocos2dx的JS版本的cocos2d-js,编写游戏渲染特效代码相比于C++和lua非常方便。对于做需要经常更新的渲染场景,C++是静态语言,每次修改都需要重新编译才能运行,显然是不合适的。自然也就想到了脚本语言,lua和js,两者有些类似,都是动态语言,只需要集成一个运行引擎,提供一个运行的容器即可运行,同时通过引擎注入底层方法供脚本调用即可。lua好处是精简,语法精简,引擎页很小很精简,所以不可避免的代码量会比js多,同时学习成本比较高。js的好处是有ECMAScrtpt的核心,语法比较丰富,同时有支持一些高级属性。在cocos2d-js中,cocos2dx(C++)集成了SpiderMonkey(C++)作为JS运行引擎,中间做了一个胶水层既是JS Binding,通过引擎注入了一个cc的全局对象,映射的是底层C++的一个单例C++实例。表面上写的是JS代码,实际上操作的是底层的C++。cocos2d-js是代码可以运行在多种环境中,当运行的网页环境中时,使用的是cocos2d-html5引擎,底层操作的是canvas;当运行在客户端上时,使用的是cocos2dx引擎,底层操作的是C++,再由C++去操控openGL做绘制和渲染。提供相同的API,对开发者几乎是透明无差异的,开发者只需要关注实现效果即可。达到一套代码,多端运行(网页端,客户端)。

JSPatch技术中的桥接

JSPatch是目前比较流行的iOS上的热修复技术,JSPatch 能做到通过 JS 调用和改写 OC 方法最根本的原因是 Objective-C 是动态语言,OC 上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名/方法名反射得到相应的类和方法。JSPatch 的基本原理就是:JS 传递字符串给 OC,OC 通过 Runtime 接口调用和替换 OC 方法。

关键技术之一是 JS 和 OC 之间的消息互传。JSPatch里包含了,一个JS引擎JavaScriptCore(Safari,React Native用的同款)。用到了 JavaScriptCore 的接口,OC 端在启动 JSPatch 引擎时会创建一个 JSContext 实例,JSContext 是 JS 代码的执行环境,可以给 JSContext 添加方法,JS 就可以直接调用这个方法。本质上就是通过JavaScriptCore引擎注入,暴露OC的方法供JS调用来实现动态修改OC的反射。

Demo,iOS热更新,热修复:

  1. 集成JavaScriptCore引擎;

  2. 通过引擎,桥接JS和OC;

  3. 通过JS修改OC反射。

详细的JSPatch技术介绍请移步:https://github.com/bang590/JSPatch/wiki

关于JavaScript引擎:

在iOS 或 android 上能够运行的JavaScript 引擎有4个:JavaScriptCore,SpiderMonkey,V8,Rhino。下面这个表格展示各个引擎在iOS 和 Android 的兼容性。

因为iOS平台不支持JIT即时编译,而V8只有JIT模式,所以V8无法在iOS平台使用(越狱设备除外,想体验iOS JIT的同学可以自行越狱)。

所以,目前可以做到横跨iOS和Android双平台的JS引擎,只有两款,即是SpiderMonkey和JavaScriptCore。

JavaScript引擎会受很多东西影响,比如交叉编译器的版本、引擎的版本和操作系统的种类等。

至于如何选择,可以参考:《Part I: How to Choose a JavaScript Engine for iOS and Android Development》

至此,JavaScript从立足于前端,到征战全端的逆袭之路,可以总结为“携引擎以令天下”。

不足之处,还请各位看官轻拍~

参考文章:

bang590/JSPatch中问参考文档

Cocos2d-JS | Cocos2d-x官方参考文档

Alfresco官方参考文档

《Browser Wars: The End or Just the Beginning?》

《Part I: How to Choose a JavaScript Engine for iOS and Android Development》

《React Native 从入门到源码》