OneCode 3.0 前端架构全面研究

OneCode 3.0 前端架构全面研究

一、技术栈概述

OneCode 3.0 前端架构采用了多层次、组件化的技术栈设计,实现了从可视化设计到代码生成、运行时渲染的全链路支持。其技术栈核心特点是 "注解驱动 + 元数据管理 + 可视化建模" 的三维架构,将低代码开发提升到了一个新的技术高度。

1.1 核心技术栈全景

OneCode 3.0 前端技术栈主要由以下几部分构成:

技术层 核心组件 主要功能
基础运行环境 xui 核心库 提供基础对象系统、事件机制和组件生命周期管理
JavaScript 引擎 执行前端逻辑和动态代码
组件框架 xui.UI 组件库 提供基础 UI 组件和复合组件实现
自治 UI 系统 实现自适应界面渲染和多端适配
开发工具链 OneCode IDE 可视化设计工具和代码编辑器
代码生成引擎 将设计转化为可执行代码
运行时环境 动态加载引擎 支持组件动态加载和运行时更新
注解处理器 解析和执行注解配置
数据交互 事件总线系统 实现组件间通信和数据交互
API 通信模块 与后端服务进行数据交互

1.2 前端框架技术细节

OneCode 3.0 前端框架采用 xui 作为核心 UI 库,构建了完整的组件化开发体系。xui 是 OneCode 团队自主研发的轻量级前端框架,具有以下特点:

核心架构基础

javascript 复制代码
xui.Class("xui.UI.PopMenu", "xui.UI", {
    Static: {
        Appearances: {...},  // 样式定义
        Behaviors: {...},    // 行为定义
        DataModel: {...}     // 数据模型
    },
    Instance: {
        Initialize: function(){...},  // 初始化逻辑
        pop: function(){...},         // 显示逻辑
        hide: function(){...},        // 隐藏逻辑
        // 其他实例方法
    }
});

关键技术特性

  1. 类继承体系:采用基于原型的类继承机制,支持组件的扩展和复用
  1. 模块化设计:将组件分为核心层、视图层和交互层,实现高内聚低耦合
  1. 模板引擎:支持多级模板继承和动态扩展,实现灵活的 UI 渲染
  1. 事件系统:统一的事件处理机制,支持跨组件通信
  1. 样式管理:支持动态样式配置和主题切换
  1. 国际化支持:内置多语言支持机制,方便国际化应用开发

1.3 与主流前端框架对比

OneCode 3.0 前端架构与主流前端框架相比,具有以下差异化特点:

特性 OneCode 3.0 React Vue Angular
开发方式 可视化设计 + 注解驱动 组件化 + JSX 组件化 + 模板 组件化 + 模板
学习曲线 低,可视化操作 + 少量注解 中,需掌握 JSX 和钩子 低,类似 HTML 的模板 高,需掌握 TypeScript 和框架特性
运行时性能 中等,注重平衡 高,虚拟 DOM 和 Diff 算法 高,轻量级和响应式 高,依赖注入和编译优化
开发效率 高,可视化设计和代码生成 中,需手动编写组件 中,需手动编写组件 中,需手动编写组件
团队协作 优,设计与开发分离 良,需规范组件接口 良,需规范组件接口 优,严格的架构模式
适用场景 企业级低代码平台 单页应用和复杂交互 渐进式应用开发 大型企业级应用

二、组件化设计思路

OneCode 3.0 采用了基于领域驱动设计 (DDD) 的组件化设计思路,将复杂的业务系统拆解为可复用的组件,实现了 "高内聚、低耦合" 的设计目标。

2.1 组件分类与层级结构

OneCode 3.0 的组件体系采用分层设计思想,构建了从基础组件到复合组件的完整体系,其架构层次如下:

组件层级结构

复制代码
基础组件(原子组件)
├─ 容器组件
│  ├─ 布局容器
│  ├─ 导航容器
│  └─ 表单容器
├─ 功能组件
│  ├─ 数据展示组件
│  ├─ 数据输入组件
│  ├─ 交互操作组件
│  └─ 图表组件
├─ 业务组件
│  ├─ 订单管理组件
│  ├─ 用户管理组件
│  └─ 报表分析组件
└─ 页面组件
   ├─ 列表页面
   ├─ 详情页面
   └─ 表单页面

