工具与效率
Git 子模块(submodule)是 Git 中用于管理项目依赖的一种机制。它允许将一个 Git 仓库作为另一个仓库的子目录,使得一个仓库可以引用另一个仓库的特定版本,而不是将其完整地复制到主仓库中。
使用子模块,可以轻松地将外部项目或库集成到主项目中,同时保持各个项目的独立性和版本控制。
在添加子模块时,可以使用 git submodule add 命令指定子模块的远程仓库地址和在主项目中的存放路径。例如:
git submodule add https://github.com/example/submodule.git path/to/submodule
之后,主项目会记录子模块的信息,并在主项目的提交中包含子模块的快照。其他人在克隆主项目时,可以通过 git submodule update --init 命令初始化并下载子模块的内容。
要更新子模块到最新版本,可以使用 git submodule update --remote 命令。
子模块虽然提供了便利的依赖管理机制,但也需要注意一些注意事项。主要包括:
注 ...
移动端开发
1、小程序内引入环信文件
2、完善环信配置
3、环信登录
4、加载历史消息
5、发送消息
6、接收消息
需要注意的是:发送消息的时候,需要在本地的消息列表内手动添加信息
// 添加消息到消息列表,并自动滚动到该条消息
updateMessage(obj) {
let that = this
let chatRecordList = that.data.chatRecordList
chatRecordList.push(obj)
chatRecordList[chatRecordList.length - 1].idd = 'id' + chatRecordList[chatRecordList.length - 1].id
that.setData({
chatRecordList: chatRecordList,
toVview: 'id' + chatRecordList[chatRecordList.length - 1].id
})
}
...
前端开发
加载卫星云图(同样使用polygon来加载)设置好图片要显示的范围添加polygon卫星云图动图准备多张卫星云图图使用CallbackProperty动态material赋值定时器轮流改变i值如果卫星云图颜色过深,遮盖住了地球表面,可以在material里面设置一个透明度
color: Cesium.Color.WHITE.withAlpha(0.6) // 这里的颜色不会对图片材质造成影像
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title ...
前端开发
用我们传统的开发模式,原生JS或JQ操作DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。在一次操作中,我需要更新10个DOM节点,浏览器收到第一个DOM请求后并不知道还有9次更新操作,因此会马上执行流程,最终执行10次。例如,第一次计算完,紧接着下一个DOM更新请求,这个节点的坐标值就变了,前一次计算为无用功。计算DOM节点坐标值等都是白白浪费的性能。即使计算机硬件一直在迭代更新,操作DOM的代价仍旧是昂贵的,频繁操作还是会出现页面卡顿,影响用户体验。
Web界面由DOM树(树的意思是数据结构)来构建,当其中一部分发生变化时,其实就是对应某个DOM节点发生了变化,
虚拟DOM就是为了解决浏览器性能问题而被设计出来的。如前,若一次操作中有10次更新DOM的动作,虚拟DOM不会立即操作DOM,而是将这10次更新的diff内容保存到本地一个JS对象中,最终将这个JS对象一次性attch到DOM树上,再进行后续操作,避免大量无谓的计算量。所以,用JS对象模拟DOM节点的好处是,页面的更新可以先全部反映在JS对象(虚拟DOM)上,操作内存中的JS对象的速度显然要更快,等更新完成后,再将 ...
部署与运维
以centos服务器为例,安装docker
1、 检查内核版本通常需要Linux内核版本3.10以上
uname -r
2、 移除旧版本的Docker(如果有)yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3、 安装依赖包安装yum-utils、device-mapper-persistent-data和lvm2,这些是Docker安装的依赖包:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
4、 设置稳定的仓库# 官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce ...
移动端开发
背景
车机系统前端应用需要在程序进入后台 或者 被蓝牙打断时暂停播放,进入前台 或者 蓝牙结束时,保持暂停状态
现状
车机前端应用进入后台时,手动调用暂停功能,视频暂停,车机进入前台后,保持暂停状态。√车机前端应用视频播放中,此时蓝牙电话进入,视频会自动暂停播放(注意 是自动暂停,不是手动,原因不明),蓝牙电话结束后,会自动续播,且没有声音(要求保持暂停状态,恢复播放后有声音)
解决方案
去掉video组件控制条提供的播放、暂停功能,一律手动控制
自定义变量,记录播放状态,false代表暂停,true代表播放
监听视频播放状态,在onpause事件中,将自定义变量改为false
在onplay事件中,检测自定义变量的状态,如果是暂停状态,则暂停播放
手动触发播放、暂停时,将自定义变量改为对应状态
1. 为什么去掉系统controls提供的播放、暂停按钮因为系统提供的播放、暂停按钮,不会触发自定义事件,不能手动改变自定义变量的状态,后续的播放、暂停功能都是通过自定义变量控制的
2. 为什么要监听视频播放、暂停状态其实主要是监听暂停状态,因为在蓝牙电话进入时,视频会自动暂停,此 ...
vue2 中对循环的解释
当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。这个类似 Vue 1.x 的 track-by=”$index”。
这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出。
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key attribute:
上面的意思是说,vue在循环的时候使用key会更好的进行渲染,在数据更改时会使虚拟dom有更小的消耗。
所以:
当有数据需要修改的时候,尽量不要使用index作为key值,比如:管理后台添加列表数据、选择器内添加选项等那么在不需要修改数据的时候(单纯的给用户进行展示的时候)是可以使用index作为key值的,因为不存在二次渲染的问题
手写虚拟滚动的时候,因为是在同一个页面区域内进行渲染,也不建议使用index作为key值 ...
移动端开发
在taro3.2.0项目中config文件夹内的dev.js、index.js、prod.js不能改变NODE环境变量的process.env.NODE_ENV的值,必须使用插件[taro-plugin-environment](https://github.com/bigmeow/taro-plugin-environment)
只有 TARO_APP_ 开头的环境变量会被注入进去
示例:
无头浏览器完成任务后关闭浏览器
详细说明你希望在任务完成后关闭 Playwright 启动的浏览器。你当前的 a(type) 函数里,浏览器是在函数开头启动的,但在上传图片后没有关闭。正确做法是在上传完成(无论成功或失败)后调用 browser.close()。
在 a(type) 函数中,上传图片的 Promise 完成后(resolve 或 reject 前),都调用 await browser.close()。
可以用 try…finally 保证无论上传成功还是失败都能关闭浏览器。
修改如下:
async function a(type) {
const start = Date.now();
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
// ... 省略部分代码 ...
try {
// ... 省略页面操作和截图 ...
return await new Pro ...
后端开发
Python实用工具脚本汇总在日常开发中,我们经常需要编写一些自动化脚本来提高工作效率。本文汇总了几个实用的Python工具脚本,包括文件解压、Git仓库管理等。
1. 递归解压压缩包工具1.1 功能特点
支持多种压缩格式:ZIP、TAR、TAR.GZ、TAR.BZ2、GZ
递归解压嵌套的压缩包
自动生成解压目录
支持对特定文件类型(如.log)的特殊处理
1.2 完整代码实现import os
import zipfile
import tarfile
import gzip
import shutil
from pathlib import Path
def ensure_dir_exists(directory):
"""确保目录存在,不存在则创建"""
if not os.path.exists(directory):
os.makedirs(directory)
def get_extract_path(file_path):
"""根据压缩包名称生成解压目录路径"""
extract_dir = os.path.spli ...
前端开发
盒模型:盒模型又称框模型(Box Model),包含了
元素内容(content)内边距(padding)边框(border)外边距(margin)
ie模式IE模型元素宽度width = content + padding + border,高度计算相同。
标准模式(非ie模式)标准模型元素宽度width=content,高度计算相同。这也就说明在标准模式下设置了width,再设置border或者padding后,会导致宽度(高度)会变,导致页面布局错乱。
js获取宽高getComputedStyle介绍
window.getComputedStyle(dom).width / height
设置延伸1.BFCBFC(Block Formatting Context):块级格式化上下文。
BFC决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。一个BFC环境中的元素不会影响到其他环境中的布局
1.1 BFC的原理(渲染规则)
BFC内的元素垂直方向的边距会发生重叠。属于不同BFC的元素外边距不会发生重叠BFC的区域不会与浮动元素的布局重叠。BFC元 ...
JavaScript核心概念与实战技巧JavaScript作为前端开发的核心语言,其重要性不言而喻。本文将深入探讨JavaScript的核心概念,包括事件循环、DOM操作、事件处理、正则表达式等,并通过实际案例展示如何在实际开发中应用这些技术。
1. JavaScript事件循环机制1.1 单线程与异步编程JavaScript是单线程语言,这意味着在JS引擎中负责解释和执行JavaScript代码的线程只有一个。为了处理耗时操作而不阻塞主线程,JavaScript引入了异步编程机制。
// 同步代码示例
console.log('开始');
function syncTask() {
console.log('同步任务');
for (let i = 0; i < 1000000000; i++) {
// 耗时操作
}
console.log('同步任务完成');
}
syncTask();
console.log('结束');
// 输出顺序:开始 -> 同步任务 -> 同步任务完成 ...