渐进式Web应用程序第2部分

const applyTemplate = (templateElement, data) => {

const element = templateElement.content.cloneNode(true);

const treeWalker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, () => NodeFilter.FILTER_ACCEPT);

while(treeWalker.nextNode()) {

const node = treeWalker.currentNode;

for(let bindAttr in node.dataset) {

let isBindableAttr = (bindAttr.indexOf('bind_') == 0) ? true : false;

if(isBindableAttr) {

let dataKey = node.dataset[bindAttr];

let bindKey = bindAttr.substr(5);

node[bindKey] = data[dataKey];

}

}

}

return element;

};

我对自己感到非常满意,直到我意识到我无法在服务器或服务工作人员身上使用这些功能。我唯一的解决方案就是引入一个自定义的 XML解析器, 并通过它来生成HTML。它增加了一些复杂性,让我诅咒网络。

从长远来看,我希望看到一些更多的DOM API被引入到工作者中,并且在Node中也得到了支持,但是我已经有了解决方案,即使它不是最优的。

这篇文章中确实有两个问题:

  • 构建共享公共服务器和服务工作者的系统是否实用?

  • 是否有可能构建一个完整的渐进式Web应用程序?

构建共享服务器和服务工作者的系统是可能的,但这是否可行?我喜欢这个想法,但我认为它需要更多的研究,因为如果你一直在使用JS,那么Node和Web平台之间就存在很多需要解决的问题。

就我个人而言,我很想在Node生态系统中看到更多的“Web”API。

是否有可能构建完整的“渐进式”渐进式Web应用程序?

是。

我很高兴我做到了。即使你没有在服务器上分享相同的语言,但我认为我已经展示了一些重要的东西。

  1. 应用壳牌是不是你可以遵循的唯一模式,重要的一点是,与服务人员 ,你 得到了控制网络和 你 可以决定什么是最适合你的使用情况。

  2. 有可能建立一个逐步呈现的体验,使用服务工作人员来提供性能和弹性(如果您愿意,还可以有安装感)。您需要全盘思考,您需要先尽可能多地在服务器上进行渲染,然后再控制客户端。

  3. 可以考虑使用通用代码库,通用路由结构以及在客户端,服务工作者和服务器之间共享的通用逻辑来构建“三态”(我仍认为该术语同构最好)的体验。

我把这留作最后的想法:我们需要调查更多关于我们如何构建渐进式Web应用程序的信息,并且我们需要继续推动让我们达到目标的模式。App Shell是一个很好的开始,但并不是最终结果。渐进式渲染和增强是网络长期成功的关键,没有其他媒体可以做到这一点以及网络。


分享到:


相關文章: