VOOZH about

URL: https://read01.com/jxgPP.html

⇱ 《近匠》HBuilder:如何用JS調用幾十萬原生API? - 壹讀


Saturday, Apr 11, 2026

《近匠》HBuilder:如何用JS調用幾十萬原生API?

2014/04/11 來源:CSDN

CSDN:請講講團隊和您以往的從業經歷?

DCloud CEO王安:我們團隊從03年起開始做手機App,從J2me、Symbian、Win mobile、Brew一直做到現在的Android、iOS和WP。之前一直在為企業市場提供跨平台手機App的無線中間件。

後來我們看好HTML5的前途,而且也經不住toC市場的誘惑,就毅然出來二次創業。成立了DCloud.io,開始做基於HTML5的生態系統服務,包括開發工具和雲服務。

👁 Image
...

我們是W3C的會員,也是HTML5中國產業聯盟的發起單位。我們是一個典型的輕團隊,人不多,但極客化。我們的合伙人之一王淮也在Facebook工作了很久,給我們帶來了很多矽谷的模式。

CSDN:為什麼要做HBuilder這樣一款工具?

王安:人稱HTML5是「性、工、能」缺失,其中「工」指工具不給力,確實如此。

任何主流程式語言,都有優秀的開發IDE,不管是java、.net、Obj-C,但HTML5領域卻一直在用低效的文本編輯器開發。我個人用了十幾年文本編輯器,對比我熟悉的其他語言的IDE,效率也實在讓我受不了。我們就動手開發了HBuilder。

HTML十幾年前初生時,是簡單的標記語言,確實文本編輯器足矣。那時候寫頁面的人都不被視為真正的程式設計師。但時代不同了,現在JS、css已經發展為真正的程式語言,一個工程會非常龐大,此時沒有IDE會很低效。就像用文本編輯器寫java或Obj-C一樣,效率比專業IDE差很多。

過去也確實沒有太好的HTML5 IDE,更不用提免費的好工具。因為web IDE開發確實很困難,web語法庫沒有統一標準,月月更新,JS是無類型的動態語言……

但是有問題,就會有解決問題的人。所以我們花費大力氣,建立最全的語法庫和瀏覽器兼容資料庫,開發動態JS解析引擎,開源框架語法庫。並且我們在開發效率提升上下了非常大的功夫,快是HBuilder最大的特點,能提升數倍開發效率。

另一方面,HTML5的重要價值是開發手機App,HBuilder為開發者提供移動App開發的全套支持,支持插上數據線真機聯調,不需xcode等原生開發環境就能打包手機App。此外,我們有項創新的技術是JS調用幾十萬原生API。

CSDN:HBuilder是針對移動應用的哪一個環節?在這個環節中,現在是一種什麼狀況?格局是什麼樣的?

王安:使用HTML5、JS、css開發跨平台手機App,這類工具其實之前已經有Phonegap、Titanium。從品類相比,Phonegap只有Runtime沒有IDE,Titanuim的IDE是為其特殊API而製作的專有工具。但HBuilder是一個通用的HTML5開發IDE且又內置了手機runtime。也就是開發者只需要HBuilder就夠了,PC web、Mobile web、App,一個工具一套代碼。

我們推崇一個理念叫「響應式應用」:一套代碼根據不同運行環境調用不同能力來優化用戶體驗。比如文本框,在普通瀏覽器下就是一個文本輸入框,在Chrome瀏覽器下運行時加個判斷調Chrome的語音輸入,而運行在App模式下,則再加一個判斷調用原生的語音識別SDK,比如plus.speech。這樣一個應用可以根據設備的不同而最大化的優化用戶體驗,這種模式很有魅力,對用戶而言體驗更好,對開發者而言成本更低。

當然,比其他同類產品更神奇的一點是,HBuilder里能通過JS代碼的寫法操作幾十萬原生API,即Obj-C和Android原生的對象。

CSDN:HTML5在跨平台App開發上有哪些問題?

王安:前景美好,但卻有四個致命缺點阻礙它的爆發,就是「性、工、能」缺失,碎片化嚴重。相對於原生,HTML5的App性能低,工具差,能力弱。原生雖然不跨平台,但HTML5的瀏覽器兼容性也讓開發者撓頭。HBuilder為了解決這些難題做了很多努力。

1. 先說工具

HBuilder大幅提升了HTML5開發效率。並且也擁有最全且實時更新的HTML5新語法庫。瀏覽器更新版本後一周內其新增的語法就可以被HBuilder提示出來。

