在 W3.org 上出现了一个非正式的“HTML6”提案,就此引起论战。
Bobby Mozumder 是时尚媒体企业公司 Future Claw 的创始人,他向 W3.orgm 邮件列表提交了针对“无需JavaScript 的单页应用”的非正式HTML6 提案。
Mozumder 说,它的目标是“不必加载 JavaScript 的高速响应的 web 体验”。
像这种体验大概可以无需 JavaScript,“通过链接锚元素到 JSON/XML(或者新的定义)api 端点,让浏览器内部加载数据到新的数据结构中,然后浏览器将按需加载到的数据替换成 DOM 元素”,Mozumder 说。
他详细阐述:
所有前端 JavaScript 框架都涌现出一个标准的设计模式,那就是以 JSON API 动态加载内容。这是单页应用 web 设计模式。大家之所以这么做是因为它的响应比全页加载快了很多,用 API 加载需要 10-50ms,但加载整个 HTML 页面则需要 300-1500ms。
既然现在这种做法如此普遍了,那么我们可以在浏览器中直接通过 HTML 来实现,让用户可以动态运行没有 Javascript 的单页应用吗?HTML 由此变成一种模版语言,夹具中的所有内容无需 Javascript 即可动态地加载。
web 页面示例:
复制代码
<DOCTYPE html> <HTML LANG=“en”> <HEAD> <FIXTURES lang=“xml”> <model class=“MyArticleData”> <rsp stat=“ok"> <article label=“one” id=“1"> <headline>"Big News!”</headline> <body>"<p>This is the first article intro.</p><p>This is the second paragraph.</p>"</body> </article> <article label=“two” id=“2"> <headline>"Not so big news"</headline> <body>"<p>This is the <em>second</em> article.</p>"</body> </article> </rsp> </model> <model class=“MyImageData”> <rsp stat=“ok"> <image label="Square" width="75" height="75" source="<a href="https://mycontentserver.com/image_s.jpg">https://mycontentserver.com/image_s.jpg"</a> id=“3"/> <image label=“Tall" width=“300" height=“200" source="<a href="https://mycontentserver.com/image_l.jpg">https://mycontentserver.com/image_l.jpg"</a> id=“4"/> </rsp> <rsp stat=“loading"> <image label="Square" width="75" height="75" source="<a href="https://mycontentserver.com/loading_image_s.jpg">https://mycontentserver.com/loading_image_s.jpg"</a> id=“1"/> </rsp> <rsp stat=“some_error"> <image label="Square" width="75" height="75" source="<a href="https://mycontentserver.com/error_image_s.jpg">https://mycontentserver.com/error_image_s.jpg"</a> id=“2"/> <message </rsp> </model> </FIXTURES> </HEAD> <BODY> <MENU class=“controller”> <A href=“<a href="http://api.mywebsite.com/api/load-new-article%E2%80%9D">http://api.mywebsite.com/api/load-new-article”</a> model=“MyArticleData">Click here to replace the articles with different articles.</A> <A href=“<a href="http://api.mywebsite.com/api/load-new-image%E2%80%9D">http://api.mywebsite.com/api/load-new-image”</a> model=“MyImageData">Click here to replace the picture with a different picture.</A> </MENU> <MAIN class=“viewer”> <ARTICLE class=“center"> <H1 model=“MyArticleData.rsp.article(label=‘one’).headline” /> <SPAN model="MyArticleData.rsp.article(label=’one’).body” /> </ARTICLE> <ARTICLE class=“sidebar"> <H1 model=“MyArticleData.rsp.article(label=’two’).headline” /> <SPAN model=“MyArticleData.rsp.article(label=’two’).body” /> </ARTICLE> <IMG src=“model:MyImageData.rsp.image(label=‘Square’)#source” width=“model:MyImageData.rsp.image(label=‘Square’)#width” height=“model:MyImageData.rsp.image(label=’Square’)#height”> </MAIN> </BODY> </HTML>
有些人对 Mozumder 的提案提出了置疑。
Brian Kardell 是 JavaScript polyfill 引擎 HitchJS 的联合作者,他回应说“我们实际上之前也做过一些尝试,而且你现在并没有这么用它,所以我们想要说,恐怕在某种程度上讲它是无法成功的。”
Kardell 持续说:
我打算针对此评论提出几点重要的理由,解释一下如果我们现在这么做的话,为什么它会失败,为什么我认为无法用它带来更多的成功……现在这些虽然远远看上去已经具备条件了,还实际上条件还不太充分,在此类问题上规范的 body 就是个非常大的麻烦。
尽管有不同的意见,然而 Mozumder提到说,他这个提案已经被“疯传”了。为什么这个想法会得到如何广泛的分享呢,Mozumder 解释说“成千上万次的分享、转发、点赞等等等等……看起来很多人都想要这样的解决方案。我也不知道为什么会这样,但我相信这表示人们已经对不得不使用JavaScript 框架极为不满了。”
网上很多围绕Mozumder 的提案的讨论持有否定的意见。
在 Hacker News 上,相关的讨论已经被点赞180 多次了,但许多评论并不同意这个提案。
用户 jkoudys 说 “这个提案正试图拿出一个通用的web 设计模式(MVC),并作为官方规范的一部分。HTML 是一种标记语言,让它去做语义语言该干的事是十分可笑的。”
同样的,用户 outsidetheparty 说“这是非常糟糕的想法——与HTML 之前的版本保持向下兼容是一个很好的检验方法,检验一个提案是不是彻底想清楚了。最主要的是它无法解决任何已有的问题。我们已经可以做到这个提案能做的所有事,这个提案只会让这些变得更加的死板。
也并非所有的评论都完成否定Mozumder 的提案, Milo Mordaunt 说,虽然这个想法“很有意思”,但他觉得HTML 应该“保持针对模版的严谨性”,这个针对无需JavaScript 的单页应用的提案增加了大量不必要的逻辑。
万维网联盟尚未就Mozumder 提交到 W3.org 邮件列表中的提案给出官方的回应,这份提案也尚未收到联盟的支持。
查看英文原文: Informal HTML6 Proposal for “Single-page Apps Without JavaScript” Attracts Controversy
评论