组件化设计原则

  1. 单一职责原则:每个组件只负责一项特定功能
  1. 开闭原则:组件应该对扩展开放,对修改关闭
  1. 依赖倒置原则:高层模块不应该依赖底层模块,两者都应该依赖抽象
  1. 接口隔离原则:客户端不应该依赖它不需要的接口
  1. 迪米特法则:一个对象应该对其他对象有最少的了解

2.2 组件划分与边界定义

OneCode 3.0 组件划分遵循以下原则:

基于功能划分

  • 展示类组件:负责数据的展示和呈现
  • 操作类组件:负责用户交互和操作
  • 容器类组件:负责布局和组织其他组件
  • 服务类组件:负责与后端服务交互

基于领域划分

  • 按业务领域划分组件,如订单组件、用户组件等
  • 按业务流程划分组件,如审批流程组件、报销流程组件等
  • 按数据模型划分组件,如实体组件、聚合根组件等

组件边界定义

javascript 复制代码
xui.Class("xui.UI.PopMenu", "xui.UI", {
    Static: {
        // 静态属性和方法
    },
    Instance: {
        // 实例属性和方法
        _renderItem: function(item, index) {
            var type = item.type || 'button',
                renderer = this['_render' + type.charAt(0).toUpperCase() + type.slice(1)];
            
            if (!renderer) throw new Error('Unsupported item type: ' + type);
            
            return renderer.call(this, item, index);
        }
    }
});

2.3 组件复用机制

OneCode 3.0 实现了多层次的组件复用机制,包括:

基于继承的复用

javascript 复制代码
xui.Class("xui.UI.MTabs", "xui.UI.Tabs", {
    Static: {
        Appearances: {
            // 移动端样式优化
            ".xui-mtabs-item": {
                "height": "50px",
                "flex": "1",
                "text-align": "center",
                "padding": "5px 0 0 0",
                "font-size": "12px"
            }
        }
    },
    Instance: {
        Initialize: function() {
            var t = this;
            // 调用父类初始化
            t._super();
            
            // 移除桌面端元素
            t.$leftBtn && t.$leftBtn.remove();
            t.$rightBtn && t.$rightBtn.remove();
            
            // 移动端样式调整
            t.$tabBox.style.overflowX = "auto";
            t.$tabBox.style.overflowY = "hidden";
            t.$tabBox.style.display = "flex";
        }
    }
});

基于组合的复用

javascript 复制代码
xui.Class("xui.UI.FoldingTabs", "xui.UI.Tabs", {
    Static: {
        Templates: {
            // 三段式模板:头部/内容/尾部
            ITEM: {
                HEAD: {
                    tagName: 'div',
                    className: 'xui-foldingtabs-head',
                    ICON: {tagName: 'span', className: 'xui-icon'},
                    CAPTION: {tagName: 'span', className: 'xui-caption'},
                    ARROW: {tagName: 'span', className: 'xui-arrow'}
                },
                BODY: {
                    tagName: 'div',
                    className: 'xui-foldingtabs-body'
                },
                TAIL: {
                    tagName: 'div',
                    className: 'xui-foldingtabs-tail'
                }
            }
        }
    }
});

基于配置的复用

javascript 复制代码
{
    "type": "Tabs",
    "id": "userTabs",
    "properties": {
        "direction": "left",
        "multi": false,
        "items": [
            {"id": "baseInfo", "caption": "基本信息", "panel": "basePanel"},
            {"id": "contact", "caption": "联系方式", "panel": "contactPanel"}
        ]
    },
    "bind": {
        "value": "{{currentTab}}"  // 与数据模型双向绑定
    }
}

2.4 组件生命周期管理

OneCode 3.0 组件的生命周期管理通过 xui.ModuleFactory 实现,提供了从组件创建到销毁的完整生命周期支持。

生命周期阶段

  1. 创建阶段
    • initialize: 初始化组件配置
    • beforeCreated: DOM 创建前的准备工作
    • onCreated: DOM 创建完成后的初始化
  1. 运行阶段
    • render: 组件渲染
    • refresh: 组件刷新
    • event handling: 事件响应与交互
  1. 销毁阶段
    • destroy: 组件销毁与资源释放

模块工厂实现

