首页 文章 精选 留言 我的

精选列表

搜索[跨模态推理],共10000篇文章
优秀的个人博客,低调大师

Svelte入门——Web Components实现跨框架组件复用

Svelte 是构建 Web 应用程序的一种新方法,推出后一直不温不火,没有继Angular、React和VUE成为第四大框架,但也没有失去热度,无人问津。造成这种情况很重要的一个原因是,Svelte 的核心思想在于【通过静态编译减少框架运行时的代码量】,它可以像React和VUE一样开发,但却没有虚拟DOM。,使它可以Svelte可以将代码编译为体积小、不依赖于框架的JS代码。 看起来满满优点,但因为过于灵活,导致大家无法写出高度一致的业务代码,以上优点并没有在实际的大项目中得到很好的体现。 Svelte 这款框架并不完美,却又没有在残酷的市场竞争中死掉,是因为它拥有一本特殊秘籍,一些使它成为其他框架无法替代的一员的功能。。 而对于 Svelte 来说,这本秘籍的名字就叫做——Web Components。 在多团队协同完成的大项目中,各个团队可能使用不同的框架版本,甚至不同的框架,这让不同项目之间的组件复用变得困难。"write one,run anywhere"就是一句空话。这种情况下Svelte就变成了沟通跨越框架鸿沟的桥梁,使用Svelte开发的无框架依赖的Web Components,可以在各个框架间复用。同时,Svelte的开发方式也不像写pure js那样繁琐。 下面以SpreadJS集成为例,介绍如何用Svelte开发一款spread-sheets Web Component供其他页面复用。 创建Svelte template工程。 svelte 官方提供了template 工程,只要clone或者下载项目即可。 https://github.com/sveltejs/component-template npx degit sveltejs/component-template my-new-component cd my-new-component npm install # or yarn 修改 rollup.config.js,添加 customElement: true 配置,输出为web component组件。 添加后的rollup.config.js如下。 import svelte from 'rollup-plugin-svelte'; import resolve from '@rollup/plugin-node-resolve'; import pkg from './package.json'; const name = pkg.name .replace(/^(@\S+\/)?(svelte-)?(\S+)/, '$3') .replace(/^\w/, m =&gt; m.toUpperCase()) .replace(/-\w/g, m =&gt; m[1].toUpperCase()); export default { input: 'src/index.js', output: [ { file: pkg.module, 'format': 'es' }, { file: pkg.main, 'format': 'umd', name } ], plugins: [ svelte({ customElement: true, }), resolve() ], }; 更新 src/Component.svelte,创建spread-sheets组件。 <svelte:options tag="spread-sheets" /> <script> import { createEventDispatcher, onMount } from 'svelte'; // Event handling const dispatch = createEventDispatcher(); export let value =""; $: valueChanged(value); function valueChanged(newValue) { console.log("value changed", newValue); if(spread){ let sheet = spread.getActiveSheet(); sheet.setValue(0, 0, value); } } let spreadHost; let spread; function dispatchEvent(name, e) { // dispatch(name, e); const event = new CustomEvent(name, { detail: e, bubbles: true, cancelable: true, composed: true, // this line allows the event to leave the Shadow DOM }); // console.log(event) spreadHost.dispatchEvent(event); } onMount(() => { spread = new GC.Spread.Sheets.Workbook(spreadHost); let sheet = spread.getActiveSheet(); sheet.setValue(0, 0, value); spread.bind(GC.Spread.Sheets.Events.ValueChanged, function(s, e){ e.evnetName = "ValueChanged"; dispatchEvent("changed", e); }); spread.bind(GC.Spread.Sheets.Events.RangeChanged, function(s, e){ e.evnetName = "RangeChanged"; dispatchEvent("changed", e); }); }); </script> <style> </style> <div bind:this="{" spreadhost} style="width: 100%; height:100%"></div> 这样我们的自定义组件就创建好了,只需要调用npm run build,就能编译出spread-sheets 组件了。 在页面引用组件。 创建index.html页面,并引用编译好的js文件。同时引入spreadjs相关资源。 直接使用spread-sheets标签添加SpreadJS。 <meta name="spreadjs culture" content="zh-cn"> <meta charset="utf-8"> <title>My Counter</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/zh/purejs/node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- <spread-sheets-designer></spread-sheets-designer> --> <button onclick="getJSON()">GetJSON</button> <spread-sheets value="123" style="display:block; width: 80%; height: 400px;"></spread-sheets> <script src="https://demo.grapecity.com.cn/SpreadJS/WebDesigner/lib/spreadjs/scripts/gc.spread.sheets.all.14.1.3.min.js" type="text/javascript"></script> <script type="text/javascript" src="/dist/index.js"></script> <script type="text/javascript"> document.querySelector("spread-sheets").addEventListener("changed", function(){ console.log(arguments) }) window.onload = function(){ document.querySelector("spread-sheets").setAttribute("value", "234"); } </script> 添加后效果如下图。 总结 虽然看起来Web Component完美解决了组件之间的复用问题,但是用Svelte 开发的Web Component也存在一些限制:比如,只能传递string 属性;绑定的attribute是单向绑定,想要获取组件内部更新值,需要绑定event获取。 如果大家对Svelte 有更多兴趣,欢迎留言交流~

