用c# 開發html5的嘗試,試用bridge.net

瘋光無線發表於2018-10-12


Javascript交叉編譯方案很多了,工業級品質的也不是沒有,但前兩年我從事html5 3d引擎開發時,做過一圈評估,沒有可用的。

作為一個c#愛好者,我自然是很希望能最大限度的利用c#的生產力,之前經過評估,我們選擇了typescript 作為開發工具,確實也產生了一些收效。

時過境遷,雖然很久不做h5方面的開發,但任然關注,偶然發現bridge.net的發展速度相當的不錯,今日觀之,社群已經相當成熟。就手癢,又評估了一把。

先上原始碼

https://github.com/lightszero/bridge.net.study

也直接有生成的頁面

https://lightszero.github.io/bridge.net.study/webapp/webapp/index.html

先說結論

Bridge.net成熟度很高,我嘗試了一些c#的語法,都可以正常工作。

也發現了一些小小的問題,懂一些js一對比很容易解決。

會帶入一個bridge.js 1M多,壓縮版800k

Bridge採取的方案是直接將c#程式碼編譯為js,準確的說是IL程式碼。而且採用的方法比較暴力,對無法直接對應的一些c#常用功能,直接寫了一套js底層類庫來支撐。

這就是那1M的來歷,好處是編譯過程就會相對比較簡單,越簡單的機制越容易穩定。

對比typescript方案主要有3個優點

1. 有整數,在語法表達方面會更清晰

2. 有struct,這個我就不多言戰術價值了

3. C#,這就仁者見仁了

主要有兩個缺點

1. 多了1M的依賴庫

2. 生成的程式碼多了一層包裝,沒有typescript生成的程式碼乾淨。

老有人拿untiy的webgl方案說事,我只說一條。

Unity的webgl方案是構築在webassembly基礎上的,微信小遊戲不支援。

現在來說說bridge.net 怎麼用

0. 首先你得是個Visual studio 使用者,不是當我沒說

1. 根本不用安裝,因為他的原理就是一個c#dll 和 編譯相關的dll,只需要dll和csproj的相關配置,這個工作nuget就可以完成。

你隨便建立一個c#專案,然後nuget 安裝 bridge.net 就行了

我是用一個asp.net專案做模板,然後nuget安裝bridge.net,因為asp.net 專案 按F5 就可以直接啟動頁面呀,就這麼簡單。

clip_image002

2. 然後只要build專案的時候bridge.net就會自動給你生成js了,他會使用bridge.js來做一些配置選項

clip_image004

3. 關於功能

clip_image006

前面安裝的briage.net 只是安裝環境,首先要使用html5自己的介面,就是訪問 window 呀這些,需要再nuget安裝 bridge.html5.

我要開發個webgl介面來試試,就nuget安裝bridge.webgl

4. 關於除錯

瀏覽器除錯,略。

因為html 有map檔案標準,所以你瀏覽器除錯也是可以看到c#的,而且可以下斷電,觀測值

clip_image008

clip_image010

你要確認的事情就是bridge.json開啟了map的輸出

不過bridge.net有一點不好,他提供的功能,對命名做了修改

clip_image012

就比如這個GetContext,在js裡是getContext

因為這個修改,對除錯造成了一些小小的麻煩,瀏覽器除錯工具是針對js的,還要用原來的名字才能找到。因為瀏覽器的map檔案只有js和原始檔行數的對映,沒有變數名函式名這些。

但問題不大,我們知道它主要就改了大小寫而已,除錯的時候多敲一下的問題

那麼可不可以直接在vs裡面下斷點除錯呢,也是可以的。因為bridge輸出的map檔案用的相對路徑,只要把bridge.json的輸出路徑改一下,就行

clip_image014

然後開啟vs的指令碼除錯功能

clip_image016

注意vs2017才有google chrome的除錯功能(印象中),vs2015只能除錯ie去

clip_image018

然後就可以直接在vs裡面斷點了,需注意因為他做了一個改名的動作,除錯的時候對監視器產生了影響

相關文章