javascript 复制代码
xui.ModuleFactory负责组件的实例化和缓存管理,核心方法包括:
// 获取或创建模块实例
getModule: function(id, onEnd, threadid, cached) {
    // cached=true: 从缓存获取实例
    // cached=false: 创建新实例
    if (cached && this._cache[id] && !this._cache[id].destroyed) {
        return this._cache[id];
    }
    // 模块创建逻辑
},
// 创建新模块实例
newModule: function(cls, onEnd, threadid, properties, events) {
    return this.getModule(cls, onEnd, threadid, false, properties, events);
}

生命周期管理示例

javascript 复制代码
// 创建模块实例
xui.getModule('MyComponent', function(err, module) {
    if (!err) {
        module.show(); // 显示组件
    }
}, null, false);
// 销毁模块
module.destroy();

三、性能优化策略

OneCode 3.0 前端架构在性能优化方面采用了多层次的策略,从加载速度、渲染效率到交互体验都进行了全面优化。

3.1 加载性能优化

资源加载优化

  1. 按需加载:对非首屏组件采用懒加载策略,仅在需要时加载相关资源
  1. 代码压缩:开启代码压缩和混淆,减小文件体积
  1. 静态资源 CDN 加速:使用 CDN 加速静态资源的加载
  1. 预加载:对核心组件使用 @PreloadAnnotation 预加载,提高关键路径性能
  1. 资源合并:合并多个小文件为一个大文件,减少 HTTP 请求次数

加载优化示例

javascript 复制代码
// 懒加载实现
_loadLazyPanel: function(panelId) {
    var t = this,
        panel = t.getPanelById(panelId);
    
    // 检查是否需要加载
    if (!panel || panel.getAttribute('data-lazy') !== 'true') {
        return;
    }
    
    // 标记为加载中
    panel.setAttribute('data-loading', 'true');
    panel.innerHTML = '<div class="xui-loading">加载中...</div>';
    
    // 加载内容
    var url = panel.getAttribute('data-url');
    xui.ajax({
        url: url,
        method: 'GET'
    }).then(function(content) {
        // 更新面板内容
        panel.innerHTML = content;
        panel.removeAttribute('data-lazy');
        panel.removeAttribute('data-loading');
        
        // 触发内容加载完成事件
        t.fire('panelloaded', {
            id: panelId,
            panel: panel
        });
        
        // 调整尺寸
        t.adjustSize();
    }).catch(function(error) {
        panel.innerHTML = '<div class="xui-error">加载失败</div>';
        panel.setAttribute('data-error', 'true');
    });
}

3.2 渲染效率优化

渲染性能优化

  1. 虚拟滚动:仅渲染可见区域内的行(约 50 行),通过绝对定位模拟完整列表,内存占用降低 70%
  1. 增量渲染:数据变更时通过 Diff 算法计算最小更新范围,避免全量重绘
  1. 批量更新:使用 xui.batch 方法合并多次渲染操作,减少重排重绘
  1. DOM 缓存:通过 POOL 节点缓存已创建但未显示的组件,减少 DOM 操作
  1. 模板缓存:缓存已编译的模板,避免重复解析

虚拟滚动实现

javascript 复制代码
// 虚拟滚动实现
renderVisibleItems: function() { 
    var start = Math.max(0, scrollTop / itemHeight - 10);  
    var end = Math.min(items.length, start + 50);  
    this.renderItems(items.slice(start, end));
}

增量渲染实现

javascript 复制代码
// 增量渲染实现
_updateItems: function(items) {
    var currentItems = this.getItems();
    var diff = this._diff(currentItems, items);
    
    // 更新新增项
    diff.added.forEach(function(item) {
        this.addItem(item);
    }.bind(this));
    
    // 更新修改项
    diff.changed.forEach(function(change) {
        this.updateItem(change.old, change.new);
    }.bind(this));
    
    // 更新删除项
    diff.removed.forEach(function(item) {
        this.removeItem(item);
    }.bind(this));
}

3.3 交互性能优化

交互性能优化

  1. 事件委托:使用事件委托机制减少事件监听器数量
  1. 防抖与节流:对高频事件使用防抖和节流处理,避免性能损耗
  1. 动画优化:使用 CSS3 动画替代 JavaScript 动画,提高流畅度
  1. 长列表优化:实现虚拟滚动加载长列表,避免一次性渲染大量数据
  1. 响应式设计:采用流式布局和媒体查询,实现移动端优化

事件委托实现

javascript 复制代码
// 事件委托实现
_bindEvents: function() {
    var $el = this.getRoot();
    
    // 单个委托处理所有菜单项点击
    $el.on('click', '.xui-menu-item', xui.fn.bind(function(e) {
        var itemId = e.currentTarget.getAttribute('data-id'),
            item = this._getItemById(itemId);
        
        if (item && !item.disabled) {
            this._handleItemClick(item, e);
        }
    }, this));
    
    // 鼠标悬停委托
    $el.on('mouseenter', '.xui-menu-item', this._handleItemMouseEnter.bind(this));
    $el.on('mouseleave', '.xui-menu-item', this._handleItemMouseLeave.bind(this));
}

防抖与节流实现

javascript 复制代码
// 防抖函数
_debounce: function(func, delay) {
    var timer;
    return function() {
        var context = this, args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function() {
            func.apply(context, args);
        }, delay);
    };
}
// 节流函数
_throttle: function(func, limit) {
    var lastCall = 0;
    return function() {
        var now = new Date().getTime(),
            context = this,
            args = arguments;
        if (now - lastCall >= limit) {
            func.apply(context, args);
            lastCall = now;
        }
    };
}

3.4 内存管理优化

内存管理优化

  1. 对象池化:对频繁创建和销毁的对象使用对象池,减少内存分配和垃圾回收压力
  1. 合理使用闭包:避免不必要的闭包引用,防止内存泄漏
  1. 清除定时器:在组件销毁时清除所有定时器
  1. 解绑事件:在组件销毁时解绑所有事件监听器
  1. 释放 DOM 引用:在组件销毁时清除对 DOM 元素的引用

内存管理示例

javascript 复制代码
// 组件销毁实现
destroy: function() {
    var t = this;
    
    // 清除定时器
    t._timer && clearTimeout(t._timer);
    
    // 解绑事件
    t.$el && t.$el.off();
    
    // 销毁子组件
    t.$subPopMenuShowed && t.$subPopMenuShowed.destroy();
    
    // 清除DOM引用
    t.$el = null;
    t.$tabBox = null;
    t.$panelContainer = null;
    
    // 调用父类销毁方法
    t._super();
}

3.5 性能监控与分析

OneCode 3.0 提供了完善的性能监控和分析工具,帮助开发者识别和解决性能瓶颈:

性能监控工具

  1. 加载时间追踪:记录各个组件的加载时间,识别加载瓶颈
  1. 渲染性能分析:分析组件的渲染时间和渲染次数,优化渲染效率
  1. 事件处理分析:分析事件处理的时间和频率,优化事件处理逻辑
  1. 内存使用分析:监控内存使用情况,识别内存泄漏

性能优化建议

  1. 减少 DOM 操作:尽量减少直接操作 DOM,使用虚拟 DOM 或缓存 DOM 引用
  1. 避免同步阻塞:使用异步加载和处理,避免阻塞主线程
  1. 合理使用缓存:对静态数据和计算结果使用缓存,减少重复计算
  1. 优化 JavaScript 执行:避免长时间运行的 JavaScript 任务,使用 Web Workers 处理复杂计算
  1. 图片优化:压缩图片并使用适当的格式,优化图片加载性能

四、开发流程与管理

OneCode 3.0 前端架构采用了完善的开发流程和管理机制,从代码管理到构建部署都进行了标准化设计。

4.1 代码管理策略

代码管理策略

  1. 注解驱动开发:通过注解替代传统 XML 配置,代码量减少 40%,开发周期缩短 60%
  1. 代码生成:从可视化设计自动生成代码,减少手动编码工作量
  1. 代码规范:内置代码规范检查,确保代码风格统一
  1. 版本控制:与 Git 集成,支持版本管理和协作开发
  1. 代码审查:提供代码审查工具,提高代码质量

注解驱动开发示例

java 复制代码
@GalleryAnnotation(
    event = {
        @CustomGalleryEvent(name = "onClick", handler = "handleClick")
    }
)
public class ProductGallery { ... }

4.2 构建流程与工具

OneCode 3.0 采用了自动化的构建流程和工具,提高开发效率和代码质量:

构建流程

  1. 依赖管理:使用 Maven 或 Gradle 管理项目依赖
  1. 代码编译:使用 Java 编译器编译 Java 代码,使用 Babel 编译 JavaScript 代码
  1. 资源处理:处理图片、字体等静态资源,进行压缩和优化
  1. 代码检查:执行代码规范检查和静态代码分析
  1. 测试执行:执行单元测试和集成测试