优秀的个人博客,低调大师

Handbrake 1.4.0 发布,跨平台视频转码器

HandBrake 是一款适用于 Linux、Mac 和 Windows 的开源视频转码器。在更新之前,请确保队列中没有待处理的编码。也请对你的任何自定义预设和应用程序首选项进行备份,因为它们可能与新版本不兼容。 Handbrake 1.4.0 发布,更新内容如下: 常规 HandBrake 引擎现在可以支持 10 bit 和 12bit; 如果存在 HDR10 元数据,将从源文件中传递过来; 在文件扫描过程中产生的静态预览现在以压缩的 jpeg 格式存储; 硬件编码 新的编码器:Media Foundation 用于基于 Windows 的由高通芯片组驱动的 ARM64 设备; AMD VCN 编码器的更新: 为 VCN 的约束性 vbr 速率控制模式进行质量调整。结果与 cqp 模式相同或更好,而且比特率更可预测; 包括为 1080p 和 4K 内容优化的 H265 预置; 英特尔 QuickSync 编码器的更新: 通过在不需要时跳过 VFR 和 裁切/缩放 filters,小幅提高性能; 改进内存管理; 音频 支持 MP2 音频 Passthru; 字幕 新的通用字幕解码器 增加了对 DVB 字幕的支持; 增加了对 EIA608 封闭字幕的支持; 用 ffmpeg 中的解码器替换了当前的 PGS、SRT 和 SSA 的解码器; 减少了默认的 CC burn-in 字体大小; 常规UI 更新 “尺寸”选项卡已重新设计 旋转和翻转过滤器已从过滤器选项卡中移出; 添加了对 Padding 的支持; 添加了对控制分辨率限制的支持; 添加了对 Updcaling 的有限支持; 更多详情可查看:https://github.com/HandBrake/HandBrake/releases/tag/1.4.0

优秀的个人博客,低调大师

Poedit 3.0 发布,跨平台翻译编辑器

Poedit 是一个简单的 PO 和 XLIFF 文件的翻译编辑器。它也是很多 GNU gettext 工具的 GUI 前端和目录编辑器/源代码解析器。它有助于将应用程序翻译成另一种语言。 Poedit 3.0 正式发布,该版本更新内容包含: 完整支持 macOS 11 Big Sur 和 Apple Silicon(M1); 完全重新制作的启动屏幕; 现代化的用户界面和图标; 对最近编辑的文件的打开方式有很大改进; 自动重新加载在 Poedit 之外修改的文件; 完全新的源代码发生查看器,对几乎所有使用 gettext 的编程语言进行语法高亮显示; 编辑区现在显示源字符串和翻译字符串的长度; 完全支持 PO 文件的 Python 格式; 进一步改进 XLIFF 的处理; 更多详情可查看:https://github.com/vslavik/poedit/releases/tag/v3.0-oss

优秀的个人博客,低调大师

Czkawka —— 跨平台的重复文件清理工具

