1.成品网站源码1688免费推荐:免费推荐1688成品网站制作源码
2.低代码开发对企业有什么用?
3.深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
4.cookieAPI真难用,简易你造过相关的传源传源轮子吗
成品网站源码1688免费推荐:免费推荐1688成品网站制作源码
在当今的网站制作领域,源码已经成为了众多开发者、码经码网站设计师的简易必备工具。本文将为大家介绍一款免费推荐成品网站制作源码。传源传源
源码介绍
本源码是码经码2022年最新直播源码由一位技术过硬的开发者针对网站制作开发的成品源码。该源码包含了丰富的简易设计风格以及较为完整的功能模块,旨在为用户提供一种快速、传源传源简便的码经码建站方案。
功能介绍
本源码主要包含以下功能模块:
产品展示:该功能模块可以让用户通过平台对买家展示自己的简易产品信息,帮助用户创造更多的传源传源流量。
交易管理:该功能模块可以让用户对自己在平台上的码经码交易进行管理,包括订单查询、简易发货管理、传源传源退款操作等。码经码
客服中心:该功能模块可以为用户提供快速便捷的客服服务,为用户在操作过程中拔尖一下一步。
营销中心:该功能模块可以帮助用户在平台上开展各种营销活动,如促销、折扣、代金券等。
源码优势
相较于市场上其他源码,本源码具有以下的优势:
易于安装和配置:该源码采用现代化的开发技术,安装和配置较为便捷。
美观大方:UI设计采用的是网站的主打风格,更加贴近用户的需求。
支持自定义:该源码支持自定义操作,用户可以根据自己的实际需求进行配置和修改。
使用方法
用户可以通过以下步骤使用本源码:
下载并解压源码文件
配置好相应的服务器环境及数据库
将文件上传到服务器上面
根据提示进行相应配置
网站即可正常运行
总结
鼓励大家多尝试,对于有一定编程基础或有兴趣钻研的八卦运算起步副图源码同学,可以试着自己搭建简易网站;对于没有语言基础,但有一定建站经验的用户,则可以寻找一些优秀的建站源码来进行二次开发,从而实现定制化需求,这也是网站建设的快捷方式之一。
低代码开发对企业有什么用?
低代码是一种近些年兴起的企业软件快速开发技术和工具。借助低代码使用者无需编码即可完成企业应用的常用功能,少量编码扩展出更多功能。低代码凭借低门槛、高效率和易集成等特性,被越来越多的软件开发团队青睐。Gartner预测,到年四分之三的大企业将会使用至少4种低代码开发平台,用于信息化应用开发。届时,% 的应用开发将通过低代码完成。对于企业而言,除了节约信息化的成本,低代码开发平台还能为您带来更多的价值回报。1、降低IT投入这是所有软件开发技术和工具带来的最直接的价值,低代码也不例外。低代码平台可以在两个主要方面显着减少IT投入。
首先是雇用新开发人员的成本。虽然我不愿意这样讲,但是如果您希望将现有的开发人员的开发效率再提高一倍,低代码可以帮您减少需要雇用的开发人员数量。因为低代码开发的效率是非常高的,您没有必要继续维持大量的唯品会上化妆品正品溯源码开发人员,而且低代码开发平台还能够大幅降低软件开发的技术门槛,能够让非专业开发人员(如实施人员、运维人员等)也可以从事企业软件开发。考虑到国内互联网的快速发展,专业程序员的工资水涨船高。企业支付给专业开发人员的成本是很高的,至少通常要比使用低代码平台的员工成本要高很多。
低代码减少IT投入的第二个方面是指减少特定场景信息化解决方案的供应商。大多数公司都采购了多种软件或互联网服务,其中除了ERP、MES等核心系统,绝大多数都只能帮助一个部门或一个部门内的若干使用场景。除了采购这些软件和服务带来的成本,手工在这些系统间传递数据也带来了大量额外的人力资源投入。有了低代码技术,企业内部的IT部门甚至业务部门都能利用低代码开发平台,快速创建定制化的应用程序和自动化流程来整合以及代替多个第三方供应商的应用系统,同时降低采购和使用成本。
2、加快数字化转型在经济新常态下,对于大多数企业负责人和IT领导者来说,数字化转型的优先级和重要度都非常高,而低代码技术可以帮助您更快地到达目的。首先,相比于纯代码开发,使用低代码开发企业应用能将项目的交付周期大幅缩短,更敏捷的项目交付,可以大幅提升企业数字化的速度。敏捷交付的短视频电商平台源码怎么做背后是更多次数的迭代,以及软件系统与企业贴合度的大幅提升,而这点是企业数字化转型成败的关键。
在此基础上再进一步,借助技术门槛极低的低代码开发平台,让业务负责人深度参与到自定义系统的开发过程中,甚至自行创建该部门自己的流程。一个企业能够在现有的资源条件下,向数字化转型目标迈出巨大的一步。
3、减少软件项目积压大多数IT团队都面临着一长串需要处理的软件需求,而且积压在那里的需求每天都在增加。如果程序员拥有一个能大幅提升开发效率的技术,比如低代码,他们就能够在只占很少时间的情况下,完成更多的软件项目需求。
除了等待专业程序员开发软件解决方案外,业务人员和IT运维人员经过简单的培训即可尝试用低代码开发平台实现其工作场景的信息化,这些场景可能需要一个类似于SCM的大系统,更可能适合一个数据填报和分析的小应用。这样的话,很大一部分项目就不会积压在IT部门和专业开发人员手里,而是由业务部门自行解决。项目积压问题就能得到进一步缓解,企业信息化的速度也会随着提升。
4、增加开发团队产出开发团队产出是IT领导者的首要任务。低代码平台不仅意味着您的专业开发人员可以开发更多的用户需求,而且他们也可以从事更高质量要求和更关键产品功能。如何达到这样的软件源码一般都是在哪找的效果?他们不需要创建许多简单的应用程序,因为这些应用程序是业务人员可以自己构建的。
从数量和影响面两个方面对比计算那些已完成项目的产出,都能让您发现低代码开发平台的巨大价值。
5、减少团队压力因素讨论到开发团队管理和技术方案选型时,最容易被忽视的指标之一就是组织中可容忍的总体健康状况和混乱程度,团队是否经常有不和谐的声音?当你给你的领导一个完成项目的时间表时,他们是会因为失望而目瞪口呆,还是对工作的节奏感到满意?项目初级问题升级到项目经理的频率是多少?这些问题都与团队压力相关。
低代码是一种高效率的软件开发技术,当您把这种能够降低劳动强度的新技术介绍给您的团队时,我相信您的团队会更加认同您在减少压力因素方面做出的努力。虽然这个好处看起来是无形的,但是对于一个组织来说,它们可能是最有用的。
总结随着低代码应用场景不断拓宽, 年会有更多企业或企业信息化服务提供商将采用技术门槛更低、开发效率更高的低代码开发平台,为自己量身定做企业核心系统以满足个性化的企业管理需求。低代码能让专业开发人员更高效率地工作,有些甚至能帮到业务用户创建自己的应用。
深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
深度学习目标检测系列:一文掌握YOLO算法 YOLO算法是计算机视觉领域的一种端到端目标检测方法,其独特之处在于其高效性和简易性。相较于RCNN系列,YOLO直接处理整个图像,预测每个位置的边界框和类别概率,速度极快,每秒可处理帧。以下是YOLO算法的主要特点和工作流程概述: 1. 训练过程:将标记数据传递给模型,通过CNN构建模型,并以3X3网格为例,每个单元格对应一个8维标签,表示网格中是否存在对象、对象类别以及边界框的相对坐标。 2. 边界框编码:YOLO预测的边界框是相对于网格单元的,通过计算对象中心与网格的相对坐标,以及边界框与网格尺寸的比例来表示。 3. 非极大值抑制:通过计算IoU来判断预测边界框的质量,大于阈值(如0.5)的框被认为是好的预测。非极大值抑制用于消除重复检测,确保每个对象只被检测一次。 4. Anchor Boxes:对于多对象网格,使用Anchor Boxes预先定义不同的边界框形状,以便于多对象检测。 5. 模型应用:训练时,输入是图像和标签,输出是每个网格的预测边界框。测试时,模型预测并应用非极大值抑制,最终输出对象的单个预测结果。 如果你想深入了解并实践YOLO算法,可以参考Andrew NG的GitHub代码,那里有Python实现的示例。通过实验和调整,你将体验到YOLO在目标检测任务中的强大功能。cookieAPI真难用,你造过相关的轮子吗
前言
歌德说过:读一本好书,就是在和高尚的人谈话。同理,读优秀的开源项目的源码,就是在和优秀的大佬交流,是站在巨人的肩膀上学习——今天我们将通过读js-cookie的源码,来学会造一个操作cookie的轮子~
1.准备简单介绍一下cookieCookie是直接存储在浏览器中的一小串数据。它们是HTTP协议的一部分,由RFC规范定义。最常见的用处之一就是身份验证我们可以使用document.cookie属性从浏览器访问cookie。
这个库,是干啥的?不用这个库时?cookie的原生API,非常“丑陋”:
修改我们可以写入document.cookie。但这不是一个数据属性,它是一个访问器(getter/setter)。对其的赋值操作会被特殊处理。对document.cookie的写入操作只会更新其中提到的cookie,而不会涉及其他cookie。例如,此调用设置了一个名称为user且值为John的cookie:
document.cookie?=?"user=John";?//?只会更新名称为?user?的?cookiedocument.cookie?=?"user=John;?path=/;?expires=Tue,??Jan??::?GMT"赋值时传入字符串,并且键值对以=相连,如果多项还要用分号;隔开...
删除将过期时间设置为过去,自然就是删除了~
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";但是很明显,这语义化也太差了..
js-cookieAPI我们先来了解一下API
//?setCookies.set('name',?'value',?{ ?expires:?7,?path:?''?})//?get?Cookies.get('name')?//?=>?'value'Cookies.get()?//?=>?{ ?name:?'value'?}//?removeCookies.remove('name')OK我们大概可以知道是这样子
set(key,?value)get(key)remove(key)简洁方便多了,并且一眼就知道这行代码是在干什么~
2.读源码三部曲?这段可能有点太细了,如果嫌啰嗦,只想看实现可以直接跳到下面的实现部分~
一?READMEwhy一个简单、轻量级的JavaScriptAPI,用于处理cookie适用于所有浏览器?接受任何字符大量的测试?不依赖支持ES模块支持AMD/CommonJSRFC兼容的有用的Wiki?启用自定义编码/解码<字节gzip!
优点多多呀
表示后文会详细提及~BasicUsage大概就是前面写过的API介绍
二package.json依赖确实是很少依赖,并且只有开发依赖,没有生产依赖,很nice~
scripts"scripts":?{ "test":?"grunt?test","format":?"grunt?exec:format","dist":?"rm?-rf?dist/*?&&?rollup?-c","release":?"release-it"?},exportsexports":?{ ".":?{ ?"import":?"./dist/js.cookie.mjs",?"require":?"./dist/js.cookie.js"},看来入口在/dist/js.cookie这点从index.js也能看出
module.exports?=?require('./dist/js.cookie')当然,目前是没有dist这个目录的。这需要打包~
.mjs另外我们刚才看到了.mjs这个后缀,这我还是第一次见,你呢
.mjs:表示当前文件用ESM的方式进行加载
.js:采用CJS的方式加载。
ESM和CJSESM是将javascript程序拆分成多个单独模块,并能按需导入的标准。和webpack,babel不同的是,esm是javascript的标准功能,在浏览器端和nodejs中都已得到实现。也就是熟悉的import、exportCJS也就是commonJS,也就是module.exports、require。
更多介绍以及差别不再赘述~
三src进入src,首当其冲的就是api.mjs,这一眼就是关键文件啊?emm..一个init方法,其中包含set和get方法,返回一个Objectremove方法藏在其中~乍一看,代码当然还是能看得懂每行都是在做啥的呀~但是总所周知?开源项目也是不断迭代出来的~也不是一蹴而就的——若川哥
okok,我们来一步步"抄"一下源码
3.实现?下面为了传参返回值更加清晰用了TS语法~
3.1最简易版本set设置一个键值对,要这样
document.cookie?=?`${ key}=${ value};?expires=${ expires};?path=${ path}`除了键值对还有后面的属性~可别把它忘记了我们用写一个接口限制一下传入的属性:
interface?Attributes?{ ?path:?string;?//可访问cookie的路径,默认为根目录?domain?:?string;?//可访问?cookie?的域?expires?:?string?|?number?|?Date?//?过期时间:UTC时间戳string?||?过期天数?[`max-age`]?:number?//ookie?的过期时间距离当前时间的秒数?//...}const?TWENTY_FOUR_HOURS?=?e5?//h的毫秒数//源码中是init的时候传入defaultAttributes,这里先暂做模拟const?defaultAttributes:?Attributes?=?{ path:?'/'}function?set(key:?string,?value:?string,?attributes:?Attributes):?string?|?null?{ ?attributes?=?{ ...defaultAttributes,?...attributes}?//?if?(attributes.expires)?{ //如果有过期时间//?如果是数字形式的,就将过期天数转为?UTC?stringif?(typeof?attributes.expires?===?'number')?{ ?attributes.expires?=?new?Date(Date.now()?+?attributes.expires?*?TWENTY_FOUR_HOURS)?attributes.expires?=?attributes.expires.toUTCString()}?}?//遍历属性键值对并转换为字符串形式?const?attrStr?=?Object.entries(attributes).reduce((prevStr,?attrPair)?=>?{ const?[attrKey,?attrValue]?=?attrPairif?(!attrValue)?return?prevStr//将key拼接进去prevStr?+=?`;?${ attrKey}`//?attrValue?有可能为?truthy,所以要排除?true?值的情况if?(attrValue?===?true)?return?prevStr//?排除?attrValue?存在?";"?号的情况prevStr?+=?`=${ attrValue.split(';?')[0]}`return?prevStr?},?'')?return?document.cookie?=?`${ key}=${ value}${ attrStr}`}get//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";0我们知道document.cookie长这个样子,那么就根据对应规则操作其字符串获得键值对将其转化为Object先
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";1要注意的有意思的一个点是,可能value中就有'='这个字符,所以还要特殊处理一下~
比如他就是"颜文字==_="?(~~应该不会有人真往cookie里面放表情吧hh~~但是value中有'='还是真的有可能滴~?其实一开始我真没想过这个问题,是看了源码才知道的
Record接收两个参数——keys、values,使得对象中的key、value必须在keys、values里面。
removeremove就简单啦,用set把过期时间设置为过去就好了~
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";.2接受任何字符从技术上讲,cookie的名称和值可以是任何字符。为了保持有效的格式,它们应该使用内建的encodeURIComponent函数对其进行转义~再使用ecodeURIComponent函数对其进行解码。还记得README中写的接收任何字符吗~这就需要我们自己来在里面进行编码、解码的封装~
set//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";3get//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";.3封装编码和解码两个操作源码中converter.mjs封装了这两个操作为write和read,并作为defaultConverter导出到api.mjs,最后作为converter传入init——降低了代码的耦合性,为后面的自定义配置做了铺垫~前面编码解码变成了这样:
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";.4启用自定义编码/解码我们是具有内置的encodeURIComponent和decodeURIComponent,但是也并不是必须使用这两个来进行编码和解码,也可以用别的方法——也就是前面README中说的可以自定义编码/解码~除了这两个方法可自定义,其余的属性也可以自定义默认值,并且配置一次后,后续不用每次都传入配置——所以我们需要导出时有对应的两个方法
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";6封装在其中,利用对象合并时有重复属性名的情况是后面的覆盖掉前面的这一特性完成该自定义配置属性以及转换方法的功能。现在的cookie大概是这样的一个对象
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";.5防止全局污染现在的cookie直接在全局上下文下,很危险,谁都能更改,而且还不一定能找到,我们将其设置为局部的,封装到init函数中,调用init传入相应的自定义属性以及自定义转换方法得到一个初始化的cookie对象现在大概就是源码的架构形状了~
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";.6确保一些属性不会给改变用Object.create来生成对象,并用Object.freeze把对象atributes和converter冻结。
//?删除?cookie(让它立即过期)document.cookie?=?"expires=Thu,??Jan??::?GMT";document.cookie?=?"user=John;?max-age=0";9Obecj.create的第二个参数
属性描述符
现在你就不能修改Cookie的attributes、converter属性了~
4.总结&收获?总结init及其中属性&返回而用init函数生成对象是为了解决全局污染问题,并且更新对象时也是用的init现在你再回头看源码是不是就更加清晰了~
扩展说到cookie这个在浏览器中存储数据的小东西,就不得不提一下localstorage、sessionStorage
cookie、localstorage、sessionStorage的区别Web存储对象localStorage和sessionStorage也允许我们在浏览器上保存键/值对。
那他们的区别呢
在页面刷新后(对于sessionStorage)甚至浏览器完全重启(对于localStorage)后,数据仍然保留在浏览器中。默认情况下cookie如果没有设置expires或max-age,在关闭浏览器后就会消失
与cookie不同,Web存储对象不会随每个请求被发送到服务器,存储在本地的数据可以直接获取。因此,我们可以保存更多数据,减少了客户端和服务器端的交互,节省了网络流量。大多数浏览器都允许保存至少2MB的数据(或更多),并且具有用于配置数据的设置。
还有一点和cookie不同,服务器无法通过HTTPheader操纵存储对象。一切都是在JavaScript中完成的。
以及..他们的原生API比cookie的"好看"太多~[doge]
CookiesessionStoragelocalstorage生命周期默认到浏览器关闭,可自定义浏览器关闭除非自行删除或清除缓存,否则一直存在与服务器通信/post/