皮皮网
皮皮网

【新公司天天看源码】【仿3158++源码】【汽车+小程序源码】utils 源码

来源:hishop易分销源码 发表时间:2024-12-28 13:58:38

1.utils Դ??
2.dayjs源码解析(二):Dayjs 类
3.3d稀疏卷积——spconv源码剖析(三)
4.PyTorch 源码解读之 torch.utils.data:解析数据处理全流程
5.vue使用xe-utils函数库的具体方法
6.微信小程序商城源代码微信小程序商城源代码

utils 源码

utils Դ??

       深入探讨app直播源码与uniapp随机数生成签名

       为了实现这一功能,我们首先需要引入node.js内置模块crypto,该模块包含加密相关函数和方法。在项目的common文件夹中,创建一个名为utils.js的文件,此文件将用于定义生成随机串的新公司天天看源码方法。以下是一个简单的示例:

       通过在utils.js文件中添加以下代码,我们可以轻松实现生成随机串的功能:

       在实际项目应用中,可以通过以下方式调用上述定义的生成随机串的方法:

       在应用中整合上述方法后,你便能成功生成uniapp所需的随机数签名。此过程为实现app直播源码中的安全性和完整性提供了有力支持。

dayjs源码解析(二):Dayjs 类

       上篇文章讲述了dayjs的基础知识、locale、constant和utils,本文将继续深入解析dayjs的核心部分——src/index.js中的Dayjs类。

       src/index.js文件结构清晰,按照以下步骤构建:

       然而,这里存在两个疑问,可能是为了缩减代码体积,由@iamkun提出。

       现在开始正式分析代码。

       locale相关全局定义

       首先默认导入了locale/en.js英文的locale,然后使用L存储当前使用的locale名字,使用Ls(locale Storage)存储locale对象。

       工具补充

       定义了一个工具方法parseLocale。这个方法处理以下几种情况:

       然后将定义好的parseLocale方法补充到Utils中。

       相关方法

       在Dayjs类中,仿3158++源码关于locale的方法有两个,实例私有方法$locale用来返回当前使用的locale对象;实例方法locale本质上就是调用了parseLocale方法,但最后返回的是新的改变了locale的Dayjs实例。

       注意:在dayjs中,许多操作都使用clone()方法来返回新的Dayjs实例,这也是这个库的优点之一。

       最后同样将parseLocale方法补充到Dayjs类的静态方法中。

       补充Utils

       上一节和前文中已经分析了一些Util工具,这里将其补充完整:

       注意:这些工具方法没有统一定义在utils.js文件中的原因是用到了index.js作用域中的一些变量。

       需要特别关注的是wrapper方法,在Dayjs类中大量应用了该方法,其实是通过date和原实例封装了一个新实例,新实例和原实例的主要区别就是关联的时间不同。

       Dayjs类

       Dayjs类是整个dayjs库的核心,可以给其定义的实例方法分类,也可以查看官网的文档分类。

       解析都写在了代码的注释里:

       原型链

       通常来说,定义在实例中的方法应该在原型链上,但有几个与时间有关的setter/getter方法相似,所以单独将原型链写在了上面。

       这几个方法都是不传参数时为getter,传参数时为setter。

       静态属性

       还有一些方法和属性挂在了dayjs函数对象上,最核心的是加载插件和加载locale的方法,几个方法的用法都能在官方文档中找到。

       如果对dayjs函数对象、汽车+小程序源码Dayjs类和原型的关系感到困惑,可以参考下图,最后形成的关系如下图所示:

       总结

       如果不看插件部分,dayjs库的核心已经解析完成,看一下默认生成dayjs实例长什么样子:

       实例本身的属性是一些与时间相关的属性,各种操作方法都在原型__proto__上。

       本节结束,下一节将开始解析dayjs的插件。