构建工具配置示例

复制代码
<!-- Maven依赖配置 -->
<dependencies>
    <dependency>
        <groupId>com.onecode</groupId>
        <artifactId>onecode-esd</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.ds.esb</groupId>
        <artifactId>esb-core</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

4.3 部署流程与优化

OneCode 3.0 提供了灵活的部署方案,支持多种部署环境和场景:

部署方式

  1. 本地部署:在本地开发环境部署,方便开发和调试
  1. 测试环境部署:在测试环境部署,进行功能测试和集成测试
  1. 生产环境部署:在生产环境部署,提供正式服务
  1. 容器化部署:使用 Docker 进行容器化部署,提高部署效率和一致性
  1. 云部署:部署到云平台,实现弹性扩展和高可用性

部署优化策略

  1. 静态资源优化:压缩和缓存静态资源,减少服务器负载
  1. CDN 加速:使用 CDN 加速静态资源的分发
  1. 负载均衡:使用负载均衡器分发请求,提高系统吞吐量
  1. 监控报警:部署监控系统,实时监控系统运行状态
  1. 自动扩展:根据负载自动扩展服务器资源,提高系统弹性

4.4 开发协作流程

OneCode 3.0 支持多种开发协作模式,提高团队开发效率:

开发协作模式

  1. 模型优先模式(DDD 领域驱动的团队协作开发模式)
    • 阶段 1:领域探索(产品 + 架构):业务文档导入与解析
    • 阶段 2:模型设计(架构 + 开发):通过可视化建模工具对 AI 生成的初始模型进行优化
    • 阶段 3:模型转换(开发执行):系统自动将领域模型转换为可执行代码
    • 阶段 4:迭代优化(全团队):业务变更通过模型修订实现
  1. 代码优先模式(全栈程序员的高效开发模式)
    • 三码合一设计机制:实现设计码(可视化配置)、源码(Java 代码)、运行码(字节码)的实时一致性
    • 快速视图生成引擎:基于代码结构自动生成可视化设计视图
    • AI 代码转换实现:通过 MCP(模型转换协议)服务,将 AI 生成的原生 Java 代码转换为符合低代码架构的组件化代码
  1. 视图优先模式(非专业技术人员的快速应用模式)
    • 步骤 1:选择模板或新建应用:通过自然语言输入生成初始表单
    • 步骤 2:可视化调整:通过拖拽调整字段顺序,配置校验规则
    • 步骤 3:发布应用:系统自动完成数据库表创建、权限配置、移动端适配和数据看板生成

团队协作工具

  1. OneCode IDE:集成的可视化设计和代码编辑工具,支持团队协作
  1. 版本控制系统:与 Git 集成,支持代码版本管理和协作开发
  1. 问题跟踪系统:集成问题跟踪系统,管理开发过程中的问题和任务
  1. 文档管理系统:集成文档管理系统,管理需求文档和设计文档
  1. 持续集成系统:集成持续集成系统,实现自动化测试和部署

4.5 自动化测试与质量保障

OneCode 3.0 提供了完善的自动化测试和质量保障机制,确保系统的稳定性和可靠性:

自动化测试策略

  1. 单元测试:对单个组件和功能进行测试,确保基本功能正确性
  1. 集成测试:对多个组件和功能的集成进行测试,确保系统整体功能正确性
  1. 端到端测试:对系统的完整流程进行测试,模拟用户真实操作
  1. 性能测试:测试系统在不同负载下的性能表现,识别性能瓶颈
  1. 安全测试:测试系统的安全性,识别安全漏洞

测试工具集成

  1. JUnit:集成 JUnit 进行 Java 代码的单元测试
  1. Selenium:集成 Selenium 进行 Web UI 的自动化测试
  1. Postman:集成 Postman 进行 API 测试
  1. SonarQube:集成 SonarQube 进行代码质量分析
  1. Jacoco:集成 Jacoco 进行代码覆盖率分析

五、未来发展方向

OneCode 3.0 前端架构将继续演进和创新,未来发展方向主要包括:

5.1 AI 增强的开发体验

AI 增强的开发体验

  1. 智能代码生成:AI 根据设计意图自动生成代码,减少手动编码工作量
  1. 智能提示和自动完成:AI 提供智能提示和自动完成,提高开发效率
  1. 代码优化建议:AI 分析代码性能瓶颈,提供优化建议
  1. 智能错误诊断:AI 自动诊断和解决开发过程中的错误和问题
  1. 自然语言编程:支持自然语言描述需求,自动生成相应的代码和界面

