Skip to content
On this page
字数:592 字
预计:2 分钟
阅读量:

Javascript V8 性能优化代码

作者:winches
更新于:1 个月前

好文推荐:Optimizing Javascript for fun and for profit

Slack 创建一个 App 应用

官网 QuickStart

官网 App 地址

主要按照官网的流程

  1. 先创建一个 App,选择一个 Workspace
  2. 添加 Bot 的权限,比如 chat:write
  3. 在 Workspace 中添加 App,即安装 App 到频道中

发送信息

  1. 配置 Bot 的监听事件,比如 message.channels
  2. 通过 Webhook 直接用 Bot 发送消息

Slack 创建工作流

官网 Workflow Builder

它可以接收 webhook 和设置变量,然后重新发送到指定位置,频道/个人

Slack 工具合集

Slack help centerSlack message playgroundSlack api 文档

现代 typescript 学习网站

现代 typescript 学习网站

Heic2Png

使用 heic2any 库将 heic 格式的图片转换为 png 格式,heic 是 IOS 的图片格式,安卓和浏览器不支持

ts
import heic2any from 'heic2any'

const heicList = ['image/heic', 'image/heif']

function fileToBlob(file: File): Promise<Blob> {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.onload = (e) => {
      const blob = new Blob([e.target?.result], { type: file.type })
      resolve(blob)
    }
    reader.onerror = reject
    reader.readAsArrayBuffer(file)
  })
}

function convertFile(file: File): Promise<File> {
  return new Promise(async (resolve) => {
    if (heicList.includes(file.type)) {
      try {
        const blob = await fileToBlob(file)
        const result = (await heic2any({ blob })) as Blob
        const convertToPng = new File([result], file.name.replace(/\.(heic|heif)$/, '.png'), { type: 'image/png' })

        resolve(convertToPng)
      }
      catch {}
    }
    resolve(file)
  })
}

Web 上传时压缩

  1. 使用 createImageBitmapOffscreenCanvas 将图片转换为 webp 格式
ts
async function convertToWebP(pngFile) {
  try {
    // 创建 ImageBitmap
    const bitmap = await createImageBitmap(pngFile)

    // 使用 OffscreenCanvas
    const canvas = new OffscreenCanvas(bitmap.width, bitmap.height)
    const ctx = canvas.getContext('2d')

    // 绘制图片
    ctx.drawImage(bitmap, 0, 0)

    // 转换为 WebP
    const blob = await canvas.convertToBlob({
      type: 'image/webp',
      quality: 0.8
    })

    bitmap.close()
    return blob
  }
  catch (error) {
    console.error('Conversion failed:', error)
    throw error
  }
}

// 使用示例
async function handleFileSelect(event) {
  const file = event.target.files[0]
  if (file && file.type === 'image/png') {
    try {
      const webpBlob = await convertToWebP(file)
      console.log('Original size:', file.size)
      console.log('WebP size:', webpBlob.size)

      // 创建预览
      const url = URL.createObjectURL(webpBlob)
      const img = new Image()
      img.src = url
      document.body.appendChild(img)

      // 清理
      URL.revokeObjectURL(url)
    }
    catch (error) {
      console.error('Conversion failed:', error)
    }
  }
}
  1. 在 web worker 中使用 squoosh 谷歌开发的可以在 web 端使用的图片压缩库
  2. 最后返回压缩后的数据,重新生成 File 对象

Made with ❤️