亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Asm.js的簡(jiǎn)單介紹

lijy91 / 2244人閱讀

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

Asm.js簡(jiǎn)介

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

Asm.js實(shí)踐

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

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

Asm.js的本質(zhì)

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

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

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

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

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

最后列一段真是的編譯后的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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.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 評(píng)論0 收藏0
  • 前端每周清單半年盤點(diǎn)之 WebAssembly 篇

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

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

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

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

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

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

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

    用戶84 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<