Skip to content

Commit 231e9e2

Browse files
committed
perf: 优化性能减少一次 JS 调度开销
1 parent 7222d12 commit 231e9e2

2 files changed

Lines changed: 22 additions & 38 deletions

File tree

src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.cs

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public partial class Editor
6464
/// 获得/设置 Editor 组件内上传文件时回调此方法
6565
/// </summary>
6666
[Parameter]
67-
public Func<EditorUploadFile, Task<string>>? OnFileUpload { get; set; }
67+
public Func<EditorUploadFile, Task>? OnFileUpload { get; set; }
6868

6969
private bool _lastShowSubmit = true;
7070

@@ -265,30 +265,19 @@ public async Task<string> ClickPluginItem(string pluginItemName)
265265
/// <summary>
266266
/// 文件上传回调
267267
/// </summary>
268-
/// <param name="uploadFile"></param>
268+
/// <param name="name"></param>
269+
/// <param name="contentType"></param>
270+
/// <param name="size"></param>
271+
/// <param name="stream"></param>
269272
[JSInvokable]
270-
public async Task<string> ImageUpload(EditorUploadFile uploadFile)
273+
public async Task ImageUpload(string name, string contentType, long size, IJSStreamReference stream)
271274
{
272-
#if NET6_0_OR_GREATER
273-
var ret = "";
274-
if (Module != null)
275+
var data = await stream.OpenReadStreamAsync(size);
276+
var file = new EditorUploadFile(name, contentType, size, data);
277+
if (OnFileUpload != null)
275278
{
276-
var stream = await InvokeAsync<IJSStreamReference>("fetch", Id, uploadFile.Index);
277-
if (stream != null)
278-
{
279-
using var data = await stream.OpenReadStreamAsync();
280-
uploadFile.UploadStream = data;
281-
if (OnFileUpload != null)
282-
{
283-
ret = await OnFileUpload(uploadFile);
284-
}
285-
}
279+
await OnFileUpload(file);
286280
}
287-
return ret;
288-
#else
289-
await Task.Yield();
290-
throw new NotSupportedException();
291-
#endif
292281
}
293282

294283
/// <summary>

src/components/BootstrapBlazor.SummerNote/Components/Editor/Editor.razor.js

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,21 @@ export async function init(id, invoker, methodGetPluginAttrs, methodClickPluginI
4747
option.toolbar = toolbar;
4848
reloadCallbacks(id, option);
4949
if (hasUpload) {
50-
option.callbacks.onImageUpload = function (files) {
50+
option.callbacks.onImageUpload = async files => {
5151
editor.files = files
5252
for (let i = 0; i < files.length; i++) {
5353
const file = files[i];
54-
editor.invoker.invokeMethodAsync('ImageUpload', {
55-
fileName: file.name,
56-
fileSize: file.size,
57-
contentType: file.type,
58-
lastModified: new Date(file.lastModified).toISOString(),
59-
index: i
60-
}).then(data => {
61-
if (data !== "") {
62-
editor.$editor.summernote('insertImage', data, file.name)
63-
}
64-
})
54+
const image = createImage(file);
55+
editor.$editor.summernote('insertNode', image);
56+
57+
const buffer = await file.arrayBuffer();
58+
const stream = DotNet.createJSStreamReference(buffer);
59+
await editor.invoker.invokeMethodAsync('ImageUpload',
60+
file.name,
61+
file.type || 'application/octet-stream',
62+
file.size,
63+
stream
64+
)
6565
}
6666
}
6767
}
@@ -166,11 +166,6 @@ export function update(id, val) {
166166
}
167167
}
168168

169-
export function fetch(id, index) {
170-
const md = Data.get(id)
171-
return md.files[index]
172-
}
173-
174169
export function invoke(id, method, parameter) {
175170
const editor = Data.get(id)
176171
editor.$editor.summernote(method, ...parameter)

0 commit comments

Comments
 (0)