HBuilder追求快,還有一個目的,就是降低開發者對框架的依賴。PC Web里框架非常流行,很多框架簡化了開發。但是框架的簡化開發建立在性能下降的基礎上,手機上HTML5本來就慢,層層封裝後只會越來越慢。但開發者使用HBuilder會發現,在HBuilder里不用框架開發的速度,比用其他開發編輯器配合框架的速度,更快。

目前主流HTML5開發工具都更新在沒有手機真機聯調等功能,HBuilder提供了這些功能才能有效的語法庫里幫助開發者開發手機App。

2. 瀏覽器兼容性

由於瀏覽器內核不同,自有擴展語法多,新語法增加速度快,導致碎片化很嚴重,而且是持續性的給開發者造成困擾。HBuilder里每個語法,都有瀏覽器兼容性說明,是目前最全的瀏覽器兼容資料庫。見下圖,-webkit-user-select這個屬性的值域all,IE和Firefox自然不支持,圖標為灰色。但同為webkit內核,Chrome支持;而Android瀏覽器不支持,圖標為灰色;Safari也只有7.0以上才支持,圖標是半亮。

👁 Image
...

有人說手機上都是webkit內核瀏覽器,應該沒有兼容性問題。但上圖告訴開發者殘酷的真相:iOS、Safari、Android瀏覽器、Chrome安卓版,主流的3款手機瀏覽器一樣有兼容性問題。Google和Apple聯手打破IE的壟斷後,又開始分裂,Chrome去年另起了Blink引擎,開始獨立擴展語法。另外雖然Safari的Mac版和iOS版有點差別,但不多;而Chrome的Android版和Android系統自帶的瀏覽器完全是2個產品。作為開發者,我甚至有點懷念IE壟斷市場的日子。

我們努力做出這個瀏覽器兼容庫,希望可以幫助到廣大開發者。

3. 能力

HTML5規範的好處是跨平台的,但壞處是規範能力比原生差非常多。為了解決這個問題,我們推出了兩套方案:HTML5+的跨平台規範和JS直調原生API。

  • HTML5+的跨平台規範:開發者常用的手機能力,封裝在HTMLplus.org規範里,包括二維碼、語音輸入等,比如在JS里輸入plus.barcode調用二維碼,plus.speech調用語音輸入。開發一次在不同手機上都可以運行。
👁 Image
...
JS直調原生API:我們提供了plus.ios和plus.android這2個很神奇的對象,使得web開發者不用學習Obj-C,不用買Mac設備,就能在JS里調用原生對象。我們可以這麼定義一個JS變量,但實際上是Obj-C對象:我們可以這麼定義一個JS變量,但實際上是Obj-C對象:JS直調原生API:我們提供了plus.ios和plus.android這2個很神奇的對象,使得web開發者不用學習Obj-C,不用買Mac設備,就能在JS里調用原生對象。我們可以這麼定義一個JS變量,但實際上是Obj-C對象:

var a = plus.ios.implements("NSObject",{"authenticationChanged:":authenticationChanged});

或者如下圖中的:var Intent = plus.android.import("android.content.Intent");其中的"android.content.Intent"是Android的原生類。這段代碼就是使用JS方式給在安卓手機桌面創建一個App快捷方式。

👁 Image
...

這樣,使用HTML5編程的App,在能力方面就和原生一樣強大了。 以前用HTML5做的遊戲都無法調用Game Center,O2O應用也調不了Passbook,現在這些都輕而易舉。我們相信這對於web工程師而言,是極大的能力解放,充滿機會的一扇新窗口!

4. 性能

HTML5應用的性能一直是這個產業發展的瓶頸。

手機硬體比PC差、HTML5作為解釋性語言比原生的編譯型語言性能差、手機瀏覽器的默認控制項樣式未優化導致需要在應用層重新封裝UI。這一系列問題疊加在一起,使得性能成為所有HTML5開發者心頭的痛。

另外前端工程師大多長於UI,相比伺服器工程師,他們的代碼性能也要低不少。比如前端工程師很習慣使用框架,框架層層封裝越來越慢,性能如何上的去。HBuilder在解決這個問題上也花費了很多心血:

a. 調用原生繪製界面

在HTML5+規範里有一個plus.ui的子集。一些原生樣式或動畫,比如翻頁動畫或下拉刷新,使用HTML5+JS+css模擬要寫很多代碼,執行起來很慢,此時通過plus.ui擴展就可以在窗體上設置一塊區域,交給原生繪製。性能可大幅提升。

b. 性能第一的UI庫

以前宣稱為手機優化的框架,其實都不是把性能作為產品取捨的第一優先,或者為了框架使用者方便、或者為了框架維護者方便而犧牲了執行性能。我們決定自己做一個。這個項目我們還在開發中,不久會上線。

