A. 如何用JS調用幾十萬原生API
《近匠》HBuilder:如何用JS調用幾十萬原生API?
發表於2014-04-15 18:02| 次閱讀| 來源CSDN| 0 條評論| 作者翟方慶
近匠訪談開發工具HBuilder王安DCloudHTML5
摘要:《近匠》第25期:HBuilder是DCloud開發的一套Web開發IDE,它通過完整的語法提示和代碼輸入法、代碼塊等,大幅提升HTML、JS、css的開發效率。更有意思的是,它可以利用JS調用原生API。
CSDN:請講講團隊和您以往的從業經歷?
DCloud CEO王安:我們團隊從03年起開始做手機App,從J2me、Symbian、Win mobile、Brew一直做到現在的Android、iOS和WP。之前一直在為企業市場提供跨平台手機App的無線中間件。
後來我們看好HTML5的前途,而且也經不住toC市場的誘惑,就毅然出來二次創業。成立了 DCloud.io,開始做基於HTML5的生態系統服務,包括開發工具和雲服務。
我們是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以上才支持,圖標是半亮。
有人說手機上都是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調用語音輸入。開發一次在不同手機上都可以運行。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快捷方式。這樣,使用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個開源項目,歡迎大家一起打造自己滿意的工具。
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
B. 伺服器操作系統應該選擇 Debian/Ubuntu 還是 CentOS
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
作者:彭勇
鏈接:http://www.hu.com/question/19599986/answer/13723064
來源:知乎
早期,我們使用 Debian 作為伺服器軟體,後來轉向了CentOS,主要原因如下:
1、CentOS/RHEL的生命周期是7年,基本上可以覆蓋硬體的生命周期,也就意味著一個新硬體安裝以後,不用再次安裝操作系統。要知道重新折騰一個生產機是很麻煩而且有風險的事情。
[2012.2.1]今天剛剛收到紅帽子的通知郵件,RedHat 5, RedHat 6的生命周期,延長到10年,太牛叉了。這個對企業用戶很重要。
而Debian的生命周期是不固定的,一般新版本發布以後,上個版本再維護18個月。而Debian的版本發布時間間隔不穩定,經常會延期。綜合起來一個版本的生命周期一般在3~4年。
[2014.4.24]Debian 宣布對Squeeze(6.0),提供5年的LTS長期支持。
Ubuntu的LTS版生命周期是5年。
如果你選用了 Debian 或者 Ubuntu作為伺服器,等生命周期過了以後,就沒有安全補丁,你的伺服器就會裸奔或者需要重新安裝系統。
2、RedHat是一個值得尊敬的開源公司,長期以來Linux內核RedHat的貢獻程度都是最多的。可以這么說,如果一個Linux方面的問題,RedHat搞不定,那麼也很少有其他公司可以搞定了。公司有一批Linux內核方面的如雷貫耳的大牛,比如:
Alan Cox - Core developer, numerous contributions
Ingo Molnar - x86 subsystem maintainer
Al Viro - VFS subsystem maintainer, linux內核貢獻第二多的個人
David Miller - Sparc Port maintainer, linux網路部分開發者, linux內核貢獻最多的個人
Jeff Garzik - Sata subsystem maintainer
John Linville - Wireless subsystem maintainer
Stephen Tweedie - Ext3 filesystem developer
Eric Sandeen - XFS, Ext4 filesystem developer
Josef Bacik - Btrfs filesystem developer
Rik Van Riel - VM developer
Ric Wheeler - Filesystem developer
Val Henson - Filesystem developer
Dave Jones - Fedora kernel maintainer
Kyle McMartin - Fedora kernel maintainer
Chuck Ebbert - Fedora kernel maintainer
Eric Paris - LSM/SELinux/Audit/Capabilities maintainer
Eugene Teo - Security Response
Kay Sievers - Hotplug
3、CentOS/RHEL對硬體的支持很好,主流硬體廠商早就將伺服器拿過去測試,一般不存在硬體的兼容性問題。
而Debian就麻煩了,由於有版權上的考慮和代碼純潔性上的潔癖,一些硬體驅動和軟體被刪掉了,導致安裝過程有問題。比如 Dell 伺服器上,大量使用的網卡 BroadCom,就驅動不了,安裝了以後,網路起不來。
4、大量商業軟體,比如 Oracle ,都是針對 Redhat認證的,有大量的幫助文檔和使用說明,有良好的技術支持。出了問題,也容易在網上找到類似的答案和經驗。
5、CentOS 是RedHat的克隆版,如果需要可以隨時平滑切換到 RedHat,從而享受RedHat的服務支持。要知道廠商的服務,是最後一道防火牆,如果你給一個大客戶做方案,他們一般會傾向選用商業服務。萬一出了什麼問題,還有Redhat可以求助,或者有一個RedHat可以承擔責任 :-)
6、如果你是一個工程師,熟悉了 CentOS/RedHat ,找工作更加容易。如果你是一個企業老闆,相對也容易招聘到熟悉CentOS/RedHat的工程師。RHCE的培訓,也相對較完善,認同程度高。
7、CentOS/RHEL 的批量安裝更加方便
在機房,使用kickstart + PXE安裝,給客戶,使用定製的kickstart光碟,一鍵安裝,一般在5分鍾左右就可以安裝完。
上述3,4,5,6幾點中,都說明CentOS/RHEL相對於其他Linux操作系統,有相對完整的生態環境,很多公司在CentOS/RHEL投入了大量資源,積累了大量經驗,綁定了自己的利益,這個是CentOS/RHEL得以長期良好發展的保證。
=============
補充對評論的一些回復
1. 所謂的「centos穩定性非常差」,不知道你指的是什麼?能否舉一些CentOS不穩定的例子?至少我們用了這么多年CentOS,穩定性上可以說是堅如磐石的。如果是你說的由於yum升級造成的混亂,那隻能說明你對centos不熟悉。
2、RHEL/centos 對於一些新的軟體的支持,採用 SCL的方式支持,比如ruby193,python27, python 33, PHP 54, nodejs 0.10, mariadb55, postgresql 9.2
AdditionalResources/Repositories/SCL
3、debian/ubuntu 同樣存在版本穩定和程序太老的矛盾,比如他們的LTS版本,一般是兩年多更新一次。squeeze是2011年2月發布,wheezy是2013年5月發布,如果你在2013年4月使用Debian,你會發覺好多軟體太老,比如:
內核:2.6.32,和Centos 6 一樣的
glibc 還是使用的2.11.2
mysql使用的5.1.49
openjdk使用的是 6
php使用的是 5.3.3
python使用的是2.6.6
下一個版本的Deiban,至少要到 2015年下半年才能發布,而RHEL7/CentOS7的正式版發布在即,裡面用到的不少軟體,都比wheezy的要新。按照你的邏輯,在接下來較長的時間里,是否CentOS比起Debian更加前衛?
再看看Rio的回復:「之前我用了很長一段時間的 Debian,但它的更新實在太慢了(好幾年啊有木有!)」,呵呵
4、「debian的支持時間也非常長期」,這個最近確實有了改善,Debian剛剛宣布對 Debian 6.0 有了5年的LTS長期支持。可以這么說,Debian也看到了LTS的重要性,向CentOS學習了一把。
Debian -- News -- Long term support for Debian 6.0 Announced
但Debian做得還不夠,因為Debian的LTS在後續版本,比如 Debian 7 (wheezy), Debian 8 (jessie) 里的支持政策還不明朗:
Debian -- Security Information -- DSA-2907-1
Debian的LTS支持,也不是Debian 官方安全團隊維護的,而是由其他志願者維護的,工作效率和質量是否有保證還不知道。相比RHEL明晰的發展策略和安全更新策略,有10年的安全補丁保證,還有不少差距。
5、「debian這個系列的軟體包也比較新,debian和他兒子ubuntu很多軟體包維護是共享的,更新速度非常快」,不知道你使用的是穩定版還是測試版。穩定版裡面你是如何看到軟體包「更新速度非常快」的。
C. 小程序開發需要多少錢用的是什麼語言
目前市場上小程序製作主要有三種方式,三種方式的價錢也是不一樣的,具體詳情如下:
1、小程序模板套用
2、第三方平台拖拽製作
3、小程序按要求定製
第1種,模板小程序-價格比較低,一般幾百到幾千不等,好在操作簡單,方便,能夠快速上線;不好在於不好升級換代,按年收費,而且很多沒有相關小程序版權。
第2種,小程序第三方平台拖拽製作-價格中等,一般幾百到幾千不等。好在於方便,能夠快速上線;可以選擇小程序的樣式很多,可以根據自己想法去設計自己小程序,缺點在於按年收費,沒有版權。
第3種,小程序按要求定製-價格比較高,一般5萬到十幾萬.好在功能是按照你的要求定製開發的,相關小程序開發的知識產權。缺點在於價格高,定製版的基本費用在上萬元到十幾萬不等,錢少勿入。
通常來講,一般常用的小程序並不貴,價格大概在2000-8000之間,多則上萬,特別的簡單的小程序可能幾百元就搞定啦,而功能復雜的小程序,一般需要開發定製,由於人工成本比較高,價格一般都是幾萬起步。
至於小程序開發用什麼語言,簡單來講,小程序相當於是用HTML5+CSS+JavaScript和後端PHP/Java/nodejs等來開發,雖然wxml中可以插入wxs代碼,但這其實也是JavaScript。小程序是基於瀏覽器內核的(但又有別於瀏覽器),所以程序代碼也肯定只能是基於瀏覽器的腳本語言的,也就是JavaScript。
如果你說的是後台程序,這就沒什麼限制了,喜歡用什麼就用什麼,只要能接收到小程序的連接請求並按小程序要求的格式返回數據即可。當然微信官方是推薦用nodejs和php的。不過這跟小程序本身就沒有直接關系了,因為開發普通APP的後台程序也是完全一樣的。
D. 網易雲怎麼設置不聽vip專享音樂
1、安裝nodejs工具,用於啟動後面的http代理腳本,下載網址:http://nodejs.cn/download/
5、對於手機端網易雲音樂,解鎖操作也是類似,不過手機端需要的操作更多比較麻煩,如果你有雲伺服器就好辦了,直接把代理工具部署到你的伺服器上,這樣電腦和手機都能同時使用。
E. 前端開發都需要哪些工具
每個前端開發人員都有自己喜歡的開發工具,用這些工具能讓編碼更容易並且「令人愉快」。分享一些我認為真的很棒的很棒的Web開發工具!
1.Glitch
https://glitch.com
好的,這不僅僅是一個工具,還是一個非常棒的編碼平台以及一個很棒的技術社區。我可以在內置代碼編輯器的幫助下託管我的項目。支持多種語言,但最適合NodeJS。
2.Shadows
https://brumm.af/shadows
這個網站提供生成平滑陰影的CSS代碼,可以創建平滑的邊框陰影。它看起來真的很流暢,令人滿意。
3.Coolors
https://coolors.co
這是一款非常好的在線工具,可以為項目生成匹配的顏色方案。如果不喜歡當前的方案,按下空格鍵,它會重新生成一個配色方案,直到你滿意~
4. Blobmaker
https://blobmaker.app
Blobmaker可幫助你隨機生成各種尺寸,不同顏色和形狀的SVG Blob。你可以用作背景或創建看起來很酷的動畫。
5.Getwavs
https://getwaves.io
與Blobmaker相似,Get Waves能夠隨機生成不同顏色和不同數量的波浪。用作網頁的頁腳或頁眉看起來不錯。
6. Undraw.co
https://undraw.co
開放源代碼項目的SVG插圖集,可用來做登錄頁面,404頁面等,當然普通頁面也能用!上面的插圖可以不帶歸屬地版權的使用,無需支付任何費用。
7. Marcdown
https://liyasthomas.github.io/marcdown
由Liyas Thomas提供的在線實時的Markdown網頁編輯器,它可預覽Markdown代碼,將其發布到GitHub上。它提供一個非常漂亮的暗黑模式。還可離線工作,這使得它顯得更出色。
8.postwoman
https://postwoman.io
這是Liyas Thomas構建的另一個工具。Postwoman是一個API請求構建工作。開發者可以不使用代理來測試 API。這是一個漸進式Web應用程序,可以保存到桌面來用。它是輕量級的產品,基本上可以是Postman的在線替代品。
9. Screely.com
https://screely.com
它可以幫助你創建超級漂亮的網站截圖模型。如果你不是MacBook用戶,但需要更好的網站圖片作為自述文件,它非常適合我們。
10. CSS網格生成器
https://cssgrid-generator.netlify.com/
這是Sarah Drasner的創建的優秀網站,它使用CSS創建動態網格布局。
以上是10款web前端開發工具分享,希望對你有幫助。
F. 微信公眾平台消息介面的Node.js實現
安裝
如果你使用node進行開發,那麼安裝很簡單:
npm install weixin-api
表達
如果你需要使用express開發微信公眾平台應用,那麼首先安裝express
npm install express -g
創建應用
express myweixin
cd myweixin修改package.json,添加對weixin-api的依賴
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.1.1",
"jade": "*",
"xml2js" : "0.2.6",
"weixin-api" : ">=0.1.6"
}
}
然後執行
npm install
特徵
token校驗
消息推送:文本消息,圖片消息,地理位置消息,鏈接消息,事件推送
消息回復:文本消息,音樂消息,圖文消息
鏈接
微信API For Node.js
例子
var express = require('express'),
weixin = require('weixin-api'),
app = express();
// 解析器
app.use(express.bodyParser());
//app.use(xmlBodyParser);
// 接入驗證
app.get('/', function(req, res) {
// 簽名成功
if (weixin.checkSignature(req)) {
res.send(200, req.query.echostr);
} else {
res.send(200, 'fail');
}
});
// config
weixin.token = '你的token';
// 監聽文本消息
weixin.textMsg(function(msg) {
console.log("textMsg received");
console.log(JSON.stringify(msg));
var resMsg = {};
switch (msg.content) {
case "文本" :
// 返迴文本消息
resMsg = {
fromUserName : msg.toUserName,
toUserName : msg.fromUserName,
msgType : "text",
content : "這是文本回復",
funcFlag : 0
};
break;
case "音樂" :
// 返迴音樂消息
resMsg = {
fromUserName : msg.toUserName,
toUserName : msg.fromUserName,
msgType : "music",
title : "音樂標題",
description : "音樂描述",
musicUrl : "音樂url",
HQMusicUrl : "高質量音樂url",
funcFlag : 0
};
break;
case "圖文" :
var articles = [];
articles[0] = {
title : "PHP依賴管理工具Composer入門",
description : "PHP依賴管理工具Composer入門",
picUrl : "http://weifeng.net/images/tech/composer.png",
url : "http://weifeng.net/manage-php-dependency-with-composer.html"
};
articles[1] = {
title : "八月西湖",
description : "八月西湖",
picUrl : "http://weifeng.net/images/poem/bayuexihu.jpg",
url : "http://weifeng.net/bayuexihu.html"
};
articles[2] = {
title : "「翻譯」Redis協議",
description : "「翻譯」Redis協議",
picUrl : "http://weifeng.net/images/tech/redis.png",
url : "http://weifeng.net/redis-protocol.html"
};
// 返回圖文消息
resMsg = {
fromUserName : msg.toUserName,
toUserName : msg.fromUserName,
msgType : "news",
articles : articles,
funcFlag : 0
}
}
weixin.sendMsg(resMsg);
});
// 監聽圖片消息
weixin.imageMsg(function(msg) {
console.log("imageMsg received");
console.log(JSON.stringify(msg));
});
// 監聽位置消息
weixin.locationMsg(function(msg) {
console.log("locationMsg received");
console.log(JSON.stringify(msg));
});
// 監聽鏈接消息
weixin.urlMsg(function(msg) {
console.log("urlMsg received");
console.log(JSON.stringify(msg));
});
// 監聽事件消息
weixin.eventMsg(function(msg) {
console.log("eventMsg received");
console.log(JSON.stringify(msg));
});
// Start
app.post('/', function(req, res) {
// loop
weixin.loop(req, res);
});
app.listen(3000);
許可證
麻省理工學院許可證(麻省理工學院)版權所有(C)2012 Jeremy Wei
特此授權,免費的,任何人獲得本軟體和相關文檔文件(「軟體」),交易軟體沒有限制,包括無限制的使用的權利,復制,修改,合並,出版,分發,許可,和/或銷售的軟體副本,並允許個人軟體提供這樣做,符合下列條件:上述版權聲明和本許可通知應包含在軟體的所有副本或實質性部分中。
本軟體提供的「原樣」,沒有任何形式的保證,明示或暗示,包括但不限於適銷性的保證,為特定的目的和非侵權性的健身。在任何情況下,作者或版權持有人應承擔任何索賠,損害賠償或其他責任,無論是在合同,侵權或以其他方式產生的,出於或與軟體或使用或其他交易軟體的行動。
G. grunt 需要為每個應用都安裝嗎
Grunt.js是什麼? Grunt.js是一個Javascript Task Runner(Javascript任務運行器),其基於NodeJS,可用於自動化構建、測試、生成文檔的項目管理工具。 Grunt.js並不是僅僅是構建工具,實際上他只是任務運行器,管理每個子任務的自動化運行,我們還能使用他做更多東西。 為什麼使用Grunt.js? 簡單的說:為了自動化。 對於前端項目,例如: •為了明確模塊分工,我們可能會將Javascript代碼拆成很小很小的一個個js文件,但是我們知道,在最終頁面上,我們知道過多的js文件會產生過多的Http Request,這不利於頁面優化。所以我們可能希望可以合並這些js文件的工具。 •為了用戶端請求的文件盡量小,我們希望我們的HTML、Javascript等文件能進行壓縮。 •我們可能需要對源代碼進行一些單元測試和回歸測試。 •我們可能希望有工具能夠通過源代碼備注自動生成文檔,免得手動再寫文檔。 •…… 很明顯,這一切都有各種各樣的小工具能幫我們做到,但是我們希望最好能輸入一個命令,打開一個程序,或者乾脆每次修改文件保存後自動進行這一切事情。 以前我們可能使用NodeJS自己寫一個build程序,但是現在Grunt.js能夠提供我們需要的一切。 安裝Grunt.js Grunt.js 0.4之後,其不再使用全局方式安裝整個Grunt.js,而是在全局安裝Grunt.js Client,然後在當前項目中安裝Grunt,來避免未來不同項目對Grunt不同版本的依賴關系。 如果安裝了之前的版本,可以使用npm的命令來刪除掉原來的Grunt.js。 npm uninstall -g grunt 然後安裝Grunt.js Client: npm install -g grunt-cli package.json package.json是項目的配置文件,有一些項目的依賴信息,以及作者、版本等信息。我們先寫一個簡單的package.json。 復制代碼 代碼如下: { "name": "my-project", "version": "0.1.0", "devDependencies": { "grunt": "~0.4.1" } } name屬性,表示該項的名字。 version屬性,則是該項目的版本號。 devDependencies屬性,則包含該項目的依賴,目前我們的依賴只有grunt,以及版本為0.4.1。 在終端大概包含該package.json的目錄,輸入命令: npm install 我們會發現,該目錄此時多了一個node_moles文件夾,裡面有個grunt文件夾,這個就是我們安裝在項目的Grunt.js。 用Grunt.js進行壓縮js代碼 grunt-contrib-uglify是Grunt.js的一個任務模塊,其基於著名的js壓縮工具uglify,進行js壓縮任務。 首先我們在項目依賴加上grunt-contrib-uglify,package.json如下: 復制代碼 代碼如下: { "name": "my-project", "version": "0.1.0", "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-uglify": "~0.2.0" } } 再使用: npm install 我們就安裝了grunt-contrib-uglify了。 寫Gruntfile.js 復制代碼 代碼如下: mole.exports = function(grunt) { // 給grunt添加些設置 grunt.initConfig({ uglify: { options: { banner: '/*! 版權所有,這里亂寫 */\n' }, build: { src: 'src/core.js', //要壓縮的源文件,我們也可以用*表示通配,比如'src/*.js' dest: 'dst/core.js' //壓縮後輸出的位置 } } }); // 載入 "uglify" 插件任務 grunt.loadNpmTasks('grunt-contrib-uglify'); // 定義默認需要執行的任務 grunt.registerTask('default', ['uglify']); };
H. Node.js中Process.nextTick和setImmediate的區別
一、Webstrom使用node.js IDE的問題
在區別這兩個函數之前來說一下Webstrom使用node.js IDE的問題,在配置Node.js的IDE了,但setImmediate()、require等這些node.js中內置的函數時並不會有提示
二、兩者的區別
1.在理解兩者的區別之前要說一下輪詢
前面博客也有記錄,nodejs中是事件驅動的,有一個循環線程一直從事件隊列中取任務執行或者I/O的操作轉給後台線程池來操作,把這個循環線程的每次執行的過程算是一次輪詢.
2.setImmediate()的使用
即時計時器立即執行工作,它是在事件輪詢之後執行,為了防止輪詢阻塞,每次只會調用一個。
3.Process.nextTick()的使用
它和setImmediate()執行的順序不一樣,它是在事件輪詢之前執行,為了防止I/O飢餓,所以有一個默認process.maxTickDepth=1000來限制事件隊列的每次循環可執行的nextTick()事件的數目。
4.總結
在網上網路的關於它們的總結:
nextTick()的回調函數執行的優先順序要高於setImmediate();
process.nextTick()屬於idle觀察者,setImmediate()屬於check觀察者.在每一輪循環檢查中,idle觀察者先於I/O觀察者,I/O觀察者先於check觀察者.
在具體實現上,process.nextTick()的回調函數保存在一個數組中,
setImmediate()的結果則是保存在鏈表中.
在行為上,process.nextTick()在每輪循環中會將數組中的回調函數全部執行完.
而setImmediate()在每輪循環中執行鏈表中的一個回調函數.
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。
I. 求一個JAVAEE 增刪改查的自動生成代碼!
你好,我這里知道一個比較完善的框架:jeesite
你可以去這里下載,然後裡面有詳細的文檔說明。
網頁鏈接
免費的,請勿用於商業用途,關於版權什麼的我不清楚,可以聯系作者。
希望能夠幫到你。
J. react-native 版權號怎麼打
首先安裝了nodejs 4.乏訂催寡詘干挫吮旦經1 版本
然後 安裝了 npm install -g react-native-cli 模塊
安裝 android sdk 並且配置android 環境變數
安裝gradle 環境
進入 這個博客 里邊有 react-native for android 項目,下來,然後執行 npm install 先安裝 react 依賴模塊包
打開兩個 命令窗口 1. 一個 執行react-native start ,另一個執行react-native run-android 就可以了