Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产成人久久综合碰 ,久草国产在线观看,国产成人精品免费视频大全可播放的

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          js 遍歷html表格 獲取表格內(nèi)容

          php js jquery功能片段#

          唯一需求:表格id。

          注意:因提交數(shù)據(jù)不能包含\n,所以要替換。呈現(xiàn)時(shí)可以替換回?fù)Q行符。

          <script type="text/javascript">

          /**

          * 遍歷表格內(nèi)容后返回?cái)?shù)組

          * @param string id 表格id

          * @return Array 或者JSON

          */

          function getTableContent(id) {

          var mytable = document.getElementById(id);

          var data = [];

          var tmpTxt;

          for(var i = 0, rows = mytable.rows.length; i < rows; i++) {

          for(var j = 0, cells = mytable.rows[i].cells.length; j < cells; j++) {

          if(!data[i]) {

          data[i] = new Array();

          }

          tmpTxt = mytable.rows[i].cells[j].innerHTML;

          //tmpTxt = tmpTxt.replace(/<[^>]+>/gi,'');//過(guò)濾全部的html標(biāo)簽,不包括內(nèi)容

          //tmpTxt =tmpTxt.replace(/\s/gi,'');

          tmpTxt =tmpTxt.replace(/\n/gi,'<br>');

          //data[i][j] = tmpTxt;

          data[i][j] = tmpTxt.replace(/ /g, ""); //替換全角空格

          }

          }

          //var JSONdata=data;

          var JSONdata = JSON.stringify(data); //序列化數(shù)組JSON.stringify(data) 反序列化數(shù)組JSON.parse(data)

          return JSONdata;

          //return data;//返回?cái)?shù)組

          }

          </script>

          本文中,我們將介紹GitHub上頂級(jí)的JavaScript開源項(xiàng)目。

          作者 | Isha Jauhari

          譯者 | 彎月,責(zé)編 | 屠敏

          以下為譯文:

          JavaScript是當(dāng)今最全能的流行編程語(yǔ)言之一。JavaScript之所以如此受歡迎,是因?yàn)樗cHTML以及CSS構(gòu)成了互聯(lián)網(wǎng)的核心,為我們提供了可視化的當(dāng)今互聯(lián)網(wǎng)。

          盡管最初JavaScript的設(shè)計(jì)意圖是作為一門腳本語(yǔ)言,編寫前端Web應(yīng)用程序,然而如今它已經(jīng)滲透了開發(fā)領(lǐng)域的方方面面。因此,JavaScript成為了GitHub(全球最大的軟件開發(fā)及共享平臺(tái))用戶最常使用的語(yǔ)言,也就不足為奇了。

          GitHub是目前最主要的共享代碼和開源項(xiàng)目的平臺(tái),自然有許多項(xiàng)目都是用JavaScript編寫的。 在本文中,我們將介紹GitHub上頂級(jí)的JavaScript開源項(xiàng)目。

          React:Facebook的JavaScript開源代碼庫(kù)

          React可以說(shuō)是世界上使用最廣泛的開源項(xiàng)目之一,由Facebook創(chuàng)建。我們可以使用這個(gè)庫(kù)輕松地在Web應(yīng)用程序中創(chuàng)建用戶界面。而且開發(fā)新功能也異常容易,開發(fā)人員也不必?fù)?dān)心影響到任何現(xiàn)有的代碼。

          React Native建立在React之上,它將React的功能擴(kuò)展到了移動(dòng)應(yīng)用程序上,也促使React成為了廣泛使用的開發(fā)平臺(tái)。

          GitHub代碼庫(kù)鏈接:https://github.com/facebook/react

          TensorFlow.js

          在過(guò)去的幾年中,隨著人們對(duì)機(jī)器學(xué)習(xí)的興趣日益增加,涌現(xiàn)了很多為構(gòu)建更出色的庫(kù)而努力的項(xiàng)目,因?yàn)樗麄兌枷M档蛣?chuàng)建機(jī)器學(xué)習(xí)模型的難度。著名的TensorFlow庫(kù)最初是用Python編寫的,后來(lái)又衍生出了JavaScript版的TensorFlow.js。

          在轉(zhuǎn)換為JavaScript后,我們就可以利用這個(gè)庫(kù)在Web應(yīng)用程序中構(gòu)建和部署機(jī)器學(xué)習(xí)模型,而且還可以放到移動(dòng)應(yīng)用中。TensorFlow.js可以在瀏覽器中訓(xùn)練機(jī)器學(xué)習(xí)模型,因此降低了服務(wù)器訓(xùn)練模型的計(jì)算開銷。

          在這個(gè)庫(kù)的幫助下,我們可以將機(jī)器學(xué)習(xí)應(yīng)用擴(kuò)展到移動(dòng)應(yīng)用程序,盡管對(duì)于機(jī)器學(xué)習(xí)應(yīng)用程序而言,移動(dòng)設(shè)備的計(jì)算能力嚴(yán)重不足。

          GitHub代碼庫(kù)鏈接:https://github.com/tensorflow/tfjs

          Node.js

          Node.js是開源的Javascript運(yùn)行時(shí)環(huán)境。它是在Chrome瀏覽器的V8引擎之上構(gòu)建的。沒(méi)有單獨(dú)的運(yùn)行時(shí)環(huán)境,JavaScript只能直接在瀏覽器的環(huán)境中運(yùn)行。但是有了Node.js以后,JavaScript可以像Python那樣,作為獨(dú)立的腳本語(yǔ)言運(yùn)行。

          開發(fā)人員隨時(shí)可以在自己的機(jī)器上測(cè)試JavaScript,甚至不需要瀏覽器。因此,原本只能為各個(gè)網(wǎng)站帶來(lái)交互性的JavaScript功能幾乎擴(kuò)展到了所有領(lǐng)域。

          GitHub代碼庫(kù)鏈接:https://github.com/nodejs/node

          AngularJS

          AngularJS是業(yè)界最古老的前端JavaScript開源框架之一。該框架最初由Mi?ko Hevery開發(fā),后來(lái)發(fā)展成了GitHub上排名前十的JavaScript項(xiàng)目之一。

          Angular開發(fā)的Web應(yīng)用程序可以實(shí)現(xiàn)跨平臺(tái),因?yàn)樗鼈兛膳c各種設(shè)備兼容,無(wú)論是移動(dòng)設(shè)備、臺(tái)式機(jī)還是平板電腦。無(wú)論在速度,還是性能和可伸縮性方面,AngularJS都可以與其他框架一較高低。

          AngularJS的宣傳中稱其能夠滿足巨大的數(shù)據(jù)需求,其提供的可擴(kuò)展基礎(chǔ)架構(gòu)可以支持Google等大規(guī)模的應(yīng)用程序。

          GitHub代碼庫(kù)鏈接:https://github.com/angular/angular.js

          jQuery

          jQuery開源代碼庫(kù)可以大幅簡(jiǎn)化客戶端的HTML腳本。它的座右銘是“少寫,多做”,而它也的確做到了。jQuery將最常見的JavaScript任務(wù)打包成了方法,從而減輕了編程的工作量,并提高了編程的效率。據(jù)估計(jì),jQuery是網(wǎng)頁(yè)中使用率最高的庫(kù)。

          GitHub代碼庫(kù)鏈接:https://github.com/jquery/jquery

          npm

          npm的全稱是Node Package Manager,這個(gè)工具庫(kù)的功能正如其名。它可以管理已安裝的Node.js軟件包,還可以更方便地安裝其他軟件包。

          GitHub代碼庫(kù)鏈接:https://github.com/npm/cli

          Vue.js

          Vue.js是GitHub上獲星最多的JavaScript開源框架。Vue.js是用于構(gòu)建交互式用戶界面的開源JavaScript框架。Vue側(cè)重于與其他JavaScript庫(kù)的集成,旨在簡(jiǎn)化和組織Web應(yīng)用程序。最初由Evan You于2014年開發(fā)。

          Vue的宣傳中稱這是一個(gè)易于學(xué)習(xí)、使用和維護(hù)的漸進(jìn)式JavaScript框架。

          GitHub代碼庫(kù)鏈接:https://github.com/vuejs/vue

          Ember.js

          Ember是一個(gè)JavaScript開源框架,它可以幫助開發(fā)人員創(chuàng)建可擴(kuò)展的單頁(yè)Web應(yīng)用程序,類似于AngularJS。Ember.js注重生產(chǎn)力、增強(qiáng)功能的簡(jiǎn)便性以及對(duì)開發(fā)人員的友好性。

          Ember.js是目前對(duì)開發(fā)人員最友好的框架之一,新手只需幾分鐘即可構(gòu)建應(yīng)用程序。 Netflix等許多人氣網(wǎng)站都使用了Ember。

          GitHub代碼庫(kù)鏈接:https://github.com/emberjs/ember.js

          MeteorJS

          Meteor是面向Web、移動(dòng)和桌面的跨平臺(tái)開源平臺(tái)。Meteor實(shí)現(xiàn)了與其他各種JavaScript框架的無(wú)縫集成。 MeteorJS注重優(yōu)化代碼的規(guī)模、跨平臺(tái)兼容性以及與其他庫(kù)的集成。

          與其他框架不同,Meteor不僅限于前端Web應(yīng)用程序,它還可以快速建立原型,以及自動(dòng)適應(yīng)數(shù)據(jù)的變化。除此之外,Meteor還提供了許多增強(qiáng)功能的大型界面。

          GitHub代碼庫(kù)鏈接:https://github.com/meteor/meteor

          Polymer

          Polymer是一個(gè)JavaScript開源庫(kù),使用所謂的“ Web組件”構(gòu)建應(yīng)用程序。鼓勵(lì)開發(fā)人員重用Web的小部件或塊,從而促進(jìn)了各個(gè)Web元素的互操作性。這個(gè)想法已在許多大型項(xiàng)目中得到了應(yīng)用,例如YouTube和Google Earth。

          GitHub代碼庫(kù)鏈接:https://github.com/Polymer/polymer

          除了上述開源項(xiàng)目之外,GitHub上還有很多項(xiàng)目也同樣出色。而且,這些項(xiàng)目還有很多正在開發(fā)的功能,敬請(qǐng)期待。

          原文:https://medium.com/javascript-in-plain-english/top-10-javascript-open-source-projects-on-github-d1a83d502e12

          本文為 CSDN 翻譯,轉(zhuǎn)載請(qǐng)注明來(lái)源出處。

          于有人站出來(lái),打算跟 JavaScript 生態(tài)系統(tǒng)正面交鋒了。這家伙知道自己在干什么,而且也描繪出了干掉 JS 之后要?jiǎng)?chuàng)造的美好新世界。


          2022 年,前 Stripe 開發(fā)人員 Jared Sumner 發(fā)布了Bun,一種用 Zig 編程語(yǔ)言開發(fā)的運(yùn)行時(shí)。據(jù)我所知,Bun 最初只是種 JavaScript webserver,但在后續(xù)發(fā)展中逐漸醞釀出了全面顛覆 JS 生態(tài)系統(tǒng)的野心。


          按我個(gè)人的關(guān)注度排序,Bun 的優(yōu)勢(shì)主要有以下幾點(diǎn):


          • 據(jù)說(shuō)能提供比 Node 或 Deno 更快的 JavaScript/TypeScript 運(yùn)行時(shí)
          • 包管理器比 NPM 或 Yarn 都快上億倍
          • Browser Bundler——全面支持 tsx、jsx、css、svg 等格式,能替代從 webpack 到 react-scripts 的所有內(nèi)容,而且速度仍然快如閃電
          • 提供速度極快的 webserver(替代 Express)
          • Sqlite 客戶端
          • Bread


          Bun 改朝換代的思路看著非常簡(jiǎn)單粗暴——JS 有的我也要有,而且我的要更簡(jiǎn)單、更高效。這里沒(méi)有小聰明、沒(méi)有曲線救國(guó),要的就是正面對(duì)抗而且樣樣比 JS 強(qiáng)。用一種低級(jí)語(yǔ)言,編寫出運(yùn)行極快的代碼,這就是 Bun。


          Bun 還很年輕,也許還沒(méi)準(zhǔn)備好迎接那些令人頭大的真實(shí)生產(chǎn)用例。但它確實(shí)發(fā)展迅速,所以如果 Bun 真能在幾年后快速占據(jù)市場(chǎng)份額,我也覺得完全在情理之中。

          之前的方案到底有什么問(wèn)題?

          不知道大家在實(shí)際工作中有沒(méi)有編寫過(guò) JS 或 TS 生產(chǎn)代碼,那種體驗(yàn)挺難受的。多數(shù)情況下,開源工具和小項(xiàng)目也能良好運(yùn)轉(zhuǎn),但一到商業(yè)和企業(yè)級(jí)用例上就經(jīng)常掉鏈子。而因?yàn)閭鹘y(tǒng)、常規(guī)的路線走不通,企業(yè)只能試遍各種辦法讓項(xiàng)目能在生產(chǎn)環(huán)境中正常起效。


          例如,TypeScript 在涉及多位開發(fā)者的項(xiàng)目中解決了不少老大難問(wèn)題,所以只要 JS 的路子走不通,我們就能隨時(shí)引入 TS 進(jìn)行代碼轉(zhuǎn)換。這里要真心感謝微軟。NPM 對(duì)大型項(xiàng)目和單體 repo 來(lái)說(shuō)速度太慢,所以公司可能需要轉(zhuǎn)向 Yarn。這里又要謝謝 Facebook。總之,我們就是在拼了命地東拼西湊,最終搞出性能勉強(qiáng)說(shuō)得過(guò)去的成果。


          作者提到自己所在企業(yè)的整個(gè)單體 repo 執(zhí)行 eslint 需要耗費(fèi) 79 秒,所以只能單獨(dú)配置,保證只對(duì)發(fā)生變更的文件執(zhí)行 lint。雖然會(huì)引入更多復(fù)雜元素,但也沒(méi)有辦法。


          總的來(lái)說(shuō),無(wú)數(shù)開發(fā)者都在用自己的辦法加速 JS 工具鏈中的某些特定部分。比如用 Yarn 3 那瘋狂的“即插即用”節(jié)點(diǎn)模塊虛擬化速度來(lái)替代 NPM,或者用基于 JSON Schema 的請(qǐng)求解析器解決 Express 的低速問(wèn)題。其實(shí)大多數(shù)原有工具都有類似的問(wèn)題,而且它們是由 JS 開發(fā)者編寫、專為 JS 開發(fā)者服務(wù)的。用 JS 編寫,就等同于速度很慢……


          于是,一些用更快語(yǔ)言編寫的高速工具開始流行起來(lái)。每家擁有大型 React 應(yīng)用程序的企業(yè),肯定都經(jīng)歷過(guò) WebPack 構(gòu)建要花掉整整一分鐘的折磨。為此,他們必須轉(zhuǎn)向用 Go 語(yǔ)言編寫 esbuild。同樣的,其他語(yǔ)言版本的 eslint 替代方案也開始出現(xiàn),比如用 Rust 重寫 Rome。


          Bun 是這種趨勢(shì)的自然延續(xù),但采取的卻是自下而上的推進(jìn)路徑。這個(gè)項(xiàng)目的核心思路就是從零起步、以內(nèi)置“batteries”的方式,用低級(jí)語(yǔ)言重寫整個(gè) JavaScript 生態(tài)系統(tǒng)。而且到目前為止,效果還真心不錯(cuò)。


          Bun 現(xiàn)在可以做些什么?

          讓解釋器快起來(lái)

          如果 Bun 只是對(duì)所有 JS 輔助工具進(jìn)行重寫,我當(dāng)然也很歡迎,但那樣的它只能算是 Node.js 的又一個(gè)替代品。Bun 并沒(méi)有這樣偷懶,它努力讓解釋器本身也快起來(lái)。


          Bun 是用 Zig 編寫的,而且配合蘋果開發(fā)的 JavaScriptCore,類似于 Node 使用 v8。Zig 是一種新興的低級(jí)語(yǔ)言,主要活躍在 C++占主導(dǎo)地位的場(chǎng)景。我不是低級(jí)開發(fā)者,所以沒(méi)親自用過(guò),更多細(xì)節(jié)就留給其他技術(shù)更強(qiáng)的博主吧。在本文中,大家只要知道 Zig 寫的代碼很快就行了。至于 JavaScriptCore,它的作用跟 v8 一樣,只是 v8 來(lái)自谷歌、而它來(lái)自蘋果。Safari 和蘋果的很多其他項(xiàng)目都有用到 JavaScriptCore。


          Bun 比 Node 到底快多少還沒(méi)有定論,但據(jù)稱在某些特定場(chǎng)景下要快得多。很多朋友可能沒(méi)經(jīng)歷過(guò) io.js 剛誕生的時(shí)代,總結(jié)來(lái)說(shuō),那時(shí)候一個(gè)單純能提高解釋器速度的分叉就足以撼動(dòng)整個(gè) JS 生態(tài)系統(tǒng)。而 Bun 的啟動(dòng)速度又比 Node 快得多。我自己的親身實(shí)驗(yàn)是 7 毫秒左右,大概比 Node.js 快了 10 倍,所以特別適合無(wú)服務(wù)器環(huán)境和邊緣計(jì)算場(chǎng)景。


          這一波顛覆依靠的不只是速度優(yōu)勢(shì),Bun 還添加了不少優(yōu)秀的標(biāo)準(zhǔn)庫(kù)函數(shù)。例如,Bun.write()就是用于編寫文件的新函數(shù),它會(huì)返回一個(gè)承諾,而且號(hào)稱可以通過(guò)更適合的系統(tǒng)調(diào)用進(jìn)一步加快速度。


          說(shuō)起 Node API,Bun 目前已經(jīng)能支持約 90%的現(xiàn)有 Node API。Node 規(guī)模很大,其中總有一些別說(shuō)沒(méi)用過(guò)、可能大家聽都沒(méi)聽過(guò)的東西(比如 new AsyncLocalStorage() ),所以能支持 90%已經(jīng)很好了。誰(shuí)會(huì)運(yùn)行 NPM 上的所有包呢?根本不需要,而且基本不影響我們的日常開發(fā)。


          順便說(shuō)一句,TypeScript 在 Bun 這邊可是相當(dāng)有排面,直接調(diào)用 bun my-ts-file.ts 就行。Deno 對(duì) TS 的支持也就這個(gè)水平了。使用 Bun 對(duì)新項(xiàng)目進(jìn)行模板化,或者把 bun-types 添加到 tsconfig 當(dāng)中,IDE 中的自動(dòng)補(bǔ)全功能就將適用于這些新函數(shù)!


          Bun 項(xiàng)目最初目標(biāo)之一就是創(chuàng)建一種更快、更強(qiáng)大的 TypeScript 編譯器。這個(gè)目標(biāo)現(xiàn)在已經(jīng)實(shí)現(xiàn),同時(shí)被淹沒(méi)在其他眾多功能中。但目前,它仍然無(wú)法支持某些比較高級(jí)的 TypeScript 配置和功能,例如裝飾器、tsconfig 中將多個(gè)配置合并起來(lái)的擴(kuò)展功能等。

          替代 NPM

          下面來(lái)聊 Bun 最振奮人心的能力之一——替代 NPM。它真的很快,能讓人人都滿意那種快。


          在 Linux 上,bun install 的包安裝速度可以達(dá)到 npm install 的 20 倍到 100 倍。在 macOS 上,也能達(dá)到 4 倍到 80 倍。


          我敢肯定,沒(méi) cache 快,有 cache 更快,總之就是快。


          之前就已經(jīng)有很多方案在努力幫 NPM 提速了。比如大家熟悉的 Yarn Plug-n-Play,它的思路就是徹底放棄 node_modules 文件夾來(lái)加快包安裝速度。雖然有一定效果,但在實(shí)際使用中,提速并沒(méi)有那么顯著,而且還需要處理大量 polyfill 和 escape-hatches 操作。能用是能用,但我個(gè)人實(shí)在是不想再用、也不打算向大家推薦。


          Pnpm 是另一種新興的 NPM 替代方案,在繼續(xù)使用 TypeScript 編寫的同時(shí)實(shí)現(xiàn)了一部分智能優(yōu)化。在 pnpm 中,node_modules 是通過(guò)符號(hào)鏈接從全局緩存中訪問(wèn)的,每個(gè)包都能在自己的獨(dú)立時(shí)間內(nèi)完成安裝,無(wú)需等待其他包完成當(dāng)前操作。


          Bun 的基本思路跟 NPM 一樣,但速度卻更快。它有自己的 lockfile 格式,而且其中的 node_modules 和 package.json 看起來(lái)沒(méi)什么變化。如果大家對(duì)文件系統(tǒng)調(diào)用比較熟悉,可以結(jié)合低級(jí)訪問(wèn)和快速語(yǔ)言實(shí)現(xiàn)極快的安裝效果,而且無(wú)需任何花哨的技巧。


          現(xiàn)在,Bun 還不提供工作空間支持,所以暫時(shí)沒(méi)法對(duì)接那些期待它來(lái)拯救的大型單體 repo(我們的項(xiàng)目也屬于這類)。但好在 Bun 正保持著迅猛的發(fā)展速度,幾周前剛公布的路線圖也提到了工作空間支持。


          請(qǐng)注意,大家不用全面轉(zhuǎn)向 Bun 也能把它當(dāng)成包管理器、轉(zhuǎn)譯器或者解釋器。只需要選擇我們需要的部分,丟棄其余的部分就行。我猜 Bun 的初步普及可能也會(huì)走這條道路,就是先當(dāng)個(gè)好用的包管理器,其他的以后再說(shuō)。這樣接受門檻會(huì)變得更低一些。


          內(nèi)含轉(zhuǎn)譯器,矛頭指向 webpack、esbuild

          Bun 當(dāng)中包含一個(gè)用于網(wǎng)絡(luò)瀏覽器的轉(zhuǎn)譯器,這明顯是把矛頭指向了 webpack 和 esbuild。順帶一提,Bun 中的解析器就是 esbuild 解析器的一個(gè) Zig 端口,輕松愉快。

          Bun 已經(jīng)支持多種文件類型,css、svg、tsx、jsx、ts 之類的都行。JS 中的 CSS 等高級(jí)選項(xiàng)似乎也能在 Bun 上正常工作。


          由于 Bun 包含一個(gè)帶有幾套內(nèi)置模板的項(xiàng)目腳手架,所以這里我們可以直接調(diào)用:

          bun create react my-app


          之后,我運(yùn)行 bun dev 并在瀏覽器里運(yùn)行了一個(gè) react 應(yīng)用程序。我猜可以把 react-scripts 直接添加到 Bun 替換過(guò)的工具列表當(dāng)中。


          把文件擴(kuò)展名從 jsx 改成 tsx,程序就立刻生效了。導(dǎo)入 svg,沒(méi)有問(wèn)題。開發(fā)模式似乎還支持 HMR,也就是前端開發(fā)者在使用 webpack 時(shí)的一大必備工具。


          那么,轉(zhuǎn)譯器方面還缺什么嗎?缺的還多,畢竟生產(chǎn)環(huán)境的要求可不簡(jiǎn)單。首先就是最小化了,這是實(shí)際用戶最希望在后續(xù)發(fā)展路線圖上看到的功能。對(duì)于大型插件生態(tài)系統(tǒng)來(lái)說(shuō),還必須要有能夠支持不同文件格式的打包工具。例如,目前.vue 文件和.scss 還沒(méi)有實(shí)際落地,特別是.scss,這東西幾代開發(fā)者都在用,必須趕緊實(shí)現(xiàn)。目前我還不確定 Bun 捆綁器的可插拔性怎么樣,而且最重點(diǎn)的是要直接在框架之內(nèi)解決問(wèn)題,不要依賴大量外部開源包。


          其他功能——Web server 與 sqlite 客戶端

          Bun 還把不少傳統(tǒng)意義上的框架元素添加到了標(biāo)準(zhǔn)庫(kù)當(dāng)中。就個(gè)人而言,我對(duì)那些庫(kù)類型功能不太感興趣,畢竟 Node 中已經(jīng)有很多適用于 http server 的功能長(zhǎng)城了。


          Bun 的 webserver 看起來(lái)非常簡(jiǎn)單。Express 雖然有點(diǎn)落后于時(shí)代,但對(duì)大多數(shù)開發(fā)者來(lái)說(shuō)仍然夠用(開發(fā)團(tuán)隊(duì)今年還剛剛提供了對(duì)承諾的支持)。Bun server 好像跟 Cloudflare Worker 頗為相信。只要 JavaScript 生態(tài)中的其他問(wèn)題逐一得到解決,也許 Bun 的開發(fā)團(tuán)隊(duì)會(huì)轉(zhuǎn)回頭好好打磨一下 webserver 吧。需要注意的是,在某些情況下,巧用系統(tǒng)調(diào)用可以讓 Bun webserver 的速度提高一倍,特別是在文件處理過(guò)程中。


          至于新的 SQLite 適配器,我覺得之前 Node 中的 sqlite 實(shí)現(xiàn)思路有點(diǎn)脫離正常人的腦洞。現(xiàn)在大多數(shù)開發(fā)者會(huì)把舊有 sqlite 3 包跟 sqlite 打包器結(jié)合使用,借此實(shí)現(xiàn)對(duì)承諾的支持。Bun 的解決方案看起來(lái)更簡(jiǎn)潔,所以就算速度上沒(méi)啥大優(yōu)勢(shì),我也愿意用。

          酒香也怕巷子深

          我最擔(dān)心的是,Bun 的這么多優(yōu)點(diǎn)難以轉(zhuǎn)化成對(duì)社區(qū)成員的實(shí)際吸引力。Bun 本身就是 JS 生態(tài)系統(tǒng)的完整替代品,這么巨大的轉(zhuǎn)變一般人恐怕很難快速接受。


          Bun 還很年輕,目前沒(méi)有完整的說(shuō)明文檔。對(duì)于大多數(shù)問(wèn)題,我們只能查閱長(zhǎng)長(zhǎng)的自述文件。但創(chuàng)建一個(gè) docusaurus 站點(diǎn),再配合具備完整內(nèi)聯(lián)注釋的 TypeScript 類型生成相應(yīng)的 typedoc 并不困難,所以我猜這一點(diǎn)應(yīng)該很快就能解決。

          其他產(chǎn)品對(duì)比


          服務(wù)端渲染 React 每秒 HTTP 請(qǐng)求數(shù) (Linux AMD64) 對(duì)比,來(lái)自 Bun 官網(wǎng)

          Deno

          如果你從來(lái)沒(méi)聽說(shuō)過(guò) Deno、也不打算了解,直接跳過(guò)這章也行。而且就個(gè)人而言,我覺得 Bun 比 Deno 更有搞頭、更有前途。


          來(lái)自 Node 締造者的 Deno 宣稱解決了一些長(zhǎng)期困擾開發(fā)者的老大難問(wèn)題。它把 es-modules 設(shè)定成默認(rèn)值,引入了第一方 TypeScript 支持(無(wú)需在發(fā)布前轉(zhuǎn)譯 NPM 模塊)等等。但在我看來(lái),Deno 在解決老問(wèn)題的同時(shí),也引入了不少新問(wèn)題。


          首先,Deno 對(duì)包解析和語(yǔ)法做的變更過(guò)于大刀闊斧,導(dǎo)致沒(méi)法跟原有 NPM 生態(tài)系統(tǒng)兼容。換言之,Deno 需要培養(yǎng)起自己的全新庫(kù)生態(tài)。雖然 Deno 慢慢開始支持一些早期庫(kù),但我覺得一個(gè)項(xiàng)目的影響力會(huì)直接決定它的發(fā)展上限,所以 Deno 的邊界估計(jì)也就到這了。當(dāng)然也有一些變通方法,比如把 NPM 包轉(zhuǎn)換成 Deno 包的 CDN,但我覺得這不是什么好招。


          Deno 還有不少在我看來(lái)暴露其半成品身份的問(wèn)題,比如缺少 package.json。無(wú)論是從模塊解析的角度來(lái)看,還是從缺少 manifest 文件出發(fā),Deno 都不允許開發(fā)者為自己的包編寫可擴(kuò)展元數(shù)據(jù)。GoLang 甚至專門為此引入了 go.mod。


          另外,我覺得 Deno 設(shè)計(jì)中的沙箱/權(quán)限系統(tǒng)應(yīng)該是正確的思路,只是粒度不夠細(xì)。它位于整個(gè)項(xiàng)目的頂層、脫離了包層次,這意味著大型應(yīng)用程序最終還是需要所有權(quán)限,于是問(wèn)題又回到了原點(diǎn)。而且作為一家安全公司,我們對(duì) Deno 無(wú)法保護(hù)大型應(yīng)用免受供應(yīng)鏈攻擊而頗感失望。當(dāng)然,Bun 也沒(méi)說(shuō)打算如何解決這個(gè)問(wèn)題,我這里只是發(fā)泄一下自己的不滿。


          所以總結(jié)起來(lái):Bun 擁有遠(yuǎn)超 Deno 的發(fā)展?jié)摿Α?span style="color: #1C1E21; --tt-darkmode-color: #A0A3A8;">具體原因如下:


          • 它支持現(xiàn)有 NPM 生態(tài)系統(tǒng)中的所有庫(kù),也支持大家已經(jīng)編寫的一切代碼,甚至連 package.json 都不用改。
          • 它解決了生態(tài)系統(tǒng)中的幾個(gè)突出問(wèn)題(特別是大企業(yè)的訴求問(wèn)題),而且把解決方案整合到了單一框架當(dāng)中。
          • 它以人們已經(jīng)熟悉的方式運(yùn)行,只是速度更快。不需要改變范式,也不強(qiáng)求轉(zhuǎn)變思路,用就是了。
          • 可以放心使用,哪怕感覺 Bun 拖慢了開發(fā)速度,我們也可以只用它的包管理器;或者說(shuō)覺得 webpack 太慢,那就只用它的打包程序。
          • 它在幾乎各個(gè)維度上都更快,這是種巨大的優(yōu)勢(shì)。從 io.js 就能看到,人們是愿意為了性能而轉(zhuǎn)投陣營(yíng)的。

          Rome?

          如上所述,Rome 就是個(gè)驗(yàn)證器。Rome 的維護(hù)者們已經(jīng)開始用 Rust 代替 JS 進(jìn)行重寫了,而且 79 秒的驗(yàn)證時(shí)長(zhǎng)也有點(diǎn)夸張。(不騙人,我們的 eslint 就是用了 79 秒。)


          從路線圖來(lái)看,Rome 還打算引入捆綁器、文檔生成器、壓縮器、類型檢查器、測(cè)試框架等等。但這一切尚未完成,而 Bun 明顯已經(jīng)走得更遠(yuǎn)。至少 Rome 還沒(méi)開始重寫 Node 核心本身,所以我覺得它的影響力也就差不多這樣了。


          總之,很多項(xiàng)目都發(fā)現(xiàn)了 Node 生態(tài)系統(tǒng)中的現(xiàn)有問(wèn)題,而且各自嘗試在統(tǒng)一的高性能框架中將其一舉解決。接下來(lái),就看誰(shuí)發(fā)展得更快了。


          開源世界中的生態(tài)陣營(yíng)

          這里我想把視野縮小一點(diǎn),通過(guò)具體案例聊聊開源世界中的生態(tài)陣營(yíng)是怎么產(chǎn)生的。


          相信很多 Node 開發(fā)者都知道 Jest 是怎樣力壓 Mocha 測(cè)試框架,一路迅猛崛起的。Mocha 想當(dāng)年也是人們首選的測(cè)試運(yùn)行程序,效果不錯(cuò)而且語(yǔ)法優(yōu)秀,但只要涉及更復(fù)雜的需求或者斷言,就得引入其他模塊和插件。好在有了社區(qū)協(xié)作,插件也不算太難找。總之,開發(fā)者需要具備更廣泛的知識(shí)才能引入相應(yīng)的庫(kù)。


          后來(lái) Facebook 搞出了 Jest,一套內(nèi)含“batteries”的測(cè)試框架。它借鑒了 Mocha 語(yǔ)法和庫(kù),并把一切整合到了單一框架中。Jest 什么都能解決,從偽造時(shí)間到需求的檢測(cè)和模擬。Jest 也有擴(kuò)展空間,但我在實(shí)際工作中就用過(guò)一次。大部分概念驗(yàn)證和設(shè)計(jì)都是由 Mocha 承擔(dān)的,作為后來(lái)者的 Jest 只是把成果統(tǒng)一了起來(lái)并使其變得更易于訪問(wèn)。雖然 Mocha 也不乏鐵桿粉絲,但 Jest 確實(shí)更受歡迎。


          開源世界中有很多這樣的案例。首創(chuàng)解決方案拿下先發(fā)優(yōu)勢(shì),而后續(xù)一旦增長(zhǎng)乏力,就會(huì)有熱心的開發(fā)商把功能整合起來(lái)。這也讓我想到了 Linux 大家族還未統(tǒng)一時(shí)的 systemd。如今,systemd 幾乎可以管理大多數(shù) Linux 發(fā)行版上的所有內(nèi)容,而 Bun 也許會(huì)以同樣的方式席卷整個(gè) JavaScript 世界。


          我意識(shí)到從開源的角度來(lái)看,這種合并和統(tǒng)一似乎與開源精神相悖,但用大量庫(kù)實(shí)現(xiàn)簡(jiǎn)單需求確實(shí)已經(jīng)成為折磨開發(fā)者們的痛點(diǎn)。而且如果每個(gè)庫(kù)都有相應(yīng)的維護(hù)團(tuán)隊(duì),那惡意黑客通過(guò)簡(jiǎn)單的偽造郵件域就能實(shí)施供應(yīng)鏈攻擊。我們不想這樣,但現(xiàn)實(shí)就是如此殘酷。老手尚且容易中招,更遑論剛接觸大量名稱、還不熟悉種種語(yǔ)言的新人了。所以從務(wù)實(shí)的角度出發(fā),我覺得很多朋友應(yīng)該跟我一樣,并不覺得把更多常用功能引入標(biāo)準(zhǔn)庫(kù)、將多種開發(fā)工具整合進(jìn)統(tǒng)一框架屬于歷史的倒退。

          ?結(jié)束語(yǔ)


          截至 2022 年 7 月,Bun 還是沒(méi)有做好進(jìn)軍生產(chǎn)環(huán)境的準(zhǔn)備,但我強(qiáng)烈建議大家自己裝上試一試。整個(gè)流程非常便捷,而且我覺得現(xiàn)在的 Bun 已經(jīng)足夠應(yīng)付小型子項(xiàng)目或者公司里的簡(jiǎn)單內(nèi)部?jī)x表板了。


          我不敢說(shuō) Bun 在未來(lái)幾年能否甚至如何重塑 JavaScript 的面貌,但我真心對(duì)它的發(fā)展充滿期待。


          原文鏈接:


          https://www.lunasec.io/docs/blog/bun-first-look/


          主站蜘蛛池模板: 日本免费一区二区三区最新| 精品无码一区在线观看| 欧美人妻一区黄a片| 亚洲一区二区三区四区视频| 久久久精品人妻一区二区三区蜜桃| 久久精品道一区二区三区| 免费播放一区二区三区| 亚洲日本va一区二区三区| 国产精品资源一区二区| 伊人色综合一区二区三区| 无码国产精品一区二区免费虚拟VR| 精品国产日韩亚洲一区在线| 国产精久久一区二区三区| 免费无码毛片一区二区APP| 国产一区二区三区亚洲综合 | 精品在线视频一区| 国产成人无码一区二区三区在线| 精品欧洲AV无码一区二区男男 | 亚洲综合av一区二区三区| 午夜性色一区二区三区不卡视频| 国产熟女一区二区三区四区五区 | 国产精品无码AV一区二区三区| 人妻夜夜爽天天爽爽一区| 深夜福利一区二区| 国产精品一级香蕉一区| 国模精品一区二区三区| 天天视频一区二区三区 | 精品无码一区二区三区在线 | 在线播放国产一区二区三区 | 波多野结衣精品一区二区三区| 国产美女精品一区二区三区| 精品国产天堂综合一区在线| 亚洲成AV人片一区二区| 一区二区三区美女视频| 亚洲日韩一区二区三区| 国产精品日本一区二区不卡视频| 一区二区福利视频| 波霸影院一区二区| 亚洲av无码一区二区三区四区 | 91视频国产一区| 成人区人妻精品一区二区不卡网站|