欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel的blade模板如何生成静态化页面?

百度了一下php的静态化技术,大致有3种:
1.用正则替换页面模板文件
2.用ob_star技术
3.用第三方模板引擎

一开始很天真,以为在控制器里直接用$page=View('index');然后把$page保存起来就是静态页面,后来调试一下发觉$page是一个实体,也没有哪个属性记录到生成的html内容,就放弃了。

换了ob_star技术,但是在blade模板的第一行加入ob_star(),在页面最后一行加上ob_get_contents()等代码来获取页面流,写入一个文件。结果是成功把生成的页面写入html文件,但是浏览器中看到的页面是空白的。

求静态化解决方案。。。。。


1个回答

0

解析开始是由__toString()触发的

解析过程中是用ob_start实现的,使用了很多次ob_start

你可以看下Illuminate\View\View这个类

也可以调用Illuminate\View\View__toString()方法来生成静态页面,如下:

<?php
$htmlStrings = view('viewPath')->__toString();

对于laravel 5(4应该也差不多)


来自 https://segmentfault.com/q/1010000004511494


0

laravel里面的文件都是blade.php,需不需要转换为html,更有利于蜘蛛收录?

1个回答

5

现在的蜘蛛,哪怕是百度那种烂逼,也不太可能蠢到见到.html就特别优待的地步。

而页面是否经过静态化,蜘蛛本身是无法推断的。所以静态化与否对收录没什么影响。

你真正需要保证的是URL和HTML都要持久不变,不要让蜘蛛产生“文章在频繁更新骗收录”这样的误判。

具体而言手段很复杂,以下是几点参考:

  • 永久链接从一开始就要规划好,尽你最大的努力保持不变,除非不变会死。

  • 如果变了,一定要旧链接301到新链接,并且在<head>中标注好<link rel="canonical">引导搜索引擎。绝对不能新旧链接都是HTTP 200。

  • 利用HTML5的语义化标签,标清正文和辅助内容(边栏、广告、导航等)区域,引导搜索引擎识别正文。例如:<article>, <aside>, <nav>, <header>, <footer>等。

  • 点击数、评论数、广告、排行榜等易变的区域,考虑使用JS动态加载之类的手段实现,从而保证同一篇文章正文不变时,HTML内容输出也不变。


blade再轻量也还是动态渲染,相比原生php都没什么可优越的,更不用提和静态化比。

静态化是缓存的最彻底形式,缓存重建的麻烦最大。所以请考虑以下原则:

  • 计划即瞎猜。做缓存必须从实务需求出发,如何优化绝对不能空想或瞎蒙。

  • 过早优化是万恶之源。功能正常是第一位的,不要没开发出来就想缓存。

  • 无测量,不优化。优化必须首先打在实测发现的性能瓶颈上。

和以下具体参考意见:

  • 缓存要渐进的上,不要直接一推到底。

  • 具体来说,先用内建的Cache服务,对准最频繁请求数据库的点,只缓存数据部分。页面渲染保持Blade不变。

  • 如果仍不够缓解,再考虑全页面内容缓存,但路由仍然使用内建的Route服务。

  • 这时候再不行再考虑静态化。


来自  https://segmentfault.com/q/1010000003983254?_ea=451039


普通分类: