当前位置: 首页 > wzjs >正文

博物馆装饰设计公司seo为什么要进行外部优化

博物馆装饰设计公司,seo为什么要进行外部优化,二维码分销系统免费,百度站长如何添加网站个人博客原文地址 WebAssembly(简称 wasm) 是一种旨在突破 Web 性能瓶颈的技术方案。它由 W3C 官方推动,并且得到了主流浏览器的广泛支持。它的核心思想是通过运行其他高性能编程语言(比如 C、C、Rust 等)来实现复杂功…

个人博客原文地址

WebAssembly(简称 wasm) 是一种旨在突破 Web 性能瓶颈的技术方案。它由 W3C 官方推动,并且得到了主流浏览器的广泛支持。它的核心思想是通过运行其他高性能编程语言(比如 C、C++、Rust 等)来实现复杂功能,然后将这些代码编译成一种 Web 平台能够识别和执行的字节码文件。JavaScript 可以像调用第三方库一样直接引入并使用这种字节码,使用方式简单、高效,同时具备跨平台特性和足够的安全性。

简单来说,WebAssembly 让开发者可以用高性能语言编写代码,编译后在浏览器中运行,既提升了 Web 应用的性能,又保持了良好的兼容性和安全性。

尝试

于是乎,我也做了个尝试,尝试后也发现了一些问题,这里分享出我的实验,以此来给想了解的开发者们,一个初步理解

  • 开发环境:rust+wasm-bindgen
  • 功能:JSON的序列化和反序列化
  • 调用环境:vite+react

rust的实现代码

首先需要运行 cargo new json-rust-wasm --lib 来新建一个lib项目

这里是源码
Cargo.toml

[package]
name = "json-rust-wasm"
version = "0.1.0"
edition = "2021"[lib]
crate-type = ["cdylib"][dependencies]
wasm-bindgen = { version = "0.2.100", features = ["serde"] }
serde-wasm-bindgen = "0.4"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"[profile.release]
opt-level = 3

lib.rs

use serde::Serialize; // 导入 Serialize trait
use serde_json::{from_str, to_string, Value};
use serde_wasm_bindgen::Serializer;
use serde_wasm_bindgen::{from_value, to_value};
use wasm_bindgen::prelude::*;// 反序列化:JSON 字符串 -> JsValue(通用的 JS 对象)
#[wasm_bindgen]
pub fn json_parse(json_str: &str) -> Result<JsValue, JsValue> {// 将 JSON 字符串解析为 serde_json::Valuelet value: Value = from_str(json_str).map_err(|e| JsValue::from_str(&e.to_string()))?;// 将 Value 转换为 JsValuelet serializer = Serializer::new().serialize_maps_as_objects(true);value.serialize(&serializer).map_err(|e| JsValue::from_str(&e.to_string()))
}// 序列化:JsValue(任意 JS 数据) -> JSON 字符串
#[wasm_bindgen]
pub fn json_stringify(js_value: JsValue) -> Result<String, JsValue> {// 将 JsValue 转换为 serde_json::Valuelet value: Value = from_value(js_value).map_err(|e| JsValue::from_str(&e.to_string()))?;// 将 Value 序列化为 JSON 字符串to_string(&value).map_err(|e| JsValue::from_str(&e.to_string()))
}

这里有几个需要注意的点

  • 库的版本最好固定,因为rust各种库之间版本变化总能引起报错
  • 依赖下载挺慢的,网上可以查询使用镜像库来下载的方法。
  • 打包需要额外工具打包
    • cargo install wasm-bindgen-cli,安装一个工具,安装也慢
    • 安装完成后运行 wasm-pack build 打包成wasm

vite项目中使用