我們沒有把它稱為框架而是叫UI庫,是因為這裡的控制項都是使用最簡單的css樣式的,直接寫class=」xxx」。相比於寫成data-role,然後在JS運行時才替換Dom,使用class的方式要高效的多。

控制項含有的必要的JS代碼,也是本著性能優先的原則開發的,代碼極其精簡高效,沒有$等三方框架,但又可以跨手機瀏覽器。並且這套UI庫會和HBuilder的打包機、Runtime深度整合,做到更高性能的優化。

CSDN:相對於編寫大量JS實現來說,HBuilder利用JS調用原生API,有哪些優點?

王安:JS調用原生API,最大的優點,是大大強化了HTML5的能力,突破了瀏覽器的限制,原生有幾十萬API,數量遠多於HTML5。比如攔截Android來電。

JS的執行效率肯定還是低於原生的,提升性能需要使用前述方案。

這項技術對於JS程式設計師來講是非常友好易學的,他不需要學習原生語言和配置開發環境,只需要查詢每個原生對象是做什麼用的,然後在JS的plus.ios或plus.andriod里把原生類名作為參數傳進去,就可以通過JS調用該原生對象的方法。

我們還製作了一批常用原生代碼模板,包括創建快捷方式、登錄game center的樣例代碼已經預置在HBuilder里。

CSDN:JS調用原生API,是如何實現的?

王安:這個非常複雜,不同的api需要不同的方法,手機、雲、IDE的共同配合。IDE的顯示代碼、打包機編譯、runtime實際運行這幾種情況下執行碼是不同的。

CSDN:HTML5跨平台開發領域的趨勢是怎麼的?

王安:HTML5的光明前途是毋庸置疑的,當Java被攔在iOS門外時、當終端和屏幕越來越多樣時,HTML5的簡單易用和跨平台這些特點都代表了未來的方向。

現在的問題僅僅是阻礙HTML5發展的那幾個難題,會在何時、會被哪些人解決。當性能、工具、能力、兼容性得到有效突破時,HTML5必將迎來發展爆發。

CSDN:接下來針對HBuilder,Dcloud還有哪些計劃?

王安:除了上面提到的高性能手機UI框架,HBuilder下一步會引入SNS和UGC,強化插件體系,聯合眾多開發者打造大家更滿意的工具和服務。我們很認真的開發著這個免費工具,也希望所有開發者都參與到這個工具的打造中來。目前HBuilder已經在github.com/dcloudio上設立了3個開源項目,歡迎大家一起打造自己滿意的工具。

#p#《近匠》HBuilder之讀者提問#e#

【讀者提問】(提問源於此前報導的讀者評論)

vinewood請對HBuilder與Aptana Studio做一次對比。

王安:與Aptana Studio對比是沒有意義的,HBuilder基本繼承了Aptana Studio的所有優點,並進行了大量改良。

Aptana Studio目前唯一可以說的好處是,它可以作為eclipse插件發布,開發者現有的eclipse上裝個插件就能用Aptana Studio。

但HBuilder除了java,還有c、html、ruby等各種語言,而且還改了eclipse的底層,所以已經無法成為現有的eclipse的一個插件了。

uploaders評論:「開發速度,跟網站框架相關, ide都差不多,再好的ide,整了一堆複雜的代碼效率也是更不上去的vim 方便」。對此,您有何看法?

王安:確實一些複雜的js框架,想給予良好的提示不容易。但這個觀點是未深入了解HBuilder的觀點。HBuilder大概是為了「快」做的最用心的工具,我們深知一個工具只有把一個特點做到極致才能成功,我們選擇的這個點就是快。

首先不管網站是否引入了複雜js框架代碼,工具之間的開發效率還是有巨大差別的。代碼輸入法、代碼塊、模糊匹配、智能補齊、全面的原生語法提示、全時提示、快捷鍵語法,這些都是HBuilder的長處,都能大幅提升開發效率。

  • 比如敲數字就能選擇候選項的代碼輸入法,按1個數字鍵,平均少敲10個按鍵;
  • 代碼塊:一個代碼塊,平均少敲50個按鍵;比如我最常用的代碼塊dg回車,直接生成下圖,非常舒服。
.

