具有大列表的聚合物芯和纸元件性能
Polymer core and paper-elements performance with large lists
我有一个相当简单的可切换菜单项列表,其中只能打开一个项目("accordion" 菜单),使用聚合物核心和纸元素构建。
使用 "large" 项列表,在我的示例中为 500,即使在高端 android 手机(oneplus one)上的性能也很糟糕,[=14 需要几秒钟=] 切换。即使是台式机,在单击某个项目时也会出现明显的延迟。
我的示例可在 http://viljoviitanen.github.io/polymer-performance-problem/ and the source code is at https://github.com/viljoviitanen/polymer-performance-problem devel.html 和页面-results.html 在线获取(index.html 是单个文件的应用 "vulcanized")。
总而言之,有一个自定义元素具有这样的重复模板:
<template id="results" repeat="{{r in r}}">
<core-item lines>
<paper-item flex noink id="p{{r.id}}"><a on-click="{{toggle}}" data-id="{{r.id}}"
>{{r.title}}</a></paper-item>
</core-item>
<template if="{{r.active}}">
<paper-menu-button style="float: right;">
<paper-icon-button icon="more-vert" style="color: #aaa"></paper-icon-button>
<paper-dropdown class="dropdown" halign="right">
<core-menu class="menu">
<paper-item data-id="{{r.id}}" on-click="{{dosomething}}">Do something</paper-item>
<paper-item data-id="{{r.id}}" on-click="{{doother}}">Do other stuff</paper-item>
</core-menu>
</paper-dropdown>
</paper-menu-button>
<core-item flex>{{r.desc}}</core-item>
<core-item style="clear: both;">
<img src="{{r.img}}">
</core-item>
</template>
</template>
"toggle" 函数为模型中的每个数组对象从模型切换 "active"。
我设法解决了 core-list 和 core-overlay 的性能问题,单击一个 core-list 项目会打开一个叠加层,可以通过单击其他地方将其关闭。这实际上是一个相当不错的 UI,有点不同,但肯定和我最初的 "accordion" 菜单想法一样好(甚至更好!)。
解决方案同github repo (https://github.com/viljoviitanen/polymer-performance-problem corelist.html and page-list.html) and the solution is online at http://viljoviitanen.github.io/polymer-performance-problem/index2.html .
相关代码为:
<core-overlay id="overlay" layered backdrop>
<div style="background:white; width:100vw" core-overlay-toggle>
<paper-menu-button style="float: right;">
<paper-icon-button icon="more-vert" style="color: #aaa"></paper-icon-button>
<paper-dropdown class="dropdown" halign="right">
<core-menu class="menu">
<paper-item data-id="{{oid}}" on-click="{{dosomething}}">Do something</paper-item>
<paper-item data-id="{{oid}}" on-click="{{doother}}">Do other stuff</paper-item>
</core-menu>
</paper-dropdown>
</paper-menu-button>
<core-item flex core-overlay-toggle>{{odesc}}</core-item>
<img src="{{oimg}}" style="clear: both;">
</div>
</core-overlay>
<core-list id="list" data="{{r}}" flex height=48 on-core-activate="{{toggle}}" >
<template>
<core-item lines>{{model.title}}</core-item>
</template>
</core-list>
{{toggle}} 函数根据模型数据设置叠加层中的变量并将其切换为可见。
我有一个相当简单的可切换菜单项列表,其中只能打开一个项目("accordion" 菜单),使用聚合物核心和纸元素构建。
使用 "large" 项列表,在我的示例中为 500,即使在高端 android 手机(oneplus one)上的性能也很糟糕,[=14 需要几秒钟=] 切换。即使是台式机,在单击某个项目时也会出现明显的延迟。
我的示例可在 http://viljoviitanen.github.io/polymer-performance-problem/ and the source code is at https://github.com/viljoviitanen/polymer-performance-problem devel.html 和页面-results.html 在线获取(index.html 是单个文件的应用 "vulcanized")。
总而言之,有一个自定义元素具有这样的重复模板:
<template id="results" repeat="{{r in r}}">
<core-item lines>
<paper-item flex noink id="p{{r.id}}"><a on-click="{{toggle}}" data-id="{{r.id}}"
>{{r.title}}</a></paper-item>
</core-item>
<template if="{{r.active}}">
<paper-menu-button style="float: right;">
<paper-icon-button icon="more-vert" style="color: #aaa"></paper-icon-button>
<paper-dropdown class="dropdown" halign="right">
<core-menu class="menu">
<paper-item data-id="{{r.id}}" on-click="{{dosomething}}">Do something</paper-item>
<paper-item data-id="{{r.id}}" on-click="{{doother}}">Do other stuff</paper-item>
</core-menu>
</paper-dropdown>
</paper-menu-button>
<core-item flex>{{r.desc}}</core-item>
<core-item style="clear: both;">
<img src="{{r.img}}">
</core-item>
</template>
</template>
"toggle" 函数为模型中的每个数组对象从模型切换 "active"。
我设法解决了 core-list 和 core-overlay 的性能问题,单击一个 core-list 项目会打开一个叠加层,可以通过单击其他地方将其关闭。这实际上是一个相当不错的 UI,有点不同,但肯定和我最初的 "accordion" 菜单想法一样好(甚至更好!)。
解决方案同github repo (https://github.com/viljoviitanen/polymer-performance-problem corelist.html and page-list.html) and the solution is online at http://viljoviitanen.github.io/polymer-performance-problem/index2.html .
相关代码为:
<core-overlay id="overlay" layered backdrop>
<div style="background:white; width:100vw" core-overlay-toggle>
<paper-menu-button style="float: right;">
<paper-icon-button icon="more-vert" style="color: #aaa"></paper-icon-button>
<paper-dropdown class="dropdown" halign="right">
<core-menu class="menu">
<paper-item data-id="{{oid}}" on-click="{{dosomething}}">Do something</paper-item>
<paper-item data-id="{{oid}}" on-click="{{doother}}">Do other stuff</paper-item>
</core-menu>
</paper-dropdown>
</paper-menu-button>
<core-item flex core-overlay-toggle>{{odesc}}</core-item>
<img src="{{oimg}}" style="clear: both;">
</div>
</core-overlay>
<core-list id="list" data="{{r}}" flex height=48 on-core-activate="{{toggle}}" >
<template>
<core-item lines>{{model.title}}</core-item>
</template>
</core-list>
{{toggle}} 函数根据模型数据设置叠加层中的变量并将其切换为可见。