秘银避免重新加载图像
mithril avoiding to reload image
我正在使用秘银 0.2.2-rc.1。我在 routing documentation 中看到:
路由是一个允许创建单页应用程序 (SPA) 的系统,即可以从一个页面转到另一个页面的应用程序而不会 导致浏览器完全刷新。
确实,当我使用不同的参数路由到同一页面时,只有我想更改的部分是刷新 expect this :
m("img[src='assets/images/logo.png'][alt=''][width='100']")
我可以在网络通信中看到图像已重新加载(另一个 GET 请求)。
有没有办法避免这种情况?
route.js
m.route.mode = "pathname";
m.route(document.getElementById('app'), '/', {
'/': main,
'/modelling/:level': main
})
很难看出这两段代码是如何组合在一起的,但有两点可以说明:
- 每次更改路由(即使该更改导致相同的路由条目,例如
/modelling/x
到 /modelling/y
)都会导致整个 DOM 重新生成。您可以通过在每个路由组件的控制器中调用 m.redraw.strategy( 'diff' )
来防止这种行为。
- 重复请求相同的资源不会导致对服务器的额外调用:一个多页面站点,每个页面都请求相同的 JS,CSS 只会加载这些资源一次,并且会命中浏览器缓存后续请求。因此,重复请求相同的图像资源不会对服务器产生任何新的调用。
如果您选中 the documentation of the m
method,您会看到 config
属性允许您在重绘时保留元素。所以这应该适合你:
m('img', {config: function persist(el, isInit, context)}) {
context.retain = true;
}
我正在使用秘银 0.2.2-rc.1。我在 routing documentation 中看到: 路由是一个允许创建单页应用程序 (SPA) 的系统,即可以从一个页面转到另一个页面的应用程序而不会 导致浏览器完全刷新。
确实,当我使用不同的参数路由到同一页面时,只有我想更改的部分是刷新 expect this :
m("img[src='assets/images/logo.png'][alt=''][width='100']")
我可以在网络通信中看到图像已重新加载(另一个 GET 请求)。
有没有办法避免这种情况?
route.js
m.route.mode = "pathname";
m.route(document.getElementById('app'), '/', {
'/': main,
'/modelling/:level': main
})
很难看出这两段代码是如何组合在一起的,但有两点可以说明:
- 每次更改路由(即使该更改导致相同的路由条目,例如
/modelling/x
到/modelling/y
)都会导致整个 DOM 重新生成。您可以通过在每个路由组件的控制器中调用m.redraw.strategy( 'diff' )
来防止这种行为。 - 重复请求相同的资源不会导致对服务器的额外调用:一个多页面站点,每个页面都请求相同的 JS,CSS 只会加载这些资源一次,并且会命中浏览器缓存后续请求。因此,重复请求相同的图像资源不会对服务器产生任何新的调用。
如果您选中 the documentation of the m
method,您会看到 config
属性允许您在重绘时保留元素。所以这应该适合你:
m('img', {config: function persist(el, isInit, context)}) {
context.retain = true;
}