国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過WebAssembly在瀏覽器運行PHP

ZHAO_ / 3221人閱讀

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

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

項目地址:oraoto/pib

某天晚上,在看Emscripten的文檔,發現Emscripten有emconfigureemmake,可以直接用Emscripten替換編譯器實現項目移植,靈光一現就有了這個項目。

性能測試

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


點我直接跑一下

我的電腦CPU是i5-6400,Chrome 66耗時0.35秒,Firefox耗時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倍。

功能測試

因為是直接編譯PHP解析器,所以語言層面的大部分功能都是支持的,目前已知不支持的只有Generator(已支持)

下面是一些PHP7的新特性:

object類型

抽象方法重寫

可空類型

Void函數

數組解構

類常量可見性

庫函數方面支持比較少,默認只編譯了datepcrebcmathctypejsonReflectionSPLtokenizerstandardCore這些擴展。

實現原理

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

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

對比現有方案

3v4l這種在服務端執行代碼然后返回結果到前端的方案已經很成熟,在運行和分享PHP代碼方面,PIB的優勢就是省去了我部署服務器的錢(文件都在Github pages)。

也有其他的在瀏覽器直接運行PHP的方案:

php2wasm直接把PHP代碼編譯成wasm,現在還不成熟

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

而PIB已經支持了大部分PHP語言特性,不過性能和穩定性仍需提高。

未來

一開始設想是用PHP進行前端開發的,但是實現不容易,所以先做成這個樣子了。

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

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

目前可以完善和嘗試的:

語法檢查

錯誤信息顯示

減少代碼體積

處理內存泄漏

如果你有什么有趣的想法,也不妨提個issue或者評論一下。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28723.html

相關文章

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

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

    mcterry 評論0 收藏0
  • WebAssembly起步

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

    shiina 評論0 收藏0
  • 圖說 WebAssembly(六):現狀與展望

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

    clasnake 評論0 收藏0
  • WebAssembly 那些事兒

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

    邱勇 評論0 收藏0

發表評論

0條評論

ZHAO_

|高級講師

TA的文章

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