在敲$(「#」)時,其實非常痛苦,要按shift+4、shift+9、shift+』、shift+3,我非常非常厭惡按shift,不能盲打,很低效。但是在HBuilder里敲dli回車,非常爽。

👁 Image
...
👁 Image
...
  • 內置emmet,tab一下生成一串代碼。emmet是前端公共技術,以快為特點,該技術被直接內置到HBuilder里。
  • 智能補齊,感知你的意圖,自動完成輸入。在li後面敲回車,會自動在創建一個新的li標籤。
  • 最全的語法提示。HBuilder內置了最全的web語法數據,並且對語法結構的解析做的非常細緻,除了常規語法提示框,還擴展了id列表、顏色列表、樣式列表、URI列表等幾十個語法提示框。有無處不在的提示。提示全,代碼輸入法、模糊匹配這些才能發揮作用,開發者才能又快又準的完成編碼。
👁 Image
...

css選擇器提示,可以提示HTML的屬性,可以提示偽類

👁 Image
...

js中精準識別div對象,並給予屬性設置的參數提示

👁 Image
...

語法庫

👁 Image
...

canvas語法提示

複雜JS框架的語法提示

這個問題對於IDE界來講,確實是一個老大難問題。JS太靈活,類型動態,寫法多變。很多對象只有在執行時才知道類型,在代碼編寫時由於不聲明,很難判斷類型。雖然以往的難題沒人解決,但我們投入巨大心血攻克它。

  • 完善的語法解析引擎:在工程建立時,HBuilder會掃描工程文件,建立AST語法樹,儘可能的識別各種JS對象。
  • 強大的模糊匹配:對於確實無法準確識別的類型,HBuilder提供了模糊匹配,模糊匹配的結果,在提示時以斜體方式顯示,如下圖。
👁 Image
...

模糊匹配使得開發者不用到處CV變量,也不會拼錯單詞,尤其是大小寫

  • 獨特強大的JSDoc擴展:JSDoc是JS語法注釋的規範,但我們對其進行了擴展,可以讓提示更強大和精準。
👁 Image
...

這段代碼中不但樣式可以提示,後面的getAttribute、以及值域裡的"align",全部都能提示。

這是目前所有其他開發工具都做不到的。只要在JSDoc里標明類型,HBuilder就會準確提示。並且類型可以擴展很多,比如id列表、選擇器列表、顏色列表、樣式列表、屬性列表、URI列表……

  • 史上最全的Jquery框架語法提示:Jquery是當前最廣泛的JS框架,針對這個框架,我們做了優化,目前HBuilder是Jquery語法提示最好的工具。
👁 Image
...

選擇器提示id列表

👁 Image
...

addClass方法提示css樣式列表

👁 Image
...

提示候選圖片列表

  • 開源的框架語法庫:除了Jquery外,還有非常多的JS框架。我們團隊肯定沒有精力處理這麼多JS框架的提示優化,本著大家用的寶刀一起打造的精神,我們在github建立了一個js框架語法庫的開源項目。包括我們開發的Jquery框架語法庫也公布在上面,各種JS框架的語法庫都可以公布在上面,進而被HBuilder的用戶所使用。這個項目目前支持xml和JSDoc這2種語法庫格式。維護語法數據很簡單。我相信這個評論者看到這篇文章,會明白為什麼在開發web時HBuilder會比以快著稱的vim還快。
👁 Image
...

【《近匠》aGlass團隊:透析眼控技術的價值】《近匠》第24期,七鑫易維是一支由15人組成的團隊,從2009年成立至今一直專注於眼控技術。他們認為眼控技術應用於智能眼鏡上的意義大於觸摸、聲控等操作方式。他們對如何提高數據採樣率,有著自己的一套方法。

👁 Image
...

【《近匠》稜鏡:手遊渠道SDK平台的技術歷程】《近匠》第23期,稜鏡產品的由來是新美互通手遊發行團隊飽受渠道SDK接入的各種問題煩惱。稜鏡可以幫開發者解決大量SDK的接入問題,為開發者節省成本。本期近匠訪談,新美互通CTO劉大澎詳解稜鏡產品由來和技術歷程。

👁 Image
...

【《近匠》第22期小旭音樂:遊戲音樂金牌匠人的練級之路】仙俠的空靈悠遠,三國的濃墨重彩,古堡的迷幻莊重,音樂對遊戲風格的塑造起到了舉足輕重的作用。作為水木年華的製作人,盧小旭是如何順利轉型,在遊戲音樂的世界裡闖出一番天地的呢?

本文為CSDN原創文章,未經允許不得轉載,如需轉載請聯繫market#csdn.net(#換成@)

您可能感興趣
免責聲明:本文內容來源于CSDN,文章觀點不代表壹讀立場,如若侵犯到您的權益,或涉不實謠言,敬請向我們提出檢舉
最新文章 / 服務條款 / 私隱保護 / DMCA / 聯絡我們

壹讀/READ01.COM