秘银避免重新加载图像

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

})

很难看出这两段代码是如何组合在一起的,但有两点可以说明:

  1. 每次更改路由(即使该更改导致相同的路由条目,例如 /modelling/x/modelling/y)都会导致整个 DOM 重新生成。您可以通过在每个路由组件的控制器中调用 m.redraw.strategy( 'diff' ) 来防止这种行为。
  2. 重复请求相同的资源不会导致对服务器的额外调用:一个多页面站点,每个页面都请求相同的 JS,CSS 只会加载这些资源一次,并且会命中浏览器缓存后续请求。因此,重复请求相同的图像资源不会对服务器产生任何新的调用。

如果您选中 the documentation of the m method,您会看到 config 属性允许您在重绘时保留元素。所以这应该适合你:

m('img', {config: function persist(el, isInit, context)}) {
    context.retain = true;
}