Vite 官方提供了一种导入 WebAssembly 的语法,例如:import init from ‘./example.wasm?init’。这种方式适用于直接打包的纯 WebAssembly 文件(即没有额外包装的 wasm 文件)。然而,如果使用 wasm-pack 工具打包 WebAssembly,情况会有所不同。wasm-pack 会生成额外的包装文件(比如 JavaScript 绑定代码)以及 TypeScript 类型定义,因此无法直接使用 Vite 官方的这种导入方式。

正确的做法是安装并使用 Vite 的插件 vite-plugin-wasm。配置好这个插件后,你可以像导入普通 ES 模块一样,直接引入由 wasm-pack 打包生成的 JavaScript 文件。例如:

import { json_parse, json_stringify } from "./pkg/json_rust_wasm";

这种方式利用了 wasm-pack 生成的绑定代码,让 wasm 的使用更加自然和无缝。如果你处理的是不依赖 wasm-pack、仅以某种方式打包的纯 wasm 文件,那么仍然可以采用 Vite 官方的导入语法。

当前案例不可实际使用

整个测试过程顺利完成,但结果却不尽如人意。我尝试用 WebAssembly(wasm)来处理 JSON 的序列化和反序列化,并与原生 JavaScript 进行性能对比,结果发现 wasm 的表现反而更慢,甚至不如直接使用 JavaScript。经过一番调查,我找到了原因:

  1. 浏览器对 JSON 的高度优化:浏览器内置的 JSON 处理(例如 JSON.parse 和 JSON.stringify)已经经过了极高的性能优化,本身就非常高效。
    调用
  2. wasm 的开销:尽管单次调用 wasm 的时间开销微乎其微,但频繁调用会累积一定的性能影响,尤其是在简单任务中,这种开销可能超过 wasm 带来的好处。
  3. wasm 的适用场景:wasm 更适合高强度的计算任务,能够突破 JavaScript 的性能瓶颈。例如,音视频转码、加密解密、图形处理、音频计算或大数据处理等场景,才能真正发挥其优势。而且,只有在计算量足够大的情况下,性能提升才会显著。否则,JavaScript 本身的能力其实不容小觑。
    因此,对于 JSON 序列化这种轻量级任务,直接使用 JavaScript 原生方法可能仍是更好的选择。
http://www.dtcms.com/wzjs/510501.html

相关文章:

  • 线条类网站短视频代运营方案策划书
  • 各大电商购物网站转化率报表seo实战
  • 高平网站优化公司seo 技术优化
  • 池州最好的网站建设seo sem是啥
  • 太平建设公司官方网站注册域名
  • 做培训网站哪家好推广软文300字范文
  • 遵义网站建设哪家好2024年的新闻时事热点论文
  • 昆明网站测试公司深圳推广平台深圳网络推广
  • 网站建设的数据所有权东莞搜索seo网站关键词优化
  • 徐州网站外包开封网络推广公司
  • 专做女鞋批发的网站杭州网站seo外包
  • 福州短视频seo公司seo 百度网盘
  • 阅读推广联盟南宁百度seo软件
  • 医院 网站建设 新闻新闻今日要闻
  • 品牌广告策划方案seo搜索引擎优化总结报告
  • 网站建设服务定制网络营销策略
  • app网站开发流程图注册推广
  • 建设银行网站怎么开通短信服务东莞做网站哪里好
  • 网站后台界面设计网站seo综合诊断
  • c 开发商城网站开发免费网站推广
  • 做网站需要看啥书可以免费领取会员的软件
  • 简历模板做的最好的是哪个网站教育机构
  • 做同城网站有哪些苹果要做搜索引擎
  • 做防腐木网站网站排名查询
  • 龙岩企业网站建设制作优化关键词怎么做
  • 美国做3d h动画的网站如何自己做一个软件
  • 政府网站站群建设方案互联网品牌宣传推广服务公司
  • 做基因结构可以用哪个网站北京网站建设优化
  • 设计师做兼职的网站有哪些百度推广费用一天多少钱
  • 水果零售电子商务网站综合评价与建设研究搭建网站的步骤