5.2 跨平台能力扩展

跨平台能力扩展

  1. 响应式设计增强:进一步优化响应式设计,提高多设备适配能力
  1. 原生应用支持:支持生成原生 iOS 和 Android 应用,实现真正的跨平台开发
  1. 小程序支持:支持生成微信、支付宝等小程序,扩展应用分发渠道
  1. 桌面应用支持:支持生成桌面应用,扩展应用场景

5.3 性能优化与体验提升

性能优化与体验提升

  1. WebAssembly 集成:集成 WebAssembly,提高计算密集型应用的性能
  1. 服务端渲染优化:优化服务端渲染,提高首屏加载速度
  1. 渐进式加载:实现更精细的渐进式加载策略,提高用户体验
  1. 视觉效果增强:增强动画和交互效果,提高用户体验

5.4 生态系统建设

生态系统建设

  1. 插件市场:建立插件市场,促进第三方插件的开发和分享
  1. 组件库扩展:丰富组件库,提供更多开箱即用的组件
  1. 开发者社区:建立活跃的开发者社区,促进经验分享和技术交流
  1. 文档和教程:完善文档和教程,降低学习门槛

六、总结与建议

6.1 架构优势总结

OneCode 3.0 前端架构具有以下核心优势:

  1. 高效开发:可视化设计和注解驱动开发,大幅提高开发效率
  1. 组件化设计:高内聚低耦合的组件化设计,提高代码复用性和可维护性
  1. 性能优化:多层次的性能优化策略,确保系统高效运行
  1. 灵活部署:支持多种部署方式,适应不同的应用场景
  1. 团队协作:完善的团队协作机制,提高团队开发效率
  1. 质量保障:全面的测试和质量保障机制,确保系统稳定性和可靠性

6.2 开发建议

基于 OneCode 3.0 前端架构的特点,提出以下开发建议:

  1. 遵循组件化原则:将应用分解为可复用的组件,提高代码复用性和可维护性
  1. 合理使用注解:充分利用注解驱动开发的优势,减少配置文件和样板代码
  1. 优化加载性能:采用懒加载和预加载策略,优化应用的加载性能
  1. 关注渲染效率:避免不必要的重绘和回流,优化组件的渲染效率
  1. 统一代码规范:制定统一的代码规范和最佳实践,提高团队协作效率
  1. 充分测试:建立完善的测试体系,确保系统的稳定性和可靠性

6.3 总结

OneCode 3.0 前端架构通过创新的注解驱动开发、组件化设计和多层次的性能优化策略,为企业级应用开发提供了高效、灵活和可靠的解决方案。其可视化设计和代码生成能力大幅提高了开发效率,组件化设计和复用机制提高了代码质量和可维护性,多层次的性能优化确保了系统的高效运行。未来,随着 AI 技术的融入和跨平台能力的增强,OneCode 3.0 前端架构将继续引领低代码开发的创新和发展。

OneCode 3.0 前端架构的成功在于其对企业级应用开发需求的深刻理解和技术实现的创新,为企业数字化转型提供了强有力的技术支持。无论是快速开发、高效协作还是系统性能,OneCode 3.0 前端架构都表现出了卓越的能力,是企业级应用开发的理想选择。

相关推荐
若梦plus24 分钟前
微前端之样式隔离、JS隔离、公共依赖、路由状态更新、通信方式对比
前端
若梦plus35 分钟前
Babel中微内核&插件化思想的应用
前端·babel
若梦plus38 分钟前
微前端中微内核&插件化思想的应用
前端
若梦plus40 分钟前
服务化架构中微内核&插件化思想的应用
前端
若梦plus1 小时前
Electron中微内核&插件化思想的应用
前端·electron
若梦plus1 小时前
Vue.js中微内核&插件化思想的应用
前端
你的人类朋友1 小时前
❤️‍🔥对过度设计的反思
程序员·架构·设计
qq_419854051 小时前
css 发射烟花的动画
前端·css·css3
liliangcsdn2 小时前
`npm error code CERT_HAS_EXPIRED‘ 问题
前端·npm·node.js
Rattenking2 小时前
【npm 解决】---- TypeError: crypto.hash is not a function
前端·npm·哈希算法