然人生的幕布已經拉開,就一定要精彩的演出。
既然前進的腳步已經跨出,風雨坎坷也不能退步。
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的,十有八九估計是他們搞的。)
在瀏覽器環境中,DOM、BOM、window對象、setTimeout/setInterval,alert,console等方法均不是JavaScript自身具備的能力,而是瀏覽器native實現,然后通過JavaScript引擎注入到JS運行的全局上下文中,供JS使用。
鑒別方式,在調試器console中打出來,帶有[native code]的即是:
講道理:
JavaScript運行 → 依賴于JavaScript引擎 ← 瀏覽器集成了JavaScript引擎,同時通過JavaScript引擎注入native代碼工JS腳本使用
發散一下思維,只要有JavaScript引擎,就能運行JS腳本,不管有沒有瀏覽器!只是缺少瀏覽器提供的alert,window等方法。
既然瀏覽器可以往JavaScript引擎中注入代碼,賦予JS腳本在網頁中特殊的能力,同理我們可以自己集成JavaScript引擎,自己定義自己的方法往JavaScript引擎中注入,賦予JS更多更強的自定義能力!
注入的關鍵是:值類型相互對應,Obj映射class的一個實例,function映射一個句柄或者引用
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的運行依賴于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能力
以上說到的幾個都是C++層面的應用,那么經典的Java怎么玩?是不是Java就必須是靜態語言的玩法,沒有辦法像C++之類的,可以使用JS的動態特性?
當然不是。這個時候,我們需要說起前面介紹過的一個JS引擎 Rhino,Rhino是完全由Java編寫,可想而知,Rhino幾乎就是為Java應用而生的。
用法是這樣:
首先在我們的Java應用中集成Rhino;
所有的IO操作,網絡操作等,都封裝成service,并提供增刪改查,setter && getter等多種方法
通過spring,把這些service bean注入到Rhino中;
把業務邏輯寫到JS代碼中,JS代碼調用多個已注入的Java service處理業務邏輯,拼裝數據返回!
好處:修改業務邏輯不需要修改Java代碼,也就是不需要重新編譯和部署,只需要刷新下跑在Rhino中的JS代碼即可。以往Java應用的一個痛點是部署,需要重新編譯,打包,部署重啟服務器,現在以這種形式開發,可以達到服務端的熱更新和熱部署。既可以享有Java服務的穩定性和可靠性,又可以享有JS的靈活性。
這種技術和用法在差不多十年前就有過,前EMC的工程師基于EMC著名的商業產品Documentum,設計了一套Java開源的中小企業CMS系統Alfresco,在該系統中實現了這種技術,這種技術基于spring,叫做spring-surf,做了一個膠水層。可以看做小十年前的node吧。
Demo,使用spring-surf框架的系統中一個webscript模塊
categorynode.get.xml定義URL攔截器和權限控制;
.get指明是處理GET請求,RESTful;
在categorynode.get.js中調用已注入的Java Bean處理業務邏輯;
若為網頁請求返回.html.ftl,若為Ajax,返回.json.ftl;
(此處配套使用的是FreeMarker模板引擎)
==> categorynode.get.desc.xml
==> categorynode.get.js
==> categorynode.get.html.ftl
==> categorynode.get.json.ftl
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等。
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是目前比較流行的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熱更新,熱修復:
集成JavaScriptCore引擎;
通過引擎,橋接JS和OC;
通過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 從入門到源碼》
*請認真填寫需求信息,我們會在24小時內與您取得聯系。