avaScript 在2024 年更新引入了 6個關鍵功能。從使文本和日期更易于處理,到程序等待和協同工作的新方法,甚至使模式更容易查找。
我們一起來看看吧!
01、格式正確的 Unicode 字符串
格式良好的 Unicode 字符串引入了確保 JavaScript 中的字符串以 UTF-16 編碼正確格式化的方法。
此功能旨在改進 JavaScript 處理 Unicode 的方式,通過檢測和糾正字符串中不正確配對的代理代碼點,使其更輕松地處理其他語言和字符。
實際使用
想象一下,您正在處理用戶生成的內容,其中可能包含各種語言和符號。
確保該內容正確編碼對于正確處理和顯示它至關重要。
01)檢查格式良好的 Unicode 字符串:使用 String.prototype.toWellFormed 確定字符串是否在沒有任何單獨代理的情況下正確編碼。
const exampleString="Example with Unicode ";
console.log(exampleString.isWellFormed()); // True if no lone surrogates are present
02)轉換為格式良好的 Unicode 字符串:通過使用 String.prototype.toWellFormed 將這些代理項替換為 Unicode 替換字符 (U+FFFD),將任何具有不成對代理項的字符串轉換為格式良好的字符串。
const malformedString="Example with a lone surrogate \uD800";
console.log(malformedString.toWellFormed()); // "\uD800" is replaced with U+FFFD
此功能簡化了 Unicode 字符串的管理,特別是在處理國際化或表情符號時,確保開發人員能夠跨不同平臺和環境更可靠地處理字符串。
它解決了 Web 應用程序中常見的錯誤來源,使 JavaScript 在處理全局內容方面更加穩健。
02、Atomic waitSync
Atomic waitSync 是一個同步原語,它補充了現有的 Atomics API。
它允許在共享內存位置上進行同步等待,從而促進主線程和工作線程之間更好的協調,這在復雜的多線程 Web 應用程序中至關重要。
同步示例
在 Web Worker 中執行繁重計算或實時數據處理的 Web 應用程序中。
有效地協調主線程與工作線程是保持性能和數據完整性的關鍵。
// Assuming a shared Int32Array buffer
const sharedBuffer=new SharedArrayBuffer(1024);
const intArray=new Int32Array(sharedBuffer);
// Main thread sets a value
Atomics.store(intArray, 0, 123);
// Worker thread waits synchronously for the value to change
Atomics.waitSync(intArray, 0, 123);
// After some operations in the worker
Atomics.store(intArray, 0, 456); // Changes the shared memory value
// Main thread can be notified or act upon this change
Atomic waitSync 提供了一種更直接的方法來同步主線程和 Web Worker 之間的操作,而無需訴諸復雜且容易出錯的消息傳遞或輪詢機制,從而增強了 JavaScript 的并發模型。
它可以顯著提高依賴并行處理的應用程序的性能和可靠性。
03、正則表達式 v 帶有集合表示法的標志 + 字符串屬性
v 標志的引入以及正則表達式 (RegEx) 中字符串的集合表示法和屬性的引入代表了 JavaScript 模式匹配功能的顯著改進。
此功能為 RegEx 提供了更具表現力和更有效的語法,簡化了基于復雜模式的匹配和替換文本的過程,這對于涉及國際化和多語言內容的任務特別有益。
高級搜索
v 標志與集合表示法和字符串屬性的組合允許創建可以匹配特定字符集(包括由 Unicode 屬性定義的字符集)的正則表達式。
此增強功能對于需要支持多種語言和不同字符集的應用程序特別有用。
匹配空白或表情符號:v 標志允許在集合表示法中使用 Unicode 屬性轉義,從而允許對廣泛的字符類別(例如表情符號或空白字符)進行精確匹配。
const regex=new RegExp("[\p{Emoji}\p{White_Space}]", "v");
用法示例:針對包含表情符號和空格的字符串測試正則表達式,展示了準確識別這些字符類型的能力。
const testString="Here is an emoji and some spaces";
console.log(testString.match(regex)); // Expected to match the emoji and spaces
RegExp 的這一增強功能使得處理復雜字符集更加直觀且不易出錯,特別是在處理需要適應各種語言和符號的全局應用程序時。
04、Pipeline Operator (|>)
Pipeline Operator 引入了一種更具可讀性和功能性的方式來在 JavaScript 中編寫操作序列。
它允許開發人員以比嵌套函數調用更直觀、更清晰的方式將函數鏈接在一起,從而提高代碼的易讀性和可維護性,特別是在數據處理或函數式編程上下文中。
例子
考慮一個場景,您需要對一個值應用多個轉換。使用 Pipeline Operator,每個步驟都清晰分開,使代碼更易于理解。
// Example functions that could be used in a pipeline
const double=n=> n * 2;
const increment=n=> n + 1;
// Using the Pipeline Operator to apply the functions
let result=5 |> double |> increment;
console.log(result); // Outputs 11
The Pipeline Operator represents a significant step towards a more functional programming style within JavaScript.
提供的語法解決方案不僅更具表現力,而且符合現代 JavaScript 開發的可讀性和組合目標。
05、Temporal API
Temporal API 解決了 JavaScript 中日期和時間操作的復雜性和不一致問題。
通過提供大量用于處理日期、時間、時區和持續時間的對象和方法,Temporal API 簡化了與時間相關的數據的處理。
通過這種方式,其目標是用強大的標準解決方案取代對第三方庫的需求。
使用中的Temporal API
使用日期和時間通常涉及處理時區、夏令時更改和格式設置。
Temporal API 使這些任務更加簡單且不易出錯。
// Creating a date-time object in a specific timezone
const meetingDate=Temporal.PlainDateTime.from("2024-03-25T15:00:00");
const zonedDate=meetingDate.withTimeZone("America/New_York");
console.log(zonedDate.toString()); // "2024-03-25T15:00:00-04:00[America/New_York]"
// Calculating the difference between two dates
const startDate=Temporal.PlainDate.from("2024-01-01");
const endDate=Temporal.PlainDate.from("2024-03-01");
const difference=startDate.until(endDate);
console.log(difference.toString()); // "P2M" (Period of 2 Months)
此功能是對現有 Date 對象的巨大改進,因為它為開發人員提供了更直觀、更強大的工具集,用于日期和時間操作的各個方面。
它極大地增強了 JS 應用程序中處理時態數據時的開發體驗。
06、Records and Tuples
Records and Tuples被提議作為 JavaScript 中新的、不可變的數據結構,旨在提高代碼的可靠性和簡單性。
Records允許您創建不可變的鍵值對,類似于對象,但創建后無法更改。
Tuples是不可變的有序列表,類似于數組,但在創建后也無法更改。
這些結構確保數據不會意外更改,這在函數式編程和管理應用程序狀態時特別有用。
例子
讓我們探討如何在用戶配置文件管理場景中應用記錄和元組,以在整個應用程序生命周期中保持數據完整性。
使用記錄創建不可變的用戶配置文件:
使用記錄將用戶配置文件定義為不可更改的鍵值對,確保用戶配置文件一旦設置就無法更改,從而保持數據完整性。
const userProfile=#{
name: "Jane Doe",
age: 28,
};
使用元組管理有序數據:
實現元組來處理數據序列,例如點或坐標,這些數據一旦初始化就保持不變,從而消除了意外修改的風險。
const points=#[1, 2, 3];
此外,它們在應用程序執行過程中對數據狀態提供一定程度的保證,防止意外突變引起的錯誤。
它們在具有復雜狀態管理需求或采用函數式編程模式的應用程序中特別有用。
寫在最后
這些計劃在 ECMAScript 2024 中發布的功能不僅好,而且非常好。它們是實現 JavaScript 現代化、使其更加強大并改善開發人員體驗的重要步驟。
通過記錄和元組解決數據完整性問題,并通過增強模式匹配解決代碼可讀性問題,ES15 將為開發人員提供編寫更高效、可靠和可維護的應用程序所需的工具。
于前端開發人員的七個自以為是的預測可能應該開始學習……
> Image from codeburst by @webrealizer
JavaScript世界正在快速發展。
前端開發(和Web開發)的世界發展迅速。 今天,如果您不在Webpack,React Hooks,Jest,Vue和NG元素之上,那么您會開始感到差距越來越大。 但是,情況正在發生變化。
盡管前端叢林中的開發人員和技術人員的數量每年都在激增,但生態系統仍渴望實現標準化。 新技術和工具的出現已經改變了游戲規則。
可以肯定地說,總體趨勢將是UI標準化,這是一種基于組件的組合,從樣式到測試甚至是狀態管理,都會受到影響,并且總體上會帶來更好的模塊化。 這將包括圍繞Web組件,ES模塊,以組件為中心的工具等構建的技術。
這是對展望未來幾年前端開發狀態的簡短而局部的觀察。 自然,它會丟失一百萬個事物,因此請隨時跳到下面并添加您的見解。
所以基本上,這就是未來。 為什么? 因為這些純Web組件與框架無關,并且可以在沒有框架或沒有任何框架拼寫標準化的情況下工作。 因為它們沒有JS疲勞,并且得到了現代瀏覽器的支持。 因為它們的捆綁包大小和使用量將是最佳的,并且VDOM渲染令人贊嘆。
這些組件提供了Custom Element,這是一個Javascript API,可讓您定義一種新的html標簽,HTML模板以指定布局,當然還有Shadow DOM,它本質上是特定于組件的。
在這個領域中知名的工具是Lit-html(和Lit-element),StencilJS,SvelteJS,當然還有Bit,用于可重用的模塊化組件,這些組件可以在任何地方直接共享,使用和開發。
考慮組件開發時代的未來以及模塊化,可重用性,封裝和標準化的原理,Web組件就是答案。 在下面了解更多。
> Yeah, in NPM downloads React is still queen. For now.
因此,我們并不是真的會深入探討"誰會變得更好,為什么會變得更好",并且您會在下面找到該問題的更多答案。 相反,我們會退后一步,注意更大的范圍。 圍繞組件的前端技術的整體"市場份額"正在增長。 不斷。 新開發人員的加入速度也在快速增長,并且工具的使用空間更大。
令人震驚吧?
> Vue and React are, in fact, quite close in real-world usage.
隨著將來與框架無關的Web組件的標準化,人們可能會對它可能對UI框架大戰產生的影響感到好奇。 是的,React不是一個框架……我們知道。
深入探討使用真實數據進行基準測試的框架:
> heBit components: futuristic code sharing, reuse and development
當談到不久的將來的FrontEnd開發和UI組件時,無法忽視Bit的驚人前景和功能。
簡而言之,使用Bit,您可以立即在另一個項目中使用一個項目中的組件,從兩個項目中進行開發和更改,以及同步更改。 團隊合作時,Bit.dev是Bit的組件中心,可增強此工作流程,您可以在其中組織和共享團隊的代碼。
該中心提供您在組件上共享和協作所需的一切,從優美的搜索和發現體驗到現場組件游樂場,全面的CI / CD支持等等。
使用Bit,您可以構建具有對團隊和開源社區曾經編寫的所有組件的完整且即時訪問權限的應用程序,并即時共享新組件或對現有組件進行建議升級。 哇。
ES Modules是ECMAScript標準化的用于在瀏覽器中使用模塊的標準。 使用ES模塊,您可以輕松地將功能封裝到可通過CDN等使用的模塊中。隨著Firefox 60的發布,所有主要的瀏覽器都將支持ES模塊,并且Node mteam正在努力將ES模塊支持添加到Node.js中。 此外,在未來幾年中還將為WebAssembly集成ES模塊。 試想一下,JS組件與Bit隔離,并通過bit.dev通過CDN消耗。
所以……狀態管理有什么新變化? 最終,我們無論如何都要通過Redux全球商店中的所有商品,對嗎?
但是,這可能使得難以充分利用組件的模塊化和可重用性。 React的新Context API和Hooks意味著您不需要第三方庫,并且可以在功能組件級別管理狀態,從而提高了模塊化和可重用性。 因此,展望未來,我們可能會更多地考慮封裝組件而不是全局應用程序商店來考慮狀態管理。 只是一個想法。
> Modular with Bit: separate logic and theme components, compose your styling
因此,在過去兩年中,圍繞樣式組件的討論非常頻繁。 從內聯CSS或CSS模塊到JS中的CSS和樣式化的組件,甚至是樣式化的中途解決方案,都有很多選擇。
在考慮未來幾年的樣式時,我喜歡將樣式視為一種組合。 意思是,我們的組件設計系統應該包括邏輯組件和主題組件,它們可以使用Bit之類的工具組合在一起。 這樣,您可以創建一個設計系統,該系統可以根據需要進行更改和更改,并且不會對不愿采用它的開發人員造成繁瑣的庫。 設計工具本身(例如Sketch a Figma)將為此目的利用組件(將它們與Bit結合在一起,您將獲得最終的組件設計系統。這非常令人興奮。
因此,使用GraphQL通過組件為客戶打開了令人興奮的可能性。 使用Apollo,您可以輕松構建通過GraphQL獲取數據的UI組件。 與Bit結合使用時,您可以直接從正在處理的消耗項目中導入和開發這些組件。
通過對API的智能管理,我們可以簡化圍繞數據驅動的應用程序開發的工作流程,并加快工作的開發速度。 因此,絕對值得深入研究幾年。
隨著組件成為我們的設計系統,設計師和開發人員之間的鴻溝將被彌合。 從等式的兩端(從設計人員和開發人員的角度來看)這將成為可能。
在設計組件之間繪制已創建的依賴關系鏈接,以便您可以模塊化方式設計和更新設計。 與代碼組件的集成已經開始萌芽,這只是時間問題。 像Figma這樣的工具是基于可重用的UI元素從頭開始構建的。 Framer團隊正在為編碼人員設計工具,并具有一定程度的控制權,可以將UI元素轉換為可重用的React組件。 通過Bit,您可以將設計的組件變成可重用的構建塊,可以在任何地方直觀地發現,使用甚至開發這些組件,從而彌合了開發人員的空白。 位+組件設計工具是一個強大的未來。 通過CDN使用Bit和Web組件,這意味著功能全面。
(本文翻譯自Jonathan Saring的文章《7 FrontEnd JavaScript Trends and Tools You Should Know for 2020》,參考:https://medium.com/hackernoon/7-frontend-javascript-trends-and-tools-you-should-know-for-2020-fb1476e41083)
TML超大文件上傳和斷點續傳的實現,VUE 大文件分片上傳(斷點續傳、并發上傳、秒傳),完美解決PHP無法上傳大文件方法,NGINX 實現文件夾上傳(保留目錄結構),http之實現文件上傳與下載,內網 批量大文件上傳下載,瀏覽器超大文件上傳和斷點續傳的實現,超大文件上傳解決方案:分片斷點上傳,
VUE+ELEMENT 上傳文件及文件夾,VUE上傳大文件的三種解決方案,DJANGO+VUE實現文件夾上傳,前端實現文件夾的上傳和下載,HTML+前端超大視頻上傳解決方案,網頁 項目文件夾上傳下載解決方案,
在網上也花時間搜索過相關的資料,論壇里面也有網友交流過,還加過很多QQ群微信群,但是結果都不太令人滿意。網上的文章吧基本上都是相互抄襲的,內容不能說是一模一樣吧,但是實際上都是差不多的,提到的也是HTML5的API,基本上都是說的用的HTML5的API。你說不能用吧他也能傳,但是兼容性不行,只能在chrome上面用,用吧也只是基本上的功能,你沒辦法擴展。
不能夠滿足公司項目上的需求,公司這邊實際上是需要一個成熟的商業解決方案,而不是一個文件的上傳思路。但是網上幾乎所有的文章都是在講思路和想法,很少有提供成熟解決方案的。另外一方面就是公司項目需要最好能夠提供國企和央企的成功案例,這個也是客戶那邊的要求。項目這塊要求比較高,不可能隨便在網上找幾個開源的代碼糊弄過去,因為后期項目要做維護和升級。
前端用了JS,JQuery,vue2,vue3,vue-cli,html5,html,前端框架也比較多,但是網上提供的都是代碼片斷。
找了一圈基本上都是講上傳的,下載的講的很少,文章里面也是寫的不詳細
客戶那邊是一家國企,主要也是給政府和央企做項目。實際上客戶對具體的技術并不關心。客戶關注點不在這塊,主要是對穩定性和兼容性比較在意。
網上搜了一下,基本上大部分的文章里面提到的前端JS或VUE或HTML5上傳文件夾的方案都是使用JS的API來實現的,也就是html5提供的一個API,也就是chrome提供的API。用是能用,但是不夠好用,有很多限制,也不夠靈活。不太能夠滿足用戶的實際應用需求,
多多少少還是有點問題,穩定性,靈活性,可擴展性,安全性方面還是有點問題。chrome的每個域名只允許5個TCP連接的限制,這個基本上是一個無法逾越的鴻溝,目前為止網上還沒有發現哪家公司或者個人能夠突破的。
我們做項目的話個人用戶比較少,一般都是行業用戶,比如政府,公司,金融,這類企業,他們對用戶體驗要求較高。就實際項目開發和實施的情況來看,html5或者chrome提供的功能基本上都是不能夠滿足他們需求的,都需要我們進行定制開發。
文件夾上傳,html5提供了API,用戶開始用的時候還行,然后就提了要求要求支持斷點續傳,
客戶這邊是一個政府單位,涉密了,就不透露單位名稱了,每天主要就是上傳和下載一些資料,數據都是加密的。
客戶那邊每天都會上傳和下載資料,
視頻教程:https://www.ixigua.com/7226245960341389859
1.下載示例
https://gitee.com/xproer/up6-vue-cli
將up6組件復制到項目中
示例中已經包含此目錄
1.引入up6組件
2.配置接口地址
接口地址分別對應:文件初始化,文件數據上傳,文件進度,文件上傳完畢,文件刪除,文件夾初始化,文件夾刪除,文件列表
參考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
3.處理事件
啟動測試
啟動成功
效果
數據庫
源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
授權碼生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1
*請認真填寫需求信息,我們會在24小時內與您取得聯系。