成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Asm.js的簡單介紹

lijy91 / 2186人閱讀

摘要:的代碼采用另外一套編譯器,將代碼預(yù)先編譯成機(jī)器指令,在編譯過程或運(yùn)行過程中,一旦發(fā)現(xiàn)語法錯(cuò)誤或違反類型標(biāo)記的情況出現(xiàn),便重新將代碼交予引擎解析執(zhí)行。

Asm.js簡介

早前流行的JavaScript將會統(tǒng)治世界這個(gè)梗,很好的說明了JavaScript的將來,能用JavaScript書寫的都會用JavaScript來進(jìn)行書寫,不過JavaScript的弱類型是其被黑性能的很大不一部分,而為了解決由其他強(qiáng)類型語言【c++、Java】等轉(zhuǎn)換為JavaScript的困擾時(shí),各大瀏覽器嘗試進(jìn)行了不同的嘗試,其中Mozilla的Asm.js最為突出,
Asm.js 來自于 JavaScript 應(yīng)用的一個(gè)新領(lǐng)域: 編譯成JavaScript的C/C++應(yīng)用. 它是 JavaScript 應(yīng)用的一個(gè)全新流派,由 Mozilla 的 Emscripten項(xiàng)目催生而來。
Emscripten 將 C/C++ 代碼傳入 LLVM, 并將 LLVM生成的字節(jié)碼轉(zhuǎn)換成 JavaScript (具體的,
Asm.js, 是 JavaScript 的一個(gè)子集).
asm.js不是一種新的語言,而是JS語法的一個(gè)子集,也就是說所有用asm.js寫的程序都是合法的JS程序,asm.js與JS語言的關(guān)系有點(diǎn)類似C與C++的關(guān)系。因此,不支持asm.js的瀏覽器或JS引擎也可以無誤地執(zhí)行asm.js的代碼。asm.js顧名思義是作為JS的匯編語言來設(shè)計(jì)的,它的語法手寫起來非常困難,且難以閱讀。首先,asm.js的語法利用了一些標(biāo)注讓JS的變量成為強(qiáng)類型的,這些標(biāo)注與Emscripten生成的代碼如出一轍,實(shí)際上asm.js的產(chǎn)生就是為了提高Emscripten轉(zhuǎn)換后的代碼執(zhí)行效率的。

Asm.js實(shí)踐

準(zhǔn)確的來說,目前我們還無法來完整的使用這個(gè)功能,因?yàn)閮H僅https://www.mozilla.org/zh-CN... 只有他支持asm.js,當(dāng)然前文也說了,即使不支持的瀏覽器也可以執(zhí)行,因?yàn)楸举|(zhì)上Asm.js就是JavaScript,只不過這樣書寫的js的性能和可讀性都不如正常書寫的JavaScript,所以沒有意義,asm.js本來也是不希望程序員去書寫,而是JavaScript擴(kuò)展到其他領(lǐng)域的可能,通過將c/c++的應(yīng)用程序轉(zhuǎn)換為Asm.js的程序,就可以在web平臺跑了,
至于怎么運(yùn)行的,官網(wǎng)上有一張圖片:

由于asm.js相當(dāng)于支持了強(qiáng)類型,因此可以直接對應(yīng)編譯成機(jī)器指令執(zhí)行。asm.js的代碼采用另外一套AOT(Ahead Of Time)編譯器,將asm.js代碼預(yù)先編譯成機(jī)器指令,在編譯過程或運(yùn)行過程中,一旦發(fā)現(xiàn)語法錯(cuò)誤或違反類型標(biāo)記的情況出現(xiàn),便重新將代碼交予JS引擎解析執(zhí)行。

Asm.js的本質(zhì)

從本質(zhì)上來說Asm.js不是新的語言,是一種新的JavaScript的使用場景、領(lǐng)域,他的語法都是JavaScript的語法,實(shí)現(xiàn)的過程就是:

使用各種黑白膜法【位運(yùn)算、注解、檢測】來實(shí)現(xiàn)了強(qiáng)類型;

通過各類工具【Emscripten】來將其他語言轉(zhuǎn)換為asm.js格式的js,可在web平臺執(zhí)行;

通過瀏覽器的js引擎的支持,將asm.js編譯成更為底層的機(jī)器碼來加提高js的性能;

