上个例子,就类似与segmentfault的头部和尾部
网页公共头部:
网页公共尾部:
这两个地方,是如何在segmentfault整站中实现复用的?
我的思考:
首先,公共的头部和尾部我觉得肯定得复用,如果每个页面再重写一遍,就太low了,我的第一个项目,就是这么做的。至今都让我无法忘却。
其次,后来使用iframe,分别在每个页面里面加载两个iframe,然后把head.html和footer.html放在里面,这是一种解决方案,但是这种方案一旦涉及到修改iframe的宽高,那么就是每个页面都要修改了。
第三,最近的一个项目,用了angularjs,将header和footer直接放在了body里面,变化的部分通过view加载,也实现了我想要的效果,但是url的变化不是很优雅,有点难看。并且这种方式对SEO非常不友好,我不愿意使用。
上面三点是我自己的想法,但是效果都没有让我百分之百的满意,向请教各位同学,你们在项目中是如何处理的?
注意,现在我们不考虑后端任何语言提供的任何模板,只站在前端的角度考虑这个问题
题主,我注意到你的问题中有两个自相矛盾的地方:
和
首先我们要承认一点:现代网站中,基本上都是没有静态页面的。也就是说,只要是个网站,后端都有动态语言在处理请求,在渲染。即便是少数静态博客框架,如
jekyll
,都是先写好网页模板,再进行预渲染。因此,对于在项目中是如何处理这个问题:我的回答和前面许多被你反驳的答案一样——用后端模板的
include
逻辑。但你后面又加了句注释:现在我们不考虑后端任何语言提供的任何模板,只站在前端的角度考虑这个问题。我觉得这是不合理的。
或许是题主误解了“前后端分离的含义”。也许题主脑海中的前后端分离是指:每次请求都返回一个静态的html文件,再由文件中的脚本对网页的各个部分进行加载。
事实上并不是这样的。
前后端分离是指:后端(Server)负责 Model 层,提供数据,而前端(Browser)负责 Controller 和 View 层,负责将数据渲染。
也就是说:所谓的前后端分离,分离的是数据,前端只是有一个骨架,浏览器加载页面之后,脚本会向服务器拉取数据。一个较常见的例子便是SPA(Single Page Application,单页应用)。
而题主所说的 Header 和 Footer,并不属于数据的范畴。它们只是静态的页面部分。要复用,在后端 include 便好了,前端去拉取?费时,费请求——要知道前端一大忌便是 Too Many Requests。
若题主的理由是可以利用浏览器缓存,减少冗余数据的请求,那我觉得这是本末倒置了。Header 和 Footer,撑死也就几 Kb,为节省这么点带宽去复杂化页面逻辑,还要和数据请求争并发,实在是没有必要。
References: http://blog.jobbole.com/65513/
不服欢迎撕逼。