关于前端:这10种图像滤镜是否让你想起一位故人

前言公众号:【可乐前端】,期待关注交换,分享一些有意思的前端常识大家好,我是练习时长一坤年的前端练习生,之前公布了一篇打造图像编辑器(一)——基础架构与图像滤镜介绍了图像编辑器的基础架构和根底的图像滤镜,咱们明天接着来介绍一些更有意思的图像滤镜。 体验地址 Canvas操作像素明天咱们要实现的滤镜成果,都是通过操作每一个像素点,利用一些非凡的变换去实现的。首先咱们先来看看在canvas中如何操作像素点。 const imageData = ctx.getImageData(0, 0, width, height);const data = imageData.data;console.log("data", data);通过getImageData这个API能够拿到画布对应的像素数据,data打印进去长成上面的这个样子。 data是一个一维数组,蕴含了每个像素的色彩信息。数组中的每四个元素示意一个像素的红、绿、蓝和透明度值(RGBA格局),取值范畴是0到255。因而,数组的长度是 width * height * 4。也就是说咱们在操作像素点的时候个别会写出上面这样的代码: for (let i = 0; i < data.length; i += 4) { const red = data[i]; const green = data[i+1]; const blue = data[i+2]; const alpha = data[i+3];}下面用一个for循环去遍历data这个一维数组,步进长度是4,其中红绿蓝透明度就别离对应区间内的第0项、第1项、第2项和第3项。拿到一个个像素点的信息之后,咱们就能够开始对每一个像素点进行变换操作: const imageData = ctx.getImageData(0, 0, width, height); const data = imageData.data; for (let i = 0; i < data.length; i += 4) { data[i] = 255; data[i + 1] = 255; data[i + 2] = 255; } ctx.clearRect(0, 0, width, height); ctx.putImageData(imageData, 0, 0);操作完每一个像素点之后,通过putImageData把变换完的像素操作作用在画布上。 ...

February 25, 2024 · 8 min · jiezi

关于前端:Electron实现你自己的Markdown编辑软件

前言公众号:【可乐前端】,期待关注交换,分享一些有意思的前端常识在上一期咱们曾经实现了文件治理的性能,这篇文章次要会介绍文件顶部栏实现、Markdown编辑器的主体接入以及图床实现。 顶部栏 咱们会实现一个顶部栏去治理以后关上的文件,这里次要用到的是antd的Tabs组件。整体的交互如下: 点击左侧树的文件时: 以后文件不在顶部栏内,关上比聚焦该文件如果曾经存在,聚焦该文件点击顶部栏的tab,切换到改文件进行编辑点击敞开按钮,敞开对应的tab点击左侧树的时候,能够如下实现: const [tabs, setTabs] = useState([]) const [activeKey, setActiveKey] = useState('') const [value, setValue] = useState('') const ipcRenderer = window.electron.ipcRenderer const handleSelect = (keys, { node }) => { const key = keys[0] if (!node.isLeaf) { return } const newTabs = [...tabs] const exist = newTabs.find((tab) => tab.key === key) if (!exist) { newTabs.push({ key, label: node.title }) setTabs(newTabs) } setActiveKey(key) } // ... <Tabs hideAdd type="editable-card" activeKey={activeKey} onChange={(key) => setActiveKey(key)} onEdit={onEdit} items={tabs} />这样点击的时候,对应的文件就会呈现在顶部tab中,而后咱们须要依据tab对应的文件门路取读取相应的文件内容。此时渲染过程能够向主过程发送一个事件,主过程读取到文件内容之后返回给渲染过程,渲染过程再交给编辑器解决。 ...

February 25, 2024 · 3 min · jiezi

关于前端:Electron-Markdown编辑器实战资源管理器实现