同時(shí)也要兼容,變異的機(jī)器碼需要動態(tài)檢測是引擎否能夠支持這種機(jī)器碼,不能就轉(zhuǎn)到j(luò)s執(zhí)行,這樣的話性能并沒有提高。
準(zhǔn)確的說Asm.js都是編譯而來的機(jī)器碼,但是可以根據(jù)web平臺的js引擎來進(jìn)行【機(jī)器碼--JavaScript】的切換動作,從而兼容其他web平臺。

最后列一段真是的編譯后的Asm.js模塊代碼:

function GeometricMean(stdlib, foreign, buffer) {
  "use asm";

  var exp = stdlib.Math.exp;
  var log = stdlib.Math.log;
  var values = new stdlib.Float64Array(buffer);

  function logSum(start, end) {
    start = start|0;
    end = end|0;

    var sum = 0.0, p = 0, q = 0;

    // asm.js forces byte addressing of the heap by requiring shifting by 3
    for (p = start << 3, q = end << 3; (p|0) < (q|0); p = (p + 8)|0) {
      sum = sum + +log(values[p>>3]);
    }

    return +sum;
  }

  function geometricMean(start, end) {
    start = start|0;
    end = end|0;

    return +exp(+logSum(start, end) / +((end - start)|0));
  }

  return { geometricMean: geometricMean };
}

參考:網(wǎng)友解讀:https://software.intel.com/zh...
官網(wǎng):http://asmjs.org/spec/latest/
githu地址 https://github.com/dherman/as...
很贊的文章 http://www.oschina.net/transl...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87033.html

相關(guān)文章

  • WebAssembly 為什么比 asm.js 快?

    摘要:并且于年月日,四個(gè)主要的瀏覽器一致同意宣布的版本已經(jīng)完成,即將推出一個(gè)瀏覽器可以搭載的穩(wěn)定版本。因此本文著重介紹為什么比更快。本文主要表達(dá)的是為什么應(yīng)該是更快的。則不同,它是由幾大主要的瀏覽器廠商共同設(shè)計(jì)的。 作者:Alon Zakai 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58ce80d2a6d8a0...

    Binguner 評論0 收藏0
  • 前端每周清單半年盤點(diǎn)之 WebAssembly 篇

    摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。利用降低三倍加載速度自推出之后,很多開發(fā)者都開始嘗試在小型項(xiàng)目中實(shí)踐,不過尚缺大型真實(shí)案例比較。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目...

    Alan 評論0 收藏0
  • Emscripten教程之優(yōu)化你代碼

    摘要:優(yōu)化項(xiàng)也會引發(fā)一些問題。檢查你的代碼是否工作并修復(fù)問題。從起,及以上的優(yōu)化級別默認(rèn)啟動了這項(xiàng)設(shè)置。目前正在進(jìn)行改進(jìn)。代碼移植系列文章代碼移植主題系列文章是中文站點(diǎn)的一部分內(nèi)容。 作者:云荒杯傾歡迎加入Wasm和emscripten技術(shù)交流群,群聊號碼:939206522。 這是關(guān)于Emscripten的系列文章,更多文章請看下面鏈接。 Emscripten代碼移植系列文章 Emscr...

    Jokcy 評論0 收藏0
  • Emscripten教程之優(yōu)化你代碼

    摘要:優(yōu)化項(xiàng)也會引發(fā)一些問題。檢查你的代碼是否工作并修復(fù)問題。從起,及以上的優(yōu)化級別默認(rèn)啟動了這項(xiàng)設(shè)置。目前正在進(jìn)行改進(jìn)。代碼移植系列文章代碼移植主題系列文章是中文站點(diǎn)的一部分內(nèi)容。 作者:云荒杯傾歡迎加入Wasm和emscripten技術(shù)交流群,群聊號碼:939206522。 這是關(guān)于Emscripten的系列文章,更多文章請看下面鏈接。 Emscripten代碼移植系列文章 Emscr...

    bladefury 評論0 收藏0
  • Asm.js: Javascript編譯目標(biāo)

    摘要:來自于應(yīng)用的一個(gè)新領(lǐng)域編譯成的應(yīng)用它是應(yīng)用的一個(gè)全新流派,由的項(xiàng)目催生而來。所有外部數(shù)據(jù)在一個(gè)稱為堆的對象中存儲并被引用。到目前為止,大部分的使用情況下,代碼性能是至關(guān)重要的比如運(yùn)行游戲,圖像,處理語言翻譯和庫。 正如許多開發(fā)者一樣,我也為Asm.js的前景而感到興奮不已。最近的新聞——Asm.js正在被Firefox支持——引起了我的興趣。同樣感興趣的還有Mozilla和Epic聲明...

    用戶84 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<