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

資訊專欄INFORMATION COLUMN

通過WebAssembly在瀏覽器運(yùn)行PHP

ZHAO_ / 3237人閱讀

摘要:演示地址,你可以在上面運(yùn)行代碼,然后通過復(fù)制地址欄分享代碼。如果要讓代碼操作瀏覽器的,必須寫擴(kuò)展,使用的去調(diào)用,這還是可以做的。

演示地址:PIB: PHP in Browser,你可以在上面運(yùn)行PHP代碼,然后通過復(fù)制地址欄分享代碼。

項(xiàng)目地址:oraoto/pib

某天晚上,在看Emscripten的文檔,發(fā)現(xiàn)Emscripten有emconfigureemmake,可以直接用Emscripten替換編譯器實(shí)現(xiàn)項(xiàng)目移植,靈光一現(xiàn)就有了這個(gè)項(xiàng)目。

性能測(cè)試

首先娛樂測(cè)試一下,改自eechen的測(cè)試,10萬的數(shù)組填充和字符串拼接:


點(diǎn)我直接跑一下

我的電腦CPU是i5-6400,Chrome 66耗時(shí)0.35秒,F(xiàn)irefox耗時(shí)0.25秒,而原生PHP 7.2只需0.048秒,也就是說性能大約是原生PHP 7.2的1/7左右。

跑PHP源代碼自帶的Zend/bench.php

simple             0.288
simplecall         0.088
simpleucall        0.226
simpleudcall       0.241
mandel             1.138
mandel2            1.251
ackermann(7)       0.221
ary(50000)         0.037
ary2(50000)        0.033
ary3(2000)         0.626
fibo(30)           0.855
hash1(50000)       0.067
hash2(500)         0.084
heapsort(20000)    0.264
matrix(20)         0.285
nestedloop(12)     0.444
sieve(30)          0.178
strcat(200000)     0.043
------------------------
Total              6.369

而原生PHP 7.2只要0.591秒,差了近11倍。

功能測(cè)試

因?yàn)槭侵苯泳幾gPHP解析器,所以語言層面的大部分功能都是支持的,目前已知不支持的只有Generator(已支持)

下面是一些PHP7的新特性:

object類型

抽象方法重寫

可空類型

Void函數(shù)

數(shù)組解構(gòu)

類常量可見性

庫(kù)函數(shù)方面支持比較少,默認(rèn)只編譯了date、pcre、bcmathctype、json、Reflection、SPL、tokenizer、standardCore這些擴(kuò)展。

實(shí)現(xiàn)原理

原理并不復(fù)雜,就是用Emscripten把PHP解釋器編譯到WebAssembly,然后通過JavaScript調(diào)用Zend的API。

為了能讓PHP解釋器編譯成功,需要對(duì)代碼做少量修改,主要是文件系統(tǒng)相關(guān)的兩處代碼,我只直接注釋掉或者return跳過代碼。

對(duì)比現(xiàn)有方案

3v4l這種在服務(wù)端執(zhí)行代碼然后返回結(jié)果到前端的方案已經(jīng)很成熟,在運(yùn)行和分享PHP代碼方面,PIB的優(yōu)勢(shì)就是省去了我部署服務(wù)器的錢(文件都在Github pages)。

也有其他的在瀏覽器直接運(yùn)行PHP的方案:

php2wasm直接把PHP代碼編譯成wasm,現(xiàn)在還不成熟

pyhp.js用Pyton實(shí)現(xiàn)PHP解釋器(PyHP,據(jù)作者說性能比PHP7好),然后再把這個(gè)解釋器編譯到JS,支持的特性有限,作者已經(jīng)棄坑

而PIB已經(jīng)支持了大部分PHP語言特性,不過性能和穩(wěn)定性仍需提高。

未來

一開始設(shè)想是用PHP進(jìn)行前端開發(fā)的,但是實(shí)現(xiàn)不容易,所以先做成這個(gè)樣子了。