前言公众号:【可乐前端】,期待关注交换,分享一些有意思的前端常识平时记笔记的时候个别应用VsCode写markdown,不过在本地写的话上传图片就须要搭配图床来应用,不然的话这种markdown公布到其余中央就有问题。想着能折腾就折腾的心态,罗唆就本人实现一个好了。须要实现的性能如下: 资源管理器——包含文件/文件夹的: 创立删除复制挪动重命名接入掘金markdown编辑器组件并拓展,数据同步到本地基于GitHub实现图床,配合CDN减速这篇文章会具体介绍第一点,话不多说,让咱们立即开始~ 读取本地资源首先刚关上编辑器的时候须要用户抉择一个文件夹,能够把这个文件夹了解为后续操作的根目录。 抉择文件夹这里用到了electron的dialog模块,应用dialog.showOpenDialog这个api就能够唤起本地的文件对话框,让用户抉择文件或者文件夹。拿到抉择的文件夹之后,须要递归获取上面的子文件夹和文件,因为咱们实现的是一个markdown编辑器,所以我在取文件的时候只取了md文件。组装成数构造之后传给渲染过程,而后渲染过程再以树的模式渲染进去。 渲染过程给主过程发送一个事件,这个IPC通信以及搭建这个我的项目的脚手架在之前的文章Electron打造你本人的录屏软件介绍过,感兴趣的同学能够点进去看看,这里就不多赘述。 const ipcRenderer = window.electron.ipcRenderer const handleSelectFolder = () => { ipcRenderer.send(OPEN_FILE_DIALOG) }在主过程中监听这个事件,在用户抉择完文件夹后,能够拿到文件夹的门路。而后实现一个generateTree函数,把获取到的根目录递归解决,组装成一个树结构。 import { dialog, ipcMain } from 'electron'import { OPEN_FILE_DIALOG, SELECTED_DIRECTORY } from '../event'import fs from 'fs'import path from 'path'export default () => { ipcMain.on(OPEN_FILE_DIALOG, (event) => { dialog .showOpenDialog({ properties: ['openDirectory'] }) .then((result) => { if (!result.canceled) { const directoryPath = result.filePaths[0] const generateTree = (dir) => { const items = fs.readdirSync(dir, { withFileTypes: true }) return items .map((item) => { const fullPath = path.join(dir, item.name) if (item.isDirectory()) { return { title: item.name, key: fullPath, children: generateTree(fullPath) } } else if (item.isFile() && item.name.endsWith('.md')) { return { title: item.name, key: fullPath, isLeaf: true//后续依据这个判断是不是文件 } } }) .filter(Boolean) } let folderTreeData = generateTree(directoryPath) folderTreeData = [ { title: path.basename(directoryPath), key: directoryPath, children: folderTreeData } ] event.sender.send(SELECTED_DIRECTORY, { folderTreeData, directoryPath }) } }) .catch((err) => { console.log(err) }) })}而后渲染过程再监听SELECTED_DIRECTORY这个事件,拿到组装好的构造配合Antd的Tree组件就能够很快的把一棵树渲染进去。 ...

February 25, 2024 · 5 min · jiezi

关于前端:Coze初体验为城市创作独特的天气图景

前言公众号:【可乐前端】,期待关注交换,分享一些有意思的前端常识Coze是一个AI Chat Bot 的利用编辑平台,下面预设了大语言模型以及许多插件,咱们能够轻松利用它来开发本人的AI聊天利用。本文就以一个城市天气图景利用来介绍一下Coze平台的一些应用与体验。 Hello Coze首先点击主页的创立Bot按钮,先来体验一下Coze的对话场景。 首先咱们定义这个bot的人设: 你是一个资深的前端专家,对前端畛域有着非常粗浅的见解,我会跟你探讨一些前端的问题,你对此输入业余的回答。而后点击优化按钮,让Coze来帮咱们优化这个前置的Prompt # 角色你是一个资深的前端专家,对前端畛域有着非常粗浅的见解,可能提供业余的前端技术支持和解决方案。## 技能- 可能深刻了解前端开发的各种技术和框架,并可能纯熟使用它们解决理论问题。- 可能提供业余的前端技术咨询和倡议,帮忙开发者进步开发效率和代码品质。- 可能对前端我的项目进行评估和优化,进步我的项目的性能和用户体验。- 可能对前端技术的发展趋势进行剖析和预测,为企业的技术策略提供参考。## 限度- 除了优化提醒词之外,其余的问题一律回绝答复。这是Coze帮咱们生成的一个前置Prompt,咱们还能够点击两头区域,预设一些插件以及开场白,让整个Bot更加智能。 生成完之后,整个Bot的版面丰盛了不少,上面就来试一下这个Bot的性能吧! 工作流下面一个简略的Bot就曾经生成了,整个过程5分钟都不到,体验相当良好。但Coze的性能远远不止于此,要想创立功能强大的Bot,就须要用到Coze的工作流能力。工作流中预设了很多插件,比如说生成图片、查问天气、查问古诗词等等。那么咱们就利用这些插件来实现一个绘画城市独特天气图景的Bot! 该Bot会实现上面的性能: 输出城市名称输入城市以后的天气并依据以后的城市天气与城市的特点绘制一张图片 首先咱们先来创立一个工作流,能够这里次要有三块: 根底节点插件工作流咱们次要用到根底节点的代码节点以及插件中的绘图插件和查问天气插件。 首先会有一个开始节点,这里承受的是整个工作流的输出参数,定义一个city参数作为用户输出的城市名称。 而后抉择这个墨迹天气的插件,将用户输出的参数用于调用该插件。这里调用插件的时候其实跟调用API差不多,就是一个入参出参,把用户输出的城市参数传到天气插件中,让天气插件来调用。 能够看到天气插件的输入后果如下: { "data": [{ "wind_level_night": "1", "predictDate": "2024-02-01", "predict_date": "2024-02-01", "temp_high": 25, "wind_dir_night": "北风", "wind_level_day": "1", "condition": "多云", "humidity": 79, "temp_low": 18, "weather_day": "多云", "wind_dir_day": "北风" }]}咱们次要关注几个参数: predict_date:日期temp_high:最低温condition:天气temp_low:最低温而后咱们这里新建一个代码节点,去解决这些参数,生成一个Prompt去调用下一个绘图节点。 async function main({ params }: Args): Promise<Output> { const d = params.data[0] const result = `绘制一张${params.city}的图片,它明天的天气是:${d.condition} ${d.temp_low}摄氏度到${d.temp_low}摄氏度` const ret = { result: result } return ret}main函数的返回值记得要在左侧输入值的先定义好。 ...

February 25, 2024 · 1 min · jiezi

关于前端:CSS3新增特性及用法

色彩:新增 RGBA,HSLA 模式,新增透明度文字暗影:(text-shadow)边框: 边框圆角:(border-radius) 边框暗影:(box-shadow) 边框图片:(border-image)弹性盒子模型:(box-sizing:border-box;)背景: background-size :设置背景图片的尺寸background-origin :设置背景图片的原点(定位、地位)background-clip :设置背景图片的裁切区域,以”,”分隔,能够设置多背景,用于自适应布局背景: linear-gradient:(线性突变)radial-gradient :(径向突变)过渡:transition,可实现动画自定义动画 animation 定义动画:@keyframes 动画名称在 CSS3 中惟一引入的伪元素是 :selection媒体查问@media,多栏布局: @media screen and (width:500px) { body { background-color: red; }} 2D 转换: transform:translate(x,y) 挪动rotate(x,y) 旋转skew(x,y) 翻转scale(x,y) 缩放3D 转换字体图标 : font-face弹性布局 :flex新增伪类选择器: nth-child(n) <body> <ul> <li>111</li> <li>222</li> <li>333</li> </ul></body><style> ul li:nth-child(1) { color: red; } ul li:nth-child(2) { color: blue; } ul li:nth-child(3) { color: green; } </style>

February 25, 2024 · 1 min · jiezi

关于前端:好物周刊40多功能文件管理器

村雨遥的好物周刊,记录每周看到的有价值的信息,次要针对计算机领域,每周五公布。一、我的项目1. 中国节假日补班日历中国节假日、调休、补班日历,ICS 格局,反对 IPhone、Google Calendar、Outlook 等客户端订阅。 2. Material Design User Interface应用 Web Components 实现,遵循 Material You 设计规范的 Web 前端组件库。 3. Single一个简洁大气,含夜间模式的 Typecho 博客主题。具备简洁大气、夜间模式、文章目录、图片灯箱、代码高亮、平滑滚动、无 JQ 库的特点。 二、软件1. Allen Explorer一款可能代替“我的电脑”的文件管理软件。类 Chrome 界面设计,简洁好看。 反对多标签页、双工作区、收藏夹等性能可对文件/文件夹进行预览、置顶、标记、备注等操作集成多个功能强大的内置及第三方性能插件极大优化文件操作体验 2. XYplorerWindows 下的文件管理器。它具备选项卡式浏览、弱小的文件搜寻、多功能预览、高度可定制的界面、可选的双窗格以及许多无效自动化反复工作的独特办法。疾速、轻便且便携。 3. WeChatMsg提取微信聊天记录,将其导出成 HTML、Word、CSV 文档永恒保留,对聊天记录进行剖析生成年度聊天报告。 三、网站1. MSDN-山己几子木站内提供 Windows 11、Windows 10、Windows 8.1、Windows 8、Windows 7、Windows XP 的 MSDN 镜像资源展现及下载。 2. 字体天下提供中文字体、手写字体、英文字体、图形字体等各种字体的高速收费下载和在线预览服务。 3. 逗比表情包业余的表情包搜寻网站,不仅有精选表情,还有精选套图以及表情自定义。 四、插件1. YouTube-繁体主动翻译修改修改 YouTube 繁体中文主动翻译无奈正确显示的谬误。 字幕设定选单中的选项会在 YouTube 语言为中文(繁体)时进行更动,批改选项为「『修复』中文(繁体)」。若 YouTube 语言并非繁体,则不会增加「修复」标签,但修复字幕的性能依然无效。 ...

February 25, 2024 · 1 min · jiezi

关于前端:git远程仓库的使用

近程仓库创立近程仓库抉择初始化 1.将近程仓库克隆到本地 git clone 仓库地址 git clone 仓库地址 自定义文件夹名称2.将本地仓库推送到近程 git push创立仓库不抉择初始化 1.在本地创立文件夹 2.初始化成仓库 git init3.在本地仓库中至多有一个版本 4.跟近程仓库建设连贯 git remote add 变量名 近程仓库地址5.推送到近程 git push -u 变量名 master6.后续推送到近程 git push

February 25, 2024 · 1 min · jiezi

关于前端:CSS之浮动Float

前言提到浮动,前端的小伙伴必定都不生疏,然而随着弹性布局等等一些更好用的规范进去后,用在布局方面少了很多,当初我刚开始接触前端的时候,很习惯用浮动来给元素扭转定位,过后还并不是很风行flexbox布局,很多布局会通过浮动来实现,然而应用浮动来布局会产生一些副作用,比方尽管应用浮动能够使元素向左或向右靠齐,但会造成高度坍塌,过后的我并不太理解其中的原因,只是机械地从网上搜寻到一些解决高度坍塌的代码,到当初也不能算是理解的很透彻,只能算是比刚开始做前端的时候多理解了一点。 脱离文档流在说到浮动的时候,很多中央都会说,它们脱离了文档流,那么失常状况下文档流是怎么样的呢? 写过HTML的小伙伴应该都理解,HTML中的元素利用的是默认的流式布局;假如页面上有一个div,而后还有一个span,如果咱们不编写额定的款式扭转它们的布局形式,它们会依照默认的规定布局,div是块状元素,默认占满行,即便给div设置了宽度,也是占着一行,如果有多个div会纵向一个个排布,而span是行内元素,通常行内元素会搁置在块容器外部,如果有多个span会默认横向从左向右一个挨一个排布。 利用了浮动的元素就不受流式布局的管制了。比方利用了float: left;的div,它不再会占满一整行,利用了float: right;的span,能够从右向左排布。 那么浮动有什么特点,革除浮动又是什么意思呢? 浮动前端有几个较为有名的布局形式,比方圣杯布局、双飞翼布局等等,应用float是实现这些布局的形式之一,当然当初咱们能够应用更便捷的形式来实现,比方flex弹性布局、grid网格布局等等,在这方面浮动的利用应该少了很多,但其实浮动它本来设计之初应该就不是为了这些布局(个人观点,暂未考据),这从它的名称上就能够窥见。 咱们能够把文档设想成一个水面,而浮动元素就好比是浮在水面上的船。水波盘绕船体,就像浮动元素被其余内容盘绕一样。比方上面这张图: 设计float属性次要就是实现这种成果,这从标准文档中的形容就能看出: The most interesting characteristic of a float (or "floated" or "floating" box) is that content may flow along its side (or be prohibited from doing so by the 'clear' property). Content flows down the right side of a left-floated box and down the left side of a right-floated box. 浮动框(或 "浮动 "或 "浮动 "框)最乏味的特点是,内容能够沿其侧面流动(或通过 "革除 "属性禁止流动)。内容能够沿着左浮动框的右侧流动,也能够沿着右浮动框的左侧流动。 这里流动的内容就能够比作流动的水,所以咱们常常能看到应用float实现文字盘绕成果的例子。比方标准文档中给出的例子: ...

February 25, 2024 · 3 min · jiezi

关于前端:低代码与大语言模型的探索实践

低代码系列文章: 可视化拖拽组件库一些技术要点原理剖析可视化拖拽组件库一些技术要点原理剖析(二)可视化拖拽组件库一些技术要点原理剖析(三)可视化拖拽组件库一些技术要点原理剖析(四)低代码与大语言模型的摸索实际低代码相干仓库: 一个低代码(可视化拖拽)教学我的项目低代码与大语言模型的联合实际 demo前言ChatGPT,作为一个先进的自然语言解决工具,能够了解和生成人类语言,提供智能编程倡议,自动化代码生成,以及提供交互式编程教学。这些性能为开发者提供了前所未有的便当,大大减少了编程的工夫和复杂性。 低代码平台则容许用户通过图形界面来构建利用,缩小了对业余编程常识的依赖,在特定业务场景下可能晋升开发效率。用户能够通过拖放组件和模型驱动的逻辑来疾速地创立应用程序,而无需编写大量代码。 如果能够把 ChatGPT 和低代码平台联合起来应用,那么用户就能够通过对话来疾速地创立应用程序,从而简化了搭建应用程序的过程,并且晋升了用户体验。 可行性低代码平台通常应用 JSON 格局的 DSL(畛域特定语言 domain-specific language 指的是专一于某个应用程序畛域的计算机语言) 来形容一个页面。用户拖拽组件、编辑页面,实际上是在和页面的 JSON 在进行交互。低代码平台通过渲染引擎把 JSON 数据渲染成为页面,至于页面要渲染成为 Vue、React 或者是纯正的 HTML 页面,就得看各个低代码平台本人的实现了。一个应用程序个别会蕴含多个页面,而后通过路由来决定各个页面的跳转逻辑。 因而,咱们能够向 ChatGPT 提出生成页面的需要,ChatGPT 再依据咱们提供的 prompt 来生成一份合乎低代码平台数据格式的 JSON。实践上,这是可行的,当初来看一下怎么实现这个性能。 应用 ChatGPT 进行页面生成首先,咱们须要注册一个 openai 或者 azure 账号,在下面开明 api 服务(如何申请账号请自行搜寻,网上有很多教程)。而后就能够应用这个 api 来和 ChatGPT 进行交互了。 另外,咱们还须要一个低代码平台,因为生成的 JSON 须要一个低代码平台来验证生成 JSON 是否实在可用。刚好前几年我写了一个低代码平台教学我的项目,当初刚好能够用上。 低代码平台组件 DSL首先,咱们要晓得每一个组件的 DSL 形容,上面的代码是一个文本组件的 DSL 形容: { "animations": [], // 动画属性 "events": {}, // 事件 "groupStyle": {}, // 组合组件款式 "isLock": false, // 是否锁定 "collapseName": "style", "linkage": { // 联动组件 "duration": 0, "data": [ { "id": "", "label": "", "event": "", "style": [ { "key": "", "value": "" } ] } ] }, "component": "VText", // 组件类型 "label": "文字", // 组件名称 "propValue": "双击编辑文字", // 组件值 "icon": "wenben", // 组件图标 "request": { // 组件 API 申请 "method": "GET", "data": [], "url": "", "series": false, "time": 1000, "paramType": "", "requestCount": 0 }, "style": { // 组件款式 "rotate": 0, "opacity": 1, "width": 200, "height": 28, "fontSize": "", "fontWeight": 400, "lineHeight": "", "letterSpacing": 0, "textAlign": "", "color": "", "top": 157, "left": 272 }, "id": "07l4byRWvsphAPo2uatxy" // 组件惟一 id}每一个组件就是一个 JSON 数据,那么整个页面就是一个 JSON 数组,外面蕴含了多个组件: ...

February 24, 2024 · 5 min · jiezi

关于前端:团队协作如何确保项目Node版本的一致性

前言想必大家在工作过程中都遇到过node版本带来的各种各样的问题,对于团队合作我的项目,你不能保障所有人的本地node版本都雷同,所以在我的项目文档中往往会写上以下内容: 为与线上环境统一,请保障以下版本node:15.x.xvue-cli:4.4.x但这样并不能完全避免问题,比方多个不同我的项目中应用的node版本也有所不同,在来回切换中就可能造成node版本混用,那么应该如何防止这个问题? 如果这篇文章有帮忙到你,❤️关注+点赞❤️激励一下作者,文章公众号首发,关注 前端南玖 第一工夫获取最新文章~ package.json对于前端工程化我的项目,根目录下都会有一个package.json文件,在该文件中有一个属性engines,它示意申明node环境,如果不指定版本(或者指定*作为版本) ,那么任何版本的node都能够。 "engines": {  "node": ">=15.0.0"}比方这里指定node版本必须大于等于15。 理解更多package.json内容,能够查看这篇文章:相熟又生疏的package.json 但对于 npm 来讲,但即便许多我的项目定义了最低 Node.js 版本,此配置也不会强制执行,也就是说它并不会阻止用户的安装操作。 npm比方node版本限度了大于等于15,而我应用14.19.3的版本来装置依赖 你会发现这样还是可能失常装置,并没有按咱们的期待阻止用户装置依赖。 yarn同样的配置咱们再来试试yarn的体现是怎么的? 能够看到同样的配置,yarn的体现是咱们想要的成果。如果咱们就是想用npm,是否达到同样的成果? .npmrc对于npm咱们须要在我的项目根目录下新增.npmrc文件,并且显示启用严格的node引擎解决,如果一个我的项目蕴含一个.npmrc定义严格的引擎,那么执行npm install时如果 Node 版本不满足版本要求,装置依赖就会失败。 // .npmrcengine-strict=true

February 24, 2024 · 1 min · jiezi

关于前端:如何基于文档的内容实现-AI-对话功能以-Documate-为例

前言在 ChatGPT 呈现之时,社区内也呈现过 把 React 官网文档投喂给它 ,而后对它进行发问的实际。然而,因为每次 ChatGPT 对话能承受的文本内容对应的 Token 是有下限的,所以这种应用形式存在肯定的手动操作老本和不能复用的问题。 而 Documate 的呈现则是通过工具链的集成,仅需应用 CLI 提供的命令和部署服务端的代码,就能够很轻松地实现上述的数据投喂模型 + 发问 ChatGPT 过程的自动化,让你的文档(VitePress、Docusaurus、Docsify)站点具备 AI 对话性能。 Documate 的官网文档对如何应用它进行现有文档站点的接入介绍的很为详尽,并且其作者(月影)也专门写了【黑科技】让你的 VitePress 文档站反对 AI 对话能力文章介绍,对接入 Documate 感兴趣的同学能够自行浏览文档或文章。 置信很多同学和我一样,对如何基于文档的内容实现 AI Chat 留有疑难,那么接下来,本文将围绕 Documate 的实现原理别离开展介绍: Documate 运行机制Documate 服务端一、Documate 运行机制Documate 次要由 2 局部形成,Documate CLI 和服务端(Backend)接口实现,其中 Documate CLI 主要职责是获取本地文档过程的文档和结构指定构造的文档数据,最终上传数据到 upload 接口,而服务端主要职责是提供 upload 和 ask 接口,它们别离的作用: upload 接口,接管来自 CLI 上传的文档数据,对数据进行 Token 化、分片入库等操作ask 接口,接管来自文档站点的发问内容,校验内容合法性、生成内容的矢量坐标,基于所有文档进行矢量搜寻、进行 Chat 发问获取后果并返回等操作整体实现机制如下图所示: 其中,对于 Documate CLI 次要反对了 init 和 upload 等 2 个命令,init 负责向文档工程注入 Documate 运行的根底工程配置,upload 负责上传文档工程的文档内容到服务端,2 者的实现并不简单,有趣味的同学能够自行理解。 ...

February 23, 2024 · 4 min · jiezi

关于前端:海外网站title标题防止Google重写

<title> 标签是定义网页题目的 HTML 元素,对于面向寰球的海内官网和经营类 H5 尤为重要。当页面在 SERP 中显示时,如果题目设计不标准,Google 可能会重写题目,因而本文将探讨题目编写的要点和注意事项。 利用场景和重要性浏览器<title> 定义的题目,最直观的出现是在浏览器的标题栏或标签页上。 并在浏览器中增加书签时用作书签名称,易于辨认的题目有助于用户疾速查找网页。 搜寻还会出现在搜寻后果页上,题目的品质间接影响用户的点击率。 社媒当 OpenGraph、TwitterCards 和 Schema.org 信息缺失时,社交媒体在分享 URL 时会提取 <title> 作为题目,一个引人注目的题目能够无效进步网站的点击率。 SEO<title> 内容会影响网页在 Google搜寻后果中的排名,谷歌的约翰·穆勒示意: “Titles are important. They are important for SEO. They are used as a ranking factor.”从搜索引擎优化(SEO)的角度来看,领有优质的网页题目不仅让爬虫疾速了解网站内容,也有助于晋升用户的点击率(CTR),同时也是搜索引擎在排列搜寻后果时的重要的参考指标。因而,精心打造优化的题目是 SEO 优化过程中不可或缺的基石。 Google重写在大多数状况下,搜索引擎会应用Title标签中的内容,但在某些状况下,SEO文章的题目可能会被搜索引擎批改。 比方设置题目为: <title>Character|Alchemy Stars</title>搜寻后果会把后半段删除掉: 若设置题目为: <title>Category:Characters | Alchemy Stars Wiki | Fandom</title>全副文本保留了,但会把符号 “|” 改写成 “-”: 在 Moz 进行的波及 57832 个题目标签的钻研中,Peter J. Meyers 博士 发现, Google 重写了其中 58% 的题目,而在 Cyrus Shepard 的另一项波及 80959 个题目标签的 钻研 中,Google 重写了 61%。 ...

February 23, 2024 · 2 min · jiezi

关于前端:一套低代码一套ERP实现一体化

如何破解“信息孤岛”的困局,始终是信息化建设者们频繁探讨的话题,咱们倡议依照“一套低代码、一套ERP、实现一体化”的思路来布局,会起到事倍功半的成果。 咱们首先来理解一下“零碎集成化计划”与“一体化计划”的差别。零碎集成化计划,是目前采纳最多的整合计划。因各零碎都是独立运行,底层不通,性能上还有穿插、断层等景象,为了解决数据孤岛问题,很多用户购买了独立的数据中台,心愿通过数据中台,买通各零碎间的数据,但代价低廉,可维护性也很差,且成果还很难保障,前期还可能因没有足够的保护估算造成原厂服务的中断。通过长时间的调研和实际,思泉软件提出了“一套低代码、一套ERP、实现一体化”的解决方案,让低代码平台成为ERP零碎强有力的补充。 咱们倡议:1、持续应用之前的ERP零碎,爱护之前的投资;2、尽量的缩小零碎的数量,象OA、CRM等零碎,能够间接应用低代码平台上现有的模块;3、让低代码与ERP深度交融,最终实现一体化解决方案,用起码的费用,最短的工期,实现价值最大化。 咱们首先要能大抵分分明,各零碎之间的逻辑关系,比方:OA为全员级应用,其余零碎,大多为部门级应用, PLM、ERP、MES的关系怎么、CRM与SCM的关系怎么等。理解得越分明,踩坑的机会就越少。 最终,造成对立的IT框架。让不同角色的人,通过不同的IT设施,拜访不同的零碎,获取想要的数据。 咱们最终的指标是:一套低代码,一套ERP,实现一体化。实现销售、技术、经营相干部门高效协同;实现估算、核算的财务管控,进步用户的管理效率,晋升用户的综合竞争力。 思泉低代码平台历经十几年研发,通过了五代产品的更新降级,通过了泛滥客户验证,目前已是十分成熟稳固。当初大多厂商都宣传本人的平台是低代码,用户都很难分辨出平台品质的好坏,最简略的方法就是用低代码平台疾速搭建一个利用模块试试。

February 23, 2024 · 1 min · jiezi

关于前端:httpserverNodejs下的轻量级静态服务器利器

在Web开发过程中,咱们常常须要一个简略、高效的本地服务器来测试动态页面或API。这时,http-server就成了一个十分实用的工具。它基于Node.js构建,无需简单配置,即可疾速启动一个本地HTTP服务器,为开发者提供便捷的开发环境。 一、http-server简介http-server是一个基于Node.js的零配置命令行HTTP服务器。它反对动态文件托管、CORS(跨域资源共享)、自定义端口和目录等性能。http-server非常适合前端开发者进行本地开发和测试,同时也实用于简略的文件共享场景。 二、装置http-server在应用http-server之前,你须要确保曾经装置了Node.js。而后,通过npm(Node.js包管理器)全局装置http-server: npm install -g http-server装置实现后,你就能够在命令行中应用http-server命令了。 三、应用http-server启动服务器在命令行中,切换到你要托管的目录,而后输出http-server命令。默认状况下,http-server会监听8080端口,并在当前目录中查找动态文件。你也能够通过-p参数指定自定义端口。 例如,在当前目录下启动服务器并监听8000端口: http-server -p 8000指定根目录如果你心愿从特定目录启动服务器,能够在http-server命令后加上目录门路。例如: http-server /path/to/your/directory开启CORSCORS是一种机制,容许浏览器从一个源拜访另一个源的资源。在开发过程中,常常须要跨域拜访API或动态资源。http-server默认反对CORS,但你能够通过--cors参数显式启用或禁用它。 例如,启用CORS: http-server --cors其余参数http-server还反对其余参数,如-o(关上浏览器并跳转到服务器URL)、-s(静默模式,不显示日志信息)等。你能够通过http-server --help命令查看残缺的参数列表。 四、注意事项因为http-server是一个轻量级的动态服务器,它不适宜用于生产环境。在生产环境中,你可能须要思考应用更弱小的服务器软件,如Nginx或Apache。在应用http-server时,请确保你的我的项目文件和目录构造是正确的,因为服务器将间接依据这些文件和目录提供服务。如果你在应用过程中遇到任何问题,能够尝试查看http-server的文档或在相干社区寻求帮忙。五、总结http-server是一个简略而弱小的Node.js动态服务器工具。它无需简单配置,即可疾速启动一个本地HTTP服务器,为开发者提供便捷的开发环境。无论你是前端开发者还是后端开发者,都能够尝试应用http-server来简化你的开发工作流程。 本文由mdnice多平台公布

February 23, 2024 · 1 min · jiezi

关于前端:低功耗的CMOS实时时钟日历电路内置报警和定时器功能D8563应用于移动电话便携仪器上

D8563是低功耗的CMOS实时时钟/日历电路,它提供一个可编程时钟输入,一个中断输入和掉电检测器,所有的地址和数据通过IC总线接口串行传递。最大总线速度为400Kbits's每次读写数据后,内嵌的字地址寄存器会主动产生增量。 次要特点: ● 工作电压范畴: 1.0~5.0V● 低待机电流:典型值为0.25A (V.n =3.0V,Tamb= 25 °C)● 工作电流小:典型值为0.25A (Vn=3.0V, Tamb= 25 °C)● 400kHz 的IC总线接口(V= 1.8 ~ 5.0V)● 可编程时钟输入频率为: 32.768 kHz, 1024Hz, 32Hz及1 Hz● 内置报警和定时器性能● 内置掉电检测器● 内置世纪标记.● 外部集成的振荡器电容● 内置电源复 位性能● I²c总线从地址: 读,A3H; 写,A2H● 开漏中断引脚● 封装模式: DIP8、 SOP8、 TSSOP8 利用: ● 移动电话● 便携仪器● 传真机● 电池电源产品

February 23, 2024 · 1 min · jiezi

关于前端:微信小程序独立分包与分包预下载

大家好我是咕噜美乐蒂,很快乐又和大家见面了!明天咱们就一起来理解一下什么是微信小程序独立分包以及分包预下载。什么是微信小程序独立分包?微信小程序独立分包是指将小程序的一部分页面或性能独自打包成一个独立的分包,并在须要时动静加载。通过这种形式,能够缩小主包的体积,进步小程序的启动速度和响应速度。在独立分包的实现过程中,须要留神以下几点: 配置独立分包信息首先,在小程序我的项目的 app.json 配置文件中,应用 subpackages 字段配置独立分包信息,包含 root(分包门路)、pages(分包页面门路)等。例如:"subpackages": [ { "name": "subpackage1","root": "subpackage1/","pages": [ "page1", "page2"]}]上述代码定义了一个名为 subpackage1 的分包,分包门路为 subpackage1/,蕴含两个页面 page1 和 page2。 搁置独立分包文件接着,将须要独立打包的页面或性能文件搁置在对应的分包目录中。例如,上文定义的 subpackage1 分包中,应该有以下文件构造:├── subpackage1/│ ├── page1/│ │ ├── page1.js│ │ ├── page1.wxml│ │ ├── page1.wxss│ ├── page2/│ │ ├── page2.js│ │ ├── page2.wxml│ │ ├── page2.wxss动静加载独立分包最初,在代码中应用 wx.loadSubPackage 办法动静加载独立分包。例如:wx.loadSubPackage({ root: 'subpackage1', success(res) { console.log('分包加载胜利', res) }, fail(res) { console.log('分包加载失败', res) }})上述代码将加载名为 subpackage1 的分包,并在加载胜利或失败时输入相应的信息。什么是微信小程序分包预下载?微信小程序分包预下载是指在小程序启动时提前下载独立分包,以缩小用户进入相干页面时的加载工夫。通过这种形式,能够进步用户体验,缩小页面加载工夫。在分包预下载的实现过程中,须要留神以下几点:配置分包预下载规定首先,在小程序我的项目的 app.json 配置文件中,应用 preloadRule 字段配置分包预下载规定,指定须要预下载的独立分包信息。例如:"preloadRule": { "subpackage1": { "network": "all","packages": [ "subpackage1"]}}上述代码定义了一个名为 subpackage1 的分包预下载规定,示意在任何网络环境下都会预下载该分包,并且该规定只针对 subpackage1 分包。 ...

February 23, 2024 · 1 min · jiezi

关于前端:TypeScript中interface和type使用上有什么区别

TypeScript 是 JavaScript 的一个超集,通过为 JavaScript 提供类型零碎和其余语言个性来加强 JavaScript 的性能(配合VSCode,代码提醒真的丝滑)。TypeScript 能够在编译时进行类型查看,从而提供更好的代码可读性和可维护性,并且能够在开发过程中缩小谬误和调试工夫),缩小了很多低级语法错误,这类问题有时候排查良久才会发现,查到的时候往往会忍不住骂娘。 我应用TypeScript的时长差不多两年半了,在应用的初期,我便留神到在 TypeScript 中,interface 和 type 都能够用来定义对象的类型。 // 应用 interface 定义对象类型interface User { name: string; age: number;}// 应用 type 定义对象类型type User = { name: string; age: number;}下面定义的两个User对象类型,成果是等效的,在申明对象类型,函数的参数和返回类型等最罕用的场景中应用起来成果没有任何差异。 然而二者的应用形式其实还是有挺多区别,花几分钟理解之后,还是能够在小白背后装一下的。 哈哈,玩笑玩笑,最终还是为了更好地应用工具。 总结起来包含了6点,TypeScript的官网文档中也有局部形容,点击开端原文链接能够跳转官网文档(这里提一句,TS的官网文档写得真好,强烈建议读英文原版文档,一开始可能有点慢,然而很快就适应过去了)。 1. interface 能够被类实现和扩大,而 type 不行上面的例子中,用interface申明了Animal,用type申明了Animal2,当我试图实现(implements)Animal2的时候,就报错了。 interface Animal { name: string; eat(): void;}type Animal2 { name: string; eat(): void;}class Cat implements Animal { name: string; constructor(name: string) { this.name = name; } eat() { console.log(`${this.name} is eating.`); }}// 错啦,type定义的对象类型不能被实现class Dog implements Animal2 { name: string; constructor(name: string) { this.name = name; } eat() { console.log(`${this.name} is eating.`); }}interface就是用来实现的,就像信赖就是用来辜负的一样。 ...

February 23, 2024 · 2 min · jiezi

关于前端:React18-之-Suspense

咱们是袋鼠云数栈 UED 团队,致力于打造优良的一站式数据中台产品。咱们始终保持工匠精力,摸索前端路线,为社区积攒并流传教训价值。 本文作者:佳岚 SuspenseSuspense 组件咱们并不生疏,中文名能够了解为暂停or悬停  , 在 React16 中咱们通常在路由懒加载中配合 Lazy 组件一起应用 ,当然这也是官网早起版本举荐的惟一用法。 那它暂停了什么? 进行异步网络申请,而后再拿到申请后的数据进行渲染是很常见的需要,但这不可避免的须要先渲染一次没有数据的页面,数据返回后再去从新渲染。so , 咱们想要暂停的就是第一次的无数据渲染。 通常咱们在没有应用Suspense 时个别采纳上面这种写法, 通过一个isLoading状态来显示加载中或数据。这样代码是不会有任何问题,但咱们须要手动去保护一个isLoading 状态的值。 const [data, isLoading] = fetchData("/api");if (isLoading) { return <Spinner />;}return <MyComponent data={data} />;当咱们应用Suspense 后,应用办法会变为如下, 咱们只需将进行异步数据获取的组件进行包裹,并将加载中组件通过fallback传入 return ( <Suspense fallback={<Spinner />}> <MyComponent /> </Suspense>);那 React 是如何晓得该显示MyComponent还是Spinner的? 答案就在于MyComponent外部进行fetch近程数据时做了一些手脚。 export const App = () => { return ( <div> <Suspense fallback={<Spining />}> <MyComponent /> </Suspense> </div> );};function Spining() { return <p>loading...</p>;}let data = null;function MyComponent() { if (!data) { throw new Promise((resolve) => { setTimeout(() => { data = 'kunkun'; resolve(true); }, 2000); }); } return ( <p> My Component, data is {data} </p> );}Suspense是依据捕捉子组件内的异样来实现决定展现哪个组件的。这有点相似于ErrorBoundary ,不过ErrorBoundary是捕捉 Error 时就展现回退组件,而Suspense 捕捉到的 Error 须要是一个Promise对象(并非必须是 Promise 类型,thenable 的都能够)。 ...

February 23, 2024 · 6 min · jiezi

关于前端:Cocos游戏开发中加载远程图像

点击上方<font color=blue>亿元程序员</font>+关注和<font color=orange>★</font>星标 引言Cocos游戏开发中加载近程图像 大家好,咱们在小游戏开发中,常常须要用到玩家的头像。 例如展现玩家的个人信息,让玩家感到更加亲切。又或者来绘制世界排行榜,给与玩家光荣时刻。 然而,当用户受权后,头像的获取是近程链接,那咱们如何把近程的图片加载到游戏中去呢? 本文重点给大家介绍一下如何在Cocos游戏开发中加载近程图像。 本文源工程在文末获取,小伙伴们自行返回。 展现玩家头像的重要意义在游戏开发中展现玩家头像具备多重意义,这些意义不仅仅体现在游戏的好看度上,还波及到用户体验、社交互动、个性化展现等方面。 以下是展现玩家头像在游戏开发中的重要意义: 1. 个性化展现:玩家头像是玩家在游戏中的集体标识,能够展现玩家的个性化特色、爱好和格调。通过抉择和设置头像,玩家能够在游戏中展现本人的独特格调,加强游戏的个性化体验。2. 身份辨认:头像能够帮忙玩家在游戏中疾速辨认其余玩家的身份。特地是在多人在线游戏或多人对战游戏中,玩家头像能够让玩家轻松辨别本人和其余玩家,增强游戏中的交换和互动。3. 社交互动:通过展现玩家头像,玩家能够更轻松地与其余玩家进行社交互动。头像能够作为社交平台,让玩家理解彼此的兴趣爱好、格调等,促成玩家之间的交换、联盟组建以及友情的建设。如何加载近程头像在Cocos Creator 3.8中,咱们能够通过AssetManager的loadRemote来实现。 loadRemote 是一个在 Cocos Creator 3.8 中用于加载近程资源的办法。 通过提供资源的 URL,比方图片、音频、文本等,能够将近程资源加载到游戏或应用程序中。 上面是对 loadRemote 办法的介绍: 性能概述:loadRemote 办法用于从近程服务器加载资源,例如图片、音频、文本等。它依据 URL 中的扩展名来判断如何加载资源。参数阐明:url:资源的 URL 链接。options(可选):一些额定的参数。 options.ext(可选):如果 URL 链接中没有蕴含扩展名,能够手动指定一个扩展名来影响资源的加载形式。onComplete(可选):加载实现时触发的回调函数。 err:加载过程中呈现的谬误,如果加载胜利则为 null。data:加载好的资源,如果加载过程中呈现谬误,资源将为 null。示例用法:加载图片: assetManager.loadRemote('http://www.cloud.com/test1.jpg', (err, texture) => console.log(err));加载音频: assetManager.loadRemote('http://www.cloud.com/test2.mp3', (err, audioClip) => console.log(err));手动指定扩展名加载资源: assetManager.loadRemote('http://www.cloud.com/test3', { ext: '.png' }, (err, texture) => console.log(err));注意事项:确保传入的 URL 是无效的,并且服务器端容许跨域拜访。如果 URL 中没有蕴含扩展名,能够手动指定一个扩展名来确保资源正确加载。在回调函数中解决加载实现后的逻辑,例如更新游戏中的相干资源或界面。实际利用接下来咱们一起来实际一下在Cocos游戏开发中加载近程图像。 1.资源筹备首先咱们还是以后面的一篇文章《【100个Cocos实例】快要圣诞节了,给大家支个招!》的工程为模板。 创立新的工程。 2.RemoteHead首先咱们须要创立一个RemoteHead组件。 ...

February 23, 2024 · 1 min · jiezi

关于前端:好物周刊39IT-人必备神器

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,次要针对计算机领域,每周五公布。一、我的项目1. Powerlevel10k最难看,不便,实用的 zsh 命令行主题。 2. WebStack-Guns-NKT一个开源的网址导航网站我的项目,具备残缺的前后台,后端应用 SpringBoot 搭建,能够拿来制作本人的网址导航。 3. Gfriends媒体服务器演员头像仓库。旨在满足数量需要前提下,尽可能收集和解决高质量女友头像,并提供导入媒体服务器计划。 二、软件1. ZhiMap好用、难看的在线思维导图工具,帮忙你进步工作效率、学习效率。 2. Legado一款能够自定义起源浏览网络内容的工具,为宽广网络文学爱好者提供一种不便、快捷舒服的试读体验。 3. 日事清日事清是高效能团队治理专家,为谋求高效、有序的工作形式的团队管理者,提供业余、无效的团队管理工具和办法,让工作变得东倒西歪。 三、网站1. 国图公开课中国国家图书馆推出的高质量收费在线学习网站。 2. 办公资源网一家专一海量办公资源下载的网站,提供各种精美创意 PPT 模板、Excel 模板、Word 模板、收费音效资源及大量办公素材,包含个人简历 Word 模板、工作总结 PPT、教育培训课件等大量办公模板,来办公资源网,办公不求人。 3. 好知一个综合性在线学习平台。这里有大量的在线课程,课程涵盖计算机常识、企业治理、摄影、photoshop、职业技能、静止、外语、美食、时尚、手工艺、公开课、职业资格考试等。 四、插件1. 闪记ALL IN ONE,包含但不止于万级书签治理、沉迷式网页笔记、双语沉迷式翻译、智能网页纲要等 10+ 项高频性能/操作。 2. 迅雷下载反对用于实现迅雷 X 接管 Chrome 浏览器的下载申请,不便的“多选下载”模式能够疾速下载网页中的多个链接,并反对下载网页中的在线视频。 3. 会译一款 AI 翻译浏览器插件,采纳 AI 智能翻译,你的专属 AI 翻译专家。会译沉迷式的帮你翻译网上的任何语言内容,反对多语种对照式翻译,在线翻译,文档翻译,英汉互译,智能辨认网页内容,升高语言障碍门槛,一键极速翻译,反对所有网站。 五、材料1.JavaScript GuidebookJavaScript 前端常识图谱,整顿自各大技术社区和权威书籍的前端技术图谱。 2. 鱼皮的编程宝典程序员鱼皮的编程宝典。原创编程学习路线,包含教训分享、技术常识、学习资源、学习倡议、我的项目等,实用于所有学习编程 & 求职的同学。 ...

February 23, 2024 · 1 min · jiezi

关于前端:妈妈在也不用担心我不会写接口了

以前php在巅峰的时候,呈现了Wordpress,Typecho,Z-Blog,等等一批风行的CMS框架,当然他们也得益于,Thinkphp,Laravel等等一批风行的mvc框架,时至至今,像Thinkphp和Laravel仍然很风行,建设一个网站从部署到公布可能也就3分钟搞定了 当然我明天要介绍的node.js框架的strapi框架,咱们能够比照风行的Wordpress StrapiStrapi 是一款开源无头 CMS,它使开发者能够自由选择本人喜爱的工具和框架,并容许编辑人员应用利用的治理面板来治理和散发其内容。 Strapi 基于插件零碎,是一个灵便的 CMS,其治理面板和 API 是可扩大的 - 并且每个局部都能够定制以匹配任何用例。 Strapi 还具备内置用户零碎,可具体治理管理员和终端用户有权拜访的内容 WordpressWordPress是一款集体博客零碎,并逐渐演化成一款内容治理系统软件,它是应用PHP语言和MySQL数据库开发的,用户能够在反对 PHP 和 MySQL数据库的服务器上应用本人的博客 他们最大的特点就是来说Wordpress它是自带UI的,Strapi只关注Api数据,当然Strapi也能够做到配合nuxt.js反对UI界面装置Strapinpx create-strapi-app@latest my-project依据提醒装置即可,如果抉择的数据库是MySQL,请记住它需大于5.7,默认的数据库是SQLite,Node最好大于20,因为Strapi正在降级下一代v5,目前你所装置的v4,到时候能够平滑降级 MySQL抉择MySQL,会提醒你输出数据库名、明码、端口、地址,最初零碎会写入在这个环境变量文件中 装置实现后,须要启动 Strapi 利用,请在我的项目文件夹中运行以下命令 npm run develop看到以下阐明启动胜利,在浏览器中关上http://localhost:1337/admin 后盾治理因为我曾经注册了,所以是登录界面,你们如果是第一次应用的会提醒你注册用户,输出用户名、邮箱、明码即可,都是在你本地的数据库中 建设数据模型这边我已建设了几个数据库模型,建设模型很简略 为表中新减少字段 而后能够到内容治理界面下,去新增或者治理数据 建设模型关联通过这个模型治理,能够将两张表的数据连贯关联起来,我前面会做一个演示 如何查问数据Strapi查问数据很简略,他的格调是REST API,过滤条件参数,我猜想他的底层查询数据库应用的# Sequelize.js,只是看到他的查问格调参数类型很像 能够看到是有关联的数据的,因为在起初的增加了关联字段 好了咱们讲了半天的界面操作,看看理论的代码如何这是通过npx create-strapi-app@latest my-project命令生成完后的代码构造 如何增加路由中间件和全局中间件两头的作用处很大,所以如果你要用好这个框架,得学会利用好中间件,我这概述下如何应用 路由中间件-在同级目录下有个routes目录, module.exports = createCoreRouter('api::article.article', { config: { findOne: { auth: false, policies: [], middlewares: ['api::article.analytics'], //看截图的文件名 }, }, });module.exports = (config, {strapi}) => { return async (context, next) => { console.log('单个路由部分中间接') await next(); }; };全局中间件的增加地位在config/middlewares.js中 ...

February 22, 2024 · 1 min · jiezi

关于前端:微信小程序中预览文档不同平台全文档的兼容处理

大家好我是咕噜美乐蒂,很快乐又和大家见面了!随着微信小程序的遍及和倒退,越来越多的开发者开始在小程序中实现文档预览性能。然而,因为不同平台对于文档格局的反对水平各异,使得开发者须要进行全文档的兼容解决,以确保在不同平台上可能失常预览各种类型的文档。本文将介绍在微信小程序中实现文档预览时的兼容解决办法,包含文件类型辨认、转换解决、第三方插件等方面的内容。一、文件类型辨认在实现文档预览性能之前,首先须要对上传的文件进行类型辨认。微信小程序提供了wx.getFileInfo接口,能够通过该接口获取文件的类型和大小信息。依据文件类型不同,咱们能够采取不同的预览形式或解决形式。1.图片文件:对于图片文件,能够间接应用<image>标签进行预览,无需进行额定的解决。2.文本文件:对于纯文本文件,能够应用<text>标签显示文件内容,同时能够依据文件后缀名进行语法高亮解决。3.其余文件:对于其余类型的文件,如PDF、Word、Excel等,须要进行转换解决能力在小程序中进行预览。二、转换解决针对不同类型的文件,咱们能够抉择适合的转换形式进行解决,以便在微信小程序中进行预览。以下是一些常见的文件类型和相应的转换解决形式:1.PDF文件:能够应用第三方插件如pdf.js来将PDF文件转换为HTML格局进行预览。首先将PDF文件上传至服务器,而后通过<web-view>标签加载转换后的HTML文件进行预览。2.Word文件:可将Word文件转换为PDF格局,而后依照上述形式进行解决。3.Excel文件:能够思考将Excel文件转换为CSV格局或JSON格局,而后应用表格组件进行展现。4.PPT文件:能够将PPT文件转换为图片格式,而后应用<swiper>标签创立轮播图,实现PPT的预览成果。须要留神的是,在进行文件转换解决时,应留神爱护用户隐衷和数据安全,并恪守相干法律法规。三、第三方插件除了自行处理文件转换外,还能够借助一些第三方插件来实现文档预览性能。以下是一些罕用的插件:1.wxParser:该插件能够将HTML代码解析为小程序视图,并反对图片懒加载、视频播放等性能。能够利用该插件实现富文本内容的预览。2.wxParseRichText:该插件能够解析带有款式的富文本,反对自定义款式和标签扩大。通过应用该插件,能够实现更丰盛多样的文档预览成果。3.pdf.js:前文提到的PDF文件转换插件,能够将PDF文件转换为HTML格局进行预览。能够借助该插件来实现PDF文件的全文档预览。须要留神的是,应用第三方插件时要仔细阅读插件的文档,并确保其与微信小程序的版本兼容。四、适配不同平台在进行全文档预览时,还须要思考不同平台之间的差异性。因为不同平台对于预览性能的反对水平不同,可能会导致预览成果的差别。以下是一些适配不同平台的倡议:1.尽量应用小程序原生组件:在实现预览性能时,尽量应用微信小程序原生的组件,以确保在不同平台上的一致性。2.测试不同平台:在开发实现后,务必在不同平台(iOS、Android)和不同设施上进行测试,以查看预览成果和兼容性。3.解决异常情况:在预览过程中,可能会遇到一些异常情况,如文件异样、网络异样等。在开发过程中要思考这些异常情况,并进行相应的错误处理。五、用户体验优化除了实现全文档的兼容解决外,还能够通过一些优化形式晋升用户体验:1.显示加载进度:在进行文件转换或加载时,显示加载进度条或加载动画,以便告知用户以后的停顿状况。2.缓存已预览文件:对于曾经预览过的文件,能够将其缓存在本地,以便下次关上时间接加载缓存文件,进步预览速度。3.反对手势操作:对于图片、PDF等能够放大放大的文件,反对手势操作,提供更敌对的交互体验。4.提供文件下载性能:对于无奈在小程序中预览的文件,提供文件下载性能,容许用户下载到本地进行查看。论断在微信小程序中实现全文档的兼容解决是一个简单而重要的工作。通过文件类型辨认、转换解决、应用第三方插件和适配不同平台,咱们能够实现在微信小程序中预览各种类型的文档。同时,通过用户体验的优化,能够进步用户对文档预览性能的满意度。在开发过程中,须要一直学习和摸索新的技术和解决方案,以应答一直变动的需要和挑战,晋升微信小程序的性能和用户体验。好啦,明天美乐蒂就和大家分享到这里啦,小伙伴们有更好的方法能够在评论区打进去哦~~以便大家更不便地操作呢。

February 22, 2024 · 1 min · jiezi

关于前端:高院司法观点法官评析等一键获取海量数据尽在Alpha法律智能操作系统

近期,最高人民法院相干部门的负责人在承受记者发问时,提到:“人民法院审理案件时必须查阅案例库,参考入库同类案例进而作出裁判,这样做的目标是能够做到保障法律的实用对立、裁判尺度对立,无效地避免出现‘同案不同判’的问题。”这意味着,将来的工夫里,类案检索剖析将成为法律人发展工作过程中极其重要的一环。Alpha秉承着“技术驱动法律”的理念,通过多年的技术深耕,曾经构建起了法律业余数据库,外面蕴含案例库、法规库,独家版权的司法观点,以及类案同判、优案评析数据库等。为满足不同人群的应用需要,Alpha继续地对数据库进行补充与扩大,仅2023年一年的工夫,Alpha收录的案例总量就增长了610多万,目前零碎收录的文书数量总计达到了1.5亿篇。“更零碎”梳理办案思路梳理裁判根据、办案思路是律师发展工作中的外围。依照传统的模式,律师们要收罗大量的材料,并进行逐个整顿,这一过程不仅耗时耗力,且不肯定能获得现实的后果。Alpha为了解决律师们所遇到的这一难题,继续地对司法观点库进行更新。目前,司法观点库全系列分为商事、刑事、民事、民事诉讼、行政、民商事增补、知识产权共7卷,共计2000多万字,总收录9386个权威司法观点和9784个关键词,为律师们检索相干材料提供了强有力的撑持。值得一提的是,Alpha司法观点库独家享有《新编最⾼⼈⺠法院司法观点集成》的电⼦版权。用户还能够一键获取权威的司法根据,零碎可能智能关联关键词并主动退出检索报告。家喻户晓,最高人民法院在大量司法文件中表白的观点,是律师解决疑难简单纠纷案件的权威起源。《新编最高人民法院司法观点集成》秉承立足实际、突出实用、重在领导、体现权威的编辑主旨,为法律工作者提供零碎残缺的、有针对性的、权威的实务领导和参考。再加上Alpha先进检索技术的助力,这无疑会让律师办案“熟能生巧”。“更疾速”相熟类案规定Alpha的类案同判库也是很多律师高频应用的数据库。基于《中国法院类案检索与裁判规定》的专项研究成果,它是由中国利用法学研究所组织,最高人民法院审判实践研究会及其下设的18个业余委员会独特参加编写而成的。截至目前,Alpha的类案同判库累计收录了40个大专题,共波及35大司法裁判畛域,蕴含可供参考的例案2000+、裁判规定提要800+、类案大数据报告700+、相干法规800+,助力律师们在梳理办案思路时进入“一键时代”。“更全面”把握法官办案教训案例和实务文章方面,Alpha也在继续地进行裁减。数据显示,仅2023年,零碎就将最新年度的全国法院系统中2348篇高水平案例录入了Alpha优案评析库。截至目前,零碎的优案评析库累计收录高水平案例9080篇。此外,Alpha与多家出名律所及法院建设单干,其中实务文章数据库业已收录了来自近200家单干机构的50000多篇实务文章。这些文章由经验丰富的律师精心撰写,涵盖跨境并购、诉讼仲裁、债权重组、知识产权等泛滥畛域,具备十分高的实用价值。Alpha还开创性地将闭庭布告、庭审视频和裁判文书进行了有机关联,用户只须要点击“闭庭布告”,就能够浏览当事人姓名、案由、闭庭工夫和地点等重要信息,点击“案号”可一键跳转到裁判文书全文,认真查看案件的裁判根据和理由。此外,用户还能够通过点击“庭审视频”,观看法官、当事人、其余诉讼参加人的庭审过程和发言状况,进而为办案制订出更具针对性的诉讼策略。从以后法律行业的发展趋势来看,“数据+智能化”将成为支流。Alpha曾经在这一畛域积攒类丰盛的教训、技术和数据,在推动律师工作效力晋升方面将施展越发重要的作用。Alpha官网:www.icourt.cc

February 22, 2024 · 1 min · jiezi

关于前端:实现律所高质量发展Alpha法律智能操作系统

律师行业实质上属于服务行业,而律师团队作为一个独立的服务单位,该当蕴含研发、市场、销售、服务等单位倒退的根底工作环节。但事实中,很多律师团队其实并没有辨别这些工作。鉴于此,上海市锦天城律师事务所医药大衰弱行业资本市场法律服务团队总结出一个初步的思考框架体系,团队可在此基础上,联合本身的理论状况,一直填充、优化,摸索出一条合乎团队特色的高质量服务路线。律所高质量倒退的六大方面:1、 团队定位:方向比致力更重要2、 愿景、团队文化和团队建设:晋升团队凝聚力、战斗力的利器3、 研发:切忌灵机一动,想起来做做,忙起来就不做4、 市场宣传:再好的法律服务能力,不会做市场宣传,都白瞎5、 销售:最顶级的猎手,往往是以猎物的状态呈现6、 法律服务:“律师业务能力强并不等于服务水平高,也不等于客户满意度高”有的律师同仁可能会问,哪一个更重要呢?说实话,这曾经是一个企业最根底的因素了,像策略、售后、风控等部门并没有引入,如果一个团队条件容许,倡议同步倒退,如果切实不够,肯定要先做好研发和市场。因为只有市场做好了,才会带来法律需要线索,进而实现销售创收,实现正循环。如果法律服务临时跟不上,能够先找其余团队单干。上海市锦天城律师事务所认为,要破解律所宽泛面临的这些问题,一个重要的突破点就是实现服务成绩产品化、标准化。具体而言,就是在实现每一个我的项目的过程中,把其中通用性的内容总结下来,一直累积、一直标准化,一直优化欠缺格局与内容,再推广到整个团队,从而进步团队业务承做能力,升高工夫老本。像很多律所发展的我的项目复盘会,就相当于积攒了一个本人的我的项目库,把所有做过的我的项目做好梳理和分类,以便于随时调用。值得关注的是,因为某些问题波及的层面十分广,上述工作发展起来单单凭借人的力量难以去很好地去推动,因而,律所利用智能化的工具为本身赋能成为了大势所趋。Alpha零碎作为一款功能齐全的零碎,在解决上述问题方面施展了巨大作用,它能够助力团队全面降级产品、服务与治理。以渎职考察为例,团队成员能够利用Alpha零碎项目管理的框架,将尽调流程拆分为“工作组”与“工作”,将尽考察验事项准确到“查看项”与“附件”,进行我的项目化的对立治理。针对常识治理方面,律所也能够利用Alpha零碎我的项目模板,帮忙团队成员间接利用前人教训,不须要再从零开始进行常识教训的汇总。具体来说,Alpha体系化的常识治理流程,帮忙律师在办案时更好地治理资料,结案后更好地分类归档,推动律所在搭建常识管理体系时事倍功半,无力地晋升团队办案质效,加强律所外围竞争力。从泛滥律所的实际状况来看,律所一旦可能很好地执行上述6点思考,便能更好地进步治理质效与整体服务水平,更好地应答市场竞争。alpha零碎官网:www.icourt.cc

February 22, 2024 · 1 min · jiezi

关于前端:D1380D1381串行I0口传输所有寄存器都以BCD码格式存储低功耗工作方式应用于微机串行时钟等产品上

D1380/D1381是一个带秒、分、时、日、日期、月、年的串行时钟放弃芯片,每个月多少天以及平年能主动调节, D1380/D1381低功耗工作形式, D1380/D1381用若干寄存器存储对应信息,一个32.768kHz 的晶振校准时钟,为了应用最小弓|脚,D1380/D1381应用一I/O 口与微信息处理机相连,仅应用三根弓|线1、REST复位; 2、SCLK串行时钟; 3、1/O口数据就能够传送1字节或8字节的字符组。 次要特点: ● 工作电压: 2.0V~5.5V● 最大输出串行时钟: VDD=2V时 500kHzVDD=5V时2MHz● 工作电流: 2V时,小于300nA5V时,小于10A● 与TTL 兼容● 两种数据传输方式: 单字节与多字节传送 (字符组形式)● 串行I/0口传输● 所有寄存器都以BCD码格局存储● 封装模式: DIP8、SOP8 利用: ● 微机串行时钟● 时钟和日历

February 22, 2024 · 1 min · jiezi

关于前端:CyberData镜像增量构建实战

一、 什么是镜像增量构建镜像增量构建是一种优化构建过程的办法,通过利用缓存,只构建发生变化的局部,从而放慢构建速度并缩小资源耗费。在增量构建中,当代码或配置发生变化时,零碎会智能地辨认出须要从新构建的局部,而不是从新构建整个镜像。这种形式能够节省时间和计算资源,进步构建效率。增量构建技术对于继续集成和继续部署流程十分重要,可能帮忙开发团队更快地获取更新后的镜像,减速应用程序的部署。 二、 构建的原理增量构建的工作原理是通过比拟以后代码版本和之前构建时的状态,辨认出发生变化的局部,而后只从新构建这些受影响的局部,而不是整个镜像。这样能够利用之前构建时生成的缓存信息,防止反复构建未发生变化的局部,从而进步构建效率。•具体来说,增量构建工作原理包含以下几个步骤:1.比对变更:零碎会检测以后代码版本与之前构建时的状态之间的差别,确定哪些局部产生了变动。2.标记受影响局部:辨认出须要从新构建的镜像层或组件,并标记这些受影响的局部。3.从新构建:仅对标记为受影响的局部进行从新构建,利用之前构建时生成的缓存信息来减速构建过程。4.更新镜像:将从新构建的局部与之前的镜像组合,生成更新后的镜像。通过这种形式,增量构建防止了不必要的反复构建,节俭了工夫和资源,并放慢了镜像更新的速度。这种办法在继续集成和继续部署过程中施展着重要作用,帮忙开发团队更高效地进行软件开发和部署。 三、 增量构建的劣势增量构建和全量构建是两种不同的构建形式,它们在构建过程中的效率和资源利用方面有所不同。增量构建:•工作原理:只从新构建发生变化的局部,利用缓存防止反复构建未发生变化的局部。•劣势:构建速度更快:只需解决变更局部,节俭了从新构建整个镜像的工夫。资源耗费更少:防止了不必要的计算资源节约。实用于继续集成环境:可能疾速获取更新后的镜像,减速部署过程。全量构建:•工作原理:每次都从新构建整个镜像。•劣势:确保镜像完全一致:每次都从头开始构建,防止了可能存在的缓存一致性问题。更实用于特定场景:某些状况下须要确保每次构建都是全新的,全量构建更适宜这种需要。 四、 利用场景举例1.CyberData(以下简称CD)理论开发中,常见的几种增量构建状况归类如下:•hotfix补丁更新次要用于开发同学针对某个CD版本修复一些bug后,须要疾速更新一个补丁,走失常全量出包的形式,打包工夫绝对较长,还有就是全量包的体积较大,个别好几个G,传输也绝对较费时,这个时候能够思考走增量打包的形式,晋升开发部署效率;•调试工具长期装置CD部署装置过程中,因网络环境等问题,须要在镜像中提供一些工具软件(如:curl之类)帮助部署人员疾速定位问题,能够基于CD镜像增量的形式疾速生成带调式工具的镜像,待问题解决后思考再用之前的失常镜像拉起服务;•定制驱动包替换CD部署在POC现场后,为了疾速适配现场的数据源组件,有时候须要替换原来服务镜像里的底层驱动包,这种状况也能够思考增量构建的形式疾速生成替换过驱动的镜像,用于POC时的疾速适配验证;1.CD增量构建简略示例•新建并进入构建目录,同时拷贝须要替换的jar文件(或者是驱动包文件:mysql-plugin.jar)到此目录下 拷贝要替换jar包到当前目录示例(可选)mkdir build_imagecd build_image# 1. 拷贝要替换jar包到当前目录示例(可选)cp xxx/xxx/app.jar ./# 2. 拷贝要替换的mysql驱动包到当前目录示例(可选)cp xxx/xxx/mysql-plugin.jar ./•查看镜像找到要批改的镜像名,以core为例 docker images•批改Dockerfile:以旧镜像为母包,COPY要替换的文件进来 FROM 172.18.1.56:5220/cyberdata/cyberdata-core:3.11.1-202308081835-release 1. 替换core服务jar文件示例(可选)COPY app.jar /opt/app/app.jar 2. 替换mysql的jdbc驱动包示例(可选)COPY mysql-plugin.jar /opt/app/jdbc_driver_plugins/mysql-plugin.jar 3. 装置长期工具软件curl,以centos8根底为示例(可选)RUN yum install -y curl•构建镜像 docker build -t 172.18.1.56:5220/cyberdata/cyberdata-core:new_tag ./•查看并应用新的镜像 docker images | grep new_tag五、结语增量构建更适宜频繁变更的场景,可能进步构建效率和放慢部署速度。全量构建保障了镜像的一致性,实用于须要每次都从头开始构建的场景。在CD理论利用中,咱们能够灵便的依据我的项目需要和理论的环境抉择适合的构建形式。增量构建实用于疾速迭代和继续集成的场景,而全量构建实用于须要确保镜像齐全一致性的场景。

February 22, 2024 · 1 min · jiezi

关于前端:在vue中用100vh出现滚动条的解决方法

全局款式用height:100vh是因为写页面的时候发现height:100%生效,页面底部呈现了空白局部,尽管用100vh解决了页面却呈现了滚动条,因而得用上面的办法: //assets/style/common.scsshtml,body,#app{ margin: 0; padding: 0; height: 100%;}把这个文件引入到main.js里就能够了

February 22, 2024 · 1 min · jiezi

关于前端:如何在React-Native中添加自定义字体

字体是优良用户体验的基石。应用定制字体能够为你的应用程序提供独特的身份,帮忙你的我的项目在竞争强烈的市场中怀才不遇。 在这篇指南中,咱们将摸索应用 Google Fonts 在 React Native 利用中增加自定义字体的办法。要跟上进度,你应该相熟 React Native 或 Expo SDK 的基础知识,包含 JSX、组件(类和函数式)和款式。 向 React Native CLI 我的项目增加自定义字体对于咱们的我的项目,咱们将钻研如何通过构建应用Google字体的根底应用程序,将自定义字体增加到React Native CLI我的项目中。Google字体是一个收费的开源字体库,可在设计网页和挪动应用程序时应用。 要启动React Native CLI我的项目,请在终端中运行以下命令: npx react-native@latest init CustomFontCLICustomFontCLI 是咱们的我的项目文件夹的名称。一旦我的项目胜利装置,你将会看到上面的图片: 在你喜爱的IDE中关上你的我的项目以开始。在这个教程中,咱们将应用VS Code。 一旦我的项目曾经启动,咱们将持续获取咱们想要应用的字体。咱们将探讨如何导入它们并在咱们的我的项目中应用它们。 下载并将Google字体集成到咱们的我的项目中在这个我的项目中,咱们将应用两种字体:QuickSand 和 Raleway,演示自定义字体的集成,你能够在Google字体上找到它们。 在 Google Fonts 中找到你想要的字体,抉择你想要的款式(例如,Light 300, Regular 400 等),并应用“下载全副”按钮下载整个字体文件夹: 该文件夹将以ZIP文件的模式下载,其中蕴含一个字体文件夹。在该文件夹内,有一个动态文件夹,所有的TTF文件都在其中。复制并保留这些TTF文件。 在下一部分,咱们将会解说如何将这些字体的TTF文件集成到咱们的React Native CLI我的项目中。 将Google字体集成到我的项目中在你的我的项目根目录中创立一个名为 assets 的文件夹,并在其中创立一个名为 fonts 的子文件夹。而后,将你之前从动态文件夹中复制的所有TTF文件粘贴到你的我的项目的 fonts 文件夹中: 接下来,在根目录中创立一个 react-native.config.js 文件,并将上面的代码粘贴到其中: 将字体链接到要在我的项目文件中应用咱们曾经胜利地将字体文件集成到咱们的我的项目中。当初咱们须要链接它们,这样咱们就能在我的项目内的任何文件中应用它们。要做到这一点,运行以下命令: npx react-native-asset一旦资源胜利链接,你应该会在终端看到以下音讯: 而后,在你的 App.js 文件中,粘贴以下代码: ...

February 22, 2024 · 3 min · jiezi

关于前端:在浏览器里重复刷新一个网页访问量计数器没有递增的原因分析

当您在浏览器中关上一个具备访问量统计性能的网页时,可能会期待通过刷新浏览器来看到计数器的即时增长。然而,如果计数器的数值并未如预期那样减少,这可能波及到多个层面的起因和机制。了解这些起因不仅能帮忙您辨认为什么特定的行为没有导致预期的计数器变动,还能让您更深刻地理解网站经营和保护背地的技术细节。 网页访问量统计是一个简单的过程,它波及到客户端(如浏览器)和服务器之间的交互。这个过程不仅受到技术因素的影响,还受到网站管理员设定的策略和规定的制约。以下是一些可能导致您察看到的景象的起因,以及这些因素如何作用于整个零碎。 缓存机制缓存是缩小服务器负载、减速页面加载的罕用技术。当您首次拜访一个网页时,浏览器可能会将页面数据存储在本地。如果您短时间内屡次刷新页面,浏览器可能间接从缓存中加载页面,而不是向服务器发动新的申请。这意味着,只管您看到了页面的内容,但这些刷新操作并没有导致服务器记录新的访问量。 统计策略网站管理员可能为了确保访问量统计的准确性和有效性,设定了特定的统计规定。例如,为了防止单个用户通过频繁刷新页面人为减少访问量,统计零碎可能仅记录来自同一 IP 地址在肯定工夫窗口内的首次拜访。这样的策略能够无效避免数据被刷量行为烦扰,保障统计后果的真实性。 防刷措施为了避免歹意刷访问量的行为,许多网站会施行一系列的安全措施。这可能包含检测和疏忽异样的拜访模式,如短时间内大量来自同一用户的页面申请。这类平安机制的存在,是为了保护网站的失常经营和数据的可靠性,防止因虚伪流量而导致资源节约或数据分析的不精确。 浏览器扩大和设置某些浏览器扩大或特定的浏览器设置可能影响页面的加载形式,进而影响访问量的统计。例如,如果浏览器装置了广告拦截器或 JavaScript 禁用插件,可能会阻止统计脚本的失常执行。在这种状况下,即便页面内容被加载,拜访行为也可能没有被统计零碎记录。 数据处理提早在某些状况下,即便所有的技术和策略条件都被满足,您依然可能不会立刻看到访问量的变动。这是因为,服务器可能会批量解决拜访记录,或者统计数据的更新存在提早。这种设计是为了优化资源应用和进步数据处理的效率,但它也意味着访问量的减少可能不会即时反映在计数器上。 解决方案和倡议如果您心愿确保您的拜访被正确统计,能够尝试以下办法:革除浏览器的缓存,应用不同的浏 览器或设施拜访,敞开可能烦扰统计的浏览器扩大,或者期待一段时间后再查看计数器是否更新。此外,如果您对特定网站的访问量统计有具体疑难,最间接的形式是分割该网站的技术支持或管理员,以获取对于统计策略和技术细节的精确信息。 通过以上剖析,咱们能够看到,网页访问量统计背地波及的技术和策略因素是多样且简单的。这些机制的设计旨在确保数据的准确性和网站的安全性,尽管它们可能导致用户在特定状况下察看到计数器数值不变。了解这些背景信息有助于咱们更正当地解释和评估本人的察看后果,同时也揭示咱们在应用数字平台时要无意识地思考到这些潜在的技术和策略限度。

February 21, 2024 · 1 min · jiezi

关于前端:小技巧在-Flutter-中提供触觉反馈让用户感受到您的应用程序

数字世界和事实世界之间总是存在着差距。无论技术如许先进,咱们总是思念事实的感觉。触觉反馈是弥合这两个畛域之间差距的一种形式。 为用户提供物理反馈,如音频或振动,发明更直观和易拜访的交互,并改善用户体验。 好吧,flutter 总是有一些简化的解决方案来实现任何指标。这次没有什么不同; Flutter 有 haptic_feedback 包,它能够模仿触觉模式并使其在各个平台上保持一致。 应用上面的命令安装包。 flutter pub add haptic_feedback当初咱们须要查看设施是否启用了触动,记住,不是所有的设施都反对触觉反馈/触动,倡议你最好有一个备用计划。 final canVibrate = await Haptics.canVibrate();如果这个设施反对振动,你须要做的就是调用 await Haptics.vibrate(HapticsType.success); 这个包提供不同类型的触觉基于动作,使其与设施上的其余应用程序统一。 await Haptics.vibrate(HapticsType.success);await Haptics.vibrate(HapticsType.warning);await Haptics.vibrate(HapticsType.error);await Haptics.vibrate(HapticsType.light);await Haptics.vibrate(HapticsType.medium);await Haptics.vibrate(HapticsType.heavy);await Haptics.vibrate(HapticsType.rigid);await Haptics.vibrate(HapticsType.soft);await Haptics.vibrate(HapticsType.selection);当将haptic_feedback插件集成到你的 Flutter 我的项目中时,因为在插件的清单中申明了权限,所以必要的 VIBRATE 权限会主动导入到最终合并的 AndroidManifest.xml 中。

February 21, 2024 · 1 min · jiezi

关于前端:OpenTiny-Vue-组件库适配微前端可能遇到的4个问题

本文由体验技术团队 TinyVue 我的项目成员岑灌铭同学创作。 前言微前端是一种多个团队通过独立公布性能的形式来独特构建现代化 web 利用的技术手段及办法策略,每个利用能够抉择不同的技术栈,独立开发、独立部署。 TinyVue组件库的跨技术栈能力与微前端非常符合,往期咱们也有文章,领导如何在wujie微前端中应用TinyVue组件库,文章链接:https://mp.weixin.qq.com/s/ZqDXemh0GfnQpWACdzXdig 目前许多对微前端有需要的用户曾经在应用wujie和TinyVue开发了,在应用了一段时间后,单干企业用户和个人用户反馈了组件库一些问题。通过一番交换、沟通与定位,最终发现是用户接入了微前端框架后,在特定场景下导致的一系列问题,在非微前端利用中,组件库运行良好。 复现问题后,通过一系列排查与剖析,最终总结出了四个问题: absolute 定位的弹出元素错位,且页面滚动不会从新定位fixed 定位的弹出元素错位弹出元素地位产生翻转表格中的 select 点击后,下拉选项呈现后马上隐没对于以上问题,TinyVue组件库做了相应的适配以及给用户提供了解决方案,最终使得 TinyVue 组件良好运行在wujie微前端中。 首先来简略介绍一下wujie微前端实现原理,wujie微前端是采纳iframe+webcomponet的实现形式。通过iframes实现js沙箱能力。子利用的实例instance在iframe内运行,dom在主利用容器下的webcomponent内,通过代理 iframe的document到webcomponent,能够实现两者的互联。 想要理解更多能够查看,无界微前端介绍:https://wujie-micro.github.io/doc/guide/ 接下来开展说一下,收集总结的四个问题~ 问题总结问题一:absolute 定位的弹出元素错位,且页面滚动不会从新定位。 “弹出元素错位”谬误起因剖析: 关上控制台,审查元素查看款式,看到element.sytle的第一直觉是transfrom的偏移量计算不正确,顺着这个线索排查计算错误的起因。 排查前先简略介绍一下TinyVue组件库这个偏移量的计算规定: 1.找到弹出元素的 offsetParent(父定位元素),如果没有则返回body。 2.应用 getBoundingClientRect 计算 offsetParent 以及援用元素(图中的输入框,简称为reference)间隔视口的地位信息。 3.以弹出元素放左边为例,transform的左偏移量的计算规定为reference.left - offsetParent.left + reference.width 因为弹出元素的position设置为absolute,所以弹出元素的定位是依据其offsetParent计算地位的,没有offsetParent则是依据视口来计算地位。 上述例子中,弹出元素的offsetParent为 null,因而默认返回了body作为其offsetParent,绝大部分状况下,body和视口左侧和上侧是对齐的,因而用body计算的偏移量,在视口上也实用。 在微前端中,子利用的body可能绝对于视口有偏移。弹出元素的偏移量理论是依据body计算的,但他是非定位元素,最终导致的元素错位。 解决方案: 既然计算规定是依据body计算的,那么将子利用将body设置为position: relative将其变为定位元素即可。 滚动不会从新定位起因剖析: 首先还是简略介绍组件库这部分逻辑: 1.通过parentNode向上查找援用元素(输入框)的可滚动的先人元素(如果没有配置冒泡则返回第一个可滚动先人元素,否则返回所有可滚动先人元素) 2.为步骤1获取到的元素加上滚动办法的监听。 3.先人元素滚动时从新计算弹出元素的地位,使弹出元素追随援用元素。 然而在wujie微前端中,子利用的document再往上查找就是null了。而滚动条在主利用当中。因而主利用的滚动无奈被监听到。 解决方案: 将子利用将body设置为position: relative同样也解决了上述问题。设置后,只有当子利用内滚动条滚动后才须要从新计算。 问题二: fixed 定位的弹出元素错位。在修复的问题一的状况下,仍旧有局部状况会呈现弹出元素错位的 bug。并且下图中能够看到,弹出元素从左边翻转到了右边。 起因剖析: 表单元素在modal中,modal是fixed定位,因而表单输入框也是fixed定位。因为援用元素是fixed定位,所以弹出元素与之绝对应也应该应用fixed定位。 组件库逻辑对于fixed定位的弹出元素偏移量的计算,在问题一提到的步骤下还减少了局部非凡解决。上面代码是计算偏移量逻辑其中较为要害的一段代码: /** * @description 计算弹出元素的偏移量 * @param el 援用元素 * @param parent 弹出元素的先人定位元素 * @param fixed 弹出元素是否相对定位 * @returns 用于计算偏移量的相干信息 */const getOffsetRectRelativeToCustomParent = (  el: HTMLElement,  parent: HTMLElement,  fixed: boolean) => {    let {     top,    left,    width,    height   } = getBoundingClientRect(el)  let parentRect = getBoundingClientRect(parent)  if (fixed) {    let {       scrollTop,      scrollLeft     } = getScrollParent(parent)    parentRect.top += scrollTop    parentRect.bottom += scrollTop    parentRect.left += scrollLeft    parentRect.right += scrollLeft  }  let rect = {    top: top - parentRect.top,    left: left - parentRect.left,    bottom: top - parentRect.top + height,    right: left - parentRect.left + width,    width,    height  }  return rect}已上述代码为例,上述逻辑Modal弹窗状况下,parent和scrollParent都是body。 21-30行代码的目标是,为了解决在body在滚动后,parentRect.top为正数,须要加上scrollTop才是绝对视口的偏移量。 然而下面的计算逻辑有个大前提,那就是body的左侧和上侧和视口统一,下面这段不太谨严的逻辑通过漫长的迭代,直到在微前端中'暴雷'。 解决方案: 当position设置为fixed后,弹出元素在绝大多数状况都是绝对视口定位了,然而也有非凡状况,以下是 mdn 文档的截图: 为了兼容上述的非凡状况,新增了getAdjustOffset办法,此办法计算绝对于视口的修改偏移量,设置 top 和 left 为0,应用getBoundingClientRect计算出来的后果不为0的话,多进去的偏移量就是因为上述的 css 款式影响了, ...

February 21, 2024 · 1 min · jiezi

关于前端:有关JAVA中文乱码问题的解析及解决办法

大家好我是咕噜美乐蒂,很快乐又和大家见面了!上面我就和大家一起来理解一下因为Java中文乱码问题比较复杂,须要从字符编码、文件编码、输入输出流等多个方面进行剖析和解决。在本文中,我将具体介绍Java中文乱码问题的起因、解析形式和解决办法,并提供一些实用的示例代码和倡议,帮忙读者更好地了解并解决Java中文乱码问题。第一局部:Java中文乱码问题的起因Java中文乱码问题通常是因为字符编码不匹配或文件编码谬误所致。具体起因包含:1.字符编码不匹配:Java中应用Unicode编码(UTF-16),而在和内部零碎交互时,可能会波及到其余编码方式(如UTF-8、GBK等),如果编码不匹配就容易导致中文乱码问题。2.文件编码谬误:在文件读取和写入过程中,如果未正确指定文件编码或者文件编码与理论编码不匹配,也会导致中文乱码问题。3.输入输出流谬误:在应用输入输出流读写数据时,如果未正确指定字符编码或者应用了不正确的字符编码转换形式,也容易引发中文乱码问题。第二局部:Java中文乱码问题的解析形式针对Java中文乱码问题,咱们能够通过以下几种形式进行解析:1.剖析乱码景象:通过观察乱码景象的特色,如“??”或者一些乱码字符,来确定乱码问题的具体表现。2.查看源数据编码:查看源数据的编码方式,确认数据的理论编码格局,以便后续正确处理。3.调试输入信息:在程序中增加调试输入信息,输入解决前后的数据内容和编码信息,以便进一步剖析和定位问题。第三局部:Java中文乱码问题的解决办法为了解决Java中文乱码问题,咱们能够采取以下几种解决办法:1.指定字符编码:在读取和写入数据时,明确指定字符编码,如应用InputStreamReader和OutputStreamWriter时指定字符编码。2.应用正确的文件编码:在读取和写入文件时,要确保文件编码和理论编码相匹配,能够通过指定文件编码的形式来解决乱码问题。3.字符编码转换:对于不同编码之间的数据转换,能够应用Java提供的String类的构造函数或者getBytes办法进行编码转换。4.应用适合的工具类:联合开源工具类如Apache Commons IO等,能够更不便地解决文件编码和字符编码转换的问题。5.规范化输入输出流:在解决输入输出流时,要标准应用BufferedReader、BufferedWriter等高效的输入输出流,并且明确指定字符编码。第四局部:示例代码及实用倡议上面给出一些示例代码和实用倡议,帮忙读者更好地了解并解决Java中文乱码问题。示例代码:java// 读取文本文件并指定字符编码try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "UTF-8"))) { String line;while ((line = reader.readLine()) != null) { System.out.println(line);}} catch (IOException e) { e.printStackTrace();} // 写入文本文件并指定字符编码try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8"))) { writer.write("写入中文数据");} catch (IOException e) { e.printStackTrace();} // 字符编码转换示例String str = "中文数据";byte[] utf8Bytes = str.getBytes("UTF-8");String utf8Str = new String(utf8Bytes, "UTF-8");System.out.println(utf8Str);实用倡议:1.在读取和写入文件时,始终明确指定字符编码,防止应用默认编码方式。2.对于不同编码之间的数据转换,要留神应用String类的构造函数或者getBytes办法进行转换,防止产生乱码。3.应用适合的工具类如Apache Commons IO等,能够简化文件编码和字符编码转换的处理过程。4.调试时,能够输入解决前后的数据内容和编码信息,以便更好地定位和解决乱码问题。通过以上的解析和解决办法,置信读者可能更好地了解和解决Java中文乱码问题,晋升对字符编码和文件编码解决的能力,确保程序在解决中文数据时可能正确、高效地运行。好啦,明天美乐蒂就和大家分享到这里啦,小伙伴们有更好的方法能够在评论区打进去哦~~以便大家更不便地操作呢。

February 21, 2024 · 1 min · jiezi

关于前端:海外支付系统介绍

作者:Mr.Liu 一、零碎概述 目前印尼领取零碎次要为业务零碎提供提现、充值、验卡等领取相干服务。同时,还提供了账户、资金、对账相干服务。具体如下图所示: 二、零碎架构 1、架构图 2、零碎介绍目前零碎外部服务整体分为4类:受理服务、外围服务、根底服务、对账服务。 1)受理服务受理服务负责把业务零碎和底层领取关联起来,让业务零碎专一于业务,不用关怀底层领取。同时,将各类业务场景进行拆解,变成充值、提现、转账、退款等根底领取类型。 2)外围服务外围服务负责将领取根底服务进行整合,并形象为各类领取指令。针对不同场景,依据规定对领取指令进行编排和调度。 3)根底服务根底服务则依据职责,专一解决本人畛域相干工作。 路由:负责对三方领取渠道治理,并依据规定,实现对渠道的筛选路由。 渠道:次要负责与三方领取渠道的通信。 权利:提供对业务零碎优惠券相干验证核销服务。 记账:对各类资金业务的记账服务。4)对账服务对账服务是资金平安的最初一道防护。目前,次要是实现2类对账: 业务对账:基于平台外部各个系统间数据一致性对账 内部对账:负责从各个渠道获取三方账单,并与外部交易记录实现D+1对账 三、交易流程 以资金提现场景为例,目前交易流程如下: 1、受理服务接管到上游领取申请后,将交易转换为提现订单 2、当外围服务收到受理服务的提现订单后,依据领取场景和领取规定,将以后场景波及的账户、渠道、清理等服务编排为领取指令。 3、实现指令编排后,外围服务发动指令调度:对于提现场景,零碎将优先调用账户服务发动资金锁定操作;随后,调用渠道服务进行路由,向三方发动领取申请,并把领取后果推送给清理服务。 4、若产生指令执行失败,外围服务将依据规定进行指令回滚,以保障订单后果最终统一。 四、总结 海外版领取零碎,须要反对对多个国家不同领取场景的个性扩大。因而,对差别的兼容扩大的反对也成为零碎须要思考的问题之一。目前,系统对差别的解决次要依据理论需要,通过对各类个性服务进行编排,在不同国家进行差异化配置,来解决差别兼容和扩大问题。

February 21, 2024 · 1 min · jiezi

关于前端:D8054四通道轨轨运算放大器外围应用简便价格低廉应用于滤波器-DVDCDAtoD驱动等产品上

D8054是一款四通道轨-轨运算放大器,外围利用简便,价格低廉。封装模式为SOP14,TSSOP14, SOP16, TSSOP16。 次要特点: ● 轨-轨输入,输入失调2mV (典型值)● 高速250MHz,-3dB带宽 (G+1),转换速率130V/uS● 工作电压范畴 2.5V-5.5V● 低功耗2.3mA (典型值)运放供电电流 利用: ● 滤波器● DVD/CD● A-to-D驱动

February 21, 2024 · 1 min · jiezi

关于前端:yarn-error-certificate-has-expired淘宝镜像证书过期

yarn 在安装包的时候,不停显示: info There appears to be trouble with your network connection. Retrying...关上yarn-error.log排查 Trace: Error: certificate has expired at ....... at ....... at ....... at .......论断:淘宝镜像证书过期 解决方案: yarn config set registry "https://registry.npmmirror.com"

February 21, 2024 · 1 min · jiezi

关于前端:性能测试性能测试工具LoadRunner参数化关联全md文档笔记已分享文档代码

本系列文章md笔记(已分享)次要探讨性能测试相干常识。入门阶段:意识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),罕用性能测试指标-(吞吐量、并发数、响应工夫、点击数...),性能测试工具抉择。性能脚本:1. LoadRunner介绍,2. 脚本录制、运行、参数化,3. 关联、检查点、事务、集合点。性能场景:1. 场景分类、场景设计、场景运行策略,2. 资源监控、SLA、IP Wizard利用。性能剖析:1. 摘要报告、事务图表、图表合并,2. 穿插后果、拐点剖析、Web我的项目资源剖析。全套笔记和代码自取移步gitee仓库: gitee仓库获取残缺文档和代码感兴趣的小伙伴能够自取哦,欢送大家点赞转发~共 5 章,25 子模块 <center>性能测试工具-LoadRunner</center>学习指标1. 了解基于VuGen的脚本录制2. 把握参数化的应用办法3. 把握关联的应用办法4. 把握检查点的应用办法5. 把握事务的应用办法6. 把握集合点的利用<center>VuGen-参数化</center>指标了解参数化的应用场景把握参数化的应用形式一、什么是参数化依据需要动静的获取数据的过程 二、为什么要参数化?缩小反复代码数据代码进行拆散,不便保护需要1 阐明:因为虚拟机运行速度起因,咱们应用 lr_output_message() 函数,来学习如何应用参数化要求:输入 我要去北京;我要去上海;我要去广州;我要去深圳;三、参数化操作3.1 关上参数化菜单 选中要参数化的文本 -> 鼠标右键 -> Replace with a Parameter或者菜单 Insert -> New Parameter...3.2 Replace with a Parameter 关上的窗口 1. Parameter name:参数化援用名称(参数化时应用)2. Parameter type:File 【举荐】3. Properties:属性-点击此按钮,可间接设置参数化援用名称对应的值;【点击】提醒: 1). 点击OK;参数化援用名称具体的值,须要再次设置;3.3 Properties 设置面板 1. Parameter type: 参数类型 File 【重点】2. File:参数保留的文件类型及地位,个别为txt;【举荐】3. Add Row:增加行,在以后表格编辑数据;【可选】4. Edit with Notepad:在记事本内编辑数据;【举荐】5. Select next row:运行或迭代时对行的抉择形式 6. Update value on:运行或迭代时对值的选取形式提醒: 1). 其中5.Select next row 与 6.Update value on为组合关系,不同组合成果不同,咱们独自来学习需要1 解决方案创立指定门路及txt文本格式 如:C:\lr11\scripts\city.txt应用 Edit with Notepad 编辑数据:北京、上海、广州、深圳编写脚本迭代次数 4问题 ...

February 21, 2024 · 2 min · jiezi

关于前端:useEffect-依赖是数组-而数组引用地址-又不停变化解决方案-用useRef

如题:useEffect 依赖是数组 而数组援用地址 又不停变动解决方案 最粗犷的解决办法,而我也在我的项目中用过几次,很无奈 办法1: useEffect(() => { ...}, [JSON.stringify(object)]);办法2:能够基于 useRef 和深比拟办法来解,useRef 的个性是跨渲染周期缓存数据。此处用来缓存上一次渲染的数据,并调用深比拟办法判断,如果两个对象相等则返回上一次的数据,地址天然也没有变动。 import { isEqual } from 'lodash';const useCampare = (value: any, compare: any) => { const ref = useRef<any>(null); if (!compare(value, ref.current)) { // deep compare ref.current = value; } return ref.current;}const compareObject = useCampare(object, isEqual);useEffect(() => { ...}, [compareObject]);

February 21, 2024 · 1 min · jiezi

关于前端:Vitepress-的实现原理

什么是 Vitepress?Vitepress 是由 Vite 和 Vue 驱动的动态站点生成器,通过获取 Markdown 编写的内容,并能够生成对应的动态 HTML 页面。咱们常常应用 Vitepress 构建博客等动态网站,本文次要解析一下 Vitepress 的实现原理,上面就开始吧! 原理初始化我的项目依据官网文档举荐,咱们执行以下命令初始化我的项目: npx vitepress init执行完命令便会进入一个设置界面,通过设置我的项目名等参数,最终生成一个 vitepress 我的项目。 咱们都晓得,npx vitepress init 实际上等同于: npm i -g vitepressvitepress init很好了解,先全局装置 vitepress,再执行 vitepress init命令: 先通过 @clack/prompts 开启命令行 UI 界面,用户进行初始化配置: // src/node/init/init.tsimport { group } from '@clack/prompts'const options: ScaffoldOptions = await group( { root: () => text({ message: 'Where should VitePress initialize the config?', initialValue: './', validate(value) { // TODO make sure directory is inside } }), title: () => text({ message: 'Site title:', placeholder: 'My Awesome Project' }), // ...以下省略)再依据配置项从 template 文件夹中拉取模板文件,实现我的项目的初始化。 ...

February 21, 2024 · 4 min · jiezi

关于前端:关于-防抖和节流-结合useRef-useCallBack

先看看 防抖和节流场景 防抖的利用场景: 1. 搜寻框实时搜寻:在搜寻框中输出关键词时,防抖能够提早申请发送,只在用户输出实现或者进展一段时间后才触发理论的搜寻申请,防止频繁的网络申请。 2. 窗口大小调整:当用户调整浏览器窗口大小时,窗口大小变动事件会间断触发,应用防抖能够确保只在用户实现调整后再执行相应的响应逻辑,以防止过多的布局计算。 节流的利用场景: 1. 页面滚动加载:在有限滚动的页面中,滚动事件会频繁触发,应用节流能够控制数据加载的频率,避免短时间内屡次加载数据,进步页面加载性能。 2. 按钮防反复点击:当用户点击按钮执行某个操作时,应用节流能够确保按钮在肯定工夫内只能触发一次,避免用户反复点击造成误操作。 总结: 防抖实用于须要期待用户操作实现或者进展后才进行相应解决的状况,如搜寻框实时搜寻和窗口大小调整。节流则实用于须要限度事件触发频率的状况,如页面滚动加载和按钮点击。 useRef使用场景: 1、操作曾经挂载到DOM的节点:例如,当须要设置元素的焦点时,能够应用useRef来获取以后DOM节点,而后对其进行操作。例如,官网例子中,inputEl.current.focus();会使得输入框取得焦点。 2、保留任何可变值:useRef能够保留任何可变值,相似于在类组件中应用实例字段。例如,在React function component中实现含糊搜寻时,能够应用useRef来保留用户输出的数据,以便在输出过程中动静更新下拉列表中的数据项。 3、函数节流:在须要频繁触发事件的场景中,应用useRef配合函数节流能够防止频繁的申请,进步用户体验并缩小对后盾服务的压力。例如,在用户输出过程中,能够应用useRef来保留输出值,而后应用函数节流来限度在短时间内更新下拉列表的次数。 useCallBack把内联回调函数及依赖项数组作为参数传入 useCallback,它将返回该回调函数的 memoized 版本,该回调函数仅在某个依赖项扭转时才会更新。当你把回调函数传递给通过优化的并应用援用相等性去防止非必要渲染(例如 shouldComponentUpdate)的子组件时,它将十分有用 所以: const updateRef = useRef(null);updateRef.current = () => { const list = options.concat([inputValue]); setOptions(list);};const updateOptions = useCallback( _.throttle(() => { updateRef.current(); }, 1000), []);如果封装成hook // 通用的自定义hooksexport default function useThrottle(func, wait, options) { const funcRef = useRef(null); funcRef.current = func; return useCallback( _.throttle( () => { funcRef.current(); }, wait, options ), [] );}// 调用办法const updateOptions = useThrottle(() => { const list = options.concat([inputValue]); setOptions(list); }, 1000);参考文章:useRef做防抖 ...

February 21, 2024 · 1 min · jiezi

关于前端:扫码即可快速协作草料二维码底部协作面板功能详解

性能介绍 在二维码上增加 底部合作面板 性能后 ,扫码后不仅能够浏览设施信息、产品材料等根本信息,还能够在二维码底部输出内容评论并@别人疾速合作,反对增加图文、语言、手写签名等操作。底部合作面板是提供给组织外部成员疾速合作的性能,输出后,会以评论的形式展现在二维码底部。 场景利用 实用于固定资产治理、文件码展现等场景。以故障疾速上报、文件阅后签字为例: 1、故障疾速上报 超级管理员利用草料的批量生码性能,为每台资产设施都生产一个二维码,并打印标签贴在对应资产上。资产保管人产生设施呈现故障时,可扫描资产标签,在故障解决记录区输出故障状况,并@培修人员来解决。培修人员修复后,可回复这条评论。 2、文件阅后签字 超级管理员将平安交底文件生成二维码,须要相干人员查看后签字注销。相干人员扫码查看文件后,能够在签字区,手写签名确认本人曾经看过文件信息。超级管理员能够在评论区查看手写签名状况。 性能设置 1、如何增加底部合作面板 在二维码编辑器中,右侧性能为二维码增加底部合作面板。 2、性能设置 能够自定义合作动静区题目 自定义勾选可输出的类型,默认文字、语言和@别人合作 能够指定成员能力参加合作,默认所有成员能够输出内容、回复。 非组织内成员扫码只能查看合作内容。 可勾选容许订阅底部合作动静。订阅后,一旦有新的动静,订阅人就能通过公众号接管实时揭示。

February 21, 2024 · 1 min · jiezi

关于前端:Vue-项目的架构

Vue 我的项目的架构通常包含以下几个次要局部: Vue框架:Vue.js 是一个风行的 JavaScript 框架,用于构建用户界面。在我的项目中应用 Vue 能够帮忙组织代码、治理状态和实现交互逻辑。 组件化架构:Vue 的外围概念之一是组件化。通过将页面拆分为多个组件,能够进步代码复用性、维护性和开发效率。每个组件负责特定的性能或界面元素,相互之间能够嵌套、通信和传递数据。 路由治理:Vue Router 是 Vue.js 官网的路由管理器,用于实现单页面利用(SPA)中的路由导航。通过配置路由,能够实现页面之间的切换和动静加载组件。 全局状态治理:Vuex 是 Vue.js 官网的状态治理库,用于集中管理利用的状态。在大型项目中,会用到 Vuex 来治理全局状态、数据共享和通信。 网络申请:对于与后端的数据交互,通常会应用 Axios 或 Vue 的官网插件 Vue Resource 进行网络申请。这些工具能够帮忙发送 HTTP 申请并解决返回的数据。 构建工具:罕用的构建工具有 Webpack、Vue CLI 等,用于打包、编译和优化前端代码。通过配置构建工具,能够实现自动化构建、资源压缩和代码宰割等性能。 UI 库:在我的项目中可能会应用一些 UI 组件库,如 Element UI、Ant Design Vue 等,来减速开发并放弃界面风格对立。 代码标准:应用 ESLint 等代码标准工具能够帮忙放弃代码格调统一,缩小谬误和进步代码品质。 以上是一个根本的 Vue 我的项目架构,依据具体我的项目需要和规模,还能够依据理论状况进行定制和扩大。

February 21, 2024 · 1 min · jiezi

关于前端:开源生态丨Sample提交指南一起成为我们的Contributors吧内附彩蛋

在《版本更新 | Orillusion 0.7版本公布啦!》的文章中,咱们提到过后续会出一期独立的内容,来通知大家如何提交本人的示例Sample代码。当初教程终于来啦! 1 一些益处示例Sample代码绝对于引擎外围代码开发绝对简略,不会太多的波及到引擎内核代码的改变,更多的是依据咱们的教程文档,间接调用引擎的API来实现一些利用性能的开发。 因为咱们的Sample代码也属于「Orillusion 引擎」外围库的一部分,所以一旦提交的PR被承受,就能够成为Orillusion官网开源库中的Contributors角色! 所有引擎外围库中的Sample最终都会被咱们同步公布到Orillusion的官方网站中,不便大家后续的援用、分享、和流传,官网链接为:https://www.orillusion.com/example 咱们会不定期地筛选一些优良的Sample开发者,给予一些奖品处分,作为对Orillusion开源社区奉献的激励、反对、和认可!同时,也会帮忙每一个示例Sample的开发者,进行社区的宣传推广流动,包含国内的社区以及国外的社区。 在优良的开源社区和我的项目中留下痕迹,是咱们每一位开发者的荣誉。而且也能够十分理论的晋升大家的CV背景,是最间接的技术实力的体现。那前面显而易见的加分点,大家就都懂啦! 2提交之前在开始介绍如何成为Orillusion开源我的项目的Contributors之前,咱们先总结下目前我的项目中Sample的一些根本状况。 咱们的Sample呈现在两个Orillusion相干的开源我的项目中: 官网网站我的项目: https://github.com/Orillusion/orillusion-web引擎外围我的项目: https://github.com/Orillusion/orillusion两个我的项目都能够进行示例Sample的提交工作。然而咱们强烈建议,间接在咱们的引擎外围我的项目中进行Sample的提交。因为,这样每一位被承受的Sample的开发者,都会呈现在引擎外围我的项目的Contributors名单中! 这两个我的项目中Sample的开发方法也有些不同。 简略概括,官网我的项目的Sample写法更加偏向于让开发者能够通过把整个我的项目代码进行复制,而后粘贴到本人的开发环境中就能够间接运行,即单文件我的项目;而引擎外围我的项目中的Sample有些写法是思考到引擎外围开发者的代码复用性,做了一些简略的封装工作,须要大家理解下封装的逻辑,再进行Sample的编写。 不过,大家在给引擎外围我的项目提交Sample的时候,能够应用官方网站我的项目中的Sample写法,也能够应用引擎外围我的项目中的Sample写法。后续将Sample从引擎外围我的项目迁徙到官网网站我的项目的工作,会由咱们Orillusion团队的成员帮大家实现的。咱们会始终在云端hosting每一位Contributor用心编写的Sample,不便大家随时进行线上拜访! 如果大家用官方网站中Sample写法进行PR提交,能够略微缩小一些咱们的迁徙工作,那当然是非常感谢啦! 3 具体方法上面咱们就开始具体解说如何实现Orillusion我的项目中Sample的提交。次要分为以下几个步骤: 具体方法上面咱们就开始具体解说如何实现Orillusion我的项目中Sample的提交。次要分为以下几个步骤 在你的 GitHub 上 fork Orillusion我的项目克隆你 fork 的 repo 到本地: git clone git@github.com:xxxx/orillusion.git进入我的项目目录并切换到 dev 分支: cd orillusion && git checkout dev初始化 public 子模块: git submodule update --init装置开发依赖: pnpm i运行开发服务器: pnpm run dev留神:须要 Node.js 16版本以上,以及 PNPM 7版本以上。编写新Sample在/samples/xxx/Sample_xxx.ts的对应类别文件夹中创立新入口文件,如果没有适宜的类别文件夹,能够新建一个.ts 文件,文件名应该要具备肯定自解释性,要体现该Sample的性能或特点编写你的场景代码,举荐以/samples/base/Sample_Transform.ts作为模板根本代码编写规定:->从@orillusion/core导入外围模块,例如 Engine3D, Scene3D, Object3D... ->从@orillusion/xxx导入插件/扩大,例如 @orillusion/stats, @orillusion/particle, @orillusion/physics, ... -> 倡议应用Top-level await来初始化 Engine3D 和其余异步API ...

February 20, 2024 · 1 min · jiezi

关于前端:版本更新丨Orillusion-07版本发布啦

社区的盆友们久等啦!小鸥终于在2023年11月跟大家一起迎来了「Orillusion 引擎」的0.7版本~ 从〔2023-05-08〕至〔2023-11-01〕日,历经将近6个月的工夫,「Orillusion 引擎」实现了由0.6~0.7的大版本跃迁。大版本的跃迁看似工夫周期长,实则是咱们把RoadMap中放在前面几个版本中的内容,也致力都塞了进来!心愿大家能有更好的体验! 在大家的见证下,「Orillusion引擎」开源库在2023年5月荣登「Github Trending」榜的第六名,开源不到一周Star数量增长至1200+,并在前端Web类我的项目中居于榜首。到明天为止,Orillusion在Github开源库的Star数量已增长至3k+!这也是对咱们最大的激励!在这次的版本更新中,引擎累计提交116个PR 播种102个issue 样例数量扩大到59个 修复多个已知&未知的问题(小鸥还得感激社区大佬们一直地为咱们提出倡议和意见) 1 性能新增图形化界面(GUI)图形化界面对软件、零碎的重要性显而易见,好的图形化界面能够大大晋升用户体验,「Orillusion 引擎」提供了一套基于WebGPU的GUI零碎,使得用能够按需在三维场景中退出GUI元素。官网教程中给出了详尽的解释与案例。 基于WebGPU的GUI https://www.orillusion.com/guide/gui/Readme.html 全局光照(GI)Orillusion提供了基于WebGPU的全局光照能力,与WebGL的光照零碎渲染相比,大大晋升了性能以及可扩展性,使得在web端渲染高质量光照变得可行。全局光照https://www.orillusion.com/guide/advanced/gi.html 粒子系统(Particle)粒子系统作为刻画实在场景的伎俩,引擎在以后大版本提供了WebGPU版本的粒子渲染能力。粒子系统https://www.orillusion.com/guide/particle/Readme.html 级联暗影(CSM Shadow)提供的CSM shadow能够更好的反对大场景中暗影渲染的成果。简略来说,级联暗影将视锥内暗影按四个等级进行划分,在着色解决暗影的阶段时依据以后所处暗影等级抉择适合的暗影贴图,从而取得更加准确、笼罩全视锥体范畴的暗影成果。级联暗影https://www.orillusion.com/guide/graphics/shadow.html 自定义Compute Shader引擎反对开发人员依据业务需要进行自定义Compute Shader的编写,上面给大家展现两款由小鸥带来的样例~ 自定义compute shader 后处理特效(Post Effects)在这个大版本中,小伙伴们对后处理特效也进行了大量更新,具体的案例和教程传送门可在下方查看: 辉光特效(Bloom Post)辉光特效https://www.orillusion.com/guide/advanced/post_bloom.html 屏幕体积光(GodRay Post)https://www.bilibili.com/video/BV1kF411C7SB/?aid=275121538&ci...God Ray https://www.orillusion.com/guide/advanced/post_godRay.html 前期雾效(Global Fog)前期雾效https://www.orillusion.com/guide/advanced/post_globalfog.html 景深成果(DepthOfField Post)景深成果https://www.orillusion.com/guide/advanced/post_depthOfField.htm 2 引擎工具针对开发小伙伴们的「用户体验」,以后版本对编译的js减少了非压缩的版本。今后开发搭档们能够在开发时不便得查看源码、做log和断点、以及做一些长期源码改变。而且,当初用户也能够按本人我的项目的需要援用 max 版本进行打包了哦。 3 性能示例应宽广社区敌人们的呐喊,终于在0.7版本上线时凋谢了引擎性能的样例页面,大家能够按需通过样例查阅、学习,传送门在此为大家奉上:https://www.orillusion.com/example 同样的,激情的邀请大家将本人的想要展现的「Orillusion 引擎」样例提供进去不便大家互相学习,一起助力打造更好的社区!后续咱们会出一期独立的内容,来通知大家如何提交咱们本人的示例代码,而且一旦PR被承受,是间接能够成为咱们引擎外围库的contributor的哦! (^^)人(^^) 让咱们一起期待吧~ 4 写在最初WebGPU在往年5月份刚刚公布,Orillusion的开源也从往年5月份到当初的11月份,刚刚经验了半年的工夫,尽管这半年遇到了很多艰难和挑战,然而咱们会十分动摇的把这条路走上来。咱们聚焦定位服务于「Web前端的技术人员」,因为咱们也是属于这个群体中的开发者。这个群体基数宏大,也饱受过比方只会“切图”写网页的诟病。然而咱们保持认为浏览器肯定在将来会成为3D内容承载的另一种介质,咱们前端的技术人员都是将来3D内容创作的潜在生产力。 Web3D在已经的WebGL时代曾经倒退出了十分丰盛的内容业态。咱们置信,在WebGPU的推动下,Web3D的生态肯定会越来越好! 小鸥也心愿社区大佬们一直地为咱们提出倡议和意见,社区的声音是咱们后退的方向和能源,咱们会持续致力,打造一款属于咱们国人本人的Web3D引擎! Orillusion致力于打造全世界第一款齐全开源基于WebGPU规范的一种轻量级渲染引擎,指标是在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现。易上手,易分享,易迭代,易合作、成本低,跨平台是咱们的外围劣势,咱们将为3D场景暴发时代提供引擎根底工具。 将来咱们将会继续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢送大家为Orillusion开源社区做出本人的奉献。咱们始终深信,开源社区的技术留痕是每一位技术人员最高尚的谋求!因而,咱们尊重,咱们认可,咱们更期待,退出Orillusion,让咱们共同进步! ——Link uncharted, 链接将来世界

February 20, 2024 · 1 min · jiezi

关于前端:Orillusion感谢谷歌GDG-DevFest开发者大会2023北京的推荐

谷歌开发者社区(Google Developer Groups)是谷歌开发者部门发动的寰球我的项目,是面向对Google和开源技术、凋谢技术感兴趣的开发者社区,由对谷歌开发技术感兴趣的开发者们主导。其内容涵盖Web、Android、TensorFlow、Flutter和其它Google API等。至2020年11月,寰球已有1000多个GDG社区,散布在130多个国家。中国大陆有27个GDG社区,中国台湾有7个GDG社区。寰球GDG社区每年举办的流动在7000多场,共笼罩到50万开发者。2009年8月1日,中国第一个GDG社区北京GDG成立。▍谷歌开发者社区官方网站:https://developers.google.com/community/gdg 2023 DevFest Beijing 于11月19日在北京胜利举办!本次流动包含Web、Android和机器学习三大主题会场,全天共16场技术分享与1场 Codelab。 以下内容是Orillusion官网依据公开的材料信息,对钱俊颖对于《WebGPU:吹响前端新征程的号角》的主题演讲做的要点提炼和一些内容的补充,心愿能够帮忙到更多关注Web及WebGPU生态的小伙伴。 ▍GDG北京(2023)讲义分享:https://github.com/gdgbeijing/devfest2023 什么是WebGPU?WebGPU是W3C提出的一套在Web生态中的图形API规范,能够让Web利用可能更加高效的调用GPU的渲染和计算能力。 WebGL和WebGPU的比照WebGL有惨重的历史包袱,不好写不好学,平台和厂商的反对逐步缩小,无奈调用古代GPU硬件的能力,不能适应适应古代GPU的倒退和要求。 而相比拟WebGL,全新的WebGPU规范,能够更好的开释GPU算力,进步并行计算和渲染效率,对前端开发者更容易学习,还有很好的跨平台个性。 因而,WebGPU必然会逐步取代WebGL,成为支流的图形渲染API。 WebGPU能给前端带来什么?面相将来的场景随着Vision Pro等眼镜设施的倒退,将来肯定是一个充斥3D内容的时代。这些硬件厂商,最不足的就是内容生态,而以Web技术为撑持的创作者和开发者,必然能够在VR/AR/MR时代,成为发明全新内容的生产力。(PICO官宣反对用Web技术开发利用) WebXR的性能WebXR标准目前更多的还是基于WebGL的一些规范实现的,将来必定会全面迁徙到WebGPU,为更多的场景提供高质量的内容输入。通过WebXR规范,咱们能够轻松的实现浏览器和硬件XR设施的人机交互性能,同时配合WebGPU的高性能计算和渲染能力,能够帮忙开发者疾速的实现高性能利用的开发,为眼镜等智能平台提供良好的技术支持。 端侧智能当下LLM/AIGC曾经成为了支流趋势,被各个领域认同,并曾经开始产生商业价值。而WebGPU提供的计算着色器,能够人造的适配LLM的并行计算要求,能够齐全在端侧的浏览器中运行各种大模型利用,无需在通过调用云端的GPU算力,节俭了云端的资源,打消了传输数据带来的提早体验。真正的端侧智能利用,肯定会在WebGPU加持下,通过浏览器的疾速散发能力,失去微小的倒退。 WebGPU相干的框架目前曾经有一些基于WebGPU规范的开发框架,能够供开发者疾速的调用WebGPU的能力,包含基于Rust语言的wgpu,基于C++的Dawn以及基于JS/TS语言的Orillusion。 Orillusion是国内团队做的一个纯Web框架下的WebGPU 3D引擎库,也是国内比拟早的WebGPU中文社区。前端开发者能够用过最相熟的npm install,间接装置这个库,进行WebGPU利用的开发。 WebGPU的利用场景有了WebGPU的高性能计算和渲染性能,很多已经的场景,依靠于Web平台的易流传个性,必定会失去更好的倒退。而将来的XR交互,端侧智能等面向未来的场景,也更加充斥了时机和设想空间。 WebGPU对前端开发者的意义“能用JS实现的,终将用JS实现”这句话对于前端开发者是十分鼓舞人心和令人激动的。 已经的Web生态发展缓慢,前端大部分的工作就是“切图”。然而,当下的Web生态曾经齐全成为了一个充满生机,充斥想象力的生态,甚至能够引领其余生态的规范制订和倒退轨迹。而WebGPU的呈现,又给Web生态的并计算能力和渲染能力带来了更加弱小的助力。无论在将来的3D场景还是AIGC的场景,都给了咱们微小的设想空间。这种变动会督促咱们去整顿咱们的思路,去调整咱们的方向,从而走上新的前端的倒退历程。残缺的视频信息欢送点击下方链接查看https://www.bilibili.com/video/BV1uN411M7Km/?aid=493784965&ci... 写在最初此次GDG北京开发者大会(2023)中,Keep的工程师钱俊颖,分享了《WebGPU:吹响前端新征程的号角》的主题演讲,其中提到了「Orillusion引擎」在WebGPU生态中做出的一些奉献,非常感谢社区的认可和谷歌GDG DevFest(北京)官网举办的这次开发者大会流动。能让更多气味相投的技术人员,有机会聚在一起,互相学习,独特为相干的技术生态做出奉献。 Web生态领有最多的技术开发者,以及最凋谢和丰盛的社区生态。在WebGPU的加持下,无论是针对于现有场景的降级优化,还是将来WebXR/LLM/AIGC等场景的内容创作,都领有微小的后劲。 Orillusion致力于打造全世界第一款齐全开源基于WebGPU规范的一种轻量级渲染引擎,指标是在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现。易上手,易分享,易迭代,易合作、成本低,跨平台是咱们的外围劣势,咱们将为3D场景暴发时代提供引擎根底工具。 将来咱们将会继续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢送大家为Orillusion开源社区做出本人的奉献。咱们始终深信,开源社区的技术留痕是每一位技术人员最高尚的谋求!因而,咱们尊重,咱们认可,咱们更期待,退出Orillusion,让咱们共同进步! ——Link uncharted, 链接将来世界

February 20, 2024 · 1 min · jiezi

关于前端:版本发布|Orillusion-068-版本发布啦

小欧明天带着Orillusion Engine的0.6.8版本来啦~在本次更新中,引擎减少性能屏幕空间体积光(God Ray),并修复了若干已知问题。 God Rayv0.6.8中新增了God Ray性能。God Ray是三维渲染中罕用性能,能够模仿更实在的事实光照成果,例如阳光从天空投下,通过云层、穿过树冠、透过屋顶等后的丁达尔成果(Tindal Effect)。大家能够通过下方的demo更好的感触God Ray带来的成果:https://www.bilibili.com/video/BV1kF411C7SB/?aid=275121538&ci... 此外,本版本中修复局部已知问题,包含 entity, UniformNode, 以及hoverController相干问题,具体日志如下: · entity: change number children · material: fix uniformNode not update · UniformNode: Fix error of Uniform data(number) Orillusion致力于打造全世界第一款齐全开源基于WebGPU规范的一种轻量级渲染引擎,指标是在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现。易上手,易分享,易迭代,易合作、成本低,跨平台是咱们的外围劣势,咱们将为3D场景暴发时代提供引擎根底工具。 将来咱们将会继续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢送大家为Orillusion开源社区做出本人的奉献。咱们始终深信,开源社区的技术留痕是每一位技术人员最高尚的谋求!因而,咱们尊重,咱们认可,咱们更期待,退出Orillusion,让咱们共同进步! ——Link uncharted, 链接将来世界

February 20, 2024 · 1 min · jiezi

关于前端:资讯|WebGPU必将成为Web生态的新未来

1 WebGPU简介通过六年的开发和测试,往年5月2日谷歌正式发表Chrome将从版本113开始提供 WebGPU反对,从而在ChromeOS、Windows和macOS设施上实现真切的渲染视觉效果和简单的计算。 WebGPU为Web生态的倒退创始了的新可能性。它能够为沉迷式虚拟世界、交互式数据可视化、高级性能的图像和视频编辑、物理仿真、机器学习等提供反对,所有这些都能够在浏览器中运行。同时,WebGPU还反对围绕Web3、隐衷和平安的新用例。 Web平台在一直地冲破线上利用场景可能性的边界,借助WebGPU以及WebXR、WebTransport和WebCodecs等相干规范,将来的Web平台在性能上效率更高,成果上更真切以及更加凋谢。尽管WebGPU还是一项新兴技术,但它预示了Web在图形渲染和计算上的广大前景。 WebGPU提供了一个底层级API,须要理解图形编程和GPU架构能力无效应用。然而在库、工具和资源的帮忙下,大部分Web开发人员都能够应用 WebGPU。为了更好的不便Web前端的开发者进行更加高效的开发工作,一些国内外团队在尝试将WebGPU封装到更高级别的框架中,用来构建交互式3D场景、运行机器学习模型等。 Orillusion就是在这条路线上最早的尝试者之一。 2 WebGPU倒退历史WebGPU诞生的目标是代替上一代WebGL规范,从而满足更古代、更高效的Web图形API的需要。WebGL在Web平台上曾经实现了很多令人惊叹的体验,例如Google地球、交互式音乐视频、3D房地产演练等,但它也有一些局限性和挑战,如: ·不足对较新GPU性能的反对,例如计算着色器、光线追踪、VRS可变着色率等。·因为须要验证每个API的调用并在CPU和GPU内存之间复制数据,因而CPU开销和内存使用率较高。·因为不同平台对于OpenGL的反对和优化存在差别,WebGL在不同浏览器和平台之间的性能和体现也不统一。 在2016年,Google向WebGL工作组进行了演示,摸索构建全新的Web图形API以最终取代WebGL的根本思维和准则。该演示提出了一个更加底层的API设计,它将公开古代图形API所反对的GPU底层性能,例如command buffers, pipelines, descriptors等。这意味着开发人员能够更好地治理和同步GPU资源。 2017年,苹果的WebKit团队提议基于W3C社区成立专项Group小组的来负责设计这套全新的Web图形API。与此同时,他们基于Apple Metal的概念,发表了名为“WebGPU”的概念技术证实和提案。WebGPU名称起初被社区个人采纳作为将来规范的工作名称。苹果最后的提案后续也被改名为“WebMetal”,以防止和WebGPU这一名称的混同。 W3C社区Group小组开始致力于定义WebGPU标准和 API设计,并失去了Mozilla、Apple、Intel和Microsoft等大公司的反对。该小组基于来自大量的Web前端开发者和行业专家的反馈,最终目标是创立这样一个全新的Web图形API: ·安全性:API应避免常见谬误,例如内存透露、数据争用或可能导致解体或平安问题的有效操作。·一致性:API应在不同的浏览器战争台上体现成果统一,不须要各家浏览器厂商在不同的平台上进行特定扩大。·表现性:API应容许开发人员在不就义性能或灵活性的状况下充分利用古代GPU的全副潜在能力。 谷歌的Chromium团队于2017年初展现了第一个名为NXT的概念原型。NXT实现了一个全新的Web图形API,它能够基于Chromium内核与OpenGL一起运行,也能够独立于Chromnium内核,基于OpenGL和Metal单独运行。NXT借鉴了Vulkan、Direct3D 12和Metal这些Native古代图形API的设计思路。 2020年,WebGPU 进入了第一个公共工作草案阶段,这意味着该标准足够稳固,能够承受公众审查和反馈。该标准定义了JavaScript API和WebGPU着色语言 (WGSL),后者基于SPIR-V,旨在与HLSL和GLSL等现有着色语言兼容。 2021年,WebGPU进入候选举荐阶段,这意味着该标准已筹备好进行施行测试和互操作性评估。该标准还定义了一些可选性能,浏览器能够依据其平台反对来启用这些性能,例如 depth-clamping深度截取, anisotropic-filtering各向异性过滤, texture-compression-bc纹理压缩等。借助图形底层技术的改革窗口期,Orilusion团队踊跃拥抱尝试新技术,在这个工夫点正式决定开发一款齐全基于WebGPU规范的国产Web3D引擎。 2023年,WebGPU达到了倡议举荐阶段,这意味着该标准已筹备好取得W3C Director的最终签字通过。该标准还定义了一些能够由浏览器在标签flag或前缀prefix下启用的试验性功能,例如光线跟踪ray-tracing或可变着色率variable-rate-shading等。 2023年4月6日,Google发表,从Chromium/Chrome113开始(5月3号公布),Chromium/Chrome浏览器将在反对Vulkan的ChromeOS设施、macOS和反对 Direct3D 12 的Windows设施上提供WebGPU反对。当下Windows平台的Edge浏览器和Andorid平台设施也曾经开始反对了WebGPU。后续,WebGPU也将陆续反对像 Linux和IOS等设施平台。 3 WebGPU将如何影响游戏开发WebGPU是将来开发游戏规则的改革者,它实现了 WebGL 无奈实现的新可能性和场景。WebGPU的一些长处和利用案例如下: 1.高性能图形计算:WebGPU容许开发人员利用古代GPU的弱小性能在Web上创立令人惊叹的视觉效果和简单模仿仿真。WebGPU能够解决大量数据的并行计算,例如粒子系统、流体动力学、物理引擎、机器学习、LLM等。WebGPU还能够反对高级的渲染技术,例如光线追踪、暗影、反射、环境光遮蔽等。 2.跨平台兼容性:WebGPU能够在不同浏览器战争台上协同工作同时保障运行成果的一致性,不须要各家浏览器厂商进行针对本人平台的特定扩大开发或解决办法来满足某些非凡需要。WebGPU还能够在反对Vulkan、Metal或Direct3D 12 的挪动设施上运行,这些设施涵盖了大多数古代智能手机和平板电脑。这意味着开发人员能够创立在任何设施上晦涩运行且成果优良的 Web 应用程序。 3.面向未来:WebGPU旨在扩大并适应将来的GPU个性和技术特点。WebGPU能够将新性能特点设定为公开可选的扩大或试验性能,浏览器能够依据其平台反对来自定义启用这些新性能。这意味着开发人员能够提前应用和体验最新、最弱小的GPU性能,而无需期待新规范正式公布或冒兼容性问题的危险。 4.Web3:WebGPU能够使Web应用程序与去中心化网络和协定进行交互,例如区块链、IPFS等。WebGPU还能够反对Web上平安且可验证的计算,例如zero-knowledge proofs(零常识证实)、(homomorphic encryption)同态加密等。这意味着开发人员能够创立更通明、更值得信赖、更有弹性的Web应用程序。 5.Metaverse:WebGPU能够使应用程序在 Web 上创立身临其境的交互式虚拟世界和体验。WebGPU能够反对大规模场景和环境、简单的动画和交互、真切的光照和材质、空间音频和触觉等。这意味着开发人员能够创立更具吸引力、社交性和乐趣的Web应用程序。 6.AIGC: 因为WebGPU提供了compute shader计算着色器,能够让大规模并行计算不在依靠于基于像素的“模仿”计算机制,真正能够使得机器学习在Web环境中得以全面利用。Tensorflow,PyTorch都曾经开始把计算后端对接WebGPU规范。最近火爆的WebLLM等我的项目,基于WebGPU规范也曾经胜利的将大模型 LLM 在浏览器环境中齐全独立运行在了端侧设施上,通过模型压缩,一个链接就能够在本地应用LLM的推理能力。将来合作式AIGC内容创作工作流“训练在云,推理在端”的模式必然会更加遍及和支流,无效升高云端算力压力,提高效率。 Orillusion团队三年前开始关注WebGPU倒退,通过两年多研发,屡次框架重构,性能调优后,Orillusoin引擎在明天以开源的模式正式跟大家见面!咱们致力于在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现,为3D场景暴发时代提供底层引擎根底工具。 https://www.bilibili.com/video/BV1Lu411P7tp/?aid=533048923&ci... Github地址:https://github.com/Orillusion/orillusion文档教程:https://www.orillusion.com/guide/ https://www.bilibili.com/video/BV1FV4y1o7ib/?aid=867712777&ci... Orillusion致力于打造全世界第一款齐全开源基于WebGPU规范的一种轻量级渲染引擎,指标是在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现。易上手,易分享,易迭代,易合作、成本低,跨平台是咱们的外围劣势,咱们将为3D场景暴发时代提供引擎根底工具。 将来咱们将会继续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢送大家为Orillusion开源社区做出本人的奉献。咱们始终深信,开源社区的技术留痕是每一位技术人员最高尚的谋求!因而,咱们尊重,咱们认可,咱们更期待,退出Orillusion,让咱们共同进步! ——Link uncharted, 链接将来世界 ...

February 20, 2024 · 1 min · jiezi

关于前端:SAP-UI5-SmartFilterBar-中-ControlConfiguration-Aggregation-的作用介绍

在 SAP UI5 和 openUI5 中,sap.ui.comp.smartfilterbar.SmartFilterBar 组件是一种弱小的 UI 元素,用于在应用程序中创立动静的、可配置的筛选条。这些筛选条可能让用户通过各种过滤条件来准确地管制显示在屏幕上的数据。在这一背景下,sap.ui.comp.smartfilterbar.ControlConfiguration 的聚合(Aggregation)起着至关重要的作用。 sap.ui.comp.smartfilterbar.ControlConfiguration 聚合容许开发者针对 SmartFilterBar 中的每一个筛选条件进行具体的配置。通过这种配置,开发者能够定义特定的筛选条件应如何显示,包含它们的标签、默认值、是否可见、是否为必填项等等。这一机制提供了极高的灵活性,使得 SmartFilterBar 不仅可能适应各种业务需要,还能为最终用户提供直观、易用的筛选体验。 例如,假如在一个销售数据报告利用中,咱们须要让用户依据销售区域、工夫范畴和产品类别来筛选数据。在这种状况下,咱们能够为每一个筛选条件创立一个 ControlConfiguration 实例。对于销售区域筛选器,咱们可能会配置它为一个下拉列表,列出所有可选的区域;对于工夫范畴,咱们可能会抉择一个日期范畴选择器;而对于产品类别,则能够是一个带有多选框的列表,容许用户抉择一个或多个类别。 每个 ControlConfiguration 的实例都能够被配置以蕴含以下属性(但不限于这些): key:标识筛选条件的惟一键值。label:在筛选条上显示的文本标签。visible:管制筛选条件是否在界面上可见。mandatory:指定筛选条件是否为必填项。type:定义筛选条件的数据类型,例如 Edm.String、Edm.Int32 等。defaultValue:为筛选条件指定一个默认值。通过精心设计每个筛选条件的配置,开发者可能构建出合乎业务逻辑、易于用户操作的筛选界面,从而大大晋升应用程序的用户体验和数据检索的效率。 此外,ControlConfiguration 还反对高级性能,如条件的动态显示和暗藏、基于其余筛选条件值的响应式变动等。这使得 SmartFilterBar 不仅仅是一个动态的筛选工具,而是一个可能与应用程序的其余局部严密集成、实时响应用户操作的动静元素。 在实践中,配置 ControlConfiguration 要求对 SAP UI5 的数据模型、事件处理机制以及 UI 控件有深刻的理解。开发者须要依据具体的利用场景认真布局每个筛选条件的行为和外观,确保它们既能满足业务需要,又不会对用户造成困扰。 通过这种形式,sap.ui.comp.smartfilterbar.ControlConfiguration 聚合成为构建高度可定制、响应式且用户敌对的筛选界面的要害工具,展示了 SAP UI5 在企业级利用开发中的弱小能力和灵活性。

February 20, 2024 · 1 min · jiezi

关于前端:sapuiControlConfiguration-中的-customControl-property

在 SAP UI5 和 OpenUI5 中,sap.ui.comp.smartfilterbar.ControlConfiguration 是一个十分弱小的组件,它容许开发者在 Smart Filter Bar 控件中定制具体的过滤条件。customControl 属性是这个组件中十分要害的一个个性,它的作用是让开发者能够插入自定义的 UI 控件,以满足特定的业务需要,这种灵活性是 SAP UI5 利用开发中定制性和用户体验优化的关键因素。 customControl 属性容许开发者将任意的 SAP UI5 控件作为过滤条件插入到 Smart Filter Bar 中。这意味着,除了规范的输出控件和抉择列表,开发者还能够应用更简单的控件,如日期范畴选择器、自定义搜寻帮忙或者任何其余 UI5 控件,来满足特定的用户输出需要。这种办法极大地扩大了 SAP UI5 利用的功能性和交互性,使得利用能够更贴合理论的业务场景和用户需要。 例如,假如有一个销售报表利用,须要用户输出一个日期范畴来查看特定时间段内的销售数据。在这种状况下,开发者能够应用 customControl 属性来插入一个日期范畴选择器。通过这种形式,用户能够十分直观地抉择开始日期和完结日期,从而进步用户体验和利用的易用性。 为了实现这个性能,开发者首先须要创立一个日期范畴选择器的实例,而后将这个实例通过 customControl 属性绑定到相应的 ControlConfiguration 对象上。代码示例可能如下所示: var oDateRangeSelection = new sap.m.DateRangeSelection({ delimiter: "至", displayFormat: "yyyy-MM-dd", dateValue: new Date(), // 初始开始日期 secondDateValue: new Date() // 初始完结日期});var oControlConfig = new sap.ui.comp.smartfilterbar.ControlConfiguration({ key: "dateRange", label: "日期范畴", `customControl`: oDateRangeSelection});在这个例子中,oDateRangeSelection 是一个日期范畴选择器控件的实例,它被设置为 ControlConfiguration 的 customControl 属性。这样,当 Smart Filter Bar 渲染时,这个日期范畴选择器就会显示在过滤条中,用户能够应用它来抉择日期范畴。 ...

February 20, 2024 · 1 min · jiezi

关于前端:D3842三极管驱动专为脱线和DcDc开关电源应用设计的起动电流小

D3842/43/44是专为脱线和Dc-Dc开关电源利用设计的恒频电流型Pwd控制器外部蕴含温度弥补精细基准、供精细占空比调节用的可调振荡器、高增益混放大器、电流传感比拟器和适宜作功率MOST驱动用的大电流推挽输入颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等爱护电路。 次要特点: ● 起动电流小 (<0.5mA)● 主动前馈弥补● 具备徊滞个性的欠压锁定● 最大占空比箝制● 工作频率 可达500kHz● 封装模式: DIP8、 SOP8 利用: ● 开关电源

February 20, 2024 · 1 min · jiezi

关于前端:你踩过-react-生态的-signal-坑吗且看-helux-如何应对

前言helux 是一个集atom、signal、依赖追踪为一体,反对细粒度响应式更新的状态引擎,兼容所有类 react 库,包含 react18。 本文将重点介绍react生态里各方signal的具体实现,并探讨背地暗藏的坑导致的可用性问题,同时也会给出helux中signal实现的劣势,并教会你应用signal 写出0 hook的react 状态组件。 signal 热潮signal在2023 年掀起了一股热潮,其实诸多框架很早就开始为其布局,Vue、Solid.js、Preact、Svelte 都在不同时的引入了signal,某种程度来说 vue 甚至能够算是 signal 的鼻祖,Angular作者发文Signal是前端框架的将来后,在2023年末的Angular 17里引入了signal实现,可见大家对signal是如许的渴望。 咱们察看如下Angular的signal代码示例 import { signal, computed, effect } from '@angular/core';export class SignalExample { count = signal(1); // Get (Same in Template || Typescript) getCount = () => this.count(); // Setters reset = () => this.count.set(1); increment = () => this.count.update((c) => c + 1); // Computed doubled = computed(() => this.count() * 2); // Effects logCount = effect(() => console.log(this.doubled()));}发现放弃了signal里通用概念,即状态、批改、派生、副作用都存在,大家能很快上手,只是细节实现不一样,例如angular这里的批改基于set、update,获取通过get函数。 ...

February 20, 2024 · 4 min · jiezi

关于前端:一起来使用nodejs制作一个视频吧

theme: fancyTNTWeb - 全称腾讯新闻前端团队,组内小伙伴在Web前端、NodeJS开发、UI设计、挪动APP等大前端畛域都有所实际和积攒。 目前团队次要反对腾讯新闻各业务的前端开发,业务开发之余也积攒积淀了一些前端基础设施,赋能业务提效和产品翻新。 团队提倡开源共建,领有各种技术大牛,团队Github地址:https://github.com/tnfe 明天为大家介绍FFCreator,我的项目地址: FFCreator (前言)说点事件以后兵荒马乱,可是互联网畛域可算是始终盛世。明天咱们所说的是短视频畛域。 短视频已成为一种越来越风行的媒体流传模式。像微视和抖音这种 app,每天都会生产成千上万个精彩短视频。而这些视频也为产品带来了微小的流量。随之而来,如何让用户能够疾速生产一个短视频;或者产品平台如何利用已有的图片、视频、音乐素材批量合成大量视频就成为一个技术难点。 明天为大家带来的是一个基于node.js的轻量、灵便的短视频制作库。您只须要增加几张图片或视频片段再加一段背景音乐,就能够疾速生成一个很酷的的视频短片。 github地址:https://github.com/tnfe/FFCreator文档地址:https://tnfe.github.io/FFCreator/#/这篇文章将会率领你从头到尾制作一个短视频。 生成我的项目并装置依赖首先得建一个我的项目,而后执行npm init,一顿回车就好了。 mkdir ffcreator-example && cd ffcreator-examplenpm init接下来进行明天咱们这个包的安装操作 npm install ffcreatororyarn add ffcreator重中之重,ffcreator依赖于FFmpeg,因而必须装置FFmpeg。 FFCreatorLite依赖于FFmpeg>=0.9以上版本。请设置FFmpeg为全局变量, 否则须要应用setFFmpegPath增加FFmpeg本机门路。(windows用户的ffmpeg很可能不在您的%PATH中,因而您必须设置%FFMPEG_PATH)。 装置FFmpeg的教程,我只说下windows和mac的哈,对于其余的在下面github外面有更具体的阐明,之所以只说下windows和mac,因为对于前端开发人员来说,大多数都是mac,也有局部window。对于其余研发人员,如果想尝试的话,能够进到下面github查看其余环境的装置形式。 windows:共四分步:下载、解压、设置环境变量、应用。 参考文档 mac:共两局部: 装置homebrew(如已装置,可疏忽,间接进行下一步): /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"应用homebrew装置ffmpeg: brew install ffmpeg参考文档 至此,我的项目、环境、依赖都ready了,咱们能够进行下一步的操作了。 对于应用ffcreator是一个node的库,提供了多种构造函数能够进行应用: FFScene, // 屏幕,也称场景 // 新建一个显示屏const scene = new FFScene();// 设置背景色 scene.setBgColor('#30336b'); // 设置停留时长 scene.setDuration(8.5); // 设置过渡动画(类型, 工夫)scene.setTransition('Fat', 1.5); // 把屏幕增加到视频发明器实例下面creator.addChild(scene);FFNode, 上面所有类型的基类,能够间接看上面。FFText, 文本元素 const text = new FFText({text: '这是一个文字', x: 250, y: 80});// 文字色彩text.setColor('#ffffff'); // 背景色text.setBackgroundColor('#b33771'); // 呈现动画为fadeIn,动画的时长1秒,delay工夫为1秒,text.addEffect("fadeIn", 1, 1); // 设置文本程度居中text.alignCenter(); // 设置款式object text.setStyle({padding: [4, 12, 6, 12]}); // 把以后文本节点增加到屏幕下面scene.addChild(text);FFImage, 图片元素 ...

February 20, 2024 · 2 min · jiezi

关于前端:剑指immer更快更强的limu

前言欢送理解和关注limu,拜访文档并点击右键调出控制台后可实时体验 limu api 和 immer api做比照(全局已绑定limu和immer对象)。 接下来让咱们一起深刻理解limu的诞生历程吧 ^\_^ 不可变数据的现状不可变数据因为领有构造共享的个性,让一些重大依赖浅比拟的框架疾速取得性能收益(如react),同时也让一些须要应用严格不可变数据的场景防止了深克隆带来的冗余性能开销,而当下除了immutablejs 和 immer 这两款十分风行的工具库之外,有没有一款比它们的性能和易用性都更好的不可变数据工具库呢?在答复此问题之前,咱们先看下immutablejs和immer陷入的窘境。 immutablejs作为一个先驱者,最早的git提交记录能够追溯到2014年4月,随同着react的不可变状态编程理念在2015年之后开始越来越走红,现已达到30K+ star数量,它在js语言世界里领有为不可变数据指引方向般的重要位置,率领大家意识到了不可变数据在某些特定编程畛域的重要性。 不过它的问题也比较突出,次要归结为2点 1 api 简单,与原始js操作解决隔离的状态,有很重的学习老本和记忆负担2 内建了一套本人的数据结构,须要通过fromJs和toJs做一般json和不可变数据间接的互相转换,带来了额定的开销。// 额定的学习老本和记忆负担immutableA = Immutable.fromJS([0, 0, [1, 2]]);immutableB = immutableA.set 1, 1;immutableC = immutableB.update 1, (x) -> x + 1;immutableC = immutableB.updateIn [2, 1], (x) -> x + 1;而 2018诞生的 immer 则完满的解决了以上两点问题,它奇妙的应用Proxy代理了原始数据,让用户能够像原始js一样实现所有不可变数据的操作(不反对的环境主动降级为 defineProperty),这样一来用户没有了任何学习老本和记忆负担. const { produce } = limu;const baseState = { a: 1, b: [ 1, 2, 3 ], c: { c1: { n: 1 }, c2: { m: 2 }, }};// 像原始js一样丝滑的操作不可变数据const nextState = produce(baseState, (draft)=>{ draft.a = 2; draft.b['2'] = 100;});console.log(nextState === baseState); // falseconsole.log(nextState.a === baseState.a); // falseconsole.log(nextState.b === baseState.b); // falseconsole.log(nextState.c === baseState.c); // true但immer真的就是终极答案了么,在大数组和深层次对象场景immer的性能问题较为突出,见此问题形容,社区开始有不少作者重整旗鼓尝试冲破,留意到这外面较为突出的有structura和mutative,经我实测发现的确如它们所说的快过immer较多倍,但仍然未能解决既要速度快又要开发体验好的问题,这两个问题我将在上面一一具体意义分析。 ...

February 20, 2024 · 2 min · jiezi

关于前端:短视频时代如何搭建一个旅游社区

2023上半年,中国游览市场在持续增长。依据艾媒征询的数据:2023年上半年国内游览人数23.84亿人次,同比增长63.85%;国内游览支出2.3万亿元,同比增长96.58%。从去年3月的“去淄赶烧烤”的火爆,到今年年底在哈尔滨出圈的“北方小土豆”,无一不在证实游览行业的强劲复苏势头。上图来自艾媒征询随着旅游业的复苏,在线旅游业也有了新的变动。以近期的哈尔滨为例,通过短视频平台,流传推动了冰雪游览的热潮,再次证实了流量的重要性。显然,内容和社交平台的发酵为游览行业带来了新的增长和不同的内容模式。当代年轻人更违心将社交平台成为他们重要的生产参考工具,去哪里游览,去哪里吃美食,去哪里寓居,越来越多的年轻人会优先参考抖音,小红书等平台,游览不再是单纯依赖于游览公司或在线游览代理平台。此外,依据艾媒征询的调研数据,能够看出以后游览人群年轻人的占比更多,而年轻人会更加重视生产体验,而短视频平台的创作者们提供更多的参考和选择性,游览内容和模式也出现多样化的变动,去年以来,各种游览热潮接连呈现,如“进淄赶烤”“特种兵游览”“城市散步”等成为热议话题。上图来自艾媒征询上图来自艾媒征询因而接下来游览社区也将是一个新的时机,那么咱们如何搭建一个游览社区呢?以短说论坛产品为例,咱们构思下如何搭建起一个游览社区。首先是对社区版块的布局,咱们能够针对不同用户的关注度划分,比方探险小队,历史文化,生态环保,户外运动等等,也能够是按游览的模式划分,跟团游、自驾游、组团游;还能够推出更高的服务模式:私人定制、全程管家、游览盲盒等。不同的游览模式实用于不同的游览需要和偏好,游览社区能够更侧重于提供更多的创意分享,服务体验为主。咱们还能够联合市场的热点开始新的版块来互动,比方哈尔滨能够独自开始一个冰雪游览的分享,激励用户一起分享本人的旅行,加大网站的热度,也吸引更多的用户来退出。用户分享的形式上,咱们须要有多种形式,不能是繁多的图文,须要多样性,例如小红书类型这样,能够有图文具体描述的路线分享帖,也能够是纯分享本人游览经验的多图,以及记录旅行的视频帖,社区的帖子类型多样性,有助于创作者的创作不局限于某种模式,能够更好地分享本人的旅行,在社区实现一个用户之间互动交流平台。 此外,咱们还能够开设答疑版块,邀请资深游览达人或向导入驻,针对用户的游览难题进行答疑。比方出国游,不同国家的签证怎么办理,有哪些要求;比方短途旅行须要筹备哪些资料等,也能够是游览过程中想要征询的任何问题,咱们能够邀请一些专业人士入驻平台,为用户提供解答,也激励平台的用户为其余用户进行答疑。短说的问答零碎是反对悬赏问答的,用户能够领取积分或费用发问,其余的用户针对本人能够解答的帖子能够疾速响应回复,提问者的问题即失去了解答,回答者又可能获取处分,通过这种模式,用户关上社区的频率也会变高,一举多得~除了问答专区,咱们还能够有旅行路线开团,应用短说的流动模块,针对不同的版块开设一些游览路线图,比方古镇休闲团,周末户外团等等,在网站的后盾,开启一个新的游览流动团,在流动详情中阐明本次旅行团的路线,工夫等,以及本次团购报名费用以及报名须要填写的信息(手机号、身份证等)。开明后,能够在后盾导出相干的报名记录,能够设置带团导演为核销人员,在流动开始当天对参加的用户进行人员核查,流动核销等操作。 以上仅是对游览社区搭建的一些大略想法,具体的还能够联合短说产品的其余性能做更多的场景和搭建,比方短说的认证性能,积分体系,积分商城,问卷模块、盲盒抽奖等等,不同的性能能够做不同的场景搭建,当然也能够找短说的客户经理具体沟通~今日的分享就到这里啦~

February 20, 2024 · 1 min · jiezi

关于前端:Electron实战之菜单与托盘

菜单、托盘是桌面端利用必备的性能之一,咱们通常会在菜单上配置利用罕用的:偏好设置、显示暗藏、关上文件等性能,在托盘内设置:退出、重启、帮忙等辅助性性能,帮忙用户方便快捷地管制利用的一些零碎性能。系统托盘实际上也是一个菜单,通过点击鼠标触发。 一、利用菜单(Menu)Electron 里的菜单大体上分为三类:利用菜单、上下文菜单和 Dock 菜单(仅针对 OSX 零碎)。这里以 VSCode 为例,来别离介绍这几种菜单的含意。关上 VSCode 编辑器,能够通过下图,很清晰地发现 3 个菜单所处的地位。 1.1 利用内菜单原生利用菜单能够了解为利用窗口菜单,在 MacOS 上,选中利用后,利用内菜单呈现在桌面的左上方。在 Windows 和 Linux 上,Menu 将会被设置成窗口顶部菜单。在 Electron 中,通常会应用 Menu.setApplicationMenu(menu) 函数来设置利用内菜单。 import { Menu } from 'electron'function createMenu () { const template = [ { label: '菜单一', submenu: [ { label: '性能一' }, { label: '性能二' } ] }, { label: '菜单二', submenu: [ { label: '性能一' }, { label: '性能二' } ] } ]; const menu = Menu.buildFromTemplate(template); Menu.setApplicationMenu(menu);}通过以上代码设置实现一个利用菜单后,在 macOS 下的成果如下。 ...

February 20, 2024 · 2 min · jiezi

关于前端:关于-React19你需要了解的前因后果

大家好,我卡颂。 React以后的稳固版本是18.2,公布工夫是22年6月,在此之后就没有新的稳固版本公布。 直到往年2月15日,官网博客才走漏下一个稳固版本的打算。没错,他就是React19。 为什么时隔1年多才颁布下个稳固版本的打算? 为什么下个版本间接跳到了19? 18我都还没升呢,19就来了,是不是要学很多货色? 这篇文章会为你具体解答这些疑难。 收费支付卡颂原创React教程(原价359)、退出人类高质量前端群 从React16聊起近年来React最为人津津有味的版本应该是16.8,这个版本引入了Hooks,为React(乃至整个前端框架畛域)注入了新的生机。 再之后的v17没有新个性引入。既然没有新个性引入,为什么要公布一个大版本(从16到17)呢? 这是因为从同步更新降级到并发更新的React,两头存在breaking change。 这么大体量的框架,在降级时须要保障过程尽可能平顺。这除了是一种业余、负责的体现,更重要的,版本割裂会造成大量用户损失(参考当年ng1降级到anuglar2时)。 当降级到18后,React团队发现 —— 真正降级到18,并大量应用并发个性(比方useTransition)的开发者并不多。 更常见的场景是 —— 出名开源库集成并发个性,开发者再间接用这些库。 所以,React团队转变策略,将迭代重心从赋能开发者转变为赋能开源库。那么,什么样的库受众最多呢?显然是框架。 所以,React的重心逐步变为 —— 赋能下层框架,开发者通过应用下层框架间接应用React。 为什么我说React团队转变了策略,而不是React团队一开始的打算就是赋能下层框架呢? 如果一开始的打算就是赋能下层框架,React团队就不会花大量精力在版本的渐进降级上 —— 反正开发者最终应用的会是下层框架(而不是React),版本割裂下层框架会解决,基本不须要疏导开发者降级React。 策略扭转造成的影响策略转变造成的影响是深远且宽泛的,这也是为什么18.2后一年多都没有新的稳固版本呈现。 最根本的影响是 —— 个性的迭代流程变了。 React诞生的初衷是为了解决Meta外部简单的前端利用,所以React之前的个性迭代流程是: 新个性开发实现新个性在React外部产品试用,并最终达到稳固状态开源供宽广开发者应用但随着策略转变为赋能下层框架,势必须要与支流下层框架团队(次要是Next.js)密切合作。 如果依照原来的迭代流程,下层框架团队属于Meta之外的第三方团队,只能等新个性开源后能力应用,这种单干模式显然太低效了。 于是,React团队提出了一个新的个性公布渠道 —— canary,即:新个性开发实现后,能够先打一个canary版本的React供内部试用,等个性稳固后再思考将其退出稳固版本中。 可能有些存在于canary中的个性永远不会呈现在稳固版本的React中,但不障碍一些开源库锁死canary版本的React,进而应用这些个性。 那么,为什么时隔1年多才颁布下个稳固版本的打算?次要有4个起因。 起因1:新个性次要服务于Next,没必要呈现在稳固版本中策略扭转除了影响个性的迭代流程,还让React团队成员陷入一个两难的地步 —— 我该优先服务下层框架还是Meta? 咱们能够发现,在之前的迭代流程中,所有都围绕Meta本身需要开展。React团队成员作为Meta员工,这个迭代流程再天然不过。 然而,新的迭代流程须要亲密与Next团队单干,那么问题来了 —— 作为Meta员工,新个性应该优先思考Next的需要还是Meta的需要? 为了实现赋能下层框架的工作,显然应该更多思考Next的需要。咱们能看到一些React团队成员最终跳槽到Vercel,进入Next团队。 所以,在此期间产出的个性(比方server action、useFormStatus、useFormState)更多是服务于Next,而不是React。 如果基于这些个性公布新的稳固版本,那不必Next的开发者用不到这些个性,用Next的开发者依赖的是canary React,所以此时降级稳固版本是没意义的。 起因2:新个性必须满足各种场景,交付难度大Next是web框架,围绕他发明的新React个性只用思考web这一场景。 但React本身的定位是宿主环境无关的UI库,还有大量开发者在非web的环境应用React(比方React Native),所以这些个性要呈现在稳固版本的React中,必须保障他能适配所有环境。 举个例子,Server Actions这一个性,用于简化客户端与服务器数据发送的流程,以后次要利用于Next的App Router模式中。 比方上面代码中的MyForm组件,当表单提交后,serverAction函数的逻辑会在服务端执行,这样就能不便的进行IO操作(比方操作数据库): // 服务端代码async function serverAction(event) { 'use server' // 在这里解决服务端逻辑,比方数据库操作读写等}function MyForm() { return ( <form action={serverAction}> <input name="query" /> <button type="submit">Search</button> </form> );}App Router的场景次要是RSC(React Server Component),除了RSC外,SSR场景下是不是也有表单?不应用服务端相干性能,单纯应用React进行客户端渲染,是不是也有表单的场景? ...

February 20, 2024 · 1 min · jiezi

关于前端:Promise拆解计划由规范深入从原理浅出

大家好,欢送来到前端研习圈的今日分享。上期跟大家浅析了为什么要理解 Promises/A+ 标准 明天咱们就来拆解一下 Promises/A+,从标准动手,重塑对 Promise 的了解, 接下来间接进入正题~ 什么是 Promise首先,咱们看一下标准中如何定义 Promise 能够看到,标准中对 Promise 的形容是一个异步操作的最终后果。咱们能够通过 then 办法注册回调来接管它的最终的 value 或者失败的 reason。 这也是为什么在很多无关 Promise 的介绍中把它称为 状态机 的起因。由此可见,标准也并非处处都是艰涩难懂的黑话,定义还是十分简洁明了的。 凋谢的规范同时 A+ 标准还是很凋谢的一套规范,在前言中,有这样一段形容 标准并没有束缚 创立 一个 Promise 的形式,也没有限度将一个 Promise 的状态批改为 胜利 或者 失败 的形式,而是抉择聚焦于提供一个可互用的 then 办法。 如何了解这个 可互用 呢,其实也很简略,假如有两个基于 Promises/A+ 实现 A 和 B,针对 A 创立的 promise 的 then 解决逻辑,放在 B 上也同样实用,这也就意味着,这套标准会为 then 减少很多约束条件,以实现 可互用。 实际上也的确如此,A+ 中大部分的条例其实都是在规定 then 办法应该如何实现 约定俗成的术语在进入 A+ 的为 Promise 制订的需要列表之前,咱们先理解一下其中的 术语 ...

February 19, 2024 · 2 min · jiezi

关于前端:版本发布|Orillusion-067版本发布啦

大家久等了!小鸥又带着Orillusion引擎V0.6.7版本公布的音讯回来啦! 近两个月里小鸥从未懈怠,与团队一起专一于引擎性能的优化、能力的补充、与样例的积淀~ 大家常关注的性能局部在新版本中失去了优化,基于渲染50000个立方体的场景,渲染性能可较过来版本晋升一倍多! 优化过程: · 优化雷同Shader的变种,使得每帧仅在有变动时才会触发更新,缩小性能耗费。 · 优化Transform构造,缩小函数调用耗费。Demo在下方为大家奉上:https://www.bilibili.com/video/BV1Cr4y1d7QZ/?aid=744859935&ci...除了性能优化之外,新版本中还欠缺了高度雾、GodRay等能力,并补充了多个样例,次要补充能力如下: · 减少交融大气漫反射的雾 · 减少反对MeshCollider· 减少GodRay性能针对开发小伙伴们的用户体验,以后版本对编译的js减少了非压缩的版本。今后开发搭档们能够在开发时不便得查看源码、做log和断点、以及做一些长期源码改变。而且,当初用户也能够按本人我的项目的需要援用 max 版本进行打包。 最初,本版本也进行了一些问题修复,包含mac运行环境下大气散射(AtmosphericScattering)问题、以及多个(light enable等)已知问题。 Orillusion致力于打造全世界第一款齐全开源基于WebGPU规范的一种轻量级渲染引擎,指标是在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现。易上手,易分享,易迭代,易合作、成本低,跨平台是咱们的外围劣势,咱们将为3D场景暴发时代提供引擎根底工具。 将来咱们将会继续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢送大家为Orillusion开源社区做出本人的奉献。咱们始终深信,开源社区的技术留痕是每一位技术人员最高尚的谋求!因而,咱们尊重,咱们认可,咱们更期待,退出Orillusion,让咱们共同进步! ——Link uncharted, 链接将来世界

February 19, 2024 · 1 min · jiezi

关于前端:OpenHarmonyArkTS卡片运行机制

实现原理图1 ArkTS卡片实现原理 卡片应用方:显示卡片内容的宿主利用,管制卡片在宿主中展现的地位,以后仅零碎利用能够作为卡片应用方。卡片提供方:提供卡片显示内容的利用,管制卡片的显示内容、控件布局以及控件点击事件。卡片治理服务:用于管理系统中所增加卡片的常驻代理服务,提供formProvider接口能力,同时提供卡片对象的治理与应用以及卡片周期性刷新等能力。卡片渲染服务:用于治理卡片渲染实例,渲染实例与卡片应用方上的卡片组件一一绑定。卡片渲染服务运行卡片页面代码widgets.abc进行渲染,并将渲染后的数据发送至卡片应用方对应的卡片组件。图2 ArkTS卡片渲染服务运行原理 与JS卡片相比,ArkTS卡片反对在卡片中运行逻辑代码,为确保ArkTS卡片产生问题后不影响卡片应用方利用的应用,ArkTS卡片新增了卡片渲染服务用于运行卡片页面代码widgets.abc,卡片渲染服务由卡片治理服务治理。卡片应用方的每个卡片组件都对应了卡片渲染服务里的一个渲染实例,同一利用提供方的渲染实例运行在同一个虚拟机运行环境中,不同利用提供方的渲染实例运行在不同的虚拟机运行环境中,通过虚拟机运行环境隔离不同利用提供方卡片之间的资源与状态。开发过程中须要留神的是globalThis对象的应用,雷同利用提供方的卡片globalThis对象是同一个,不同利用提供方的卡片globalThis对象是不同的。 ArkTS卡片的劣势卡片作为利用的一个快捷入口,ArkTS卡片相较于JS卡片具备如下几点劣势: 对立开发范式,晋升开发体验和开发效率。OpenHarmony在2022年公布了申明式范式的UI开发框架,而卡片还连续了css/hml/json三段式类Web范式的开发方式,进步了开发者的学习老本,提供ArkTS卡片能力后,对立了卡片和页面的开发范式,页面的布局能够间接复用到卡片布局中,晋升开发体验和开发效率。 图3 卡片工程构造比照 加强了卡片的能力,使卡片更加万能。新增了动效的能力:ArkTS卡片凋谢了属性动画和显式动画的能力,使卡片的交互更加敌对。新增了自定义绘制的能力:ArkTS卡片凋谢了Canvas画布组件,卡片能够应用自定义绘制的能力构建更多样的显示和交互成果。容许卡片中运行逻辑代码:凋谢逻辑代码运行后很多业务逻辑能够在卡片外部自闭环,拓宽了卡片的业务实用场景。ArkTS卡片的束缚ArkTS卡片相较于JS卡片具备了更加丰盛的能力,但也减少了应用卡片进行歹意行为的危险。因为ArkTS卡片显示在应用方利用中,应用方利用个别为桌面利用,为确保桌面的应用体验以及功耗相干思考,对ArkTS卡片的能力做了以下束缚: 不反对加载so。不反对应用native语言开发。仅反对申明式范式的局部组件、事件、动效、数据管理、状态治理和API能力。卡片的事件处理和应用方的事件处理是独立的,倡议在应用方反对左右滑动的场景下卡片内容不要应用左右滑动性能的组件,以防手势抵触影响交互体验。除此之外,以后ArkTS卡片还存在如下束缚: 暂不反对导入模块。暂不反对极速预览。暂不反对断点调试能力。暂不反对Hot Reload热重载作为一名合格一线开发程序员,大家心里必定会有很多疑难!鸿蒙零碎这么弱小~~ 为了可能让大家跟上互联网时代的技术迭代,在这里跟大家分享一下我本人近期学习心得以及参考网上材料整顿出的一份最新版的鸿蒙学习晋升材料,有须要的小伙伴自行支付,限时开源,先到先得~~~~ 支付以下高清学习路线原图请点击→《鸿蒙全套学习指南》纯血鸿蒙HarmonyOS根底技能学习路线图 支付以上残缺高清学习路线图,请点击→《鸿蒙开发学习之UI》小编本人整顿的局部学习材料(蕴含有高清视频、开发文档、电子书籍等) 以上分享的学习路线都适宜哪些人跟着学习?-应届生/计算机专业通过学习鸿蒙新兴技术,入行互联网,将来高起点待业。-0根底转行提前布局新方向,抓住风口,自我晋升,取得更多就业机会。-技术晋升/进阶跳槽倒退瓶颈期,晋升职场竞争力,疾速把握鸿蒙技术,享受蓝海红利。 总结如果你感觉这篇内容对你有帮忙,我想麻烦大家动动小手给我:点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。关注我,同时能够期待后续文章ing,不定期分享原创常识。想要获取更多残缺鸿蒙最新VIP学习材料,请点击→《鸿蒙零根底入门学习指南》

February 19, 2024 · 1 min · jiezi

关于前端:2024程序员能有什么新的出路

前言前两天和一个前端同学聊天,他说不筹备再做前端了,筹备去考公。不过难度也很大。 从 2015 2016 年那会儿开始互联网行业暴发,到当初有 7、8 年了,当年 20 多岁的小伙子们,当初也都 30+ 了 大量的人面临这个问题:大龄程序员待业竞争力差,将来该如何安身立命? 先说我集体的认识: 除非你有其余更好的资源,否则没有更好的前途认真搞技术,放弃技术能力,你大概率不会就业(至多外包还在招人,外包也不少挣...)考公之我见如果真的上岸了,极大概率不会就业,这是最大的劣势。 有劣势必定也有劣势,要思考全面。凡事都合乎能量守恒定律。 你失去什么,你就得付出什么。或者你爸爸、爷爷提前付出为你过了,或者你儿子、孙子到最初为你买单。 任何一个企业、单位,无论什么模式,无论效率高下,总是须要人干活的,甚至有很多脏活累活。 你有依附当然好。但你如果孤零零的进去,这些活你猜会是谁干? 什么,致力就肯定能有播种?—— 对,必定有收货。但收件人不肯定是谁。(也合乎能量守恒定律) 副业,红利期早已过来做自媒体,做讲师,红利期早就过来了。我去年开始在某音上做小视频,到当初也就积攒不到 2000 粉丝,播放量非常少。 接外包,这得看你本事了。这不单单是一个技术活,你这是一个人干了一个公司所有角色的活:推广、需要、解决方案、开发、测试、部署、保护、降级… 转岗,转什么?随着科技的不断进步,鸿蒙零碎作为华为自主研发的操作系统,逐步引起了人们的关注。2024年,鸿蒙开发待业前景如何?对于那些对鸿蒙开发感兴趣并心愿在这一畛域寻找职业倒退的人来说,这是一个十分重要的问题。 鸿蒙开发软件开发的待业前景始终备受关注。随着华为推出鸿蒙操作系统,这一前景变得更加令人期待。鸿蒙是华为自主研发的操作系统,旨在为各种设施提供对立的操作系统解决方案。作为一个全新的操作系统,鸿蒙为开发者提供了许多机会和挑战,为软件开发行业带来了新的待业前景。 市场需求持续增长随着华为鸿蒙零碎的推出和倒退,对鸿蒙开发人员的需要逐步减少。许多企业和组织都开始关注和采纳鸿蒙零碎,因而对鸿蒙开发人员的需要将会持续增长。 依据相干考察和数据显示,鸿蒙利用开发工程师的薪资待遇绝对较高,月薪广泛在20K-50K之间。具体工资水平还要依据集体的技能程度、工作教训和所在地区的市场行情等因素而定。在一些一线城市和知名企业中,鸿蒙利用开发工程师的工资待遇可能会更高。 总之,目前市场上鸿蒙利用开发工程师的招聘需要还是比拟旺盛的,而且工资待遇绝对较高。对于想要从事鸿蒙利用开发的人来说,一直晋升本人的技能程度和教训,抓住市场时机,将有助于在竞争强烈的市场中怀才不遇,取得更好的职业倒退机会和薪资待遇。 作为一名合格一线开发程序员,大家心里必定会有很多疑难!鸿蒙零碎这么弱小~~ 为了可能让大家跟上互联网时代的技术迭代,在这里跟大家分享一下我本人近期学习心得以及参考网上材料整顿出的一份最新版的鸿蒙学习晋升材料,有须要的小伙伴自行支付,限时开源,先到先得~~~~ 支付以下高清学习路线原图请点击→《鸿蒙全套学习指南》纯血鸿蒙HarmonyOS根底技能学习路线图 支付以上残缺高清学习路线图,请点击→《鸿蒙开发学习之UI》小编本人整顿的局部学习材料(蕴含有高清视频、开发文档、电子书籍等) 以上分享的学习路线都适宜哪些人跟着学习?-应届生/计算机专业通过学习鸿蒙新兴技术,入行互联网,将来高起点待业。-0根底转行提前布局新方向,抓住风口,自我晋升,取得更多就业机会。-技术晋升/进阶跳槽倒退瓶颈期,晋升职场竞争力,疾速把握鸿蒙技术,享受蓝海红利。 总结如果你感觉这篇内容对你有帮忙,我想麻烦大家动动小手给我:点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。关注我,同时能够期待后续文章ing,不定期分享原创常识。想要获取更多残缺鸿蒙最新VIP学习材料,请点击→《鸿蒙零根底入门学习指南》

February 19, 2024 · 1 min · jiezi

关于前端:基于WebGPU的AI原生3D引擎将会迎来新机遇Orillusion在GOTC上做主题演讲

寰球开源技术峰会(Global Open-source Technology ConferencGOTC 2023由凋谢原子开源基金会、 Linux 基金会亚太区、上海浦东软件园和开源中国联结发动, 于 5 月 27 日至 28 日在上海顺利举办。GOTC是面向寰球开发者的一场隆重开源技术盛宴,大会以行业展览、主题发言、专题论坛、开源市集的模式展示,与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及开源社区、AIGC、汽车软件、AI 编程、开源教育培训、云原生等热门话题,探讨开源将来,助力开源倒退。北京鸥睿零世科技有限公司创始人&CEO白景文受邀缺席Web3元宇宙世界专题论坛,发表了题为《元宇宙时代Web3D的生态劣势及WebGPU引擎的时机》的演讲,并参加了《游戏与3D渲染引擎》圆桌探讨。 1 AIGC在3D行业的冲破随着ChatGPT的呈现,LLM的多模态能力曾经在文字和图片的生成上体现出了十分好的成果。下一个被LLM笼罩的场景,必然是3D内容的生成。AIGC在3D行业的冲破,咱们了解为两种表现形式:生成派和调用派。 生成派:资产的生成比方ChatGPT,Jasper,Imagen,Dall·E 2,Stable Diffusion,Midjourney等,都是在文字或图片的场景里,从0到1的间接发明内容。对于3D资产,通过AI最终也肯定能够实现从0到1的间接发明。从以后3D内容生产工作流兼容性的角度,思考到3D资产须要利用到渲染管线,3D资产最风行的representation就是Mesh,除此之外还包含NeRF,体素,点云,SDF等。当下,能够基于3D数据集间接训练AI模型,实现3D Mesh资产的创作,也能够基于2D图片信息,来生成各种representation的3D资产。尽管目前来看,3D资产的生成还是处于绝对晚期的阶段。然而,这些不同的representation最终都会通过AI,实现从0到1的间接生成发明。 调用派:资产的产品化在3D利用场景中,LLM是否能够学习各种DCC软件(通过教程、案例、代码等),通过“调用”的形式,实现3D内容的创作。比方咱们是不是将来能够教会LLM应用Unity引擎工具,通过prompt,就能够间接生成咱们须要的3D利用。LLM自身更善于的是对文字内容的了解,而简单繁琐的专业性工作,有很多成熟的工具能够实现。这好比咱们的大脑只须要实现思考,再通过管制咱们的手脚来实现工作一样。这种调用派的逻辑更像是ChatGPT当下的插件机制,如果想购买机票,只须要通知ChatGPT咱们的用意,而后通过插件调用成熟的机票购买服务就好了。 生成派解决的是资产发明的问题,然而3D资产发明完,须要有去处,有场景。调用派解决的资产转换为3D资产,产品化的问题。 2 带有AI大脑的3D引擎必然呈现性能级:AI能力独立调用⾕歌在5月10号召开的I/O⼤会,展现了AI和安卓零碎的联合能力:生成式AI的壁纸利用和智能短信助手Magic Compose。这些AI能力的利用还都是属于一个个独立性能的存在,不是零碎级的接入。 这种联合AI的模式和使用3D游戏引擎的AI能力开发游戏相似。当下,咱们开发游戏也用到了很多AI能力:传统AI能力利用包含语音生成,语音生成面部表情,AI视频动捕等等;大模型AI能力利用包含生成原画素材,游戏剧本,智能NPC等等。咱们认为这种AIGC的利用确实能够大大减速3D内容的生成效率,然而都不是零碎级别的。 零碎级:3D内容工具的范式转变微软在5月23号召开Build开发者大会,推出了Windows Copilot,这对微软有重大战略意义。它的实质是给windows装置了一个大脑,而且它能够缓缓进化的。尽管当初能做的事件无限,然而这可能是新⼀代AI操作系统的雏形,通过自然语言的形式,实现人和操作系统(机器)的交换。 在这个AIGC的时代,咱们须要给3D引擎装上一个大脑,大语言模型,必须零碎级的了解3D引擎,这将是3D内容创作工具的范式转变。 充分发挥AI的先发劣势,须要像微软一样从策略上器重。半年来,咱们对AI大语言模型理解的还十分通俗,策略上更加器重,能力了解的更为粗浅,才有可能制订出更加当先且正确的战术打算。 3D利用的开发必须有3D引擎的反对,是十分不容易被大模型代替的。在这个绝对的垂直场景,肯定会呈现一个带有AI大脑的3D引擎,为3D创作提供零碎级的AIGC能力。 3 WebGPU和AIGC对3D引擎的影响简略回顾游戏引擎30多年的发展史,每个时代都会有不同的3D内容需要,不同的需要又会催生出不同的引擎公司,进而站上历史舞台。 第一款游戏引擎,是由ID Software在1993年公布的《德军总部3D》,创始人John Carmack也被称为“FPS游戏之⽗”。同年,通过优化后,ID公布了《DOOM》,最终成为了游戏引擎技术的代表。然而,这两款引擎都是伪3D。真正的3D引擎是ID在1996年公布的《Quake》,它开始⽀持模型,动画和粒子特效。1997年的《Quake2》,开始⽀持OpenGL。 1998年,Epic公司的Unreal诞生。过后游戏的开发曾经变的绝对简单,须要很多功能模块。Unreal过后最次要的特色是集成了游戏开发的很多模块,包含物理、⾳效、碰撞等。所以,从游戏引擎通用性角度,Unreal要好很多。然而这还不够,Unreal真正能⽐肩Quake,是通过几轮的代码重构和迭代后,公布的Unreal3。这个过程中,Epic公司做的最胜利的决定就是全力拥抱微软的生态,致力适配Widows的图形API接口DX。最终在Xbox上公布了《和平机器》,也奠定了它在PC主机这个时代的引擎霸主的位置。这个时代对3D内容的需要,就是渲染真切,成果好。 2004年,随同着让游戏引擎大众化的口号,Unity成⽴。Unity胜利的很大起因是借助于挪动互联⽹的浪潮,尤其是2007年iPhone公布的时候,过后只有Unity一款引擎能够为IOS开发游戏利用。最终Unity凭借它的跨平台个性,很快的成为了挪动互联网时代的支流引擎⼯具。这个时代对3D内容的需要,就是人们能够通过挪动⼿机,随时随地的疾速进⼊3D世界。 随后,各家游戏引擎开始广泛的去游戏化标签。比方,Unity的口号从“game development platform”变成了“real-time 3D content platform”,Unreal也开始深⼊到各个⾏业,包含影视,⼯业,仿真,⾃动驾驶等等。随着笼罩场景的增多,合作的需要也多了起来。所以英伟达推出的Omniverse,横向买通了各种3D内容制作工具,让不同的角色能够疾速合作,进而晋升工作效率。 在这个倒退的过程中,呈现过3D内容轻量化的阶段。已经的Flash被摈弃后,很多劣势都被WebGL所借鉴,也呈现过十分火爆的页游。然而,从商业角度,并没有呈现特地胜利的引擎公司。 咱们也尝试做过剖析,首先Web技术不只是能够用来做网页,一样能够打包公布成挪动端和桌面端的利用,甚至是将来的VR/AR/MR的利用。其次,Web在2D内容有《羊了个羊》,在工具层面上有Figma。3D场景上没有特地胜利的案例,一个很有可能的起因就是Web上的3D天花板WebGL的性能问题。这导致在Web上很难开发出高质量,高性能,高留存的3D利用。**然而,这样⼀种局⾯,很有可能随着WebGPU的呈现被彻底突破。2023年5⽉2号WebGPU正式公布,它实质上是开释了GPU的⽣产⼒,在浏览器上能够进⾏⾼性能的计算和渲染。** WebGPU减少了计算着色器,能够把GPU的通用计算能力独立进去,不再须要通过 fragment shader和vertext shader进⾏模仿;同时WebGPU勾销了全局状态机,把内存治理交给技术人员,大大提高了灵便度,能够针对不同的需要进行自在调整。这两个技术上的变动,也体现在两个⽐较理论的场景上。第一个场景是,浏览器通过WebGPU能够间接运行大模型,比方Stable Diffusion。第⼆个场景式, 浏览器中能够更加轻松的实现桌⾯级的渲染成果算法,实现更加真切的3D内容出现。 浏览器的寰球装置量是十分微小的,Chrome一家在寰球就有30亿用户。WebGPU带来的技术和场景的变动,意味着几十亿人,能够⼏乎0老本的取得超强的计算和渲染能⼒。再配合上浏览器人造的跨平台,易流传的属性,便能够轻松的让⽤户体验到各种AI能力和高质量3D内容。 大模型的训练是须要微小算力反对的,因而咱们在当下体验AI服务的时候,常常因为云端资源的限度而被“卡”住。有了WebGPU的技术,它能够轻松的开释端侧的算力,将来AIGC服务体现为“训练在云测,推理在端测”的模式很有可能成为新的趋势。 以ChatGPT为代表的⼤语⾔模型,曾经扭转了人们的习惯和认知。当下,是一个AIGC普众化需要暴发的时代,更多的⼈都渴望更方便快捷的取得AI的能⼒,取得AIGC的3D创作能⼒。 咱们认为不久的未来,⼀定会呈现⼀个轻量级的、易流传的,零碎级集成AI能⼒的AI原⽣3D引擎。 Orillusion致力于打造全世界第一款齐全开源基于WebGPU规范的一种轻量级渲染引擎,指标是在浏览器中实现桌面级的渲染成果,反对超大简单场景的3D出现。易上手,易分享,易迭代,易合作、成本低,跨平台是咱们的外围劣势,咱们将为3D场景暴发时代提供引擎根底工具。 将来咱们将会继续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢送大家为Orillusion开源社区做出本人的奉献。咱们始终深信,开源社区的技术留痕是每一位技术人员最高尚的谋求!因而,咱们尊重,咱们认可,咱们更期待,退出Orillusion,让咱们共同进步! ——Link uncharted, 链接将来世界

February 19, 2024 · 1 min · jiezi

关于前端:OpenHarmonyUIAbility组件间交互设备内

UIAbility是系统调度的最小单元。在设施内的功能模块之间跳转时,会波及到启动特定的UIAbility,该UIAbility能够是利用内的其余UIAbility,也能够是其余利用的UIAbility(例如启动三方领取UIAbility)。 本章节将从如下场景别离介绍设施内UIAbility间的交互方式。 启动利用内的UIAbility启动利用内的UIAbility并获取返回后果启动其余利用的UIAbility启动其余利用的UIAbility并获取返回后果启动UIAbility的指定页面通过Call调用实现UIAbility交互(仅对系统利用凋谢)启动利用内的UIAbility当一个利用内蕴含多个UIAbility时,存在利用内启动UIAbility的场景。例如在领取利用中从入口UIAbility启动收付款UIAbility。 假如利用中有两个UIAbility:EntryAbility和FuncAbility(能够在同一个Module中,也能够在不同的Module中),须要从EntryAbility的页面中启动FuncAbility。 1.在EntryAbility中,通过调用startAbility()办法启动UIAbility,want为UIAbility实例启动的入口参数,其中bundleName为待启动利用的Bundle名称,abilityName为待启动的UIAbility名称,moduleName在待启动的UIAbility属于不同的Module时增加,parameters为自定义信息参数。示例中的context的获取形式参见获取UIAbility的Context属性。 let wantInfo = { deviceId: '', // deviceId为空示意本设施 bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', moduleName: 'module1', // moduleName非必选 parameters: { // 自定义信息 info: '来自EntryAbility Index页面', },}// context为调用方UIAbility的AbilityContextthis.context.startAbility(wantInfo).then(() => { // ...}).catch((err) => { // ...})2.在FuncAbility的生命周期回调文件中接管EntryAbility传递过去的参数。 import UIAbility from '@ohos.app.ability.UIAbility';import Window from '@ohos.window';export default class FuncAbility extends UIAbility { onCreate(want, launchParam) { // 接管调用方UIAbility传过来的参数 let funcAbilityWant = want; let info = funcAbilityWant?.parameters?.info; // ... }}3.在FuncAbility业务实现之后,如须要进行以后UIAbility实例,在FuncAbility中通过调用terminateSelf()办法实现。 // context为须要进行的UIAbility实例的AbilityContextthis.context.terminateSelf((err) => { // ...});启动利用内的UIAbility并获取返回后果在一个EntryAbility启动另外一个FuncAbility时,心愿在被启动的FuncAbility实现相干业务后,能将后果返回给调用方。例如在利用中将入口性能和帐号登录性能别离设计为两个独立的UIAbility,在帐号登录UIAbility中实现登录操作后,须要将登录的后果返回给入口UIAbility。 ...

February 19, 2024 · 4 min · jiezi

关于前端:如何将龙插入到富文本编辑器中

本文由体验技术团队 TinyVue 组件库核心成员曾令卡同学编写。 Quill 是一款 API 驱动、反对格局和模块定制的开源 Web 富文本编辑器,目前在 GitHub 的 Star 数是 38k。 本文是一个 Quill 的综合案例,从自定义工具栏按钮,到自定义 Blot 编辑器内容格局,再到调用 Quill 实例的 insertEmbed 办法,实现在富文本编辑器中插入由 Canvas 绘制的龙。 之前在掘金看到一篇文章:《产品经理:你能不能用 div 给我画条龙?》 于是突发奇想:是否把这条龙插入到富文本编辑器中呢? 之前给大家分享了如何在 Quill 中插入自定义的内容,咱们一起来回顾下: 第一步:自定义工具栏按钮第二步:自定义 Blot 内容第三步:在 Quill 注册自定义 Blot第四步:调用 Quill 的 API 插入自定义内容如果对 Quill 想要有更多的理解可参考以下几篇文章: 深入浅出 Quill 系列之应用篇1:Quill 根本应用和配置深入浅出 Quill 系列之应用篇2:通过 Quill API 实现对编辑器内容的齐全管制深入浅出 Quill 系列之原理篇1:古代富文本编辑器 Quill 的模块化机制深入浅出 Quill 系列之原理篇2:古代富文本编辑器 Quill 的内容渲染机制接下来咱们试着依照这个步骤来将龙插入到编辑器中。 第一步:自定义工具栏按钮 这个非常简单: const TOOLBAR_CONFIG = [    [{ header: ['1', '2', '3', false] }],    ['bold', 'italic', 'underline', 'link'],    [{ list: 'ordered' }, { list: 'bullet' }],    ['clean'],    ['card', 'divider', 'emoji', 'file', 'tag'],    ['dragon'], // 新增的  ];自定义工具栏按钮图标: const dragonIcon = `<svg>...</svg>`;const icons = Quill.import('ui/icons');icons.dragon = dragonIcon;减少工具栏按钮事件: const quill = new Quill('#editor', {    theme: 'snow',    modules: {      toolbar: {        container: TOOLBAR_CONFIG,        handlers: {          ...          // 减少一个空的事件          dragon(value): void {            console.log('dragon~~');          },        },      }    },  });第二步:自定义 Blot 内容(外围) 之前的分享提到:Quill 中的 Blot 就是一个一般的 ES6 Class ...

February 19, 2024 · 1 min · jiezi

关于前端:如何把conda虚拟环境移到不同的机器以及soloV2安装

大家好我是咕噜美乐蒂,很快乐又和大家见面了!上面我就和大家一起来理解一下把 Conda 虚拟环境移到不同的机器能够通过以下步骤实现:1.在原机器上导出虚拟环境在原机器上关上命令行或终端,输出以下命令:conda activate <env_name>conda env export > environment.yml这将会导出以后虚拟环境下的所有包和依赖项,并生成一个名为 environment.yml 的文件。2.将 environment.yml 文件复制到指标机器将 environment.yml 文件复制到指标机器上,能够通过文件共享或传输工具实现。3.在指标机器上创立新的虚拟环境在指标机器上关上命令行或终端,输出以下命令:conda env create -f environment.yml这将会依据 environment.yml 文件创建一个新的虚拟环境,并装置其中的所有包和依赖项。4.激活新的虚拟环境在指标机器上关上命令行或终端,输出以下命令:conda activate <env_name>这将会激活新的虚拟环境。至此,你曾经胜利将 Conda 虚拟环境从一个机器迁徙至另一个机器。对于 soloV2 的装置,能够通过以下步骤实现:1.装置 Anaconda 或 Miniconda在官网上下载并装置 Anaconda 或 Miniconda,这是应用 Conda 治理 Python 环境的前提。2.创立新的 Conda 虚拟环境在命令行或终端中输出以下命令来创立一个新的 Conda 虚拟环境:conda create --name soloV2 python=3.6其中 soloV2 是虚拟环境的名称,python=3.6 示意应用 Python 3.6 版本的解释器。3.激活虚拟环境在命令行或终端中输出以下命令来激活虚拟环境:conda activate soloV24.装置 PyTorch 和 torchvision输出以下命令来装置 PyTorch 和 torchvision:conda install pytorch==1.7.0 torchvision==0.8.1 torchaudio==0.7.0 cpuonly -c pytorch其中 -c pytorch 示意应用 PyTorch 官网的软件源进行装置,cpuonly 示意只装置 CPU 版本的 PyTorch。5.装置其它依赖项输出以下命令来装置其它依赖项:pip install cython matplotlib pycocotools opencv-python-headless至此,你曾经胜利地装置了 soloV2。能够通过以下命令来查看装置是否胜利:python -c "import torch; print(torch.__version__)"好啦,明天美乐蒂就和大家分享到这里啦,小伙伴们有更好的方法能够在评论区打进去哦~~以便大家更不便地操作呢。 ...

February 19, 2024 · 1 min · jiezi

关于前端:聊聊Git-subModule子模块

比方在公司不同开发团队中,有一个根底共享库,同时被多个我的项目调用。若要保障根底共享库的动静更新,那么就须要把共享库独立为一个代码库,然而别离把共享库中的文件拷贝到各自的我的项目中会造成冗余,而且再次更新共享库就会在不同我的项目下更新,会比拟麻烦。 利用子模块能够作为解决该类问题的一种计划,子模块容许将一个Git仓库作为另一个Git仓库的子目录,并且能够独立地治理这个子仓库的版本,而且还能放弃提交的独立性。 上面就通过实操来具体谈谈 Git submodule 一、什么是Git SubmoduleGit Submodule 是Git版本控制系统中的一种机制,用于在一个Git仓库中蕴含另一个Git仓库。它容许将一个Git仓库作为另一个Git仓库的子目录,并且能够独立地治理这个子仓库的版本,同时还放弃提交的独立。Submodule的作用在于,它容许你在一个我的项目中应用其余我的项目的特定版本,而无需将整个子项目的代码复制到主我的项目中。这对于依赖治理和代码复用十分有用。 二、应用 Git Submodule1 创立和初始化仓库初始化主库和子模块库我采纳的是 Gitee 来进行本次实操,首先在 Gitee 中创立一个主库 GitSubmoduleDemo,两个子模块库 ModuleA和 ModuleB:先将主库 clone 到本地: $ git clone https://gitee.com/haohuin/git-submodule-demo.git在主库中,应用 git submodule add 命令增加 Submodule子模块。其命令为:git submodule add <remote repo url> <local repo url> remote repo url 指近程仓库的 urllocal repo url 指本地仓库的门路 url//在主库中增加ModuleA$ git submodule add ../module-a.git ModuleA//在主库中增加ModuleB$ git submodule add ../module-b.git ModuleB查看以后主库的状态: $ git statusOn branch masterYour branch is up to date with 'origin/master'.Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: .gitmodules new file: ModuleA new file: ModuleB发现有新的文件在主库中,别离是 .gitmodules文件,ModuleA和 ModuleB目录 ...

February 19, 2024 · 2 min · jiezi

关于前端:手把手教你环信对接离线推送再搞不定把你头打掉

前提条件1.macOS零碎,装置了xcode,并且配置好了cocoapods第三方管理工具 2.有苹果开发者账号 3.有环信开发者账号 (注册地址:环信即时通讯云) 在苹果开发者核心创立我的项目,注册推送证书.1.登录苹果开发者核心. Apple Developer (请用本人的苹果开发者账号) 编辑 编辑 2.苹果开发者核心创立 - Identifiers. (name - empushdemo ) (identifier - com.yyytp.empushdemo ) 编辑 编辑 编辑 编辑 编辑 3.钥匙串 - 从证书颁发机构申请证书 (本机证书) 编辑 编辑 编辑 编辑 编辑 编辑 编辑 编辑 4.针对刚创立的bundle id开明并注册Certificates push 证书 (注册 能够在开发和生产双环境下应用的推送证书) 编辑 编辑 编辑 编辑 编辑 5.装置证书到本机,并导出 push - p12  ...

February 19, 2024 · 2 min · jiezi

关于前端:前后端联调测试

前后端联调测试1、软件测试工作的实质个别的办法和伎俩 (1)从需要,性能实现,性能等角度发现软件自身的bug(2)手动或自动化的形式来实现bug的发现长处:只关注软件自身,工作量不大,比拟省心毛病:没有预防伎俩 发现bug时再修补回溯的流程比拟长, 耗时 (3)技术上要以任何办法和伎俩发现bug(4)思维上要以多视角的形式察看我的项目预防bug2、一个我的项目各阶段设计人员及工作内容(1)需要阶段:产品负责需要调研竞品剖析产品原型设计 需要评审:我的项目所有成员加入,产品经理为大家解说产品需要的逻辑 (2)设计阶段:交互设计(ui/ue)架构设计(抉择技术栈) (3)开发阶段:前端开发:负责实现网页业务逻辑局部的编码后端开发:负责实现服务端业务逻辑局部的编码 (4)测试阶段:测试人员:负责软件实现后的质量检查 (5)上线部署与保护运维工程师: 负责线上服务器的服务部署与保护数据库管理员:负责线上数据库的服务部署与保护 3、常见的软件开发模型(1)原型模型实用于需要不明确的场景,通过疾速构建原型来帮忙用户明确需要。 (2)瀑布模型将软件生存周期中的各个流动规定为依线性程序连贯的若干阶段,包含需要剖析、设计、编码、运行与保护。实用于需要明确的我的项目,个别表述为需要明确、或二次开发,或者对于数据处理类型的我的项目。 (3)增量模型交融了瀑布模型的基本成分和原型实现的迭代特色,能够有多个可用版本的公布,每个增量都公布一个可操作的产品。 (4)螺旋模型典型特点是引入了危险剖析,联合了瀑布模型和演变模型的长处。 (5)V模型强调测试贯通我的项目始终,而不是集中在测试阶段。 (6)喷泉模型典型的面向对象的模型,特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无显著界线,并且能够迭代穿插。 (7)疾速利用开发(RAD)模型是瀑布模型的一个高速变种,强调极短的开发周期,通常实用基于构件的开发方法取得疾速开发。 (8)对立过程(UP)典型特点是用例驱动、以架构为核心、迭代和增量。对立过程把一个我的项目分为四个不同的阶段:构思阶段、细化阶段、构建阶段和移交阶段。 (9)麻利开发是一种以人为外围、迭代、循序渐进的开发方法,实用于小团队和小我的项目,具备小步快跑的思维。常见的麻利开发方法有极限编程法、水晶法、并列争球法和自适应软件开发办法。 4、bug的分类(1)功能型bug指产品实现过程种具体逻辑的实现谬误 (2)需要型bug指在软件项目管理的过程中,需要阶段就埋下了隐患,如未依照需要实现,需要了解谬误或需要未形容分明等状况 (3)性能型bug指软件在很多人同时应用或长时间运行时呈现了响应慢甚至解体的场景) (4)常识型 bug在过来一段时间 用户始终是这样认为的,曾经造成了一种默认的约定,但软件设计或开发人员不依照约定俗成的规定来

February 19, 2024 · 1 min · jiezi

关于前端:这款完全自定义配置的浏览器起始页插件值得你收藏

大家好,我是 Java陈序员。 浏览器是咱们上网冲浪的必备工具,每次关上浏览器默认都是先看到起始页。 有的浏览器起始页非常简洁好看,而有的则是充斥了各种网址导航和广告。 明天,給大家介绍一个浏览器起始页配置插件,反对自定义配置。 关注微信公众号:【Java陈序员】,获取开源我的项目分享、AI副业分享、超200本经典计算机电子书籍等。我的项目介绍Howdz Dashboard —— 一个基于 Vue3、Typescript、Vite 的齐全自定义配置的浏览器起始页,反对 Chrome 插件和 Edge 插件。 性能特色: 提供基于文档流的响应布局或 Fixed 模式固定任意地位的两种布局模式响应式设计,编辑模式下拖拽组件更改其大小和地位组件可自在增加或删除,并且组件的款式和性能都是可配置的数据可应用密钥或 JSON 文件导出以实现数据同步性能预设多种主题,初始进入可任意抉择反对本地壁纸、随机壁纸,随机壁纸反对珍藏集体壁纸库可配置动静壁纸背景,选用官网提供或自行添加网络视频门路即可可配置多标签页模式,容许增加切换多个隔离的页面可配置组件交互行为,设置点击组件弹出另一个组件等交互操作预览模式, 反对用于分享用的数据隔离模式反对语言切换,以后反对简体中文与英文我的项目地址: https://github.com/leon-kfd/Dashboard在线体验地址: https://www.howdz.xyz/性能体验预设多种主题,初始进入可任意抉择。 可动静设置壁纸,反对纯色壁纸、本地图片壁纸、网络图片壁纸、随机图片壁纸,随机图片壁纸反对珍藏集体壁纸库。 Tips:左下角的图标按钮能够更新壁纸和珍藏壁纸。壁纸还反对多种动画特效。 能够从物料组件库自行添加本人须要的组件,增加的组件提供很多款式和性能的配置进行批改,并通过拖拽更改组件地位和大小。 提供大量组件用于定制化你的起始页,可适配响应式设计。 物料组件Howdz Dashboard 提供大量组件用于定制化起始页,这里筛选几个比拟乏味的组件。 Empty - 占位: 占位区块组件,反对一些简略配置与自定义文本。 Day - 自定义日期: 基于 Dayjs 的 formatter 格式化占位符语法实现自定义各种日期格局。 Verse - 随机新诗: 随机新诗组件,API 来源于 https://www.jinrishici.com/, 可配置定时刷新。 Search - 搜寻栏: 反对增加自定义搜索引擎、按 Tab 键疾速切换搜索引擎、反对关键词联想。 ...

February 19, 2024 · 1 min · jiezi

关于前端:15个值得收藏的开源项目推荐

新的一年,前端畛域再次掀起波澜壮阔的改革。开源世界突飞猛进,每天都有离奇的惊喜涌现。明天,咱们精心整顿了15个令人眼前一亮的开源我的项目,涵盖了前端技术的各个层面。无论您是资深开发者还是初学者,置信这些我的项目中总有一个会触动您的心弦。 1. draw-a-uiSite: https://github.com/SawyerHood/draw-a-uidraw-a-ui奇妙地联合了tldraw这一开源数字画板和GPT-4-Vision API,用户只需通过tldraw绘制线框图并增加标注,利用便能生成令人惊艳的基于HTML的UI设计。其背地的技术原理是将以后画布的SVG图形转换为PNG格局,并通过GPT-4-Vision API生成带有tailwind的HTML文件。这一翻新流程展现了AI人工智能工具GPT的弱小能力,为用户提供了更加自在和灵便的UI设计体验。 2. OrillusionSite: https://github.com/Orillusion/orillusionOrillusion是一个高性能的Web3D渲染引擎,基于WebGPU图形API,具备与PC端图形API相当的渲染能力。它充分利用了GPU的凋谢能力,如灵便的GPU缓存操作、弱小的着色器(Webgpu Shader/WGSL)以及备受关注的Compute Shader计算内核,从而充分发挥了GPU在非光栅化阶段的并行处理能力,为用户带来卓越的渲染成果。 3. FFCreatorSite: https://github.com/tnfe/FFCreatorFFCreator是一个基于node.js的轻量、灵便的视频制作工具库。它让每个人都能轻松制作视频。只需几张图片或视频片段,加上一段背景音乐,即可迅速生成炫酷的视频短片。在短视频日益风行的明天,FFCreator为解决用户疾速生产短视频或平台批量合成视频提供了简略高效的解决方案。它依赖少、配置低,轻松上手,让视频制作变得简略又快捷。 4. shadcn-uiSite: https://github.com/shadcn-ui/uishadcn-ui,基于React构建的UI组件库,利用TailwindCSS实现款式自定义。它建设在Radix之上,提供无头组件,解决可拜访性和键盘交互问题。与MUI、ChakraUI等库不同,shadcn-ui并非传统的NPM包。通过终端命令,您可轻松集成shadcn-ui组件,装置依赖并间接复制源代码进行批改。 shadcn-ui的几大外围性能包含:主题与主题编辑器:通过图形界面轻松创立自定义主题,生成的代码片段可一键复制粘贴至程序中。深色模式:反对Next.js和Vite利用的暗黑模式,为用户带来独特的视觉体验。CLI工具:主动配置我的项目,实现框架集成、配置文件生成和组件增加等性能,晋升开发效率。丰盛的组件库:蕴含40+根底组件,满足多样化的开发需要。 5. poster-designSite: https://github.com/palxiao/poster-design开源的web海报设计器好看且功能强大,实用于多种设计场景。它操作晦涩,反对丰盛的交互细节和欠缺的根底性能。服务端生成确保图片多端对立,反对CSS个性。繁难AI抠图工具一键去背景。采纳Vue3等技术栈,开发体验顺畅。反对PSD解析、元素操作、图片素材编辑和画布自定义。一站式解决设计需要,晋升效率。 6. excalidrawSite: https://github.com/excalidraw/excalidraw一款收费、开源的在线工具,以有限画布为外围特点,让用户能够在虚拟空间内自在挥洒创意。其手绘格调的性能,使得每一笔、每一划都充斥艺术气味。利用反对包含中文在内的多种语言,满足了寰球用户的需要。在性能上,它提供了丰盛的绘图工具,让用户可能依据集体爱好和需要进行自在绘制。此外,用户还能够将作品导出为PNG格局,不便分享和保留。实时合作和共享链接性能则让多人能够在同一画布上独特创作,增强了团队单干的效率和便捷性。 7. zerkerSite: https://github.com/flutterkit/zerkerZerker是一个灵便且轻量级的Flutter Canvas图形动画库。借助Zerker,您能够创立许多看似繁琐的动画成果,如点赞动画、弹出动画、场景过渡、图标成果等。同时,您还能够应用Zerker创立许多简略的游戏。Zerker蕴含诸如精灵、滚动背景和图集等元素,使您可能轻松地应用它们创立游戏世界。 8. page-spy-webSite: https://github.com/HuolalaTech/page-spy-webPageSpy,由货拉拉公司开源,是一款专为近程Web我的项目调试而设计的工具。它通过封装原生API,实现了对调用原生办法时参数的智能过滤和转化,进而生成格局标准的音讯,以供调试端应用。当调试端接管到这些音讯数据时,它可能以相似控制台的可交互式性能界面模式,直观地展现这些数据,从而极大地晋升了开发人员在近程Web我的项目调试过程中的效率和便捷性。 9. 50projects50daysSite: https://github.com/bradtraversy/50projects50days这个汇合蕴含50个粗劣的前端小我的项目,全副采纳HTML、CSS和JavaScript编写。每个我的项目都附带了网页源码和成果展现,为初学者提供了贵重的实际机会,同时也是经验丰富的前端开发者的灵感之源。浏览这些我的项目的成果,老手可能粗浅体验到前端技术的魅力,而简洁明了的源码则大大降低了编写代码的门槛。说不定,其中的某个网页成果会让你这位资深开发者也惊叹不已。 10. helSite: https://github.com/Tencent/hel供了一种运行时引入近程模块的能力,模块部署在 CDN,近程模块公布后,不须要从新构建公布,就能失效。hel所引入的近程模块,能够作为微模块(即模块级别的微前端),为传统的页面级别微前端(如qiankun、无界等)提供了补充。页面级微前端尽管功能强大,但在粒度上有时显得过于粗暴,无奈满足所有利用场景的精密需要。在须要更细粒度微前端的状况下,如组件或函数级别的拆分和组合,hel的近程模块性能便能施展其独特劣势。通过利用hel工具,开发者可能更加准确、高效地构建和扩大前端利用,从而晋升整体的开发效率和我的项目品质。 11. micro-appSite: https://github.com/micro-zoe/micro-appMicroApp,这款由京东前端团队精心打造的微前端框架,以组件化思维为基石,基于类WebComponent技术实现微前端的渲染。其设计理念旨在简化上手过程,进步工作效率,为用户带来晦涩而便捷的开发体验。MicroApp具备技术栈无关和业务解绑的个性,能够无缝集成于任何前端框架之中,为用户的前端开发提供弱小的反对。 微前端作为一种页面整合计划,其外围在于将宏大简单的前端利用拆分为多个独立、灵便且可扩大的小型利用。每个小型利用均可独立开发、运行和部署,随后将这些利用奇妙地交融为一个整体。这种架构不仅有助于缩小我的项目间的耦合度,晋升我的项目的扩展性,还使得前端仓库在微前端架构下变得更加玲珑和灵便。相较于传统的繁多前端仓库模式,微前端架构为前端开发带来了全新的视角和更高的可维护性。 12. tiny-vueSite: https://github.com/opentiny/tiny-vue OpenTiny Vue的突出之处在于其Renderless无渲染组件设计,这种架构让一套代码得以兼容Vue2、Vue3和React,同时实用于PC和挪动端。它反对函数级别的逻辑定制和全模板替换,展示了极高的灵活性和二次开发能力。咱们的组件库丰盛多样,超过100个组件,包含业界常见的以及咱们独有的特色组件,如Split面板分割器、IpAddress IP地址输入框、Calendar日历和Crop图片裁切等,满足了各种开发需要。 13. limuSite: https://github.com/tnfe/limulimu,即love immutable的缩写,是专为高效创立和操作不可变对象而设计的。它基于读取时的浅拷贝和写入时的标记批改机制,实现了杰出的性能。在各种场景中,limu的速度通常是immer的2倍或20倍以上,展现出惊人的性能。你能够通过点击在线性能演示来亲自体验这一后果。值得一提的是,limu在默认状况下不会解冻状态,这使得它在大多数场景中比immer更快10倍或更多。这一个性使得开发过程更加晦涩,进步了开发效率。此外,limu还十分敌对于调试。你能够在任何时候间接查看草稿,而无需放心以后状态的影响。这使得调试过程更加简略和直观。 14. code-runSite: https://github.com/wanglin2/code-run 一个功能强大的代码在线编辑预览工具,它的设计理念与codepen、jsbin、jsfiddle等出名平台类似,但更重视用户体验和性能的丰富性。这个工具容许用户在网页上间接编写、运行和预览代码,无需装置任何软件或配置本地环境。无论您是前端开发者、设计师、还是学习编程的学生,这个工具都能满足您的需要。它反对多种编程语言,包含HTML、CSS、JavaScript等,让您可能轻松构建网页、测试代码片段或学习新技术。同时,它还提供了实时预览性能,让您在编写代码的同时,即时查看代码的运行成果。 15. koi-uiSite: https://github.com/yuxintao6/koi-uiKOI-ADMIN,一款专为企业级中后盾治理打造的前沿模板,汇聚了Vue3、Vite、TypeScript、Pinia(及其长久化插件)、Unocss与ElementPlus等尖端前端技术。相较于市面上风行的后盾治理模板,KOI-ADMIN呈现出更为简洁、高效与易于了解的特点,特地合适于初学者与小白用户。 此我的项目不仅具备低学习老本,还装备了详尽的代码正文与丰盛的案例,使之成为企业级我的项目、中小型我的项目、集体我的项目乃至毕业设计的现实抉择。 感谢您的急躁浏览!

February 19, 2024 · 1 min · jiezi

关于前端:在script标签写export为什么会抛错

明天咱们进入到语法局部的学习。在解说具体的语法结构之前,这一堂课我首先要给你介绍一下 JavaScript 语法的一些根本规定。 脚本和模块首先,JavaScript 有两种源文件,一种叫做脚本,一种叫做模块。这个辨别是在 ES6 引入了模块机制开始的,在 ES5 和之前的版本中,就只有一种源文件类型(就只有脚本)。 脚本是能够由浏览器或者 node 环境引入执行的,而模块只能由 JavaScript 代码用 import 引入执行。 从概念上,咱们能够认为脚本具备主动性的 JavaScript 代码段,是管制宿主实现肯定工作的代码;而模块是被动性的 JavaScript 代码段,是期待被调用的库。 咱们对规范中的语法产生式做一些比照,不难发现,实际上模块和脚本之间的区别仅仅在于是否蕴含 import 和 export。 脚本是一种兼容之前的版本的定义,在这个模式下,没有 import 就不须要解决加载“.js”文件问题。 古代浏览器能够反对用 script 标签引入模块或者脚本,如果要引入模块,必须给 script 标签增加 type=“module”。如果引入脚本,则不须要 type。 <script type="module" src="xxxxx.js"></script>这样,就答复了咱们题目中的问题,script 标签如果不加type=“module”,默认认为咱们加载的文件是脚本而非模块,如果咱们在脚本中写了 export,当然会抛错。 脚本中能够蕴含语句。模块中能够蕴含三种内容:import 申明,export 申明和语句。一般语句咱们会在下一课专门给你解说,上面咱们就来讲讲 import 申明和 export 申明。 import 申明咱们首先来介绍一下 import 申明,import 申明有两种用法,一个是间接 import 一个模块,另一个是带 from 的 import,它能引入模块里的一些信息。 import "mod"; //引入一个模块import v from "mod";  //把模块默认的导出值放入变量v间接 import 一个模块,只是保障了这个模块代码被执行,援用它的模块是无奈取得它的任何信息的。 带 from 的 import 意思是引入模块中的一部分信息,能够把它们变成本地的变量。 带 from 的 import 细分又有三种用法,咱们能够别离看下例子: import x from "./a.js" 引入模块中导出的默认值。import {a as x, modify} from "./a.js"; 引入模块中的变量。import * as x from "./a.js" 把模块中所有的变量以相似对象属性的形式引入。第一种形式还能够跟后两种组合应用。 ...

February 19, 2024 · 3 min · jiezi

关于前端:GIT好习惯助你成为更出色的开发者

本文翻译自 Be a better developer with these Git good practices,作者:Anthony Vinicius, 略有删改。如果你是一名开发人员,你可能每天都在应用Git版本控制系统。无论是在团队中还是独自工作,应用此工具对于程序的开发过程都很重要。但在理论工作中却常常遇到提交不明确的音讯,没有传播有用的信息,以及滥用分支等问题。理解如何正确应用Git并遵循良好的实际对于那些想要在工作中怀才不遇的人来说至关重要。 Git分支的根本约定当咱们应用代码版本控制时,咱们应该遵循的次要良好实际之一是为分支、提交、拉取申请等应用清晰和描述性的名称。除了进步生产力之外,记录我的项目的开发过程,简化了团队沟通合作。通过遵循这些做法,你很快就会看到益处。 在此基础上,开源社区创立了一个分支命名约定,您能够在我的项目中遵循该约定。以下我的项目的应用是可选的,但它们能够帮忙进步您的开发效率。 1.小写:不要在分支名称中应用大写字母,保持应用小写字母; 2.连字符分隔:如果您的分支名称由多个单词组成,请用连字符分隔。防止PascalCase、camelCase或snake_case; 3. (a-z,0-9):在分支名称中仅应用字母数字字符和连字符。防止任何非字母数字字符; 4.请不要应用间断的连字符(--)。这种做法可能令人困惑。如果您有分支类型(如性能、谬误修复、热修复等),应用斜杠(/)代替; 5.防止以连字符完结分支名称。这是没有意义的,因为连字符分隔单词,没有单词在最初离开; 6.是最重要的:应用描述性的、简洁的、清晰的名称来解释在分支上做了什么; ❎ 谬误的分支名称fixSidebarfeature-new-sidebar-FeatureNewSidebarfeat_add_sidebar✅ 好的分支名称feature/new-sidebaradd-new-sidebarhotfix/interval-query-param-on-get-historical-data分支名称约定前缀有时候分支的目标并不明确。它可能是一个新性能,一个bug修复,文档更新,或其余任何货色。为了解决这个问题,通常的做法是在分支名称上应用前缀来疾速解释分支的用处。 feature: 将要开发的新性能。例如,feature/add-filters;release:用于筹备新版本。前缀release/通常用于在合并来自分支master的新更新以创立公布之前执行诸如最初一次订正之类的工作。例如,release/v3.3.1-beta;bugfix:你正在解决代码中的bug,并且通常与问题相干。例如,bugfix/sign-in-flow;hotfix:相似于bugfix,但它与修复生产环境中存在的要害谬误无关。例如,hotfix/cors-error;docs:写一些文档。例如,docs/quick-start;如果您在工作流程中应用工作治理,如Jira、Trello、ClickUp或任何能够创立开发工作的相似工具,则每个工作都有一个关联的编号。所以,个别都能够用这些编号作为分支名称的前缀。举例来说: feature/T-531-add-sidebardocs/T-789-update-readmehotfix/T-142-security-path提交信息提交音讯在开发过程中十分重要。发明一个好的历史将帮忙你很屡次在你的开发过程中。像分支一样,提交也有社区创立的约定,你能够在上面理解到: 提交音讯有三个重要局部:主题、形容和页脚。提交的主题是必须的,它定义了提交的目标。形容(body)用于为提交的目标提供额定的上下文和解释。最初还有页脚,通常用于元数据,如调配提交。尽管同时应用形容和页脚被认为是一种良好的做法,但这不是必须的。在主题行中应用祈使语气。举例:Add README.md ✅; Added README.md ❌; Adding README.md ❌; 将主题行的第一个字母大写。举例:Add user authentication ✅; add user authentication ❌; 不要以句号完结主题行。举例:Update unit tests ✅; Update unit tests. ❌; 将主题长度限度为50个字符,要简明扼要;注释以72个字符为单位换行,并将主题与空白行隔开;如果你的提交注释有多个段落,那么用空行来分隔它们;如有必要,可应用要点而非段落;Conventional Commit's“Conventional Commits标准是一个基于提交音讯的轻量级约定。它提供了一组简略的规定来创立提交历史。“构造<type>[optional scope]: <description>[optional body][optional footer(s)]提交类型提交类型提供了一个清晰的上下文,对于在这个提交中所做的事件。上面你能够看到提交类型的列表以及何时应用它们: feat:引入新性能;fix:代码谬误的纠正;refactor:用于代码更改重构,保留其整体性能;chore:不影响生产代码的更新,包含工具、配置或库调整;docs:对文档文件的增加或批改;perf:代码更改加强性能;style:与代码示意相干的调整,如格局和空白;test:纳入或纠正试验相干代码;build:影响构建零碎或内部依赖项的批改;ci:更改CI配置文件和脚本;env:形容对配置项过程中的配置文件的调整或增加,例如容器配置参数。范畴作用域是一种能够增加在提交类型之后的构造,以提供额定的上下文信息: fix(ui): resolve issue with button alignmentfeat(auth): implement user authentication内容提交音讯的主体提供了无关提交所引入的更改的具体阐明。它通常增加在主题行之后的空白行之后。 ...

February 19, 2024 · 1 min · jiezi

关于前端:前后端联调测试

1.bug的发展史 现阶段bug根本分类 性能逻辑用户体验总结bug是如何产生的 程序在开发时考虑不周全导致程序在应用时不合乎用户习惯2.软件测试工作的实质 个别的办法和伎俩 从需要,性能实现,性能等角度发现软件自身的bug手动或自动化的形式来实现bug的发现长处: 只关注软件自身,工作量不大,比拟省心毛病: 没有预防伎俩 发现bug时再修补回溯的流程比拟长, 耗时 技术上要以任何办法和伎俩发现bug思维上要以多视角的形式察看我的项目 预防bug3.为什么要进行软件测试 任何产品生产进去都是可能存在瑕疵的起因 : 惯性思维 自我认同 需要了解偏差 4.一个我的项目各阶段设计人员及工作内容 需要阶段: 产品 负责需要调研 竞品剖析 产品原型设计 需要评审: 我的项目所有成员加入,产品经理为大家解说产品需要的逻辑设计阶段:交互设计(ui/ue)架构设计(抉择技术栈)开发阶段: 前端开发 : 负责实现网页业务逻辑局部的编码后端开发 : 负责实现服务端业务逻辑局部的编码测试阶段: 测试人员: 负责软件实现后的质量检查上线部署 保护 运维工程师: 负责线上服务器的服务部署与保护数据库管理员:负责线上数据库的服务部署与保护5.常见软件开发模型 瀑布 这是一个软件生命周期模型,开发过程时通过设计一系列阶段程序开展,从零碎需要剖析开始直到产品公布和保护,我的项目开发过程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来软件打算->需要剖析->软件设计->程序编码->软件测试->运行保护长处:严格规定了每个阶段必须提交的文档,我的项目的推动必须依照肯定的程序来做毛病:重大依赖文档,脱离用户实在需要,在可运行的软件产品交付给用户之前,用户只能通过文档来理解产品时什么样的,很可能导致最终开发进去的软件产品不能真正满足用户的须要,也不适宜需要含糊的零碎v模型 需要设计(验收测试)->概要设计(零碎测试)->具体设计(集成测试)->编码(单元测试)自上而下 逐步求精毛病:理论工作中 需要常常变动 导致v模型步骤重复执行,始终返工6.bug的分类 功能型bug 指产品实现过程种 具体逻辑的实现谬误举例: 登陆时 用户名要求应用邮箱登录 但并未验证邮箱格局bug 分析前端未验证:频繁且大量的谬误申请发到后端给服务器带来无意义的压力后端未验证:如果前端验证时有bug则谬误数据会间接进入到数据库中举例: 用户浏览商品时,商品增加到购物车失败bug 分析前端未实现:点击增加按钮购物车无反馈,并没有发送增加申请到后端后端未实现:后端代码逻辑有问题,比方数据传输解析失败 或 存储失败 需要型bug 指在软件项目管理的过程中,需要阶段就埋下了隐患,如未依照需要实现,需要了解谬误或需要未形容分明等状况举例: 零碎中用户可应用 微信 手机号 邮箱注册并登录呈现的问题:当一个用户别离应用了 微信 手机号 邮箱进行了零碎的注册登录带来的影响:在软件系统中会认为 微信 手机号 邮箱 别离是一个独立的账户 (在此等于你注册了三个号)这是显著的谬误如何解决:在需要阶段定义一个明确的惟一值 比方手机号,无论用什么形式注册,登录胜利后必须绑定手机号 性能型bug 指软件在很多人同时应用或长时间运行时呈现了响应慢 甚至解体的场景举例: 春运12306 双11 淘宝 多年运行的成熟软件 架构未然成熟,靠的就是减少服务器来晋升性能,大多数事件没有那么多用户,减少太多服务器就是减少老本但如果 因某个非凡新闻爆出 造成大量用户关注微博 导致微博解体 (没有给服务器裁减的筹备工夫 -- 降本增笑)  ...

February 19, 2024 · 1 min · jiezi

关于前端:Cocos游戏开发中的小地图

引言Cocos游戏开发中的小地图 大家好,置信大家都玩过王者光荣这款游戏!然而并不是每个人都能成为王者! 它外面有一个要害的货色就是小地图,很多时候,你与王者的差距,就差学会看小地图了! 在游戏开发中,小地图是一个常见而又重要的元素。无论是在角色扮演游戏、策略游戏还是射击游戏中,小地图都施展着至关重要的作用。 本文重点给大家介绍一下如何在Cocos游戏开发中实现小地图成果。 本文源工程在文末获取,小伙伴们自行返回。 什么是小地图?在游戏开发中,小地图是指一个通常位于游戏界面某个固定地位的小型图像,用来显示玩家所处的游戏世界的概览信息。 这个地图通常以仰视视角展现游戏世界的地形、地标和其余重要信息,以帮忙玩家更好地了解游戏环境、布局口头路线和追踪指标。 小地图在各种类型的游戏中都有宽泛的利用,包含角色扮演游戏、策略游戏、射击游戏等。 实现小地图成果的办法在Cocos游戏开发中,实现小地图成果能够通过以下几种办法: Camera 办法:创立一个独立的摄像机对象,设置其投影类型为正交投影(Orthographic)。调整摄像机的地位和大小,确保它能够残缺地蕴含游戏地图。将摄像机的渲染结果显示在小地图的地位。比例转换实现:开发者能够在UI层上创立一个小地图的UI元素,而后依据游戏世界的信息(如地图、角色地位等)进行转换,更新这个UI元素的显示,从而实现小地图成果。小地图的利用场景小地图在游戏开发中有许多利用场景,其中一些常见的包含: 导航和摸索: 玩家能够利用小地图来导航和摸索游戏世界。小地图能够显示四周的地形、地标和重要地位,帮忙玩家找到指标地位并布局口头路线。工作追踪: 如果游戏中存在工作零碎,小地图能够用来显示工作指标的地位和方向,帮忙玩家更快地找到并实现工作。战略规划: 在一些策略游戏中,小地图能够用来察看敌我单方的地位和口头,帮忙玩家制订战术和策略。多人游戏: 在多人游戏中,小地图能够显示队友和敌人的地位,帮忙玩家进行团队单干或者反抗。实时更新: 如果游戏世界是动态变化的,比方玩家能够进行建造、摸索等操作,小地图能够实时更新以反映这些变动,让玩家理解最新的游戏状态。小地图的实现1.资源筹备咱们以后面的一篇文章《原来游戏中的导弹是这样尾随指标的,我吓了一跳!》的工程为模板。 创立新的工程。 2.增加Camera首先咱们在Canvas先增加一个Camera用来拍摄出现小地图。 其中留神调整一下摄像机的Rect属性,调整地位与大小至右上角。 这样咱们能在游戏中看到2个游戏画面,两画面除大小以外,实时同步。这时小地图已初步造成。 3.画面辨别通常小地图的画面与理论游戏画面不雷同,特地是3d游戏中,小地图是2d的,王者光荣中也是如此。 想要辨别2个画面的内容,咱们首先须要增加一个Layer。 咱们能够通过上方菜单栏->我的项目->我的项目设置->Layers关上Layer设置。 也能够通过场景中任意节点中的Layer栏的Edit按钮关上。 在编辑栏中增加咱们的MiniMap层级。 设置小地图摄像机的Visibility属性只勾选咱们自定义的MiniMap层级。 这样小地图摄像机就只能看到MiniMap层级的节点。 最初给咱们的指标和子弹增加一个简略的标记在小地图中显示。 层级都批改成MiniMap。 4.成果演示 结语这是不必写一句代码的实现形式,但理论利用中,通常会采取另外一种形式,有机会再和大家一起探讨。 本文源工程可通过私信发送MiniMap2D获取。 更多实用源码可通过浏览原文搜寻"亿元程序员"获取。 我是"亿元程序员",一位有着8年游戏行业教训的主程。在游戏开发中,心愿能给到您帮忙, 也心愿通过您能帮忙到大家。 AD:笔者线上的小游戏《填色之旅》《方块掌机经典》《贪吃蛇掌机经典》《重力迷宫球》大家能够自行点击搜寻体验。 实不相瞒,想要个赞和在看!请把该文章分享给你感觉有须要的其余小伙伴。谢谢! 举荐专栏: 你晓得和不晓得的微信小游戏罕用API整顿,连忙珍藏用起来~ 100个Cocos实例 8年主程手把手打造Cocos独立游戏开发框架 和8年游戏主程一起学习设计模式 从零开始开发贪吃蛇小游戏到上线系列 常识付费专栏

February 19, 2024 · 1 min · jiezi

关于前端:OpenHarmonyUIAbility组件与UI的数据同步

基于HarmonyOS的利用模型,能够通过以下两种形式来实现UIAbility组件与UI之间的数据同步。 应用EventHub进行数据通信:基于公布订阅模式来实现,事件须要先订阅后公布,订阅者收到音讯后进行解决。应用globalThis进行数据同步:ArkTS引擎实例外部的一个全局对象,在ArkTS引擎实例外部都能拜访。应用AppStorage/LocalStorage进行数据同步:ArkUI提供了AppStorage和LocalStorage两种利用级别的状态治理计划,可用于实现利用级别和UIAbility级别的数据同步。应用EventHub进行数据通信EventHub提供了UIAbility组件/ExtensionAbility组件级别的事件机制,以UIAbility组件/ExtensionAbility组件为核心提供了订阅、勾销订阅和触发事件的数据通信能力。接口阐明请参见EventHub。 在应用EventHub之前,首先须要获取EventHub对象。基类Context提供了EventHub对象,本章节以应用EventHub实现UIAbility与UI之间的数据通信为例进行阐明。 1.在UIAbility中调用eventHub.on()办法注册一个自定义事件“event1”,eventHub.on()有如下两种调用形式,应用其中一种即可。 import UIAbility from '@ohos.app.ability.UIAbility';const TAG: string = '[Example].[Entry].[EntryAbility]';export default class EntryAbility extends UIAbility { func1(...data) { // 触发事件,实现相应的业务操作 console.info(TAG, '1. ' + JSON.stringify(data)); } onCreate(want, launch) { // 获取eventHub let eventhub = this.context.eventHub; // 执行订阅操作 eventhub.on('event1', this.func1); eventhub.on('event1', (...data) => { // 触发事件,实现相应的业务操作 console.info(TAG, '2. ' + JSON.stringify(data)); }); }}2.在UI界面中通过eventHub.emit()办法触发该事件,在触发事件的同时,依据须要传入参数信息。 import common from '@ohos.app.ability.common';@Entry@Componentstruct Index { private context = getContext(this) as common.UIAbilityContext; eventHubFunc() { // 不带参数触发自定义“event1”事件 this.context.eventHub.emit('event1'); // 带1个参数触发自定义“event1”事件 this.context.eventHub.emit('event1', 1); // 带2个参数触发自定义“event1”事件 this.context.eventHub.emit('event1', 2, 'test'); // 开发者能够依据理论的业务场景设计事件传递的参数 } // 页面展现 build() { // ... }}3.在UIAbility的注册事件回调中能够失去对应的触发事件后果,运行日志后果如下所示。 ...

February 18, 2024 · 2 min · jiezi

关于前端:策略详解-通过知识库访问权限的管理保护知识资产

构建全面知识库是优质服务的外围,但爱护其中的敏感数据也是很重要的。因为知识库可能蕴含机密信息,必须采取严格的安全措施和访问控制,避免未受权人员拜访和滥用,确保客户隐衷和公司秘密的平安。而HelpLook是一个实用的工具,可帮忙组织和集体治理文档并提供平安保障。   | 知识库文档治理的必要性平安信息存储库的外围工作是强有力地爱护敏感和秘密数据,包含集体客户信息、财务记录和商业秘密。不足牢靠的安全措施可能导致未经受权的毁坏、泄露和平安威逼。因而,对敏感数据的爱护至关重要,以防止不必要的损失和危险。  1. 为用户增强身份验证身份验证是确认个人身份的形式,如明码、指纹、面部辨认等。在信息存储库中,身份验证旨在避免未受权人员拜访敏感数据,如部署严格的身份验证机制,确保仅受权人员可拜访数据。还需采取其余安全措施,如应用平安令牌和强明码策略,以加强数据安全性。   2. 分层权限治理除了验证单个用户之外,还能够采取基于角色的访问控制(RBAC)的形式,依据集体在组织中的角色调配数据可拜访性级别。与员工集体赋予权限不同,它是依据他们在组织中的角色来决定他们能够拜访哪些数据。例如,IT经理和客户服务代理因角色不同,数据拜访权限也不同。这确保只有真正须要的人才能拜访敏感数据,避免数据泄露。   3. 确保数据的完整性和及时性为确保信息存储库的安全性和功能性,需进行定期审查和内容更新,并采纳管制版本的程序,以确保用户取得最新、精确的数据。   | 如何通过HelpLook知识库进行权限设置治理?爱护机密信息和提供晦涩体验需严格控制拜访权限和保障信息准确性。HelpLook实用于不同规模的访问控制,灵便治理文档权限。管理员可自定义员工拜访权限,确保秘密平安并晋升用户体验。    1.独自分享栏目:公有拜访设置在许多企业中,敏感资料须要失去爱护,以防未经受权的人员拜访。管理员能够设置访问控制,限度员工的拜访权限。为方便管理,可将站点设为公有,并设置共享明码,只有受权人员能力拜访,以确保信息安全。   ① 后盾页面左侧“设置”->“站点设置”->“拜访权限”,把站点拜访权限设为“公有拜访”。   ② 选中栏目,点击“···”符号,抉择“分享链接”。 用户需输出明码才可关上分享链接。应用共享明码能够提供肯定水平的爱护,但这种明码存在被泄露的危险,所以可能须要常常更换。如果想要齐全保障文章的机密性,也能够抉择“敞开链接”选项。 *只能分享公布状态下的栏目和文章*分享链接默认长期有效,如需更改明码可点击“重置明码”随机生成新密码*右上角可点击抉择开启/敞开链接,敞开链接即敞开分享,无奈再从内部关上此链接    2.配置查看栏目的权限:验证码拜访&企业成员拜访· 形式一:验证码拜访 验证码是一种安全措施,它能够避免歹意的自动化攻打,如大规模的猜想明码或暴力破解。通过设置验证码,企业能够避免恶意软件、机器人或未经受权的人拜访知识库,爱护知识库的平安。 ① 后盾页面左侧“设置”->“站点设置”->“拜访权限”,把站点拜访权限设为“验证码拜访”。    ② 选中栏目,点击“···”符号,抉择“拜访权限”,即可给不同的分组配置查看该栏目的权限。   · 形式二:企业成员拜访 这是一种访问控制机制,企业能够通过设置哪些成员或部门有权拜访知识库,从而无效治理知识库的拜访权限。这不仅能够避免未经受权的拜访,还能够爱护企业的敏感信息或专有常识不被外泄。 ① 首先,你须要先同步企业微信的组织架构,具体操作可点击参考以下这篇文章:《HelpLook反对同步企微组织架构,治理外部知识库更不便!》 ② 后盾页面左侧“设置”->“站点设置”->“拜访权限”,把站点拜访权限设为“企业成员拜访”。   ③ 选中栏目,点击“···”符号,抉择“拜访权限”,即可给不同的部门和成员配置查看该栏目的权限。   各行各业的许多专业人士正在应用知识库软件来创立各种数字资源,从全面的在线知识库到具体用户手册、培训手册、常见问题解答(FAQs)、规范操作程序(SOP)、产品阐明、企业博客和分步阐明等。对于许多创作者来说,他们投入了大量工夫和精力来创立这些贵重资源,并不心愿这些资源被未经受权的人随便查看或获取。 而 HelpLook 这个平台的权限设置性能,可能精细化治理受权特定成员或用户拜访相干内容和文档,既避免信息泄露,又保障成员和用户高效获取信息,实现了知识库的平安和高效治理。 感兴趣能够通过邀请码【LookLook111】去注册应用HelpLook,解锁更多新性能。

February 18, 2024 · 1 min · jiezi

关于前端:程序员可以做一辈子吗大龄程序员出路在哪

前言随着2023年AI的呈现,大家看待程序员工作有了一丝丝危机感,特地是往年整个IT行业进入了前所未有的寒冬期,让程序员不得不思考将来的职业倒退。 甚至很多程序员一想到本人靠近35岁,焦虑感油然而生,这也是大部分程序员岗位的潜在危机意识。 有危机意识是对的,至多对将来抱有期待和布局 不至于真正待危机感来长期大刀阔斧。 35岁当前的程序员能做什么?首先,咱们想分明程序员有哪些特点? 第一,逻辑思维能力强;第二,性格内向、宁静不爱讲话;第三,须要放弃一生学习成长的习惯;第四,沟通表达能力弱;第五,思维固化。这些特点是大部分程序员在工作中出现的优缺点。其中最重大的就是性格内向,沟通表达能力欠佳。 程序员工作做久了,思维想问题更有逻辑性、感性,短少换位思考能力,这些能力在待业市场中特地重要。 程序员的中年危机现状毕竟一般程序员在互联网企业中占据95%,其中只有5%的程序员能做到治理岗,根本一生职业生涯不受35岁这道坎的影响. 但还有95%的程序干嘛呢? 要到转行做别的,例如:开滴滴、送外卖、或者本人经营商品店又或者本人开个小店。 大部分一般程序员都会走向这条路 因当初每年大学毕业生每年达1000W. 新进去的大学生须要机会待业学习,再者新人工资要求低,他们能加班加点,基于这种种劣势,企业喜爱招应届毕业生,成本低,这也是符合中国人的生意思维习惯。 作为程序员如何在35岁或者40之前稳住将来的倒退呢?随着互联网行业正迎来鸿蒙操作系统 华为鸿蒙零碎的崛起为各大从业物联网行业开拓了一条新的路线。 美团招聘官网近日更新了多个鸿蒙相干的社招开发岗位,为鸿蒙原生利用开发招兵买马。次要开发美团鸿蒙 App、公众点评鸿蒙 App。 其中的一个 “鸿蒙高级工程师(C++)” 职位就是面向美团鸿蒙 App 研发团队。依据介绍,具体的岗位职责为: 不少平台正在打算推出鸿蒙版 app。一位在线服务公司的产品经理示意,「目前 app 的 Android 版本与鸿蒙不兼容,鸿蒙 app 曾经在开发中了」。 网易云音乐: 京东: 微博: 同程旅行: 海尔: 金山办公软件: 脉脉平台显示,钉钉也公布了鸿蒙开发工程师岗位,月薪在 2 万元到 5 万元之间。 鸿蒙开发员的市场需求激增,许多公司纷纷公布鸿蒙开发相干岗位,并给出了丰富的薪资待遇。随着鸿蒙零碎的一直倒退和遍及,鸿蒙开发员的职业前景非常广阔,大家将有机会参加到各种翻新我的项目中,实现本人的职业倒退指标。 从以上内容能够剖析进去,对于开发者来说,每个零碎和生态切换周期都往往会继续十年以上,领先一个身位抓住初期的“红利暴发”至关重要。从2019年到2024,鸿蒙生态千帆起,轻舟已过万重山,现在投入鸿蒙生态“正过后”。 为了大家能够用更快的工夫学习鸿蒙开发必备技能,我特意整顿了一套《鸿蒙全套学习指南》,心愿能够帮忙到大家更分明的意识鸿蒙各大板块,大家能够依据本身状况借鉴参考: 《以及纯血鸿蒙OpenHarmony与HarmonyOS实战我的项目驱动教学思维导图》支付以下高清学习路线原图请点击→《鸿蒙4.0源码开发架构剖析pdf》纯血鸿蒙HarmonyOS根底技能学习路线图 以上分享的学习路线都适宜哪些人跟着学习?-应届生/计算机专业通过学习鸿蒙新兴技术,入行互联网,将来高起点待业。-0根底转行提前布局新方向,抓住风口,自我晋升,取得更多就业机会。-技术晋升/进阶跳槽倒退瓶颈期,晋升职场竞争力,疾速把握鸿蒙技术,享受蓝海红利。 写在最初如果你感觉这篇内容对你还蛮有帮忙,我想邀请你帮我三个小忙:点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。关注小编,同时能够期待后续文章ing,不定期分享原创常识。想要获取更多残缺鸿蒙最新VIP学习材料,请点击→《鸿蒙HarmonyOS分布式我的项目实战》

February 18, 2024 · 1 min · jiezi

关于前端:OpenHarmonyUIAbility组件基本用法

UIAbility组件的根本用法包含:指定UIAbility的启动页面以及获取UIAbility的上下文UIAbilityContext。 指定UIAbility的启动页面利用中的UIAbility在启动过程中,须要指定启动页面,否则利用启动后会因为没有默认加载页面而导致白屏。能够在UIAbility的onWindowStageCreate()生命周期回调中,通过WindowStage对象的loadContent()办法设置启动页面。 import UIAbility from '@ohos.app.ability.UIAbility';import Window from '@ohos.window';export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: Window.WindowStage) { // Main window is created, set main page for this ability windowStage.loadContent('pages/Index', (err, data) => { // ... }); } // ...}阐明在DevEco Studio中创立的UIAbility中,该UIAbility实例默认会加载Index页面,依据须要将Index页面门路替换为须要的页面门路即可。获取UIAbility的上下文信息UIAbility类领有本身的上下文信息,该信息为UIAbilityContext类的实例,UIAbilityContext类领有abilityInfo、currentHapModuleInfo等属性。通过UIAbilityContext能够获取UIAbility的相干配置信息,如包代码门路、Bundle名称、Ability名称和应用程序须要的环境状态等属性信息,以及能够获取操作UIAbility实例的办法(如startAbility()、connectServiceExtensionAbility()、terminateSelf()等)。 在UIAbility中能够通过this.context获取UIAbility实例的上下文信息。import UIAbility from '@ohos.app.ability.UIAbility';export default class EntryAbility extends UIAbility { onCreate(want, launchParam) { // 获取UIAbility实例的上下文 let context = this.context; // ... }}在页面中获取UIAbility实例的上下文信息,包含导入依赖资源context模块和在组件中定义一个context变量两个局部。import common from '@ohos.app.ability.common';@Entry@Componentstruct Index { private context = getContext(this) as common.UIAbilityContext; startAbilityTest() { let want = { // Want参数信息 }; this.context.startAbility(want); } // 页面展现 build() { // ... }}也能够在导入依赖资源context模块后,在具体应用UIAbilityContext前进行变量定义。 ...

February 18, 2024 · 1 min · jiezi

关于前端:不写一行代码在OSM上获取AOI数据

本文次要介绍如何在OpenStreetMap上获取AOI数据,点到为止 。原文可参考我的公众号文章《不写一行代码在OSM上获取地点的轮廓数据》有时候业务上须要在地图上展现AOI(趣味面)数据,每一个AOI对应的是一个不规则的关闭区域,由一组坐标示意,比方小区轮廓。国内的百度和高德地图都没有提供相应办法来获取这类数据(谈业务单干的话是有的),一般开发者根本拿不到。不过没关系,国外有一个OSM网站,在那里能够查问到指定类型的轮廓数据。 OSM介绍“OpenStreetMap 是一个由地图制作爱好者组成的社区。这些爱好者提供并保护世界各地对于路线、大道、咖啡馆、铁路车站等各种各样的数据。”编辑地图数据拜访网站 openstreetmap 反对【点、线、面】的形式在卫星地图上编辑地图。 查看地图数据还是openstreetmap网站,搜寻某一个地点,如果存在,则会在地图上展现它的轮廓,比方这里搜寻“世纪公园”: 如图展现了该地点的具体数据,包含是哪个用户在时候编辑的。 获取地图数据拜访网站 overpass-turbo 应用Overpass查询语言(Overpass QL)构建查问想要的数据,如:获取“上海市所有的小区” // @name 上海市所有小区/* This has been generated by the overpass-turbo wizard. The original search was: “residential=apartment in Shanghai”*/[out:json][timeout:25];// fetch area “Shanghai” to search in{{geocodeArea:Shanghai}}->.searchArea;// gather resultsnwr["landuse"="residential"](area.searchArea);// print resultsout geom;查问语句能够交给ChatGPT。点击“运行”按钮 如果查问到数据,能够点击右上角的“地图”按钮,而后点击地图工具里的放大镜:“缩放到数据”,就能够在地图上显示刚刚查问的后果了。 放大地图,展现小区的轮廓: 最初能够把数据导出,反对JSON、GPX、KML,以及图片格式。 另外,也能够间接申请接口查问: const axios = require('axios');// 构建Overpass查问const overpass_query = `[out:json];area[name="上海市"]->.a;(node["shop"="mall"](area.a); way["shop"="mall"](area.a); relation["shop"="mall"](area.a););out body;>;out skel qt;`;// Overpass API端点const overpass_url = "https://overpass-api.de/api/interpreter";// 发送Overpass查问申请axios.post(overpass_url, overpass_query).then(response => { const data = response.data; console.log('data:', data);}).catch(error => { console.error('Error:', error);});须要留神的是,数据量太大会导致查问申请报错停止,这时候能够到网页上查问试试。 ...

February 18, 2024 · 2 min · jiezi

关于前端:jvslogic循环操作在逻辑引擎框架下的重要性及配置技巧

在当今数字化、信息化的社会中,数据处理和逻辑运算成为了许多业务和利用的外围。循环操作作为数据处理中一种常见的业务模式,其配置和实现的效率与准确性间接影响了整个业务流程的运行成果。因而,把握循环操作的配置办法,尤其是在逻辑引擎的框架下,显得尤为重要。 逻辑引擎的循环解决配置循环操作是咱们经常所见的业务解决形式,咱们接下来通过一个简略的实例来理解在逻辑引擎中如何配置循环操作。 如下图所示,在一个列表页上,有个表级按钮,这个按钮是将本列表页的所有 “数量” 都 +1 配置的思路通过这个按钮,触发一个逻辑,这个逻辑对本表的数据进行循环对每一行的数据进行解决,解决的内容就是 对“数量”字段+1 。那么咱们接下来看看是如何配置实现的:1、配置对应列表页的具体字段,点击保留,零碎主动创立数据模型 2、零碎会主动创立 对应的数据模型,对本数据模型命名为“逻辑引擎批改模型数据” 能够看看具体模型的字段: 3、创立一个表级按钮,这个按钮触发一个逻辑 4、点击按钮关联的逻辑的设计 依据理论状况抉择已有逻辑执行或者新建逻辑执行 5、进入逻辑配置,设置配置对应逻辑,如图设置两个节点,第一个节点是查问模型中的数据: 第二个节点为执行一个循环操作: 在动静设置中,弹出公式对话框 6、进入循环体设计点击循环容器配置 留神:在配置循环节点后,须要触发逻辑执行测试一遍,在历史记录里点开查看执行后果,并点击构造定义再援用测试,而后在更新模型节点才会获取到循环节点的参数。如果循环容器数据来源于表单中表格数据,则须要从表单处触发提交数据。 点击确定并保留后切换至循环容器画布再设置更新模型节点。设置更新模型的组件 设置更新的数据处理的公式 设置以后更新的数据行: 实现的成果如下图所示: 在线demo:http://jvs-logic.bctools.cn/gitee地址:https://gitee.com/software-minister/jvs-logic

February 18, 2024 · 1 min · jiezi

关于前端:React-Native-导航示例教程

首发于公众号 前端混合开发,欢送关注。挪动应用程序由多个屏幕组成。在构建挪动应用程序时,首要思考的是如何解决用户在应用程序中的导航问题,例如屏幕的展现和屏幕之间的切换。 React Navigation 是 React Native 最驰名的导航库之一。在本教程中,咱们将探讨 React Native 中导航的基础知识,介绍如何开始应用 React Navigation,并通过一些 React Native 导航示例进行解说。 什么是 React NavigationReact Navigation 是一个独立的库,可帮忙咱们在 React 应用程序中实现导航性能。 React Navigation 是用 JavaScript 编写的,并不间接应用 iOS 和 Android 上的原生导航 API。相同,它从新创立了这些 API 的某些子集。这样就能够集成第三方 JS 插件,实现最大水平的自定义,并且更易于调试,而无需学习 Objective-C、Swift、Java、Kotlin 等语言。 什么是 React Native NavigationReact Native Navigation 是一个受欢迎的 React Navigation 代替计划。它是一个依赖于并且被设计用于与 React Native 一起应用的模块。React Native Navigation 有一点不同,它间接应用 iOS 和 Android 上的原生导航 API,这使得它可能提供更加原生的外观和感觉。在撰写本文时,React Native Navigation 的以后稳固版本是 React Navigation 6.1。 另一种抉择:React Router NativeReact Router Native 是在 React Native 应用程序中实现导航性能的另一种解决方案。它由 Remix 团队开发。 ...

February 18, 2024 · 6 min · jiezi

关于前端:HarmonyOSState装饰器组件内状态

@State装璜的变量,或称为状态变量,一旦变量领有了状态属性,就和自定义组件的渲染绑定起来。当状态扭转时,UI会产生对应的渲染扭转。在状态变量相干装璜器中,@State是最根底的,使变量领有状态属性的装璜器,它也是大部分状态变量的数据源。阐明从API version 9开始,该装璜器反对在ArkTS卡片中应用。概述@State装璜的变量,与申明式范式中的其余被装璜变量一样,是公有的,只能从组件外部拜访,在申明时必须指定其类型和本地初始化。初始化也可抉择应用命名参数机制从父组件实现初始化。@State装璜的变量领有以下特点:@State装璜的变量与子组件中的@Prop装璜变量之间建设单向数据同步,与@Link、@ObjectLink装璜变量之间建设双向数据同步。@State装璜的变量生命周期与其所属自定义组件的生命周期雷同。 装璜器应用规定阐明装璜器应用规定阐明变量的传递/拜访规定阐明图1 初始化规定图示察看变动和行为表现并不是状态变量的所有更改都会引起UI的刷新,只有能够被框架察看到的批改才会引起UI刷新。该大节去介绍什么样的批改能力被察看到,以及察看到变动后,框架的是怎么引起UI刷新的,即框架的行为表现是什么。察看变动当装璜的数据类型为boolean、string、number类型时,能够察看到数值的变动。// for simple type@State count: number = 0;// value changing can be observedthis.count = 1;当装璜的数据类型为class或者Object时,能够察看到本身的赋值的变动,和其属性赋值的变动,即Object.keys(observedObject)返回的所有属性。例子如下。申明ClassA和Model类。class ClassA { public value: string; constructor(value: string) { this.value = value;}} class Model { public value: string; public name: ClassA; constructor(value: string, a: ClassA) { this.value = value;this.name = a;}}@State装璜的类型是Model// class类型@State title: Model = new Model('Hello', new ClassA('World'));对@State装璜变量的赋值。// class类型赋值this.title = new Model('Hi', new ClassA('ArkUI'));对@State装璜变量的属性赋值。// class属性的赋值this.title.value = 'Hi';嵌套属性的赋值察看不到。// 嵌套的属性赋值察看不到this.title.name.value = 'ArkUI';当装璜的对象是array时,能够察看到数组自身的赋值和增加、删除、更新数组的变动。例子如下。 申明Model类。class Model { public value: number; constructor(value: number) { ...

February 17, 2024 · 2 min · jiezi

关于前端:译-每个开发人员都应该知道的五大Nodejs功能

题目:Top 5 Node.js Features Every Developer Should Know 作者:Danusha Navod 链接:https://blog.bitsrc.io/top-5-features-of-nodejs-e49d1c68f4a7 无论你是经验丰富的 Node.js 开发人员还是老成持重的新人开发者,总有一些货色在 Node.js 中期待着咱们去摸索。 在本文中,我将探讨能够加强整体体验的五个Node.js性能,它们是: Worker ThreadsCluster Process ModuleBuilt-in HTTP/2 SupportStreams APIREPL让咱们逐个探讨这些性能中的每一个。但在此之前,让咱们疾速看一下 Node.js 的单线程行为。理解这个基本知识将为咱们将要深入研究的性能提供有价值的背景信息。 单线程 Node.js:疾速概述Node.js 以其单线程架构而闻名。但更精确地说,称其为“单线程事件循环”。 但为什么要应用单线程事件循环呢?最后,Node.js 是为 I/O 绑定工作(如 Web 服务器)设计的。对于这些,创立多个线程会减少治理线程同步和上下文切换的开销和复杂性。相同,Node.js 采纳了事件驱动的办法。 这种行为给 Node.js 带来了一些长处和局限性。 长处还能够,然而局限性呢?Node.js 单线程事件循环带来的次要限度如下: 受 CPU 限度的工作可能会阻塞循环: 大量的计算可能会“解冻”循环,从而影响对其余申请的响应能力。没有真正的并行性: 工作依然一个接一个地执行,而不是同时执行。为了解决这些限度,Node.js引入了各种Node.js版本的工作线程和集群模块。这两个性能能够真正影响咱们的软件开发之旅。因而,让咱们在接下来的局部中深入研究工作者线程 Worker Threads和集群模块 Cluster Module,以理解它们令人难以置信的有用性。 之后,咱们将摸索另外三个 Node.js 性能,它们能够在各种状况下提供帮忙。敬请关注! 1. Worker Threads 工作者线程<img src="https://fs.lwmc.net/uploads/2024/02/1708076388928-202402161739358.webp" alt="0*uHcdivbqfc5PwBei" style="zoom:50%;" /> 尽管单线程事件循环善于解决 I/O 密集型工作,但 Node.js 的 worker_threads 模块使你可能在解决 CPU 密集型 时解脱其限度运行。 设想一下,多个厨师在厨房里独立工作,同时筹备不同的菜肴(工作)——这就是工作者线程的实质! ...

February 17, 2024 · 3 min · jiezi

关于前端:测试运维性能测试经验文档总结第3篇VuGen详解已分享附代码

本系列文章md笔记(已分享)次要探讨性能测试相干常识。入门阶段:意识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),罕用性能测试指标-(吞吐量、并发数、响应工夫、点击数...),性能测试工具抉择。性能脚本:1. LoadRunner介绍,2. 脚本录制、运行、参数化,3. 关联、检查点、事务、集合点。性能场景:1. 场景分类、场景设计、场景运行策略,2. 资源监控、SLA、IP Wizard利用。性能剖析:1. 摘要报告、事务图表、图表合并,2. 穿插后果、拐点剖析、Web我的项目资源剖析。全套笔记和代码自取移步gitee仓库: gitee仓库获取残缺文档和代码感兴趣的小伙伴能够自取哦,欢送大家点赞转发~共 5 章,25 子模块 <center>性能测试工具-LoadRunner</center>学习指标1. 了解基于VuGen的脚本录制2. 把握参数化的应用办法3. 把握关联的应用办法4. 把握检查点的应用办法5. 把握事务的应用办法6. 把握集合点的利用<center>VuGen操作</center>一、VuGen介绍VuGen(Virtual User Generator)录制客户端和服务器之间的相干交互流动,它将主动生成相干模仿 理论状况的API(Application Programming Interface)函数。 提醒: 1. LR录制脚本性能因为兼容性问题,十分不好使,所以咱们平时在工作中也不倡议应用录制的形式; 2. 因为兼容性问题和录制会产生多余的操作,因而个别都是手写脚本; 3. 为了更好的学习VuGen,咱们基于LR11自带的订票零碎为案例,练习应用VuGen。案例1需要:1. 录制机票网站的登录、退出脚本应用: 1. 启动网站服务程序 2. 拜访地址:http://127.0.0.1:1080/WebTours/ 3. 登录账户:用户名:jojo 明码:bean【案例】-启动服务程序 地位:开始菜单 -> HP LoadRunner -> Samples -> Web -> Start Web Server提醒:WebTours我的项目默认应用1080端口,如果启动失败,看是否端口被占用或者是否有权限; 启动胜利界面 二、案例1-施行步骤剖析1. 启动VuGen2. 创立脚本3. 抉择录制协定 Web(HTTP/HTML)【重要】4. 录制设置5. 脚本录制6. 运行脚本2.1 启动VuGen形式一:间接运行VuGen图标启动【举荐】 开始菜单 -> HP LoadRunner -> Applications -> Virtual User Generator ...

February 17, 2024 · 2 min · jiezi

关于前端:速速报名30万奖金不容错过OpenTiny-挑战赛开发指南来咯

OpenTiny 正在加入凋谢原子开源基金会的开源大赛,目前大赛流动正在炽热进行中,报名截止工夫是 2024-03-15,还没上车的敌人们抓紧时间,报名参赛即有机会取得丰富奖金,一等奖10万,总共30万。 OpenTiny 前端 Web 利用开发挑战赛报名链接:https://competition.atomgit.com/competitionInfo?id=341b80d53f... 点击报名按钮即可报名参赛: 报名胜利之后,请分割 OpenTiny 小助手:opentiny-official(微信号),拉你进交换群。 为了让大家更好地实现挑战,咱们特意筹备了一份参赛指南,心愿对你有帮忙。 赛题及资源围绕 OpenTiny 开源我的项目,一共有7个赛题: 开发 TinyReact 组件库开发 TinySolid 组件库开发 TinyInula 组件库新组件库物料适配接入 TinyEngine 低代码引擎开发 TinyEngine 低代码引擎通用性能插件基于 TinyEngine 低代码引擎二次开发设计器打造畛域专属设计器AI 智能助手、AI 技术与 TinyEngine 低代码引擎性能的联合落地前3个赛题与 OpenTiny 组件库无关,次要是基于 OpenTiny 组件库的 rendereless 无渲染组件架构,实现多种框架的组件库,要求复用现有的 renderless 子包逻辑。 这3个题目能够参考以下文章和视频: [文章]TinyVue 奉献指南:https://github.com/opentiny/tiny-vue/blob/dev/CONTRIBUTING.zh-CN.md[文章]原来 TinyVue 组件库跨框架(Vue2、Vue3、React、Solid)是这样实现的?[文章]GaoNeng:我是如何为OpenTiny奉献新组件的?[视频]TinyVue 实现一套代码同时反对 Vue2 和 Vue3 的原理:https://www.bilibili.com/video/BV1QP411y7cD/[视频]OpenTiny 黑科技:重写组件逻辑和模板替换:https://www.bilibili.com/video/BV1th4y187Xh/后4个赛题与 TinyEngine 低代码引擎无关,围绕低代码最实用的场景,拓展低代码生态,包含导入新组件库物料、开发通用插件、开发畛域专属设计器、与 AI 联合。 参考资料: [文章]TinyEngine奉献指南:https://github.com/opentiny/tiny-engine/blob/develop/CONTRIBUTING.zh-CN.md[文章]低代码引擎 TinyEngine 正式开源!!![视频]TinyEngine 直播答疑:https://www.bilibili.com/video/BV16j411e7y2/开发须知报名胜利之后,就能够开始开发,代码须要提交到 atomgit 代码仓库。 OpenTiny 组织:https://atomgit.com/opentiny 每个队伍有一个本人的专属仓库,以队伍编号命名,参赛团队成员须要将代码提交到这个仓库中才行。 比方 000001 队伍,他们的仓库地址是:https://atomgit.com/opentiny/000001 ...

February 17, 2024 · 1 min · jiezi

关于前端:HarmonyOS状态管理概述

在前文的形容中,咱们构建的页面多为动态界面。如果心愿构建一个动静的、有交互的界面,就须要引入“状态”的概念。 图1 效果图 下面的示例中,用户与应用程序的交互触发了文本状态变更,状态变更引起了UI渲染,UI从“Hello World”变更为“Hello ArkUI”。 在申明式UI编程框架中,UI是程序状态的运行后果,用户构建了一个UI模型,其中利用的运行时的状态是参数。当参数扭转时,UI作为返回后果,也将进行对应的扭转。这些运行时的状态变动所带来的UI的从新渲染,在ArkUI中统称为状态管理机制。 自定义组件领有变量,变量必须被装璜器装璜才能够成为状态变量,状态变量的扭转会引起UI的渲染刷新。如果不应用状态变量,UI只能在初始化时渲染,后续将不会再刷新。 下图展现了State和View(UI)之间的关系。 View(UI):UI渲染,指将build办法内的UI形容和@Builder装璜的办法内的UI形容映射到界面。State:状态,指驱动UI更新的数据。用户通过触发组件的事件办法,扭转状态数据。状态数据的扭转,引起UI的从新渲染。基本概念状态变量:被状态装璜器装璜的变量,状态变量值的扭转会引起UI的渲染更新。示例:@State num: number = 1,其中,@State是状态装璜器,num是状态变量。惯例变量:没有被状态装璜器装璜的变量,通常利用于辅助计算。它的扭转永远不会引起UI的刷新。以下示例中increaseBy变量为惯例变量。数据源/同步源:状态变量的原始起源,能够同步给不同的状态数据。通常意义为父组件传给子组件的数据。以下示例中数据源为count: 1。命名参数机制:父组件通过指定参数传递给子组件的状态变量,为父子传递同步参数的次要伎俩。示例:CompA: ({ aProp: this.aProp })。从父组件初始化:父组件应用命名参数机制,将指定参数传递给子组件。子组件初始化的默认值在有父组件传值的状况下,会被笼罩。示例:@Componentstruct MyComponent { @State count: number = 0; private increaseBy: number = 1; build() { }}@Componentstruct Parent { build() { Column() { // 从父组件初始化,笼罩本地定义的默认值 MyComponent({ count: 1, increaseBy: 2 }) } }}初始化子节点:父组件中状态变量能够传递给子组件,初始化子组件对应的状态变量。示例同上。本地初始化:在变量申明的时候赋值,作为变量的默认值。示例:@State count: number = 0。装璜器总览ArkUI提供了多种装璜器,通过应用这些装璜器,状态变量不仅能够察看在组件内的扭转,还能够在不同组件层级间传递,比方父子组件、跨组件层级,也能够察看全局范畴内的变动。依据状态变量的影响范畴,将所有的装璜器能够大抵分为: 治理组件领有状态的装璜器:组件级别的状态治理,能够察看组件内变动,和不同组件层级的变动,但须要惟一察看同一个组件树上,即同一个页面内。治理利用领有状态的装璜器:利用级别的状态治理,能够察看不同页面,甚至不同UIAbility的状态变动,是利用内全局的状态治理。从数据的传递模式和同步类型层面看,装璜器也可分为: 只读的单向传递;可变更的双向传递。图示如下,具体装璜器的介绍,可详见治理组件领有的状态和治理利用领有的状态。开发者能够灵便地利用这些能力来实现数据和UI的联动。上图中,Components局部的装璜器为组件级别的状态治理,Application局部为利用的状态治理。开发者能够通过@StorageLink/@LocalStorageLink实现利用和组件状态的双向同步,通过@StorageProp/@LocalStorageProp实现利用和组件状态的单向同步。 治理组件领有的状态,即图中Components级别的状态治理: @State:@State装璜的变量领有其所属组件的状态,能够作为其子组件单向和双向同步的数据源。当其数值扭转时,会引起相干组件的渲染刷新。@Prop:@Prop装璜的变量能够和父组件建设单向同步关系,@Prop装璜的变量是可变的,但批改不会同步回父组件。@Link:@Link装璜的变量和父组件构建双向同步关系的状态变量,父组件会承受来自@Link装璜的变量的批改的同步,父组件的更新也会同步给@Link装璜的变量。@Provide/@Consume:@Provide/@Consume装璜的变量用于跨组件层级(多层组件)同步状态变量,能够不须要通过参数命名机制传递,通过alias(别名)或者属性名绑定。@Observed:@Observed装璜class,须要察看多层嵌套场景的class须要被@Observed装璜。独自应用@Observed没有任何作用,须要和@ObjectLink、@Prop连用。@ObjectLink:@ObjectLink装璜的变量接管@Observed装璜的class的实例,利用于察看多层嵌套场景,和父组件的数据源构建双向同步。阐明仅@Observed/@ObjectLink能够察看嵌套场景,其余的状态变量仅能察看第一层,详情见各个装璜器章节的“察看变动和行为表现”大节。治理利用领有的状态,即图中Application级别的状态治理: AppStorage是应用程序中的一个非凡的单例LocalStorage对象,是利用级的数据库,和过程绑定,通过@StorageProp和@StorageLink装璜器能够和组件联动。AppStorage是利用状态的“中枢”,将须要与组件(UI)交互的数据存入AppStorage,比方长久化数据PersistentStorage和环境变量Environment。UI再通过AppStorage提供的装璜器或者API接口,拜访这些数据。框架还提供了LocalStorage,AppStorage是LocalStorage非凡的单例。LocalStorage是应用程序申明的利用状态的内存“数据库”,通常用于页面级的状态共享,通过@LocalStorageProp和@LocalStorageLink装璜器能够和UI联动。其余状态治理性能@Watch用于监听状态变量的变动。 $$运算符:给内置组件提供TS变量的援用,使得TS变量和内置组件的外部状态放弃同步。 要想成为一名合格的鸿蒙高级开发工程师,以上知识点是必须要把握的,除此之外,还须要把握一些鸿蒙利用开发相干的一些技术 为了可能让大家跟上互联网时代的技术迭代,在这里跟大家分享一下我本人近期学习心得以及参考网上材料整顿出的一份最新版的鸿蒙学习晋升材料,有须要的小伙伴自行支付,限时开源,先到先得~~~~ 支付以下高清学习路线原图请点击→《鸿蒙HarmonyOS分布式我的项目实战》纯血鸿蒙HarmonyOS根底技能学习路线图 支付以上残缺高清学习路线图,请点击→《一小时疾速意识HarmonyOS》小编本人整顿的局部学习材料(蕴含有高清视频、开发文档、电子书籍等) 以上分享的学习路线都适宜哪些人跟着学习?-应届生/计算机专业通过学习鸿蒙新兴技术,入行互联网,将来高起点待业。-0根底转行提前布局新方向,抓住风口,自我晋升,取得更多就业机会。-技术晋升/进阶跳槽倒退瓶颈期,晋升职场竞争力,疾速把握鸿蒙技术,享受蓝海红利。 写在最初如果你感觉这篇内容对你还蛮有帮忙,我想邀请你帮我三个小忙:点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。关注小编,同时能够期待后续文章ing,不定期分享原创常识。想要获取更多残缺鸿蒙最新VIP学习材料,请点击→《鸿蒙4.0源码开发架构剖析pdf》 ...

February 17, 2024 · 1 min · jiezi

关于前端:Electron实战之进程间通信

过程间通信(IPC)并非仅限于 Electron,而是源自甚至早于 Unix 诞生的概念。只管“过程间通信”这个术语确实发明于何时并不分明,但将数据传递给另一个程序或过程的理念能够追溯至 1964 年,过后 Douglas McIlroy 在 Unix 的第三版(1973 年)中形容了 Unix 管道的概念。 We should have some ways of coupling programs like garden hose--screw in another segment when it becomes when it becomes necessary to massage data in another way.例如,咱们能够通过应用管道操作符(|)将一个程序的输入传递到另一个程序。 # 列出当前目录下的所有.ts文件ls | grep .ts在 Unix 零碎中,管道只是 IPC 的一种模式,还有许多其余模式,比方信号、音讯队列、信号量和共享内存。 一、ipcMain 和 ipcRenderer与 Chromium 雷同,Electron 应用过程间通信(IPC)来在过程之间进行通信,在介绍 Electron 过程间通信前,咱们必须先认识一下 Electron 的 2 个模块。 ipcMain 是一个仅在主过程中以异步形式工作的模块,用于与渲染过程替换音讯。ipcRenderer 是一个仅在渲染过程中以异步形式工作的模块,用于与主过程替换音讯。ipcMain 和 ipcRenderer 是 Electron 中负责通信的两个次要模块。它们继承自 NodeJS 的 EventEmitter 模块。在 EventEmitter 中容许咱们向指定 channel 发送音讯。channel 是一个字符串,在 Electron 中 ipcMain 和 ipcRenderer 应用它来收回和接管事件/数据。 ...

February 17, 2024 · 3 min · jiezi

关于前端:OpenHarmonyUIAbility组件生命周期

概述 当用户关上、切换和返回到对应利用时,利用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调能够晓得以后UIAbility实例的某个状态产生扭转,会通过UIAbility实例的创立和销毁,或者UIAbility实例产生了前后台的状态切换。 UIAbility的生命周期包含Create、Foreground、Background、Destroy四个状态,如下图所示。 图1 UIAbility生命周期状态 生命周期状态阐明Create状态Create状态为在利用加载过程中,UIAbility实例创立实现时触发,零碎会调用onCreate()回调。能够在该回调中进行利用初始化操作,例如变量定义资源加载等,用于后续的UI展现。 import UIAbility from '@ohos.app.ability.UIAbility';import AbilityConstant from '@ohos.app.ability.AbilityConstant';import Want from '@ohos.app.ability.Want';export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { // 利用初始化 } // ...}阐明:Want是对象间信息传递的载体,能够用于利用组件间的信息传递。WindowStageCreate和WindowStageDestroy状态UIAbility实例创立实现之后,在进入Foreground之前,零碎会创立一个WindowStage。WindowStage创立实现后会进入onWindowStageCreate()回调,能够在该回调中设置UI加载、设置WindowStage的事件订阅。 图2 WindowStageCreate和WindowStageDestroy状态 在onWindowStageCreate()回调中通过loadContent()办法设置利用要加载的页面,并依据须要调用on('windowStageEvent')办法订阅WindowStage的事件(获焦/失焦、可见/不可见)。 import UIAbility from '@ohos.app.ability.UIAbility';import window from '@ohos.window';export default class EntryAbility extends UIAbility { // ... onWindowStageCreate(windowStage: window.WindowStage) { // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) try { windowStage.on('windowStageEvent', (data) => { let stageEventType: window.WindowStageEventType = data; switch (stageEventType) { case window.WindowStageEventType.SHOWN: // 切到前台 console.info('windowStage foreground.'); break; case window.WindowStageEventType.ACTIVE: // 获焦状态 console.info('windowStage active.'); break; case window.WindowStageEventType.INACTIVE: // 失焦状态 console.info('windowStage inactive.'); break; case window.WindowStageEventType.HIDDEN: // 切到后盾 console.info('windowStage background.'); break; default: break; } }); } catch (exception) { console.error('Failed to enable the listener for window stage event changes. Cause:' + JSON.stringify(exception)); } // 设置UI加载 windowStage.loadContent('pages/Index', (err, data) => { // ... }); }}对应于onWindowStageCreate()回调。在UIAbility实例销毁之前,则会先进入onWindowStageDestroy()回调,能够在该回调中开释UI资源。例如在onWindowStageDestroy()中登记获焦/失焦等WindowStage事件。 ...

February 16, 2024 · 2 min · jiezi

关于前端:新年福利TailWindCSSViteVue3打造个性化在线简历项目欢迎Fork

前言祝大家在新的一年:大吉大利,身体健康,迎大运,发大财!吐槽轻易侃侃,无感请间接跳过到注释。注册了快 7 年的账号,思否第一篇文 你敢信 ~~ 哈哈,明天倒闭了。至于契机嘛… 司倒,就业之 T_T。最近刷看到相似的帖子也挺多的,ORZ 释怀,真不是来输入负面情绪的 ~ 主菜马上就到。 y 情后各行各业都不容易啊,待了六年的公司也熬不住去年末倒下了(还有 3 个月工资拖欠着,心愿仲裁给力吧)。集体也长时间呆在舒服区,也没经验社会毒打(只面过他人,凭良心说你背的我还真不会),大环境江河日下,时常感到焦虑。通过了几天的 emo 期(并没有,疯狂打球笑嘻嘻 … 但心里苦)调整好了,生存终归是要持续的。 给本人放放假,顺便补补(哥们调整好了),为了找到新工作,本人制订了如下小指标: ✅ 1. 重启技术博客 https://blog.fridolph.top,保持输入✅ 2. 做几个实战我的项目(于是这篇文就诞生了)⏰ 3. 整顿前端常识纲要,造成思维导图⏰ 4. 逛掘金,刷面经 + 整顿(有些想法,于是开了新坑,再过几天就 OK) 5. 找到工作前封印Steam - "你算什么男人算什么男人,眼睁睁看帕鲁走却充耳不闻" T_T我本来是想重构一下我之前写的在线简历,采纳 Vue3 + TS + Pinia 来实现。几下敲完代码,我本人都感觉没啥货色。简历上集体作品,开源那两栏空洞无物 = = 之前老刷到tailwind的文章,遂决定学习换个心态尝试学习,加到我的项目中,现切现做,这瓜相对保熟。 之前刷到 前端发展趋势的预测 之类文,很同意一些观点。学历,简历只是敲门砖,在这个越来越卷的环境,竞争力有余,当前还是要多关注学习下 Node、Next.js,伪全栈万金油是个可选方向。通过这篇文章你能够 学会在我的项目中灵便应用 TailWindCSS 理解 TailWindCSS 的外围概念 取得我整顿的一份 Tss 速记指南⬆️ 随我一起学习 CSS “新” 个性 本我的项目 Vite + Vue3 实际及相干优化 Fork + Star 即得一份在线简历模板,现改现用github: https://github.com/Fridolph/my-resume在线浏览:https://resume.fridolph.top/ ...

February 16, 2024 · 9 min · jiezi

关于前端:HTML情人节给npy一颗炫酷的

闲聊兄弟们,这不情人节快要到了,我该送女朋友什么呢?哦,对了,差点忘了,我如同没有女朋友。 不过这不影响咱们要过这个节日,咱们能够学习技术。举个简略的: 比如说,明天咱们学习了如何画一颗炫酷的,当前找到了女朋友忘筹备礼物了,是不是能够用这个救救场,。 开干首先,咱们须要画一个的形态进去,例如上面这样这个简略,咱们通过豆包搜一波公式即可。公式如下: 思路:利用下面的公式,咱们只须要依据许许多多的t去求得x,y的坐标,而后将这些点画进去即可。应用Canvas时用到的一些函数解释,这里moveTo和lineTo还是有点上头的:// 获取到一个绘图环境对象,这个对象提供了丰盛的API来执行各种图形绘制和图像处理操作 ctx = canvas.getContext('2d');/** 该办法用于在以后门路上从以后点画一条直线到指定的 (x, y) 坐标。当调用 lineTo 后,门路会主动延长到新指定的点,并且如果之前曾经调用了 beginPath() 或 moveTo(),则这条线段会连贯到前一个点。要看到理论的线条显示在画布上,须要调用 stroke() 办法。*/ctx.lineTo(x, y);/**此办法用于挪动以后门路的起始点到指定的 (x, y) 坐标地位,但不会画出任何可见的线条。它次要用于开始一个新的子门路或者在现有门路之间创立空隙。当你想要从一个中央不间断地挪动到另一个中央绘制时,就须要应用 moveTo。*/ctx.moveTo(x, y);情谊提醒:下面的函数是个倒的爱心,所以Y轴要取正数。<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>LoveCanvas</title> <style> body { background: black; } </style> </head> <body> <canvas id="canvas"></canvas> </body> <script> const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const themeColor = "#d63e83"; // 爱心线的实体 let loveLine = null; // 保留爱心方程的坐标 let XYPoint = []; // 线条宽度,可自定义批改 const lineWidth = 5; /**失去爱心方程的坐标 **/ function getXYPoint() { const pointArr = []; const enlargeFactor = 20; for (let t = 0; t < 2 * Math.PI; t += 0.01) { const x = 16 * Math.pow(Math.sin(t), 3) * enlargeFactor; const y = -( 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t) ) * enlargeFactor; // 将爱心的坐标进行居中 pointArr.push({ x: canvas.width / 2 + x, y: canvas.height / 2 + y }); } return pointArr; } class LoveLine { constructor(pointXY) { this.pointXY = pointXY; } draw() { for (let point of this.pointXY) { ctx.lineTo(point.x, point.y); ctx.moveTo(point.x, point.y); } ctx.strokeStyle = themeColor; ctx.lineWidth = lineWidth; ctx.stroke(); ctx.fill(); } } function initLoveLine() { XYPoint = getXYPoint(); loveLine = new LoveLine(XYPoint); loveLine.draw(); } function init() { const width = window.innerWidth; const height = window.innerHeight; canvas.width = width; canvas.height = height; initLoveLine(); } // 如果须要放弃在窗口大小变动时也实时更新canvas尺寸 window.onresize = init; init(); </script></html>粒子特效这么快就做好了,是不是显得不是很够诚意? ...

February 14, 2024 · 4 min · jiezi

关于前端:SAP-UI5-sapuicoreutilMockServersimulate-方法介绍

<article class=“article fmt article-content”><p>该办法通过指定模仿数据的元数据 URL 和根本 URL 来模仿现有 OData 服务。 </p><p>服务器依据服务元数据配置申请处理程序。 </p><p>每个实体类型的模仿数据须要独自存储在独自的 JSON 文件中。 JSON 文件的名称须要与实体类型的名称匹配。 如果没有指定模仿数据的根本 url,则模仿数据将从元数据生成。</p><p>在 SAP UI5 和 openUI5 的开发过程中,<code>sap.ui.core.util.MockServer.simulate</code> 是一个外围 API,它用于创立模仿服务,以便在开发阶段模仿后端服务的响应。这个 API 特地适宜于前端开发人员在后端服务尚未开发实现时的需要,或者是在进行单元测试时须要模仿后端服务的场景。</p><h3><code>sap.ui.core.util.MockServer.simulate</code> API 的作用</h3><p><code>sap.ui.core.util.MockServer.simulate</code> 的次要性能是读取 OData 服务的元数据(通常是一个 <code>.xml</code> 文件)和提供的 JSON 数据,基于这些信息构建一个模仿服务器。这个模仿服务器能够拦挡理论的服务调用并返回配置的 JSON 数据,从而模仿后端服务的行为。应用这个 API 能够帮忙开发人员在后端服务未就绪的状况下持续进行前端的开发和测试,极大地提高了开发的灵活性和效率。</p><h3>应用场合</h3><ol><li><strong>前端开发和测试</strong>:当后端服务还在开发或者维护阶段,前端开发工作通常会受到妨碍。应用 <code>sap.ui.core.util.MockServer.simulate</code> 能够无缝地模仿后端服务,保障前端开发和测试的连续性。</li><li><strong>教学和演示</strong>:在教学或者做技术演示的时候,可能没有现成的后端服务可用。通过模仿数据服务,能够很容易地展现应用程序的性能,而不须要理论的后端反对。</li><li><strong>性能测试</strong>:在进行性能测试时,实在的后端服务可能因为各种起因(如网络提早、服务不稳固等)影响测试后果的准确性。通过应用模仿服务,能够在一个更加可控的环境下进行测试。</li></ol><h3>应用示例</h3><p>假如有一个 OData 服务,提供产品信息的查问性能。咱们想要模仿这个服务的行为,能够依照以下步骤应用 <code>sap.ui.core.util.MockServer.simulate</code>:</p><ol><li><strong>筹备元数据和 JSON 数据</strong>:首先须要筹备一个 OData 服务的元数据文件 <code>metadata.xml</code>,形容服务的构造。同时,筹备一个 JSON 文件 <code>products.json</code>,蕴含了模仿的产品数据。</li><li><p><strong>配置和启动 MockServer</strong>:</p><pre><code class=“javascript”>// 导入 MockServer 类sap.ui.define([ sap/ui/core/util/MockServer], function(MockServer) { // 创立一个 MockServer 实例 var oMockServer = new MockServer({ rootUri: http://example.com/odata/ }); // 调用 simulate 办法,指定元数据文件和模仿数据文件的门路 oMockServer.simulate(./path/to/metadata.xml, { sMockdataBaseUrl: ./path/to/data/, bGenerateMissingMockData: true }); // 启动 MockServer oMockServer.start(); // 其余逻辑});</code></pre></li></ol><p>在这个例子中,<code>simulate</code> 办法接管两个参数:元数据文件的门路和一个配置对象。配置对象中,<code>sMockdataBaseUrl</code> 指定了模仿数据文件的根底门路,<code>bGenerateMissingMockData</code> 示意当找不到匹配的模仿数据时,是否主动生成数据。</p><p>通过这种形式,当应用程序尝试拜访 <code>http://example.com/odata/Products</code> 时,实际上会被 MockServer 拦挡,并返回 <code>products.json</code> 中定义的数据,而不是收回实在的网络申请。这种办法极大中央便了前端开发和测试,特地是在后端服务不可用或者开发中的状况。</p><p>总结而言,<code>sap.ui.core.util.MockServer.simulate</code> 是 SAP UI5 和 openUI5 开发者工具箱中的一个弱小工具,它使得前端开发人员可能在没有后端服务的状况下,独立进行开发和测试。通过模仿后端服务的响应,开发人员能够提前发现并修复前端利用中的问题,减速开发流程,确保利用的品质和性能。此外,这个 API 的应用也促成了前后端开发的解耦,使得团队成员能够更加专一于本人的工作畛域,从而进步开发效率和合作的灵活性。</p></article> ...

February 12, 2024 · 1 min · jiezi

关于前端:游戏社区搭建的目的和意义是什么

在游戏社区中,用户的活跃度指标是至关重要的,因而在必要时,咱们会进行指标转化,以丰盛的内容模式来促成用户的活跃度;作为一个垂直社区,咱们能够通过聚合和造就一批游戏KOL,建设用户之间的紧密联系,从而晋升游戏体验。其次,作为社交平台,社区还具备社交互动性能,能吸引更多潜在的游戏玩家退出,造成良好的口碑效应。本文以游戏官网社区的角度来看社区的搭建状况。个别官网社区优先思考在游戏中嵌入的社区,为用户提供了高效的官网信息传递渠道。社区内的内容与服务都由平台外部的经营团队来实现,经营团队负责向社区成员推送相干内容,并依据需要调整内容和服务数量。作为一个由官网间接经营的社区,用户公布的内容能够由经营人员被动治理,同时客服也可能疾速响应用户提出的游戏异样反馈。咱们以短说论坛产品为例:游戏论坛能够划分官网版块和用户版块。1、官网版块重点能够是: 游戏介绍(剧情、角色、配备、NPC等)、游戏更新、游戏攻略、福利流动、倡议与反馈等内容2、用户版块能够是: 二手交易、组队交友、新萌求助、设施适配、闲聊互动、有问有答等等。 对于游戏社区搭建后,能带来什么样的帮忙呢?本文总结了以下几点: 1. 对游戏官网的价值(1)保留具有活力的资产游戏常见的外围评估指标包含日常生活和游戏浸透,这些指标对应着游戏社区的日常生活和游戏流动。其余衡量标准包含月度活跃度、人均在线时长、人均可拜访频次、发帖量以及互动量等,这些指标应依据业务指标的不同而制订。透过这些沉闷的度量规范,咱们能够直观地感触到游戏所带来的口碑效应,即某一玩法是否备受欢送,能够察看该玩法在社区内的关键词密度、探讨玩家所占比例等方面的状况。 (2)提供高效的官网信息输入渠道咱们能够把流动相干一些介绍信息或攻略等放在官网社区,当用户须要时,只需停止以后的游戏过程,通过游戏内的社区入口进行查看,随后返回游戏参加流动。流动解释的门路被大幅缩短,用户对流动内容的记忆忘记水平极低,而社区在用户眼中的重要性也失去了晋升。 (3)升高用户的流失率为什么要做游戏社区,因为社区的存在能够无效地防止用户的间接散失,从而进步用户的应用体验和忠诚度。社区的互动形式能为用户带来价值,通过帖子被点赞被评论等能够激发创作者的创作激情,社区也能疏导游戏的话题来制作更大热度,吸引用户踊跃互动,加强用户留存率。 2. 对游戏玩家的价值(1)工具的价值通过游戏社区能够疾速理解游戏的背景,剧情,角色等等,老手玩家能够疾速的理解本人须要做什么,此外游戏的相干攻略、福利流动等也给玩家更多的帮忙,带来更好的游戏体验; (2)情感的价值社区从某种程度来说是一种另类养成游戏,将游戏内的NPC逐渐带大,过程中意识了很多游戏好友,就是本人的是另一种身份,社区就是提供了情感表白的中央,玩家通过社区发帖互动等行为表白本人的情感,找到更多气味相投的用户。社区这种产品模式因为人始终都有表白,摸索和承受信息的心理需要而始终不死,怎么让游戏社区更好的为用户服务,让它更好的与时代接轨,这是每一个社区从业者都要思考的,一起摸索吧~  

September 28, 2023 · 1 min · jiezi

关于前端:无界微应用基础改造指南

本文只记录对子利用须要革新的点FAQ嵌入主利用后接口申请跨域问题proxy中减少onProxyRes拦挡, 解决响应头 onProxyRes: function (proxyRes, req, res) { console.log(req.url); if (req.method === 'OPTIONS') { proxyRes.headers['Access-Control-Allow-Origin'] = req.headers.origin || '*' proxyRes.headers['Access-Control-Allow-Credentials'] = true proxyRes.headers['Access-Control-Allow-Methods'] = 'GET,POST,OPTIONS,PUT,DELETE,FETCH' // 这里的参数,依据本人我的项目增删 proxyRes.headers['Access-Control-Allow-Headers'] = 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,token,source,Language,Referer,Accept' proxyRes.statusCode = 204 } else { proxyRes.headers['Access-Control-Allow-Origin'] = req.headers.origin || '*' proxyRes.headers['Access-Control-Allow-Credentials'] = true } }切换子利用状态放弃对于无界的几种运行模式参见: https://wujie-micro.github.io/doc/guide/mode.html#%E5%8D%95%E...和乾坤相似, 入口文件导出钩子 if (window.__POWERED_BY_WUJIE__) { window.__WUJIE_MOUNT = () => { render() }; window.__WUJIE_UNMOUNT = () => { instance.$destroy(); instance.$el.innerHTML = '' instance = null };}else{ render()}

September 28, 2023 · 1 min · jiezi

关于前端:前端-Npm-开源项目列表

前端 Npm 开源我的项目列表开发这么久以来的一些开源小我的项目列表记录 NpmHello World我的项目介绍地址js-xxxJavaScript 罕用纯函数库,反对按需引入,不便抽离工具类等罕用办法。<br/>前端三叉戟(^O^)!!!js-xxxjs-xhttp基于 Axios 二次封装的 HTTP 申请工具,高效对立,且易于全局治理。js-xhttpjs-xcall一个简略的事件派发单例类(EventBus)js-xcalljs-xcmd基于 Node 实现的简略 npm 命令行工具,便于管理我的项目。js-xcmdjs-xfetchFetch 的二次封装,便捷好用。js-xfetchjs-xajax封装 XMLHttpRequest(xhr),不便须要应用原生 ajax 的我的项目应用。js-xajax

September 28, 2023 · 1 min · jiezi

关于前端:JavaScript-StringArrayObjectDate-常用方法小结

JavaScript String、Array、Object、Date 罕用办法小结 反正闲着也是闲着,略微整顿总结了一下 JavaScript 字符串、数组、对象、工夫的罕用办法,阿彪出品,必属精品/滑稽。 字符串(String)charAt// 返回在指定地位的字符"12345".charAt(0); // 1charCodeAt// 返回在指定的地位的字符的 Unicode 编码"12345".charCodeAt(0); // 49concat// 连贯字符串"123".concat("456"); // "123456"indexOf/lastIndexOf// 查看字符呈现的地位"123451".indexOf("1"); // 0"123451".indexOf("1"); // 5match// match() 办法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该办法相似 indexOf() 和 lastIndexOf(),然而它返回指定的值,而不是字符串的地位。"doubleam 666 123".match(/\d+/g); // ["666", "123"]search// search() 办法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,如果没有找到任何匹配的子串,则返回 -1。"doubleam 666 123".search("6"); // 9"doubleam 666 123".search("9"); // -1replace// replace() 办法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。"doubleam 666".replace("666", "999"); // "doubleam 999""doubleam 666".replace(/(doubleam)\s(666)/g, "$2 $1"); // 666 doubleam"doubleam 666".replace(/(doubleam)\s(666)/g, function($1, $2, $3){ console.log($1, $2, $3);//doubleam 666, doubleam, 666 return $1 + $2 + $3;}); // doubleam 666doubleam666slice// 提取字符串的片断,并在新的字符串中返回被提取的局部。// str.slice(start, end);// start: 要抽取的片断的起始下标。如果是正数,则该参数规定的是从字符串的尾部开始算起的地位。也就是说,-1 指字符串的最初一个字符,-2 指倒数第二个字符,以此类推。// end:紧接着要抽取的片段的结尾的下标。若未指定此参数,则要提取的子串包含 start 到原字符串结尾的字符串。如果该参数是正数,那么它规定的是从字符串的尾部开始算起的地位。"i love oqm".slice(0, 1); // 'i'"i love oqm".slice(2); // 'love oqm'"i love oqm".slice(-3); // 'oqm'substr// 同上"i love oqm".substr(0, 1); // 'i'"i love oqm".substr(2); // 'love oqm'"i love oqm".substr(-3); // 'oqm'substring// 同上,但不反对正数,尾部开区间 [start, end)。"i love oqm".substring(0, 1); // 'i'"i love oqm".substring(2); // 'love oqm'"i love oqm".substring(0, 4); // 'i lo'split// 把字符串宰割为字符串数组"1,2,3,4,5".split(); // ["1,2,3,4,5"]"1,2,3,4,5".split(""); // ["1", ",", "2", ",", "3", ",", "4", ",", "5"]"1,2,3,4,5".split(","); // ["1", "2", "3", "4", "5"]toLocaleLowerCase/toLocaleUpperCase// 把字符串转换为小/大写'aBc'.toLocaleLowerCase(); // 'abc''aBc'.toLocaleUpperCase(); // 'ABC'toLowerCase/toUpperCase// 把字符串转换为小/大写'aBc'.toLowerCase(); // 'abc''aBc'.toUpperCase(); // 'ABC'for-offor-of 能够遍历字符串,除了遍历字符串,这个遍历器最大的长处是能够辨认大于0xFFFF的码点,传统的for循环无奈辨认这样的码点。at// at办法能够辨认 Unicode 编号大于 0xFFFF 的字符,返回正确的字符。'我爱你'.at(0); // "我"includes// 查看指定字符是否存在与字符串中'doubleam'.includes('d'); // truestartsWith/endsWith// 查看指定字符是否存在与字符串结尾/结尾'doubleam'.startsWith('a'); // false'doubleam'.endsWith('m'); // truerepeat// repeat 办法返回一个新字符串,示意将原字符串反复n次。'doubleam'.repeat(3); // "doubleamdoubleamdoubleam"'doubleam'.repeat(0); // ""padStart/padEnd// 字符串长度补全,默认应用空格补全长度。"1.01".padEnd(5, "0"); // "1.010"// 如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。"1.010".padEnd(5, "0"); // "1.010"// 如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。'09-28'.padStart(10, 'yyyy-mm-dd'); // "yyyy-09-28"trim// 去除首尾空格" doubleam ".trim(); // "doubleam"trimLeft/trimRight/trimStart/trimEnd字面意思生成 DOM string// 乏味"baidu".link('baidu.com'); // "<a href=\"baidu.com\">baidu</a>""baidu".sub(); // "<sub>baidu</sub>"数组(Array)reduce// 应用 console.time('test'); 与 console.timeEnd('test'); 测试发现,数组遍历速度 for > for-of > forEach > filter > map > for-in(可实用于对象)/reduce > $.each([1, 2, 3, 4], (index, value) => console.log(value));(JQ)// 以下介绍遍历办法均不可跳出,且 map 为迭代严格意义上不算循环,若想实现跳出或局部判断可应用 ES6 for-of、find或some...// reduce 办法有两个个参数,第一个参数是一个callback,用于针对数组项的操作(total, currentValue, currentIndex, selfArray);第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。须要留神的是,reduce办法返回值并不是数组,而是返回通过叠加解决后的后果;不扭转原数组。[1, 2, 3, 4].reduce((x, y) => x + y); //10let testArr = [{'name':'a', 'age':1}, {'name':'b', 'age':2}, {'name':'c', 'age':3}, {'name':'d', 'age':4}];testArr.reduce(function (total, currentValue, currentIndex, selfArray) { // total 为上一次调用返回的值,或者是提供的初始值 0。 // 0,1,3,6,10 console.log(selfArray[currentIndex].name); // a,b,c,d return total + currentValue.age;}, 0); // 10map// map 办法对数组的每一项都运行给定的函数,返回每次函数调用的后果组成一个新数组,不扭转原数组。[1, 2, 3, 4].map((value, index, selfArray) => value * 10); // [10,20,30,40]forEach// forEach 数组遍历[1, 2, 3, 4].forEach(function(value, index, selfArray) { //do something});push// push 办法可向数组的开端增加一个或多个元素,并返回新的长度,扭转原数组。let testArr = [1, 2, 3, 4];testArr.push(5, 6); // 6console.log(testArr); // [1,2,3,4,5,6]pop// pop 办法用于删除并返回数组的最初一个元素,扭转原数组。let testArr = [1, 2, 3, 4];testArr.pop(); // 4console.log(testArr); // [1,2,3]shift// shift 办法用于把数组的第一个元素从其中删除,并返回第一个元素的值,扭转原数组。let testArr = [1, 2, 3, 4];testArr.shift(); // 1console.log(testArr); // [2,3,4]unshift// unshift 办法可向数组的结尾增加一个或更多元素,并返回新的长度,扭转原数组。let testArr = [1, 2, 3, 4];testArr.unshift(-1, 0); // 6console.log(testArr); // [-1,0,1,2,3,4]concat// concat 办法用于连贯两个或多个数组,返回新数组。[1].concat([2],[3],[4]); // [1,2,3,4]join// join 办法用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的,默认应用 ',' 号分隔,不扭转原数组,返回字符串。[1, 2, 3, 4].join('/'); // 1/2/3/4filter// filter 对数组的每一项都运行给定的函数,返回后果为 true 组成的数组,不扭转原数组,返回新数组。[null, undefined, 1, '', 0, 'biugle'].filter(Boolean); // [1,'biugle'][null, undefined, 1, '', 0, 'biugle'].filter((value, index, selfArray) => value == 'biugle'); // [biugle]every// every 对数组的每一项都运行给定的函数,每一项都返回 true,则返回 true,不扭转原数组,返回 bool。[1, 2, 3, 4].every((value, index, selfArray) => value < 5); // truesome// some 对数组的每一项都运行给定的函数,任意一项返回 true,则返回 true,不扭转原数组,返回 bool。[1, 2, 3, 4].some((value, index, selfArray) => value == 1); // trueat// at 获取指定下标元素,同 array[index]。[1, 2, 3, 4].at(3); // 4slice// slice 返回一个新的数组,蕴含从 start 到 end (尾部开区间,不包含该元素。)的 selfArray 中的元素,不扭转原数组。let testArr = [1, 2, 3, 4];testArr.slice(0, 3); // [1,2,3]console.log(testArr); // [1,2,3,4]splice// splice 办法可删除从 index 处开始的零个或多个元素,并且用参数列表中申明的一个或多个值来替换那些被删除的元素。// 如果从 selfArray 中删除了元素,则返回的是含有被删除的元素的数组。该办法会间接对数组进行批改。let testArr = [1, 2, 3, 4];testArr.splice(1, 2, 5, 6); // [2, 3] ps: 在 index 为 1 开始,删除 2 个元素,增加 5, 6。console.log(testArr); // [1, 5, 6, 4]sort// sort 排序依照 Unicode Code 地位排序,默认升序,扭转原数组。// 需传入比拟函数 function(a, b),a/b为相比拟的值。// 若返回一个 < 0 的值,则 a 应该在 b 后面。// 若返回 = 0 的值,a 与 b 点地位绝对不变。// 若返回一个 > 0 的值,则 a 应该在 b 前面。[1, 2, 4, 3, 6, 5].sort(); // [1, 2, 3, 4, 5, 6][1, 2, 4, 3, 16, 15].sort(); // [1, 15, 16, 2, 3, 4][1, 2, 4, 3, 16, 15].sort((a, b) => a - b); // [1, 2, 3, 4, 15, 16][1, 2, 4, 3, 16, 15].sort(function(a, b) { console.log(`${b} - ${a} = ${b - a}`); return b - a;}); // [16, 15, 4, 3, 2, 1]['aaa', 'bb', 'c'].sort(); // ["aaa", "bb", "c"]['aaa', 'bb', 'c'].sort().sort((a, b) => a.length - b.length); // ["c", "bb", "aaa"]reverse// reverse 办法用于颠倒数组中元素的程序,返回的是颠倒后的数组,扭转原数组。let testArr = [1, 2, 3, 4];testArr.reverse();console.log(testArr); // [4, 3, 2, 1]// 咱们也能够通过 sort 来进行数组颠倒,只需返回 < 0 的值即可。[1, 2, 3, 4, 5].sort(() => -1); // [5, 4, 3, 2, 1]indexOf// indexOf 和 lastIndexOf 都承受两个参数:查找的值、查找起始地位。不存在,返回 -1,存在,返回地位。indexOf 是从返回后查找,lastIndexOf 是从后往前查找。let testArr = [1, 2, 3, 1];testArr.indexOf(1); // 0testArr.lastIndexOf(1); // 3testArr.indexOf(4); // -1find// find 和 findIndex 传入一个回调函数,找到数组中合乎以后搜寻规定的第一个元素,返回它,并且终止搜寻。findIndex 返回的是下标。let testArr = [1, 2, 3, 4];testArr.find((item, index, selfArray) => item > 1); // 2testArr.findIndex((item) => item > 1); // 1fill// fill(value, start, end) 用新元素替换掉数组内的元素,能够指定替换下标范畴(尾部开区间),扭转原数组。let testArr = [1, 2, 3, 4];testArr.fill(0, 1, 3); // [1, 0, 0, 4]testArr.fill(0, 1, 100); // [1, 0, 0, 0]copyWithin// copyWithin(target, start, end) 抉择数组的某个下标,从该地位开始复制数组元素,默认从 0 开始复制,也能够指定要复制的元素范畴(尾部开区间),扭转原数组。let testArr = [1, 2, 3, 4];testArr.copyWithin(2, 0, 2); // [1, 2, 1, 2] ps: 从 index 2 开始复制 [0,2) 之间的元素,所以原数组 3,4 被替换为 1,2。from// from 将相似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组。Array.from([1, 2, 3, 4]); // [1,2,3,4]Array.from('1234'); // ['1','2','3','4']// 数组克隆咱们也能够应用此办法,或者应用 concat,亦或是应用 ... 开展运算符。of// of 用于将一组值,转换为数组,这个办法的次要目标,是补救数组构造函数 Array() 的有余。// 因为参数个数的不同,会导致 Array() 的行为有差别。Array(1, 2, 3); // [1,2,3]Array(4); // [empty*4]Array.of(1, 2, 3); // [1,2,3]Array.of(4); // [4]entries// entries 返回迭代器,返回键值对。// 数组let testArr = ['a', 'b', 'c'];for(let value of testArr.entries()) { console.log(value); // [0, 'a'],[1, 'b'],[2, 'c']}// Set,(add,delete,size,forEach,has,keys,values,clear)Set构造不会增加反复的值,也可用于数组去重。[...new Set([1, 1, 2, 2, 3, 4, 5])]; 或 Array.from(new Set([1, 1, 2, 2, 3, 4, 5])); // [1, 2, 3, 4, 5]// 去重还能够利用对象 key,或者 Array 的 filter 办法加上 indexOf 来实现。new Set([NaN, NaN, {}, {}]); // [NaN, {}, {}]let testSet = new Set(testArr);for(let value of testSet.entries()) { console.log(value); // ['a', 'a'],['b', 'b'],['c', 'c']}// Map,(set,get,delete,size,forEach,has,keys,values,clear)个别用于疾速查问,性能高。let testMap = new Map([['a', 'a'], ['b', 'b']]);testMap.set('c', 'c');for(let value of testMap.entries()) { console.log(value); // ['a', 'a'],['b', 'b'],['c', 'c']}values// values 返回迭代器,返回键值对的 value。// 数组let testArr = ['a', 'b', 'c'];for(let value of testArr.values()) { console.log(value); //'a' 'b' 'c'}// Setlet testSet = new Set(['a', 'b', 'c']);for(let value of testSet.values()) { console.log(value); // 'a' 'b' 'c'}// Maplet testMap = new Map([['a', 'a'], ['b', 'b'], ['c', 'c']]);for(let value of testMap.values()) { console.log(value); // 'a' 'b' 'c'}keys// keys() 返回迭代器,返回键值对的 key。// 数组let testArr = ['a', 'b', 'c'];for(let value of testArr.keys()) { console.log(value); //'0' '1' '2'}// Setlet testSet = new Set(['a', 'b', 'c']);for(let value of testSet.keys()) { console.log(value); // 'a' 'b' 'c'}// Maplet testMap = new Map([['a', 'a'], ['b', 'b'], ['c', 'c']]);for(let value of testMap.keys()) { console.log(value); // 'a' 'b' 'c'}includes// includes 判断数组中是否存在该元素,参数:查找的值、起始地位,能够替换 ES5 时代的 indexOf 判断形式。// indexOf 判断元素是否为 NaN,会判断谬误。let testArr = [1, 2, 3, 4, NaN];testArr.includes(1, 2); // false ps: 从 index 2 开始查。testArr.includes(NaN); // truetestArr.indexOf(NaN); // -1flat// flat 数组降维打击,返回新数组,不扭转原数组。[1, 2, [3, 4], [5, [6, 7]], 8].flat(); // [1, 2, 3, 4, 5, [6, 7], 8][1, 2, [3, 4], [5, [6, 7, [8]]], 9].flat(2); // [1, 2, 3, 4, 5, 6, 7, [8], 9][1, 2, [3, 4], [5, [6, 7, [8]]], 9].flat(3); // [1, 2, 3, 4, 5, 6, 7, 8, 9]对象(Object)create// Object.create() 办法创立一个新对象,应用现有的对象来提供新创建的对象的__proto__(外面的属性属于新对象本人),其实简略来说就是扭转创建对象的原型指向。let testObj = {name: 'doubleam', age: 21};let extendObj = Object.create(testObj, { gender: { value: 'man', // 属性值 writable: true, // 是否能够重写值 enumerable: true, // 是否可枚举 configurable: true // 是否能够批改以上几项配置 }});extendObj; // {gender: 'man'}extendObj.__proto__; // {name: "doubleam", age: 21}extendObj.name; // doubelam// enumerable 是否可枚举// for-in 遍历对象所有属性(包含原型上的属性)。// Object.keys 只能遍历本身属性// JSON.stringify 只能序列化本身属性for(item in extendObj){ console.log(item); // gender,name,age // 若 enumerable = false,那么此处打印为 name,age。}Object.keys(extendObj); // gender ps: 多个属性按ascii顺序排列,vue 中应用 v-for 遍历也受此影响。// 若 enumerable = false,那么此处值为空 []。// Object.create与 new Object() 是有区别的,比方 Object.create(null) 创立的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者办法 (toString(),hasOwnProperty()等)。// 利用 create 实现 newfunction Dog(name) { this.name = name;}Dog.prototype.speak = function () { console.log('汪汪汪');};function _new(fn, ...arg) { // let obj = {} // obj.__proto__ = fn.prototype let obj = Object.create(fn.prototype); // 先扭转原型指向 fn.call(obj, ...arg); // 再调用构造函数 return obj;}let blackDog = _new(Dog, '小黑');console.log(blackDog);console.log(blackDog.name);blackDog.speak();// 继承则能够通过 prototype 构造函数 es6-extend 等形式实现 https://www.cnblogs.com/humin/p/4556820.htmlassign// Object.assign(target, source1, source2) 办法用于对象的合并,将源对象(source)的所有可枚举属性,复制到指标对象(target),若 target 与 source 存在雷同属性,则会被后呈现的笼罩。拷贝的属性是有限度的,只拷贝源对象的本身属性(不拷贝继承属性),也不拷贝不可枚举的属性(enumerable: false)。let target = {a: 0, b: 1};let source1 = {b: 2, c: 3};let source2 = {c: 4};Object.assign(target, source1, source2); // {a:0, b:2, c:4}// 深浅拷贝// Object.assign()拷贝的是属性值。如果源对象的属性值是一个对象的援用,那么它也只指向那个援用。// 如果对象的属性值为简略类型(如 number,string,boolean),通过 Object.assign({}, source); 失去的新对象为深拷贝。// 但如果属性值为对象(object)或其它援用类型时,那对于这个对象而言其实是浅拷贝的。// 总结:当被复制合并的对象中只有一级属性,没有二级属性的时候,此办法为深拷贝,然而对象中有对象的时候,此办法,在二级属性当前就是浅拷贝。// 如果要实现深拷贝,能够应用 JSON.parse(JSON.stringify(source)); 或者应用 JQ $.extend()。// 也能够通过 ... 开展运算符克隆对象:newObj = {...obj1, ...obj2}; 数组转对象也能够应用 ... 开展运算符: newObj = {...arr};let testObj = {a: 1, obj: {a: 2}};let copyObj = Object.assign({}, testObj);copyObj.obj.a = 3;console.log(testObj.obj.a) //3// 特例 空类型 undefined,nullObject.assign(target, undefined) === target; // trueObject.assign(target, null) === target; // trueObject.assign([1, 2, 3, 4], [5, 6, 7]); // [5, 6, 7, 4]// js原始数据类型: number,string,boolean,undefined,null,object 【ES6 又新增 Symbol 还有谷歌的 bigint】。// 根本数据类型(简略类型),值类型: number,string,boolean。// 简单数据类型(援用类型),object。// 空类型 undefined,null。// 值类型的值在栈中存储,值类型传递,传递的是值。// 援用类型的值,对象在堆上存储,地址在栈上存储。援用类型传递,传递的是地址(援用)。let num = 10; // 值类型,值在栈上。var obj = {}; //简单类型,对象在堆,地址(援用)在栈。且应用 var 关键字不仅能够变量晋升,在页面敞开之前始终在内存中。// 提一下类型判断,typeof 个别只能返回如下几个后果:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。// 如果咱们要判断数组、工夫等其余 new 对象,咱们能够通过原生的办法,或者构造函数 constructor 来判断。// Array.isArray(arr); 或 typeof arr === 'object' && arr.constructor === Array; 或 Array.prototype.isPrototypeOf(arr);// typeof date === 'object' && date.constructor === Date;// 当然也能够应用 instanceof 该运算符用于检测构造函数的 prototype 属性是否呈现在某个实例对象的原型链上。// ({}) instanceof Object; // true// ([]) instanceof Object; // true 数组是对象的子类// ([]) instanceof Array; // true// (new Date()) instanceof Object; // true// (new Date()) instanceof Date; // true 同上// 【toString】还能够应用 Object.prototype.toString.call(val); 来判断类型// Object.prototype.toString.call(1); // '[object Number]'// Object.prototype.toString.call({}); // '[object Object]'// Object.prototype.toString.call([]); // '[object Array]'// Object.prototype.toString.call(function(){}); // '[object Function]'// Object.prototype.toString.call(new Date); // '[object Date]'// Since JavaScript 1.8.5// Object.prototype.toString.call(null); // '[object Null]'// Object.prototype.toString.call(); // '[object Undefined]'toStringtoString 办法返回一个示意该对象的字符串。对象返回值Array以逗号宰割的字符串,如 [1, 2] 的toString返回值为 1,2BooleantrueDate可读的工夫字符串,如 Tue Aug 25 2020 19:30:17 GMT+0800 (中国规范工夫)Function申明函数的 JS 源代码字符串Number数字值Object[object Object]String字符串值let num = 3;let str = '3';let bool = true;let obj = { test: '123', example: 123 };let func = function () { console.log('example');};var arr = ['test', 'example'];num.toString(); // "3"str.toString(); // "3"bool.toString(); // "true"obj.toString(); // "[object Object]"func.toString(); // "function () { console.log('example'); }"arr.toString(); // "test,example"// 每个对象都有一个 toString() 办法,当该对象被示意为一个文本值时,或者一个对象以预期的字符串形式援用时主动调用。默认状况下,toString() 办法被每个 Object 对象继承。如果此办法在自定义对象中未被笼罩,toString() 返回 "[object type]",其中 type 是对象的类型。// 下面【toString】咱们也提到能够用他来判断类型// 还能够自定义一个办法,来取代默认的 toString() 办法。该 toString() 办法不能传入参数,并且必须返回一个字符串。自定义的 toString() 办法能够是任何咱们须要的值,但如果它附带无关对象的信息,它将变得十分有用。function Dog(name, breed, color, sex) { this.name = name; this.breed = breed; this.color = color; this.sex = sex;}Dog.prototype.toString = function dogToString() { return `Dog ${this.name} is a ${this.sex} ${this.color} ${this.breed}`;};var theDog = new Dog('Hellen', 'Lab', 'red', 'female');theDog.toString(); // 'Dog Hellen is a female red Lab'// 用于进制转换Number(123).toString(2); // 1111011Number(9).toString(5); // 14// 转回 10 进制parseInt(14, 5); // 9parseInt(1111011, 2); // 123valueOf如果对象存在任意原始值,它就默认将对象转换为示意它的原始值,如果对象是复合值,而且大多数对象无奈真正示意为一个原始值,因而默认的 valueOf() 办法简略地返回对象自身,而不是返回一个原始值。对象返回值Array数组自身Boolean布尔值Date返回毫秒模式的工夫戳Function函数自身Number数字值Object对象自身String字符串值// 数组、函数、和正则表达式简略的继承了这个默认办法,调用这些类型的实例的 valueOf() 办法只是简略返回对象自身。// 所有的对象都继承有 toString() 和 valueOf() 办法,对象到字符串,对象到数字的转换,(隐式转换等)会通过调用待转换对象的这两个办法中的一个来实现。// valueOf: 返回对象的原始值示意; toString: 返回对象的字符串示意;let num = 3;let str = '3';let bool = true;let obj = { test: '123', example: 123 };let func = function () { console.log('example');};var arr = ['test', 'example'];num.valueOf(); // 3str.valueOf(); // "3"bool.valueOf(); // trueobj.valueOf(); // {test:'123', example:123}func.valueOf(); // function () { console.log('example'); }arr.valueOf(); // ['test','example']原始值:不可变更的值,包含 undefined、null、boolean、number、string。 ...

September 28, 2023 · 12 min · jiezi

关于前端:简单的-SQL-总结

简略的 SQL 总结SQL增删改查(CRUD)语句与罕用函数总结。SQL Introduction 个别咱们对数据库的操作次要分为四种,增C(CREATE)、删D(DELETE)、改U(UPDATE)、查R(READ),所以,我就从CRUD这四个方面来制作查问表。 开发规定: 1. 尽量减少对数据库的拜访次数,且不能查问无用的数据,节约效力(例如:我只有男生的数据,你把所有人的数据都查问进去)。 2. 属于SQL语法的要应用大写 (SELECT, WHERE, INSERT etc...)。 3. 属于使用者本人定义的要应用小写(表名、列名 etc...)。 4. 表名与列名前后应用 \` 包起来,避免与关键字抵触(例如: INSERT INTO \`user\` VALUES(a,b); )。 5. 禁止应用 Table Join。 6. 禁止应用 Oracle Trigger。 7. 禁止应用 SELECT * (为了增强代码可读性)。 8. 不能将查询数据库的 SQL 放在循环中查问。 新增(CREATE)性能语句创立数据库CREATE DATABASE <数据库名>;创立数据表CREATE TABLE <表名> (<br/><列名1> <数据类型> <约束条件>,<br/><列名2> <数据类型> <约束条件>,<br/><列名3> <数据类型> <约束条件>,<br/>......<br/><该表的的约束条件1> <br/><该表的的约束条件2>...);插入数据INSERT INTO <表名> (列名1,列名2,...) VALUES (值1,值2,...);<br/>(每列都有数据插入时,可省略列名。然而为了代码的可读性,不倡议如此操作。)减少列ALTER TABLE <表名> ADD <列名> <数据类型> <约束条件> AFTER <前一列列名>;<br/>(默认插入到最初一列)删除(DELETE)性能语句删除数据库DROP DATABASE <数据库名>;删除数据表DROP TABLE <表名>;清空表数据DELETE FROM <表名>; 或者 TRUNCATE TABLE <表名>;删除行数据DELETE FROM <表名> WHERE <条件>;删除列数据ALTER TABLE <表名> DROP <列名>;批改(UPDATE)性能语句批改数据库名RENAME DATABASE <旧名称> TO <新名称>;批改表名RENAME TABLE <旧名称> TO <新名称>; 留神:重命名数据库与数据表个别不举荐应用,若想测试,请先备份好本人的数据库~ 批改数据UPDATE <表名> SET <列名1> = <新值1>,<列名2> = <新值2> WHERE <条件>;批改列名ALTER TABLE <表名> CHANGE <旧列名> <新列名> <数据类型> <约束条件>;查问( R E A D )性能语句查问所有数据库SHOW DATABASES;查问指定数据库中所有表名USE <数据库名>; 而后 SHOW TABLES;<br/>或者 SHOW TABLES FROM <数据库名>;查问表中所有列信息SHOW COLUMNS FROM <表名>;查问表中所有数据SELECT <列名1>,<列名2>,<列名3>,... FROM <表名>;查问表中某个数据SELECT <列名> FROM <表名>;查问表中指定多个数据SELECT <列名1>,<列名2>,<列名3>,... FROM <表名> WHERE <条件>;查问表中指定一个数据SELECT <列名> FROM <表名> WHERE <条件>;查问指定范畴数据SELECT <列名1>,<列名2>,<列名3>,... FROM <表名> WHERE <br/><某列名> BETWEEN <某列名范畴值-小> AND <某列名范畴值-大>;字符串模式匹配查问SELECT <列名> FROM <表名> WHERE name LIKE 'Y%';<br/>(查问以Y结尾的,更多匹配形式自行百度哦~。)指定多个值数据查问SELECT <列名1>,<列名2>,<列名3>,... FROM <表名> WHERE <br/><某列名> IN ('<某列名值1>','<某列名值2>','<某列名值3>',...);查问后果排序SELECT <列名1>,<列名2>,<列名3>,... FROM <表名> ORDER BY <某列名> DESC;<br/>(此处为递加排列,默认为递增ASC)查问指定几笔数据SELECT <列名1>,<列名2>,<列名3>,... FROM <表名> LIMIT n,m;<br/>(从n到m笔数据)分群查问SELECT <列名1>,<列名2>,<列名3>,...,<函数> FROM <表名> GROUP BY <列名1>,<列名2>,<列名3>,...;<br/>(常搭配函数有:SUM()、AVG()、COUNT()、MAX()、MIN())查问不反复后果SELECT DISTINCT <列名1>,<列名2>,<列名3> FROM <表名> WHERE 条件罕用函数函数名用处ABS(数值)ABS函数(求绝对值)MOD(被除数,除数)MOD函数(求余)ROUND(对象数值,保留小数的位数)ROUND函数(四舍五入)字符串1丨丨字符串2丨丨函数(拼接)LENGTH(字符串)LENGTH函数(求字符串长度)LOWER(字符串)LOWER函数(小写转换)UPPER(字符串)UPPER函数(大写转换)REPLACE(对象字符串,替换前的字符串,替换后的字符串)REPLACE函数(字符串的替换)SUBSTRING (对象字符串,截取的起始地位,截取的字符数)SUBSTRING函数(字符串的截取)CURRENT_DATECURRENT_DATE函数(以后日期)CURRENT_TIMECURRENT_TIME函数(以后工夫)CURRENT_TIMESTAMPCURRENT_TIMESTAMP函数(以后日期和工夫)若用于on update能够在更新数据时更新此栏位EXTRACT(日期元素 FROM 日期)EXTRACT函数(截取日期元素)CAST(转换前的值 AS 想要转换的数据类型)CAST函数(类型转换)COALESCE(数据1,数据2,数据3....)COALESCE函数(将NULL转换为其余值)SELECT uuid() as uuid能够利用数据库生成 Version 1的UUIDOPTIMIZE TABLE table1, table2能够最佳化数据表 补充:CASE表达式。 ...

September 28, 2023 · 2 min · jiezi

关于前端:SassScssLess的区别与选择-基本使用

Sass(Scss)、Less的区别与抉择 + 根本应用Sass(Scss)、Less 都是 CSS 预处理器,他们定义了一种新的语言,其根本思维是,用一种专门的编程语言为 CSS 减少了一些编程的个性,将 CSS 作为指标生成文件,而后开发者就只有应用这种语言进行 CSS 的编码工作。为什么要应用 CSS 预处理器起因CSS 仅仅是一个标记语言,不能够自定义变量,不能够援用。语法不够弱小,比方无奈嵌套书写,导致模块化开发中须要书写很多反复的选择器。没有变量和正当的款式复用机制,使得逻辑上相干的属性值必须以字面量的模式反复输入,导致难以保护。CSS 预处理器的益处提供 CSS 层缺失的款式层复用机制缩小冗余代码进步款式代码的可维护性CSS 预处理器的毛病开发工作流中多了一个环节,调试也变得更麻烦。预编译很容易造成后辈选择器的滥用何时应用 CSS 预处理器零碎级框架开发或者比拟大型简单的款式设计时继续保护集成时复用型组件开发时Sass/Scss 与 Less 比照根本介绍Sass/Scss Sass(英文全称:Syntactically Awesome Stylesheets)是一个最后由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言。是一种动静款式语言,Sass 语法属于缩排语法,比 CSS 多出变量、嵌套、运算、混入(Mixin)、继承、色彩解决、函数等性能,更容易浏览。 在开发最后版本之后,Weizenbaum 和 Chris Eppstein 持续通过 SassScript 来持续裁减 Sass 的性能。SassScript 是一个在 Sass 文件中应用的小型脚本语言。Sass 是一个将脚本解析成 CSS 的脚本语言,即 SassScript。 Sass 的缩排语法,对于写惯 CSS 前端的 Web 开发者来说很不直观,也不能将 CSS 代码退出到 Sass 外面,因而 Sass 语法进行了改进,Sass3 就变成了 Scss(Sassy CSS) 。与原来的语法兼容,只是用 {} 取代了原来的缩进。所以 Sass 包含两套语法,通常状况下,这两套语法通过 .sass 和 .scss 两个文件扩展名辨别开。 ...

September 28, 2023 · 5 min · jiezi

关于前端:前端-Npm-开源项目列表

前端 Npm 开源我的项目列表开发这么久以来的一些开源小我的项目列表记录 NpmHello World我的项目介绍地址js-xxxJavaScript 罕用纯函数库,反对按需引入,不便抽离工具类等罕用办法。<br/>前端三叉戟(^O^)!!!js-xxxjs-xhttp基于 Axios 二次封装的 HTTP 申请工具,高效对立,且易于全局治理。js-xhttpjs-xcall一个简略的事件派发单例类(EventBus)js-xcalljs-xcmd基于 Node 实现的简略 npm 命令行工具,便于管理我的项目。js-xcmdjs-xfetchFetch 的二次封装,便捷好用。js-xfetchjs-xajax封装 XMLHttpRequest(xhr),不便须要应用原生 ajax 的我的项目应用。js-xajax

September 28, 2023 · 1 min · jiezi

关于前端:前端-Github-开源项目列表

前端 Github 开源我的项目列表开发这么久以来的一些开源小我的项目列表记录 GitHubHello World我的项目介绍地址vue-admin基于 Vue 的管理系统通用模板(可自在扩大与跨平台)<br/>Vue3、AntdV、Vite、TypeScript、EsLint+Prettier...vue-adminreact-view基于 React 的跨平台通用模板(挪动/PC/Web)<br/>React17、Antd、Echarts、Vite、TypeScript、EsLint+Prettier、Cordova、Electron...react-viewweb_base前端模板(实用于开发大型/简单我的项目但又人数较少的状况)<br/>React、Redux_Toolkit、Antd、Vite、TypeScript、EsLint+Prettier+Husky、Electron...web_baseflutter_base-rcFlutter 开发通用模板,蕴含根底框架页面、全局对立数据管理、申请治理、罕用插件集成、UI组件集成等。flutter_baseflutter_dio_xhttpFlutter 基于 Dio 的 HTTP 申请工具二次封装,全局治理申请,简略便捷且高效。flutter_dio_xhttpflutter_dart_xcallDart 实现的一个事件派发单例类(EventBus)flutter_dart_xcalldart_xxx_utilsDart 常用工具办法等单例类(Utils 三叉戟)dart_xxx_utilschatroomPHP+WebSocket+Vue 实现的一个聊天室chatroomh5games网上收集的几个好玩的 H5 游戏,略微整顿了一下,供大家学习参考娱乐(演示)。<br/>因为资源太过长远,未找到原作者,若理解源头能够分割博主修改。h5gamestapmusic资源站上撸到的一个解压神器,当做博客小彩蛋,原作者如同是一个二次元大佬,自己未找到。tapmusic

September 28, 2023 · 1 min · jiezi

关于前端:JavaScript-EventLoop

JavaScript EventLoopEventLoop 即事件循环机制,是指浏览器或 Node 的一种解决 JavaScript 单线程运行时不会阻塞的一种机制,也就是咱们常常应用异步的原理。JavaScript 运行机制所有同步工作都在主线程上执行,造成一个执行栈(Execution Context Stack)。主线程之外,还存在工作队列(Task Queue)。只有异步工作有了运行后果,就在工作队列之中搁置一个事件。一旦执行栈中的所有同步工作执行结束,零碎就会读取工作队列,看看外面有哪些事件。如果有那些对应的异步工作,于是完结期待状态,进入执行栈,开始执行。主线程一直反复下面的第三步一个事件循环中有一个或者是多个工作队列 总结:调用栈中的同步工作都执行结束,栈内被清空了,就代表主线程闲暇了。这个时候就会去工作队列中依照程序读取一个工作放入到栈中执行。每次栈内被清空,都会去读取工作队列有没有工作,有就读取执行,始终循环读取~执行的操作。EventLoop 事件循环介绍主线程从“工作队列”中读取执行事件,这个过程是循环不断的,这个机制被称为事件循环。此机制具体如下:JavaScript 中有两种异步工作:宏工作(MacroTask)、微工作(MicroTask)。主线程会一直从工作队列中按程序取工作执行,每执行完一个工作都会查看『微工作』队列是否为空(执行完一个工作的具体标记是函数执行栈为空),如果不为空则会一次性执行完所有『微工作』。而后再进入下一个循环去工作队列中取下一个工作执行。MacroTask 宏工作script 全副代码、setTimeout、setInterval、setImmediate(浏览器临时不反对,只有 IE10 反对,具体可见 MDN。)、I/O、UI Rendering。MicroTask 微工作Process.nextTick(Node独有)、Promise、Object.observe(废除)、MutationObserver(具体应用形式查看这里)同步工作和异步工作 JavaScript 单线程工作被分为同步工作和异步工作,同步工作会在调用栈中依照程序期待主线程顺次执行。异步工作会在异步工作有了后果后,将注册的回调函数放入工作队列中,期待主线程闲暇的时候(调用栈被清空),被读取到栈内期待主线程的执行。 事件循环的过程模型抉择以后要执行的工作队列,抉择工作队列中最先进入的工作,如果工作队列为空即 null,则执行跳转到微工作的执行步骤。将事件循环中的工作设置为以后抉择工作执行工作将事件循环中以后运行工作设置为 null将曾经运行实现的工作从工作队列中删除Microtasks 查看步骤,进入微工作检查点。 设置微工作检查点标记为 true。当事件循环微工作执行队列不为空时:抉择一个最先进入的微工作队列的微工作,将事件循环的微工作设置为以后抉择的微工作。运行微工作将曾经执行实现的微工作设置为 null移除微工作队列中的以后运行实现的微工作清理 IndexDB 事务设置进入微工作检查点的标记为 false。更新界面渲染返回第一步 总结执行栈在执行完 同步工作 后,查看 执行栈 是否为空,如果为空,就会去查看 微工作队列 是否为空,如果为空的话,就执行 宏工作,否则就一次性执行完 所有微工作。每次单个 宏工作 执行结束后,查看 微工作队列 是否为空,如果不为空的话,会依照先入先出的规定全副执行完 微工作 后,设置 微工作队列 为 null,而后再执行宏工作,如此循环。举个栗子代码console.log('script start');setTimeout(function () { console.log('setTimeout');}, 0);Promise.resolve() .then(function () { console.log('promise1'); }) .then(function () { console.log('promise2'); });console.log('script end');执行后果script startscript endpromise1promise2setTimeout执行步骤第一次执行:执行同步代码,将宏工作和微工作划分到各自队列中。第二次执行:执行宏工作后,检测到 微工作队列 中不为空,执行 Promise1,执行实现 Promise1 后,调用 Promise2.then,放入 微工作队列 中,再执行 Promise2.then。第三次执行:当 微工作队列 中为空时,执行 宏工作,执行 setTimeout callback,打印日志。第四次执行:清空工作队列和调用栈图例setTimeout(function () { console.log('timer1'); Promise.resolve() .then(function () { console.log('promise1'); });});setTimeout(function () { console.log('timer2'); Promise.resolve() .then(function () { console.log('promise2'); });}); ...

September 28, 2023 · 2 min · jiezi

关于前端:关于前端缓存

对于前端缓存缓存的一些常识收集介绍前端缓存个别是指一个资源(如 html、css、js、images 等)存在于服务器和客户端(浏览器)之间的正本。 缓存会依据进来的申请保留输入内容的正本,当下一个申请来到的时候,如果是雷同的 URL,缓存会依据缓存机制决定是间接应用正本响应拜访申请,还是向源服务器再次发送申请。 比拟常见的就是浏览器会缓存拜访过网站的网页,当再次拜访这个 URL 地址的时候,如果网页没有更新,就不会再次下载网页,而是间接应用本地缓存的网页。只有当网站明确标识资源曾经更新,浏览器才会再次下载网页。 长处缩小网络带宽与流量耗费升高服务器压力缩小网络提早与申请,晋升页面渲染速度。分类与原理缓存地位分类咱们能够在 Chrome 的开发者工具中,通过 Network 中的 Size 列 看到一个申请最终的解决形式。 如果显示的是文件大小,就示意是通过网络申请获得。如果是 from memory cache、from disk cache 或 from ServiceWorker,这些阐明是在缓存中读取的。缓存读取优先级是由上到下寻找,找到即返回,找不到则持续。 Service WorkerMemory CacheDisk Cache网络申请Memory CacheMemory Cache 是内存中的缓存,与之绝对 Disk Cache 就是硬盘上的缓存。依照操作系统的常理:先读内存,再读硬盘。Disk Cache 因为它的优先级更低一些,将在前面介绍。 简直所有的网络申请资源都会被浏览器主动退出到 Memory Cache 中。然而也正因为数量很大然而浏览器占用的内存不能有限扩充这样两个因素,Memory Cache 注定只能是个“短期存储”。 惯例状况下,浏览器的标签页敞开后该次浏览的 Memory Cache 便生效,给其余标签页腾出地位。而如果极其状况下,例如一个页面的缓存就占用了超级多的内存,那可能在标签页没敞开之前,排在后面的缓存就曾经生效了。 Memory Cache 细分一下次要有两块preloader 在浏览器关上网页的过程中,会先申请 HTML 而后解析。之后如果浏览器发现了 js、css 等须要解析和执行的资源时,它会应用 CPU 资源对它们进行解析和执行。 在古老的年代(大概 2007 年以前),(申请 js/css - 解析执行 - 申请下一个 js/css - 解析执行下一个 js/css) 这样的“串行”操作模式在每次关上页面之前进行着。 很显著在解析执行的时候,网络申请是闲暇的,这就有了施展的空间:咱们能不能一边解析执行 js/css,一边去申请下一个(或下一批)资源呢? 这就是 preloader 要做的事件。不过 preloader 没有一个官网规范,所以每个浏览器的解决都略有区别。例如有些浏览器还会下载 css 中的 @import 内容或者 <video> 的 poster 等。 而这些被 preloader 申请过去的资源就会被放入 Memory Cache 中,供之后的解析执行操作应用。 ...

September 28, 2023 · 3 min · jiezi

关于前端:图扑软件受邀亮相-IOTE-2023-国际物联网展

IOTE 2023 国内物联网展,作为寰球物联网畛域的盛会,于 9 月 20 日 - 22 日在中国深圳拉开帷幕。本届展会以“IoT构建数字经济底座”为主题,由深圳市物联网产业协会主办,打造以后物联网最新科技大秀。促成物联网与各行业深度交融,增强国际交流与单干,为构建数字经济底座贡献力量。 作为第二十届国内物联网展会的重要组成部分和数字产品展现窗口,图扑软件携自研 HT for Web 产品构建的 PaaS/SaaS 层面低代码数字孪生平台、图形化组态 SCADA 平台、物联网 IoT 平台等各类产品和可视化我的项目利用亮相本届盛会。 展会期间,国内外千余家企业、行业专家领导、参展来宾驻足图扑软件展区,对构建的利用场景与技术体现出浓重的趣味与认可。咱们的工作人员以解说和实操的形式,为到访的参观者激情演示 HT 产品与技术的特点和劣势。 作为物联网行业规模最大、笼罩产业链企业最多的业余展会。本届 IOTE 2023 深圳国内物联网展正是汇聚了寰球物联网畛域的先进科技、翻新利用和行业智慧的盛典,将为构建数字经济底座注入新的生机。 展会聚焦物联网产业链上下游,展商们将带来各种智能硬件设施以及 RFID、传感器、5G、LPWAN、UWB、云计算、大数据分析等物联网核心技术产品和利用案例,展现物联网在智能家居、智慧城市、智能制作、AI安防、新批发等畛域的最新成绩和解决方案。 专精组态监控,助力轻松构建物联网平台图扑软件大屏组态、UI 组态、工业组态、三维组态为打造精细化监控策略提供了反对,交融数字建模、数字孪生、仿真模仿、智能物流等技术,轻松构建低代码、零代码物联网 IoT 平台,辅助传统工厂向智能工厂转型。 十多年来,图扑软件始终保持国产化,不依赖第三方商业或开源库,自主研发外围产品可满足工业物联网现代化、高性能,不局限于繁多平台的跨平台数据可视化需要;在技术畛域谋求极致性能,组件可接受万级甚至十万级别数据量。数百个工业互联网可视化我的项目施行教训,造成了⼀整套实践证明高效开发流程和生态系,可疾速实现现代化、高性能、跨平台桌面 Mouse/挪动 Touch/虚拟现实 VR 图形展现成果及交互体验。 专精可视化技术我的项目劣势,通过姿态控制、实时数据监测显示、设施近程管制以及零碎漫游等人机交互性能,实现对三维模型的全面出现和精准操作。已牵手泛滥龙头企业,打造多项利用场景,笼罩工业制作、楼宇园区、轨道交通、城市政务、水务能源、新基建、智慧运维、国防公安、医疗科研、金融军工等各个行业。 您能够至图扑软件官网查看更多案例及成果:图扑软件 - 构建先进 2D 和 3D 可视化所须要的所有

September 28, 2023 · 1 min · jiezi