3d稀疏卷积——spconv源码剖析(三)

       构建Rulebook

       下面看ops.get_indice_pairs,位于:spconv/ops.py

       构建Rulebook由ops.get_indice_pairs接口完成

       get_indice_pairs函数具体实现:

       主要就是完成了一些参数的校验和预处理。首先,对于3d普通稀疏卷积,根据输入shape大小,kernel size,stride等参数计算出输出输出shape,子流行稀疏卷积就不必计算了,输出shape和输入shape一样大小

       准备好参数之后就进入最核心的get_indice_pairs函数。因为spconv通过torch.ops.load_library加载.so文件注册,所以这里通torch.ops.spconv.get_indice_pairs这种方式来调用该函数。

       算子注册:在src/spconv/all.cc文件中通过Pytorch提供的OP Register(算子注册的方式)对底层c++ api进行了注册,可以python接口形式调用c++算子

       同C++ extension方式一样,OP Register也是Pytorch提供的一种底层扩展算子注册的方式。注册的算子可以通过 torch.xxx或者 tensor.xxx的方式进行调用,该方式同样与pytorch源码解耦,增加和修改算子不需要重新编译pytorch源码。用该方式注册一个新的算子,流程非常简单:先编写C++相关的12306订票助手+源码算子实现,然后通过pytorch底层的注册接口(torch::RegisterOperators),将该算子注册即可。

       构建Rulebook实际通过python接口get_indice_pairs调用src/spconv/spconv_ops.cc文件种的getIndicePairs函数

       代码位于:src/spconv/spconv_ops.cc

       分析getIndicePairs直接将重心锁定在GPU逻辑部分,并且子流行3d稀疏卷积和正常3d稀疏卷积分开讨论,优先子流行3d稀疏卷积。

       代码中最重要的3个变量分别为:indicePairs,indiceNum和gridOut,其建立过程如下:

       indicePairs代表了稀疏卷积输入输出的映射规则,即Input Hash Table 和 Output Hash Table。这里分配理论最大的内存,它的shape为{ 2,kernelVolume,numAct},2表示输入和输出两个方向,kernelVolume为卷积核的volume size。例如一个3x3x3的卷积核,其volume size就是(3*3*3)。numAct表示输入有效(active)特征的数量。indiceNum用于保存卷积核每一个位置上的总的计算的次数,indiceNum对应中的count

       代码中关于gpu建立rulebook调用create_submconv_indice_pair_cuda函数来完成,下面具体分析下create_submconv_indice_pair_cuda函数

       子流线稀疏卷积

       子流线稀疏卷积是调用create_submconv_indice_pair_cuda函数来构建rulebook

       在create_submconv_indice_pair_cuda大可不必深究以下动态分发机制的运行原理。

       直接将重心锁定在核函数:

       prepareSubMGridKernel核函数中grid_size和block_size实则都是用的整形变量。其中block_size为tv::cuda::CUDA_NUM_THREADS,在include/tensorview/cuda_utils.h文件中定义,大小为。而grid_size大小通过tv::cuda::getBlocks(numActIn)计算得到,其中numActIn表示有效(active)输入数据的数量。

       prepareSubMGridKernel作用:建立输出张量坐标(通过index表示)到输出序号之间的一张哈希表

       见:include/spconv/indice.cu.h

       这里计算index换了一种模板加递归的写法,看起来比较复杂而已。令:new_indicesIn = indicesIn.data(),协会网站+网站源码可以推导得出index为:

       ArrayIndexRowMajor位于include/tensorview/tensorview.h,其递归调用写法如下:

       接着看核函数getSubMIndicePairsKernel3:

       位于:include/spconv/indice.cu.h

       看:

       上述写法类似我们函数中常见的循环的写法,具体可以查看include/tensorview/kernel_utils.h

       NumILP按默认值等于1的话,其stride也是gridDim.x*blockDim.x。索引最大值要小于该线程块的线程上限索引blockDim.x * gridDim.x,功能与下面代码类似:

       参考: blog.csdn.net/ChuiGeDaQ...

