日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在Android上運(yùn)行ClojureScript

[[151938]]

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了會同免費(fèi)建站歡迎大家使用!

在過去的幾天里,我有了開發(fā)生涯中最有意義的經(jīng)歷之一, 想在這里跟大家分享。

現(xiàn)在我們已經(jīng)讓 ClojureScript 可以在 Android 上運(yùn)行了。不是在一個(gè) WebView 里面,也不是利用像 Cordova 這樣的東西,而是實(shí)實(shí)在在的運(yùn)行在一個(gè)嵌入式的 JavaScript 引擎中。到底發(fā)生了什么?

最近,我們做了一些工作創(chuàng)建出了一個(gè) iOS 的 ClojureScript REPL 應(yīng)用,Replete。整個(gè)看上去很酷,而對應(yīng)的 Android 應(yīng)用就只算勉強(qiáng)能創(chuàng)建出來。不幸的是,我的 Android 技術(shù)平平,也不能立馬就上手。

不過,這方面 Tahmid Sadik 的技術(shù)還能上得了臺面。

Tahmid 可以把UI都串起來,也能將 Rhino 實(shí)例化并對JavaScript語句進(jìn)行計(jì)算,但是接下來讓引導(dǎo)式的 ClojureScript 運(yùn)行起來對他而言可謂是一次挑戰(zhàn)。

不過在此之前,他必須在他的 app 里將 ClojureScript 引導(dǎo)起來。引導(dǎo)這個(gè)詞被我特意標(biāo)明,指出他需要用 Google 的 Closure 依賴管理系統(tǒng)把 ClojureScript 運(yùn)行時(shí)啟動起來,沒有 JavaScript,也沒有其他的優(yōu)化(例如 :none 模式),根據(jù)需要,可以定義 CLOSURE_IMPORT_SCRIPT 環(huán)境變量。如果想包含一個(gè) REPL,用這種方式來引入運(yùn)行時(shí)是很重要的。這也為在你的 REPL 包含源碼級的名字空間提供了支持。

實(shí)際上,Replete 也需要做這些,用到的是 Ambly 的一個(gè)功能。我當(dāng)然知道,Replete 是一個(gè)獨(dú)立的 REPL,并不需要 Ambly。不過我使用了一個(gè)小花招,可以復(fù)用這個(gè)功能,讓 ClojureScript 啟動在 Replete 里運(yùn)行。

順便說一下,我最初是打算用 React Native 來實(shí)現(xiàn) Replete 的。結(jié)果發(fā)現(xiàn),使用 React Native 的 ClojureScript 支持還為時(shí)尚早,而可以引導(dǎo)的 ClojureScript 確實(shí)只是初期的功能,要想能夠?qū)嶋H工作還需要做很多努力。所以,對于 Replete,我還是保持簡單吧,就算是 Goby 也沒有用到。

對于上述的結(jié)果,好的一點(diǎn)是不需要 React Native 的依賴(Android 版還沒有正式公開發(fā)布),也沒有 Goby 的依賴(只支持 iOS)。Replete 內(nèi)置的 ClojureScript 非常簡潔,使用傳統(tǒng)的 iOS 的 UI,事實(shí)證明這對 Tahmid 去完成同樣功能的 Android 版很有幫助。

讓我們回到故事的開始:本質(zhì)上 Tahmid 復(fù)制了 Ambly 的 bootstrap 邏輯,按照順序逐一的執(zhí)行了在 Rhino 里的 JavaScript 語句。不過時(shí)不時(shí)的他會遇到一些奇怪的問題,我的記憶中幾個(gè)月前也會遇到類似的問題,在研究過 Ambly 的代碼后,我給了一點(diǎn)建議。

之后,他基本上可以引導(dǎo)成功 ClosureScriptle。

 

 
 
 
  1. cljs.core.apply.call(null,cljs.core.inc,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [1], null)) 

這行就是(apply inc [1])需要綁定的JavaScript代碼

然后Tahmid終于有了2.0。真棒!這應(yīng)該是有史以來的***次,在基于Android的嵌入式的Rhino上跑起來ClojureScript。

接下來,需要嘗試用起來reader, analyzer, 和compiler?,F(xiàn)在我們來試一下,只需要簡單的使用Replete里的JavaScript,讓Android的app執(zhí)行Replete的read_eval_print函數(shù),參數(shù)為字符串 (+ 1 2),如果工作正常,那么恭喜,ClojureScript已經(jīng)成功啟動了。

 

 
 
 
  1. replete.core.read_eval_print.call(null,'(+ 1 2)') 

且慢,Transit 里執(zhí)行 goog.require('replete.core');的時(shí)候出了問題,應(yīng)該是跟 randomUUID 有關(guān)。悲劇了,看上去顯然還有很多地方需要處理。

不過沒關(guān)系,Replete 之前一直嘗試用不同的方式加載 analysis 緩存,感謝 Karl Mikkelsen,我們有了一個(gè)可用的版本只使用純 JavaScript,沒有任何依賴。把這個(gè)用起來之后,在把print回調(diào)弄好(這樣類似 println 這樣的方法就可以工作了),接下來 Tahmid 就通過Slack通知我:

 

 
 
 
  1. I got 3 
  2.  
  3. (+ 1 2) = 3 

 

... 然后不斷煩我,還會擅自發(fā)博客。就這樣,引導(dǎo)的 ClojureScript REPL 在 Android 上誕生了!

Tahmid 在界面上封裝了一些東西,修復(fù)了 JavaScript/ClojureScript 集成的一些小問題之后就發(fā)布了Replicator。

簡直就是一場暴風(fēng)雨!

現(xiàn)在,Tahmid 正在用 JavaScriptCore 替換 Rhino,這就沒那么快了。

我認(rèn)為這將使速度提升。這為我們在 Android 上使用 JavaScriptCore 進(jìn)行本地交換的功能提供一些重要的基礎(chǔ)。

從大圖片來看,我真的認(rèn)為 ClojureScript 在 Android 上運(yùn)行很快。特別是使用 JavaScriptCore。對于這個(gè)觀點(diǎn)的問題,可以看看 Bocko 對 Android 的 Vladimir Iakovlev 的端口在啟動速度上的差異。

 

 
 
 
  1. Clojure ~14 秒 
  2.  
  3. Clojure / Skummet ~11 秒 
  4.  
  5. ClojureScript ~2 秒 

 

以上是在模擬器上運(yùn)行的結(jié)果,但是,我仍然認(rèn)為它顯示了 ClojureScript 真正的實(shí)現(xiàn)了在移動設(shè)備上減少計(jì)算延時(shí)的承諾。我認(rèn)為是時(shí)候讓 ClojureScript 活躍起來,用于為移動設(shè)備開發(fā)應(yīng)用!


文章標(biāo)題:在Android上運(yùn)行ClojureScript
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/djsdpce.html