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小时内与您取得联系。