PyTorch 源码解读之 torch.utils.data:解析数据处理全流程

       文@

       目录

       0 前言

       1 Dataset

       1.1 Map-style dataset

       1.2 Iterable-style dataset

       1.3 其他 dataset

       2 Sampler

       3 DataLoader

       3.1 三者关系 (Dataset, Sampler, Dataloader)

       3.2 批处理

       3.2.1 自动批处理(默认)

       3.2.2 关闭自动批处理

       3.2.3 collate_fn

       3.3 多进程处理 (multi-process)

       4 单进程

       5 多进程

       6 锁页内存 (Memory Pinning)

       7 预取 (prefetch)

       8 代码讲解

       0 前言

       本文以 PyTorch 1.7 版本为例,解析 torch.utils.data 模块在数据处理流程中的应用。

       理解 Python 中的迭代器是解读 PyTorch 数据处理逻辑的关键。Dataset、Sampler 和 DataLoader 三者共同构建数据处理流程。

       迭代器通过实现 __iter__() 和 __next__() 方法,支持数据的循环访问。Dataset 提供数据获取接口,Sampler 控制遍历顺序,DataLoader 负责加载和批处理数据。

       1 Dataset

       Dataset 包括 Map-style 和 Iterable-style 两种,分别用于索引访问和迭代访问数据。

       Map-style dataset 通过实现 __getitem__() 和 __len__() 方法,支持通过索引获取数据。

       Iterable-style dataset 实现 __iter__() 方法,适用于随机访问且批次大小依赖于获取数据的场景。

       2 Sampler

       Sampler 用于定义数据遍历的顺序,支持用户自定义和 PyTorch 提供的内置实现。

       3 DataLoader

       DataLoader 是数据加载的核心,支持 Map-style 和 Iterable-style Dataset,提供单多进程处理和批处理等功能。

       通过参数配置,如 batch_size、drop_last、collate_fn 等,DataLoader 实现了数据的自动和手动批处理。

       4 批处理

       3.2.1 自动批处理(默认)

       DataLoader 默认使用自动批处理,通过参数控制批次生成和样本整理。

       3.2.2 关闭自动批处理

       关闭自动批处理,允许用户自定义批处理逻辑或处理单个样本。

       3.2.3 collate_fn

       collate_fn 是手动批处理时的关键,用于整理单个样本为批次。

       5 多进程

       多进程处理通过 num_workers 参数启用,加速数据加载。

       6 单进程

       单进程模式下,数据加载可能影响计算流程,适用于数据量小且无需多进程的场景。

       7 锁页内存 (Memory Pinning)

       Memory Pinning 技术确保数据在 GPU 加速过程中快速传输,提高性能。

       8 代码讲解

       通过具体代码分析,展示了 DataLoader 的初始化、迭代和数据获取过程,涉及迭代器、Sampler 和 Dataset 的交互。

vue使用xe-utils函数库的具体方法

       本文介绍了vue使用xe-utils函数库的具体方法,分享给大家,具体如下:

       安装完成后自动挂载在vue实例:this.$utils(函数库)

       支持挂载函数列表:this.$browse(浏览器内核判断) this.$locat(用于读写地址栏参数)

       在 vue 实例中通过 this.$utils 调用的函数 this 默认指向当前vue实例。

       CDN 安装

       使用 script 方式安装,VXEUtils 会定义为全局变量

       生产环境请使用 vxe-utils.min.js,更小的压缩版本,可以带来更快的速度体验。

       cdnjs 获取最新版本

       点击浏览已发布的所有 npm 包的源代码。

       <script src="/vxe-utils@1.3.4/dist/vxe-utils.js"></script>

       AMD 安装

       require.js 安装示例

       // require 配置require.config({ paths: { // . 'xe-utils': './dist/xe-utils.min', 'vxe-utils': './dist/vxe-utils.min' }})// ./main.js 安装define(['Vue', 'xe-utils', 'vxe-utils'], function (Vue, XEUtils, VXEUtils) { Vue.use(VXEUtils, XEUtils)})

       ES6 Module 安装方式

       npm install xe-utils vxe-utils --save

       通过 Vue.use() 来全局安装

       import Vue from 'vue'import XEUtils from 'xe-utils'import VXEUtils from 'vxe-utils'Vue.use(VXEUtils, XEUtils)// 通过vue实例的调用方式const dateStr = this.$utils.dateToString(new Date(), 'yyyy-MM-dd')const date = this.$utils.stringToDate('// ::', 'MM/dd/yyyy HH:mm:ss')

       vue 实例挂载自定义属性

       示例

       import Vue from 'vue'import XEUtils from 'xe-utils'import VXEUtils from 'vxe-utils'import customs from './customs'XEUtils.mixin(customs)Vue.use(VXEUtils, XEUtils, { mounts: ['locat', 'browse', 'cookie']})this.$locat // this.$locat.originthis.$browse // this.$browse['-webkit'] truethis.$cookie // this.$cookie('name', 'value')

       混合函数

       文件 ./customs.js

       export function custom1 () { console.log('自定义函数')}

       示例 ./main.js

       import Vue from 'vue'import XEUtils from 'xe-utils'import customs from './customs'XEUtils.mixin(customs)Vue.use(VXEUtils, XEUtils)// 调用自定义扩展函数XEUtils.custom1()

       示例

       Home.vue<template> <div> <ul> <li v-for="item in list" :key="item.id">{ { item.dateStr }}或者{ { $utils.dateToString(item.date) }}</li> </ul> </div></template><script>export default { data () { return { list: [] } }, methods: { init () { this.$ajax.getJSON('services/user/list', { id: }) .then(data => { this.list = data.map(item => { item.dateStr = this.$utils.dateToString(item.date, 'MM/dd/yyyy') }) }).catch(data => { this.list = [] }) } }, created () { this.init() }}</script>

