Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wulaladx
uni-app
提交
28306834
U
uni-app
项目概览
wulaladx
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
28306834
编写于
3月 05, 2022
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mp): delay flush jobs when bubbling events (question/140539) (#3305) (#3228)
上级
b47d8e2e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
70 addition
and
7 deletion
+70
-7
packages/uni-mp-vue/dist/vue.runtime.esm.js
packages/uni-mp-vue/dist/vue.runtime.esm.js
+34
-3
packages/uni-mp-vue/lib/vue.runtime.esm.js
packages/uni-mp-vue/lib/vue.runtime.esm.js
+15
-3
packages/uni-mp-vue/src/helpers/vOn.ts
packages/uni-mp-vue/src/helpers/vOn.ts
+21
-1
未找到文件。
packages/uni-mp-vue/dist/vue.runtime.esm.js
浏览文件 @
28306834
...
...
@@ -1408,6 +1408,11 @@ function queueJob(job) {
}
}
// fixed by xxxxxx
let
delayFlushJobs
=
false
;
function
setDelayFlushJobs
(
isDelay
)
{
delayFlushJobs
=
isDelay
;
}
// fixed by xxxxxx
function
sleep
(
ms
)
{
return
()
=>
{
return
new
Promise
(
resolve
=>
setTimeout
(()
=>
resolve
(
void
0
),
ms
));
...
...
@@ -1416,8 +1421,13 @@ function sleep(ms) {
function
queueFlush
()
{
if
(
!
isFlushing
&&
!
isFlushPending
)
{
isFlushPending
=
true
;
// fixed by xxxxxx 延迟执行,避免同一批次的事件执行时机不正确,对性能可能有略微影响 https://github.com/dcloudio/uni-app/issues/3228
currentFlushPromise
=
resolvedPromise
.
then
(
sleep
(
0
)).
then
(
flushJobs
);
if
(
delayFlushJobs
)
{
// fixed by xxxxxx 延迟执行,避免同一批次的事件执行时机不正确,对性能可能有略微影响 https://github.com/dcloudio/uni-app/issues/3228
currentFlushPromise
=
resolvedPromise
.
then
(
sleep
(
0
)).
then
(
flushJobs
);
}
else
{
currentFlushPromise
=
resolvedPromise
.
then
(
flushJobs
);
}
}
}
function
invalidateJob
(
job
)
{
...
...
@@ -1496,6 +1506,8 @@ function flushPostFlushCbs(seen) {
}
const
getId
=
(
job
)
=>
job
.
id
==
null
?
Infinity
:
job
.
id
;
function
flushJobs
(
seen
)
{
// fixed by xxxxxx
delayFlushJobs
=
false
;
isFlushPending
=
false
;
isFlushing
=
true
;
if
((
process
.
env
.
NODE_ENV
!==
'
production
'
))
{
...
...
@@ -5357,8 +5369,27 @@ function createInvoker(initialValue, instance) {
invoker
.
value
=
initialValue
;
return
invoker
;
}
// 冒泡事件列表
const
bubbles
=
[
'
touchstart
'
,
'
touchmove
'
,
'
touchcancel
'
,
'
touchend
'
,
'
tap
'
,
'
longpress
'
,
'
longtap
'
,
'
transitionend
'
,
'
animationstart
'
,
'
animationiteration
'
,
'
animationend
'
,
'
touchforcechange
'
,
];
function
patchMPEvent
(
event
)
{
if
(
event
.
type
&&
event
.
target
)
{
// 冒泡事件触发时,启用延迟策略,避免同一批次的事件执行时机不正确,对性能可能有略微影响 https://github.com/dcloudio/uni-app/issues/3228
if
(
bubbles
.
includes
(
event
.
type
))
{
setDelayFlushJobs
(
true
);
}
event
.
preventDefault
=
NOOP
;
event
.
stopPropagation
=
NOOP
;
event
.
stopImmediatePropagation
=
NOOP
;
...
...
@@ -5552,4 +5583,4 @@ function createApp(rootComponent, rootProps = null) {
}
const
createSSRApp
=
createApp
;
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
c
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed$1
as
computed
,
createApp
,
createSSRApp
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
d
,
defineAsyncComponent
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
diff
,
e
,
effect
,
effectScope
,
f
,
findComponentPropsData
,
getCurrentInstance
,
getCurrentScope
,
getExposeProxy
,
guardReactiveProps
,
h
,
inject
,
injectHook
,
invalidateJob
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
n
,
nextTick
,
o
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onServerPrefetch
,
onUnmounted
,
onUpdated
,
p
,
patch
,
provide
,
proxyRefs
,
pruneComponentPropsCache
,
queuePostFlushCb
,
r
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
s
,
setCurrentRenderingInstance
,
setTemplateRef
,
setupDevtoolsPlugin
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
sr
,
stop
,
t
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
updateProps
,
useAttrs
,
useCssModule
,
useCssVars
,
useSSRContext
,
useSlots
,
version
,
w
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
c
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed$1
as
computed
,
createApp
,
createSSRApp
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
d
,
defineAsyncComponent
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
diff
,
e
,
effect
,
effectScope
,
f
,
findComponentPropsData
,
getCurrentInstance
,
getCurrentScope
,
getExposeProxy
,
guardReactiveProps
,
h
,
inject
,
injectHook
,
invalidateJob
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
n
,
nextTick
,
o
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onServerPrefetch
,
onUnmounted
,
onUpdated
,
p
,
patch
,
provide
,
proxyRefs
,
pruneComponentPropsCache
,
queuePostFlushCb
,
r
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
s
,
setCurrentRenderingInstance
,
set
DelayFlushJobs
,
set
TemplateRef
,
setupDevtoolsPlugin
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
sr
,
stop
,
t
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
updateProps
,
useAttrs
,
useCssModule
,
useCssVars
,
useSSRContext
,
useSlots
,
version
,
w
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
packages/uni-mp-vue/lib/vue.runtime.esm.js
浏览文件 @
28306834
...
...
@@ -1408,6 +1408,11 @@ function queueJob(job) {
}
}
// fixed by xxxxxx
let
delayFlushJobs
=
false
;
function
setDelayFlushJobs
(
isDelay
)
{
delayFlushJobs
=
isDelay
;
}
// fixed by xxxxxx
function
sleep
(
ms
)
{
return
()
=>
{
return
new
Promise
(
resolve
=>
setTimeout
(()
=>
resolve
(
void
0
),
ms
));
...
...
@@ -1416,8 +1421,13 @@ function sleep(ms) {
function
queueFlush
()
{
if
(
!
isFlushing
&&
!
isFlushPending
)
{
isFlushPending
=
true
;
// fixed by xxxxxx 延迟执行,避免同一批次的事件执行时机不正确,对性能可能有略微影响 https://github.com/dcloudio/uni-app/issues/3228
currentFlushPromise
=
resolvedPromise
.
then
(
sleep
(
0
)).
then
(
flushJobs
);
if
(
delayFlushJobs
)
{
// fixed by xxxxxx 延迟执行,避免同一批次的事件执行时机不正确,对性能可能有略微影响 https://github.com/dcloudio/uni-app/issues/3228
currentFlushPromise
=
resolvedPromise
.
then
(
sleep
(
0
)).
then
(
flushJobs
);
}
else
{
currentFlushPromise
=
resolvedPromise
.
then
(
flushJobs
);
}
}
}
function
invalidateJob
(
job
)
{
...
...
@@ -1496,6 +1506,8 @@ function flushPostFlushCbs(seen) {
}
const
getId
=
(
job
)
=>
job
.
id
==
null
?
Infinity
:
job
.
id
;
function
flushJobs
(
seen
)
{
// fixed by xxxxxx
delayFlushJobs
=
false
;
isFlushPending
=
false
;
isFlushing
=
true
;
if
((
process
.
env
.
NODE_ENV
!==
'
production
'
))
{
...
...
@@ -5105,4 +5117,4 @@ function initCssVarsRender(instance, getter) {
function
withModifiers
()
{
}
function
createVNode$1
()
{
}
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed$1
as
computed
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
defineAsyncComponent
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
diff
,
effect
,
effectScope
,
getCurrentInstance
,
getCurrentScope
,
getExposeProxy
,
guardReactiveProps
,
inject
,
injectHook
,
invalidateJob
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
nextTick
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onServerPrefetch
,
onUnmounted
,
onUpdated
,
patch
,
provide
,
proxyRefs
,
queuePostFlushCb
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
setCurrentRenderingInstance
,
setTemplateRef
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
stop
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
updateProps
,
useAttrs
,
useCssModule
,
useCssVars
,
useSSRContext
,
useSlots
,
version
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
export
{
EffectScope
,
Fragment
,
ReactiveEffect
,
Text
,
callWithAsyncErrorHandling
,
callWithErrorHandling
,
computed$1
as
computed
,
createVNode$1
as
createVNode
,
createVueApp
,
customRef
,
defineAsyncComponent
,
defineComponent
,
defineEmits
,
defineExpose
,
defineProps
,
diff
,
effect
,
effectScope
,
getCurrentInstance
,
getCurrentScope
,
getExposeProxy
,
guardReactiveProps
,
inject
,
injectHook
,
invalidateJob
,
isInSSRComponentSetup
,
isProxy
,
isReactive
,
isReadonly
,
isRef
,
logError
,
markRaw
,
mergeDefaults
,
mergeProps
,
nextTick
,
onActivated
,
onBeforeMount
,
onBeforeUnmount
,
onBeforeUpdate
,
onDeactivated
,
onErrorCaptured
,
onMounted
,
onRenderTracked
,
onRenderTriggered
,
onScopeDispose
,
onServerPrefetch
,
onUnmounted
,
onUpdated
,
patch
,
provide
,
proxyRefs
,
queuePostFlushCb
,
reactive
,
readonly
,
ref
,
resolveComponent
,
resolveDirective
,
resolveFilter
,
setCurrentRenderingInstance
,
set
DelayFlushJobs
,
set
TemplateRef
,
shallowReactive
,
shallowReadonly
,
shallowRef
,
stop
,
toHandlers
,
toRaw
,
toRef
,
toRefs
,
triggerRef
,
unref
,
updateProps
,
useAttrs
,
useCssModule
,
useCssVars
,
useSSRContext
,
useSlots
,
version
,
warn$1
as
warn
,
watch
,
watchEffect
,
watchPostEffect
,
watchSyncEffect
,
withAsyncContext
,
withCtx
,
withDefaults
,
withDirectives
,
withModifiers
,
withScopeId
};
packages/uni-mp-vue/src/helpers/vOn.ts
浏览文件 @
28306834
...
...
@@ -12,6 +12,8 @@ import {
ErrorCodes
,
getCurrentInstance
,
}
from
'
vue
'
// @ts-expect-error
import
{
setDelayFlushJobs
}
from
'
vue
'
type
EventValue
=
Function
|
Function
[]
...
...
@@ -85,9 +87,27 @@ function createInvoker(
invoker
.
value
=
initialValue
return
invoker
}
// 冒泡事件列表
const
bubbles
=
[
'
touchstart
'
,
'
touchmove
'
,
'
touchcancel
'
,
'
touchend
'
,
'
tap
'
,
'
longpress
'
,
'
longtap
'
,
'
transitionend
'
,
'
animationstart
'
,
'
animationiteration
'
,
'
animationend
'
,
'
touchforcechange
'
,
]
function
patchMPEvent
(
event
:
MPEvent
)
{
if
(
event
.
type
&&
event
.
target
)
{
// 冒泡事件触发时,启用延迟策略,避免同一批次的事件执行时机不正确,对性能可能有略微影响 https://github.com/dcloudio/uni-app/issues/3228
if
(
bubbles
.
includes
(
event
.
type
))
{
setDelayFlushJobs
(
true
)
}
event
.
preventDefault
=
NOOP
event
.
stopPropagation
=
NOOP
event
.
stopImmediatePropagation
=
NOOP
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录