如果要讓PHP代碼操作瀏覽器的DOM,必須寫PHP擴(kuò)展,使用Emscripten的API去調(diào)用JavaScript,這還是可以做的。

而JavaScript很多接口都是需要回調(diào)的,Emscripten也是可以做到,但是只是回調(diào)到C/C++,如果要回調(diào)到PHP,就要自己實(shí)現(xiàn)協(xié)程方案,這我還做不了。

目前可以完善和嘗試的:

語法檢查

錯(cuò)誤信息顯示

減少代碼體積

處理內(nèi)存泄漏

如果你有什么有趣的想法,也不妨提個(gè)issue或者評(píng)論一下。

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

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

相關(guān)文章

  • WebAssembly 系列(六)WebAssembly 的現(xiàn)與未來

    摘要:目前正在開發(fā)兩個(gè)編譯器系統(tǒng)。這就意味著有很多功能還在襁褓之中,沒有經(jīng)過徹底思考以及實(shí)際驗(yàn)證。這些特性叫做未來特性。實(shí)現(xiàn)這一功能將會(huì)使用中的,而這一功能的實(shí)現(xiàn)將會(huì)提高程序執(zhí)行的效率。目前瀏覽器在逐漸支持用標(biāo)記來加載模塊。 作者:Lin Clark 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58ce7fd3a6...

    mcterry 評(píng)論0 收藏0
  • WebAssembly起步

    摘要:解析下載后,需要引擎經(jīng)過兩個(gè)階段轉(zhuǎn)換成,然后再轉(zhuǎn)換為瀏覽器需要的中間字節(jié)碼。未來所有支持編譯到字節(jié)碼的編程語言,理論上都可以輸出。 了解WebAssembly原理 WebAssembly是一種可以在瀏覽器上運(yùn)行的二進(jìn)制可執(zhí)行格式文件。它將成為瀏覽器進(jìn)化史上又一次革命。 自從瀏覽器問世以來,javascript就成為瀏覽器上執(zhí)行程序的唯一標(biāo)準(zhǔn),越來越多的應(yīng)用程序通過javascript開...

    shiina 評(píng)論0 收藏0
  • 圖說 WebAssembly(六):現(xiàn)狀與展望

    摘要:現(xiàn)狀年月日,主流的四大瀏覽器達(dá)成了共識(shí)并宣布的最小可行產(chǎn)品已經(jīng)完成。更快的函數(shù)調(diào)用當(dāng)前,在中調(diào)用函數(shù)比想象的要慢。直接操作目前,沒有任何方式能夠操作。這就導(dǎo)致了部分應(yīng)用可能會(huì)因此而推遲發(fā)布時(shí)間。結(jié)束現(xiàn)如今已經(jīng)相當(dāng)快速。 本文是圖說 WebAssembly 系列文章的最后一篇。如果您還未閱讀之前的文章,建議您從第一篇入手。 現(xiàn)狀 2017 年 2 月 28 日,主流的四大瀏覽器達(dá)成了共識(shí)...

    clasnake 評(píng)論0 收藏0
  • WebAssembly 那些事兒

    摘要:的目標(biāo)是對(duì)高級(jí)程序中間表示的適當(dāng)?shù)图?jí)抽象,即代碼旨在由編譯器生成而不是由人來寫。表示把源代碼變成解釋器可以運(yùn)行的代碼所花的時(shí)間表示基線編譯器和優(yōu)化編 WebAssembly 那些事兒 什么是 WebAssembly? WebAssembly 是除 JavaScript 以外,另一種可以在網(wǎng)頁(yè)中運(yùn)行的編程語言,并且相比之下在某些功能和性能問題上更具優(yōu)勢(shì),過去我們想在瀏覽器中運(yùn)行代碼來對(duì)網(wǎng)...

    邱勇 評(píng)論0 收藏0

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

0條評(píng)論

ZHAO_

|高級(jí)講師

TA的文章

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