Czkawka 是一个简单、快速且易于使用的应用程序,用于从计算机中删除不必要的文件。 特性: 用内存安全的 Rust 编写 速度惊人——由于使用了高级算法和多线程技术 免费、开源、无广告 多平台——适用于 Linux、Windows 和 macOS 缓存支持——第二次及之后的扫描应该比第一次更快 CLI 前端——易于自动化 GUI前端——使用现代的 GTK 3,外观类似于 FSlint 丰富的搜索选项——允许设置绝对的包含和排除目录,使用*通配符设置允许的文件扩展名或排除的项目 使用多种工具: 重复项——根据文件名、大小、哈希、前 1MB 的哈希值查找重复项 空文件夹——在高级算法的帮助下查找空文件夹 大文件——查找给定位置中提供的最大文件数 空文件——在驱动器中查找空文件 临时文件——查找临时文件 相似图像——查找不完全相同的图像(不同分辨率、水印) 归零文件——查找充满零的文件(通常已损坏) 相同音乐——搜索具有相同歌手、专辑等的音乐 无效的符号链接——显示指向不存在的文件/目录的符号链接 损坏的文件——查找扩展名无效或已损坏的文件

优秀的个人博客,低调大师

D 语言/DLang 2.096.0 发布,增强跨平台能力!

DMD 2.096.0 正式发布更新,DMD 是 D语言官方推出的编译器,此版本包含了 17 项主要变更,同时修复 81 个已知bug。相信过几天 LDC 也会跟进到本次大更新!这个版本有 54 个开发者进行参与,非常感谢他们为 DLang 的发展做出的贡献。 编译器变更 x86_64 Posix 平台下的 D ABI 有所更改 新增类型:__c_complex_float、__c_complex_double 和 __c_complex_real 不再支持构造函数复制和块复制(postblit) DMD 的 JSON 输出现在会包含保护级成员 DMD 的 JSON 输出现在会区分处理模块的构造方法和析构方法(包含有无shared的情形) 局部模板不再支持接收通过别名(alias)传入的局部符号 增强了 C++ 头文件的生成功能 新增编译器开关:-gdwarf=<version> 新增 __traits(getVisibility, Sym) 来替代 getProtection 无参的 synchronized 语句现在会使用运行时分配的互斥量 允许使用更短形式的函数实现(单一表达式函数) 运行时变更 移除了 druntime 里的参数选项 callStructDtorsDuringGC 在 mount 模块里,移除了与 FreeBSD 相关的 statvfs 声明 新增体验功能:基于 backtrace 输出的 llvm-libunwind 库变更 弃用 std.math 模块里的 approxEqual 方法 Dub变更 支持更多 DMD 的连接器参数 VisualD 的工程里允许使用 copyFiles 更多参考 DMD 2.096.0 – Changelog

优秀的个人博客,低调大师

Czkawka 3.0.0 发布,跨平台文件清理工具

Czkawka是一款简单,快速且易于使用的软件,可从计算机中删除不需要的文件。 Czkawka 是用内存安全的 Rust 编写的免费开源软件。它可以在 Linux、Mac 和 Windows 上运行。由于采用了先进的算法和多线程技术,因此速度非常快。使用它可以扫描指定的文件夹目录以查找: 根据文件名、大小、哈希值和前 1MB 的哈希值来扫描重复文件 空文件夹/空文件 大文件 临时文件 类似的图像 归零文件 无效的符号链接 损坏的文件 Czkawka 3.0.0 正式发布,本次更新内容如下: 加入不忽略硬链接的选项 -#273 支持 GUI 的硬链接 -#276 新的设置窗口 -#262 统一文件删除 -#278 在重复的 CLI 中干运行 -#277 关闭缓存的选项 -#263 更新图像依赖性并修复崩溃 -#270,e3aca69 当试图删除组中所有文件时,增加确认对话框 -#281 用删除键删除文件时增加确认对话框 -#282 点击回车键打开文件 -#285 允许将文件放入垃圾桶,而不是完全删除它们 -#284 更多详情可查看:https://github.com/qarmin/czkawka/releases/tag/3.0.0

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册