微信小程序商城源代码微信小程序商城源代码

       关于微信小程序商城源代码,许多人可能还不太了解。今天,我将为大家解答相关问题,并详细介绍微信小程序商城源代码。

       1. 在上一篇文章中,我们简要介绍了微信小程序的IDE(微信小程序购物商城系统开发系列-工具篇)。相信大家都已经跃跃欲试,想要建立自己的小程序,打造一个独立的商城网站。

       2. 先别急,我们一步步来。首先,尝试编写一个自己的小demo。本文将主要介绍小程序的目录结构和相关语法,为后续的微信小程序商城系统开发打下基础。

       3. 首先,了解小程序的目录结构:

        - Pages:我们新建的页面保存在此文件夹下。每个小程序页面由同路径下同名的四个不同后缀文件组成,例如:index.js、index.wxml、index.wxss、index.json。

        - .js后缀的文件是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件,.wxml后缀的文件是页面结构文件。

        - Utils:我们编写的一些公共工具js可以放在这里。

        - app.js:小程序的脚本代码。在此文件中,我们可以监听并处理小程序的生命周期函数、声明全局变量,调用框架提供的丰富API,如本例中的同步存储和同步读取本地数据。

        - app.json:对整个小程序的全局配置。在此文件中,我们可以配置小程序的页面组成、窗口背景色、导航条样式和默认标题等。

        - app.wxss:整个小程序的公共样式表。我们可以在页面组件的class属性上直接使用app.wxss中声明的样式规则。每个页面也可以定义自己的wxss。

       4. Wxss是微信提供的样式表,与css类似。但它支持的选择器相对较少。在编写时,我们以前的项目css基本可以直接使用,但除了特定选择器外,使用了其他选择器可能导致页面报错!

       5. index.wxml:wxml后缀的文件是微信小程序提供的页面结构文档,类似于我们以前的web页面的html。接下来,我们将新建一个页面进行尝试。

       6. 在pages下新建页面test,注意新建的.js、.json、.wxml、.wxss文件与page下的test文件夹名称保持一致。微信小程序会自动读取这些文件,并生成小程序实例。

       7. 首先,在app.json中配置新建的页面。注意页面配置的顺序,实际操作中发现,第一个配置的是首页。

       8. 配置好后,我们可以编写页面代码。在app.json中,页面可以直接配置window属性。

       9. 在wxml中,我们可以编写页面展示的结构,类似于以前写html。这里使用了标签,相当于我们以前的div。

       . Wxss与大家熟悉的css类似。这边我们给.box添加了一个样式。

       . test.js是页面的脚本文件。在此文件中,我们可以监听并处理页面的生命周期函数、获取小程序实例、声明并处理数据、响应页面交互事件等。这边我们使用bindtap给view绑定一个点击事件,然后弹出一个提示框。

       . 注意:js的写法与以前相同,但这里不能使用window对象和document对象,也不能使用jquery、zepto等框架,因为这些框架会使用到window和document对象。

       . 好了,今天我们就先介绍到这里,下一节我们将开始编写商城系统。

       以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。本文到此分享完毕,希望对大家有所帮助。

相关栏目:焦点