整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript 中的文件讀取技巧與技術

          設您需要使用 JavaScript 在服務器上讀取多個文件。Node.js 這樣的運行時環境中有許多讀取文件的方法。哪一種最好?讓我們來考慮各種方法。

          • Node.js 是什么?Node.js 如何安裝及如何配置環境?一文講解

          使用 fs.promises

          const fs = require('fs/promises');
          const readFile = fs.readFile;
          readFile("lipsum.txt", { encoding: 'utf-8' })
          .then((data) => {...})
          .catch((err) => {...})
          

          使用 fs.readFile 和 util.promisify

          const fs = require('fs');
          const util = require('util');
          const readFile = util.promisify(fs.readFile);
          readFile("lipsum.txt", { encoding: 'utf-8' })
          .then((data) => {...})
          .catch((err) => {...})
          

          使用 fs.readFileSync

          const fs = require('fs');
          const readFileSync = fs.readFileSync;
          var data = readFileSync("lipsum.txt", { encoding: 'utf-8' })
          

          使用 await fs.readFileSync

          const fs = require('fs');
          const readFileSync = fs.readFileSync;
          async function f(name, options) {
            return readFileSync(name, options);
          }
          

          使用 fs.readFile

          const fs = require('fs');
          const readFile = fs.readFile;
          fs.readFile('lipsum.txt', function read(err, data) {...});
          

          性能測試

          我寫了一個小的 性能測試,重復從磁盤讀取一個文件。這是一個簡單的循環,每次訪問同一個文件。我報告讀取文件 50,000 次需要的毫秒數。文件相對較小(略超過一千字節)。我使用裝有數十個 Ice Lake Intel 核心和大量內存的大型服務器。我使用的是 Node.js 20.1 和 Bun 1.0.14。Bun 是一個競爭的 JavaScript 運行時。

          我多次運行了基準測試,并在所有情況下報告最好的結果。您的結果可能會有所不同。


          Node.js時間

          Bun時間

          fs.promises

          2400 ms

          110 ms

          fs.readFile 和 util.promisify

          1500 ms

          180 ms

          fs.readFileSync

          140 ms

          140 ms

          await fs.readFileSync

          220 ms

          180 ms

          fs.readFile

          760 ms

          90 ms

          至少在我的系統上,在這個測試中,使用 Node.js 的 fs.promises 明顯比其他任何方法的成本更高。Bun 運行時在這個測試中比 Node.js 快得多。

          對于fs.promises,結果比看起來更糟的是以下這個意義。我發現readFileSync使用了 300 ms 的 CPU 時間,而fs.promises則使用了 7 秒的 CPU 時間。這是因為在基準測試期間,fs.promises觸發了多個核心的工作。

          將文件大小增加到例如 32kB,并不改變結論。如果使用顯著更大的文件,許多 Node.js 情況會因為“堆限制分配失敗”而出錯。Bun 即使在大文件中也能繼續運行。使用 Bun 的測試結果不改變結論:我的測試表明即使對于大文件,fs.readFile 也始終更快。

          致謝。我的基準測試靈感來源于 Evgenii Stulnikov 提供的一個測試案例。

          • 源自:https://lemire.me/blog/2024/03/12/how-to-read-files-quickly-in-javascript/

          有現代瀏覽器都使用了JavaScript的內置支持。很多時候,你可能需要啟用或手動禁用此支持。

          本教程將讓您知道如何啟用和禁用JavaScript支持,在您的瀏覽器:IE瀏覽器,Firefox和Opera。

          JavaScript在InternetExplorer(IE)中:

          下面是簡單的步驟給打開或關閉JavaScript在您的InternetExplorer:

          1、按照從菜單"工具"->"Internet選項"

          2、從對話框中選擇"安全"選項卡

          3、點擊"自定義級別"按鈕

          4、向下滾動,直到找到"腳本選項"

          5、選擇啟用"活動腳本"單選按鈕

          6、最后點擊"確定",然后退出來

          要禁用JavaScript支持在InternetExplorer,需要在“活動腳本”給選擇“禁用”單選按鈕。

          JavaScript在Firefox:

          下面是簡單的步驟給打開或關閉JavaScript在Firefox:

          1、從菜單按照"工具" ->"選項"

          2、從對話框的“內容”選項

          3、選擇啟用JavaScript的復選框

          4、最后點擊確定,然后退出來

          要禁用Firefox的JavaScript支持,應該選擇禁用JavaScript的復選框。

          JavaScript在Opera:

          下面是簡單的步驟給打開或關閉JavaScript在Opera:

          1、從菜單按照"工具"->"首選項"

          選擇對話框中的"高級"選項

          2、從列出的項目選擇"內容"選擇啟用JavaScript 復選框

          3、最后點擊"確定",然后退出來

          要禁用在Opera中支持JavaScript,那么不要選擇啟用JavaScript的復選框。

          警告對非JavaScript的瀏覽器:

          如果你有使用JavaScript做一些重要的事情,那么可以顯示一條警告消息,使用<noscript>標簽顯示給用戶。

          可以在腳本塊后,如下立即加入noscript noscript 塊:

          <html>
          <body>
          
          <script language="javascript" type="text/javascript">
          <!--
             document.write("Hello World!")
          //-->
          </script>
          
          <noscript>
            Sorry...JavaScript is needed to go ahead.
          </noscript>
          </body>
          </html>
          
          12345678910111213141516復制代碼類型:[javascript]

          現在,如果沒有啟用用戶的瀏覽器不支持JavaScript或JavaScript,然后</noscript>會在屏幕上顯示的消息。

          開課吧廣場-人才學習交流平臺

          這里是云端源想IT,幫你輕松學IT”

          嗨~ 今天的你過得還好嗎?

          我們總是先揚起塵土

          然后抱怨自己看不見

          - 2024.04.17 -

          JavaScript是一種輕量級的編程語言,通常用于網頁開發,以增強用戶界面的交互性和動態性。然而在HTML中,有多種方法可以嵌入和使用JavaScript代碼。

          本文就帶大家深入了解如何在HTML中使用JavaScript。



          一、使用 script 標簽

          要在HTML中使用JavaScript,我們需要使用<script>標簽。這個標簽可以放在<head>或<body>部分,但通常我們會將其放在<body>部分的底部,以確保在執行JavaScript代碼時,HTML文檔已經完全加載。

          使用 <script> 標簽有兩種方式:直接在頁面中嵌入 JavaScript 代碼包含外部 JavaScript 文件。


          包含在 <script> 標簽內的 JavaScript 代碼在瀏覽器總按照從上至下的順序依次解釋。


          所有 <script> 標簽都會按照他們在 HTML 中出現的先后順序依次被解析。



          HTML 為 <script> 定義了幾個屬性:

          1)async:可選。表示應該立即下載腳本,但不妨礙頁面中其他操作。該功能只對外部 JavaScript 文件有效。


          如果給一個外部引入的js文件設置了這個屬性,那頁面在解析代碼的時候遇到這個<script>的時候,一邊下載該腳本文件,一邊異步加載頁面其他內容。


          2)defer:可選。表示腳本可以延遲到整個頁面完全被解析和顯示之后再執行。該屬性只對外部 JavaScript 文件有效。


          3)src:可選。表示包含要執行代碼的外部文件。


          4)type:可選。表示編寫代碼使用的腳本語言的內容類型,目前在客戶端,type 屬性值一般使用 text/javascript。不過這個屬性并不是必需的,如果沒有指定這個屬性,則其默認值仍為text/javascript。



          1.1 直接在頁面中嵌入JavaScript代碼

          內部JavaScript是將JavaScript代碼放在HTML文檔的<script>標簽中。這樣可以將JavaScript代碼與HTML代碼分離,使結構更清晰,易于維護。


          在使用<script>元素嵌入JavaScript代碼時,只須為<script>指定type屬性。然后,像下面這樣把JavaScript代碼直接放在元素內部即可:

          <script type="text/javascript">
          function sayHi(){
          alert("Hi!");
          }
          </script>


          如果沒有指定script屬性,則其默認值為text/javascript。


          包含在<script>元素內部的JavaScript代碼將被從上至下依次解釋。在解釋器對<script>元素內部的所有代碼求值完畢以前,頁面中的其余內容都不會被瀏覽器加載或顯示。


          在使用<script>嵌入JavaScript代碼的過程中,當代碼中出現"</script>"字符串時,由于解析嵌入式代碼的規則,瀏覽器會認為這是結束的</script>標簽。可以通過轉義字符“\”寫成<\/script>來解決這個問題。


          1.2 包含外部 JavaScript 文件

          外部JavaScript是將JavaScript代碼放在單獨的.js文件中,然后在HTML文檔中通過<script>標簽的src屬性引用這個文件。這種方法可以使代碼更加模塊化,便于重用和共享。


          如果要通過<script>元素來包含外部JavaScript文件,那么src屬性就是必需的。這個屬性的值是一個指向外部JavaScript文件的鏈接。

          <script type="text/javascript" src="example.js"></script>


          • 外部文件example.js將被加載到當前頁面中。
          • 外部文件只須包含通常要放在開始的<script>和結束的</script>之間的那些JavaScript代碼即可。



          與解析嵌入式JavaScript代碼一樣,在解析外部JavaScript文件(包括下載該文件)時,頁面的處理也會暫時停止。

          注意:帶有src屬性的<script>元素不應該在其<script>和</script>標簽之間再包含額外的JavaScript代碼。如果包含了嵌入的代碼,則只會下載并執行外部腳本文件,嵌入的代碼會被忽略。

          通過<script>元素的src屬性還可以包含來自外部域的JavaScript文件。它的src屬性可以是指向當前HTML頁面所在域之外的某個域中的完整URL。

          <script type="text/javascript" src="http://www.somewhere.com/afile.js"></script>

          于是,位于外部域中的代碼也會被加載和解析。


          1.3 標簽的位置

          在HTML中,所有的<script>標簽會按照它們出現的先后順序被解析。在不使用defer和async屬性的情況下,只有當前面的<script>標簽中的代碼解析完成后,才會開始解析后面的<script>標簽中的代碼。


          通常,所有的<script>標簽應該放在頁面的<head>標簽中,這樣可以將外部文件(包括CSS和JavaScript文件)的引用集中放置。



          然而,如果將所有的JavaScript文件都放在<head>標簽中,會導致瀏覽器在呈現頁面內容之前必須下載、解析并執行所有JavaScript代碼,這可能會造成明顯的延遲,導致瀏覽器窗口在加載過程中出現空白。


          為了避免這種延遲問題,現代Web應用程序通常會將所有的JavaScript引用放置在<body>標簽中的頁面內容的后面。這樣做可以確保在解析JavaScript代碼之前,頁面的內容已經完全呈現在瀏覽器中,從而加快了打開網頁的速度。


          二、執行JavaScript 程序

          JavaScript 解析過程包括兩個階段:預處理(也稱預編譯)執行

          • 在編譯期,JavaScript 解析器將完成對 JavaScript 代碼的預處理操作,把 JavaScript 代碼轉換成字節碼;
          • 在執行期,JavaScript 解析器把字節碼生成二進制機械碼,并按順序執行,完成程序設計的任務。


          1、執行過程

          HTML 文檔在瀏覽器中的解析過程是:按照文檔流從上到下逐步解析頁面結構和信息。

          JavaScript 代碼作為嵌入的腳本應該也算做 HTML 文檔的組成部分,所以 JavaScript 代碼在裝載時的執行順序也是根據 <script> 標簽出現的順序來確定。

          你是不是厭倦了一成不變的編程模式?想要突破自我,挑戰新技術想要突破自我,挑戰新技術?卻遲遲找不到可以練手的項目實戰?是不是夢想打造一個屬于自己的支付系統?那么,恭喜你,云端源想免費實戰直播——《微實戰-使用支付寶/微信支付服務,網站在線支付功能大揭秘》正在進行,點擊前往獲取源碼!云端源想

          2、預編譯

          當 JavaScript 引擎解析腳本時候,他會在與編譯期對所有聲明的變量和函數預先進行處理。當 JavaScript 解析器執行下面腳本時不會報錯。

          alert(a); //返回值 undefined
          var a = 1;
          alert(a); //返回值 1


          由于變量聲明是在預編譯期被處理的,在執行期間對于所有的代碼來說,都是可見的,但是執行上面代碼,提示的值是 undefined 而不是 1。

          因為變量初始化過程發生在執行期,而不是預編譯期。在執行期,JavaScript 解析器是按照代碼先后順序進行解析的,如果在前面代碼行中沒有為變量賦值,則 JavaScript 解析器會使用默認值 undefined 。


          由于第二行中為變量 a 賦值了,所以在第三行代碼中會提示變量 a 的值為 1,而不是 undefined。

          fun(); //調用函數,返回值1
          function fun(){
          alert(1);
          }

          函數聲明前調用函數也是合法的,并能夠正確解析,所以返回值是 1。但如果是下面這種方式則 JavaScript 解釋器會報錯。

          fun(); //調用函數,返回語法錯誤
          var fun = function(){
          alert(1);
          }

          上面的這個例子中定義的函數僅作為值賦值給變量 fun 。在預編譯期,JavaScript 解釋器只能夠為聲明變量 fun 進行處理,而對于變量 fun 的值,只能等到執行期時按照順序進行賦值,自然就會出現語法錯誤,提示找不到對象 fun。

          總結:聲明變量和函數可以在文檔的任意位置,但是良好的習慣應該是在所有 JavaScript 代碼之前聲明全局變量和函數,并對變量進行初始化賦值。在函數內部也是先聲明變量,后引用。

          通過今天的分享,相信大家已經對JavaScript在HTML中的應用有了一定的了解。這只是冰山一角,JavaScript的潛力遠不止于此。希望這篇文章能激發大家對編程的熱情,讓我們一起在編程的世界里探索更多的可能性!



          我們下期再見!


          END

          文案編輯|云端學長

          文案配圖|云端學長

          內容由:云端源想分享


          主站蜘蛛池模板: 怡红院AV一区二区三区| 亚洲综合一区二区精品久久| 视频一区二区在线播放| 人妻aⅴ无码一区二区三区| 精品国产一区二区三区2021| 国产av福利一区二区三巨| 国产av一区二区精品久久凹凸| 亚洲乱码av中文一区二区| 日本一区二区三区不卡视频| 手机福利视频一区二区 | 一区二区无码免费视频网站| 国产99久久精品一区二区| 精品少妇人妻AV一区二区| 日本一区中文字幕日本一二三区视频| 国产成人久久精品区一区二区| 亚洲av成人一区二区三区在线播放| 日韩在线一区视频| 国产成人无码AV一区二区| 精品亚洲A∨无码一区二区三区 | 相泽亚洲一区中文字幕| 日韩精品无码一区二区视频| 亚洲av午夜福利精品一区| 亚洲日韩一区二区一无码| 无码人妻精品一区二区三区99性 | 日本在线观看一区二区三区| 久久一区二区三区99| 国产乱人伦精品一区二区在线观看| 精品久久久中文字幕一区| 精品视频一区二区三区免费| 无码人妻久久一区二区三区免费丨| 亚洲福利视频一区二区三区| 怡红院一区二区在线观看| 久久一区不卡中文字幕| 国产成人一区二区精品非洲| 亚洲乱码日产一区三区| 亚洲av乱码一区二区三区按摩| av在线亚洲欧洲日产一区二区| 亚洲一区二区在线视频| 一区二区三区福利视频免费观看| 亚洲人成网站18禁止一区 | 国产在线精品一区免费香蕉|