当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

baidu yogurt

前端集成解决方案
授权协议 未知
开发语言 JavaScript
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 国产
投 递 者 侯博易
操作系统 跨平台
开源组织 百度
适用人群 未知
 软件概览

yogurt 是基于 fis 扩展针对服务端为 express.js 的前端集成解决方案。

在阅读此文档之前,希望你最好对 fis 有一定的了解。此工具主要负责前端编译与环境模拟,让你更专注、更快速地开发前端部分,关于后端 express 框架部分,请查看 yog

特点

  • 扩展 swig 模板引擎,提供易用的 htmlheadbodywidgetscriptstyle 等等标签。基于这些标签后端可以自动完成对页面的性能优化。

  • 基于 widget 标签,可以轻松实现让 widget 以 BigPipe 模式渲染,详情请查看这里

  • 提供便利的环境、数据和页面模拟。tpl 自动与 json 数据文件关联,本地就能预览线上效果。

  • 此工具负责生成 tpl 和关联的静态资源。后端只需关注页面逻辑,数据获取以及渲染模板即可,无需关心前端领域。

快速开始

如果还没有安装 node 请先安装 node.

# 安装 yogurt 到全局npm install -g yogurt# 安装 lights 如果你还没安装过。npm install -g lights# 下载 demo.lights install yogurt-demo# 进入 yogurt-demo 目录, release 后就可以预览了。cd yogurt-demo
yogurt release
yogurt server start

目录规范

├── page                    # 页面 tpl
├── static                  # 静态资源
├── widget                  # 各类组件
├── test                    # 数据与页面模拟目录
├── fis-conf.js             # fis 编译配置
├── server.conf             # 测试页面转法规则配置文件

page 目录

所有页面级别的模板文件,放在此目录。此tpl 可以直接在浏览器中预览。比如 page/index.tpl 可以通过 http://127.0.0.1:8080/{{ namespace }}/page/index 访问。 其中 {{ namespace }} 为此项目的名称。

需要强调的的是,模板引擎采用的是 swig, 可以采用模板继承机制来实现模板复用。

static 目录

用来存放所有静态资源文件,css, js, images 等等。如:

├── css
│   ├── bootstrap-theme.css
│   ├── bootstrap.css
│   └── style.css
├── fonts
│   ├── glyphicons-halflings-regular.eot
│   ├── glyphicons-halflings-regular.svg
│   ├── glyphicons-halflings-regular.ttf
│   └── glyphicons-halflings-regular.woff
└── js
    ├── bigpipe.js
    ├── bootstrap.js
    ├── jquery-1.10.2.js
    └── mod.js

widget 目录

用来存放各类组件代码。组件分成3类。

  1. 模板类:包含 tpl, 可以选择性的添加 js 和 css 文件,同名的 js 和 css 会被自动加载。

    模板类文件,可以在模板中通过 widget 标签引用。如

    {% widget "example:widget/pagelets/jumbotron/jumbotron.tpl" %}
  2. js 类: 主要包含 js 文件,放在此目录下的文件一般都会自动被 amd define 包裹,可选择性的添加同名 css 文件,会自动被引用。

    此类组件,可以在 tpl 或者 js 中通过 require 标签引用。

  3. 纯 css 类:只是包含 css 文件。比如 compass. 同样也是可以通过 require 标签引用。

test 目录。

用来存放测试数据和测试脚本。

测试数据。

在你本地预览 page 目录下的 tpl 的时候,会自动在此目录下找同名的 json 文件,并将数据与之关联。

http://127.0.0.1:8080/example/page/index 预览的是 example 模块下,page/index.tpl 文件。如果 test/page/index.json 文件存在,则此 json 的里面的所有数据都可以在 tpl 里面使用到。

同时,除了管理同名的 json 文件外,还会关联 test 目录下同名的 js 文件,在 js 中可以动态的添加数据。

/test/page/index.js

module.exports = function(req, res, setData) {
    var origin = res.locals || {};

    setData({
        title: 'Overided ' + origin.title,
    });};

另外:此目录下还可存放其他文件,搭配 server.conf 配置,目录各类线上页面。

比如 test/data.json 文件,想通过 http://127.0.0.1:8080/testjson 页面可以访问到。只需要在 server.conf 里面配置如下内容。

rewrite \/testjson$ /test/example/data.json

测试脚本

在 test 目录下的 js,也可以像 jsp, php 一样,写些动态的页面。如:

/test/ajaxResponse.js

module.exports = function(req, res, next) {
    res.write('Hello world');

    res.setHeader('xxxx', 'xxx');

    res.end('The time is ' + Date.now());};

配合 server.conf 可以用来模拟线上的 ajax 响应页面。

rewrite \/ajax$ /test/example/ajax.js

这样当你请求 http://127.0.0.1:8080/ajax 页面的时候,就会自动执行这个脚本 js.

fis-conf.js

编译配置文件,详情请查看配置 API

server.conf

用来配置页面转发,支持 rewrite 和 redirect 两条指令,此转发功能只有在本地预览中才有效。

语法非常简单。

指令名称  正则  目标地址

栗子。

# 首页
rewrite \/$ /example/page/index

# json 文件
rewrite \/json /example/data.json

# 自定义页面。
rewrite \/ajax /example/ajax.js

非 rewrite, redirect 打头的行,都被认为是注释。

BigPipe

采用 bigpipe 方案,允许你在渲染页面的时候,提前将框架输出,后续再把耗时的 pagelet 通过 chunk 方式输出到页面,以加速网页渲染。

目前此机制已集成在 yogurt 中,通过给 widget 设置不同的模式便能自动启动。

  1. sync 默认就是此模式,直接输出。

  2. quicking 此类 widget 在输出时,只会输出个壳子,内容由用户自行决定通过 js,另起请求完成填充,包括静态资源加载。

  3. async 此类 widget 在输出时,也只会输出个壳子,但是内容在 body 输出完后,chunk 输出 js 自动填充。widget 将忽略顺序,谁先准备好,谁先输出。

  4. pipelineasync 基本相同,只是它会严格按顺序输出。

后端的 controller 中可以通过 res.bigpipe.bind('pageletId', function() {}) 给页面中 pagelet 延时绑定数据。

在前端模拟环境里面,则可以在通过在模拟数据的 js 文件中,通过设置 onPagelet 事件,延时给 pagelet 绑定数据。

test/page/index.js

module.exports = function(req, res, setData) {

    setData({

        onPagelet: function(id, cb) {

            // id 为 pagelet 的 id

            // 模拟异步获取数据。
            setTimeout(function() {

                cb(null, {
                    title: id,
                    content: 'Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.'
                });

                // 随机延时时间
            }, 2000 * Math.random());
        }
    });}

要让 bigpipe 正常运行,需要前端引入 bigpipe.js, 另外 pagelet 为 quickling 模式,是不会自动加载的,需要用户主动去调用 BigPipe.load 方法,才会加载并渲染。

更多信息请查看 yog-bigpipe;

后端结合

yogurt 负责前端部分的工作,将会产出以下文件。后端只需提供 controller 和 model, controller 中把 model 与 tpl 关联,然后选择渲染模板文件。 关于后端框架部分,请查看 yog

├── config
│   └── example-map.json
├── public
│   └── example
│       ... 更多静态资源文件
└── views
    └── example
        ... 更多模板文件
  • Yogurt factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6836   Accepted: 3499 Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ne

  • 百度,一家让人既爱又恨的企业,血友吧贴吧被卖,魏则西事件的持续发酵,一时间将百度推到了舆论的风口浪尖上。是非对错,我们在这里也不多做评判,本文呢为大家整理了百度开源的70+项目,看看有没有感兴趣的。本文内容综合整理自oschina、github。 1. JavaScript图表库 ECharts ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascr

  • 1.百度地图 <table width="90%" border="0" cellspacing="3" cellpadding="3" align="center">   <tr>     <td bgcolor="#c9d7f1" height="1" colspan="2"></td>   </tr>   <tr>     <td width="170" valign="top" heigh

  • /// 1)此题10分     对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。     (不用考虑数值超出计算机整数界限的问题)         2)此题10分     编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url     如下形式叫做首页:     militia

  • import requests from urllib.request import urlretrieve path = 'C:/Users/luopan/Desktop/photo/' url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550468777489&di=054054453d3e3

  • 百度搜索引擎优化指南 Baidu SEO Guide V1.0

  •     Baidu,google两者有惊人的相似。google有2位创始人:谢尔盖.布林,拉里.佩奇,baidu也有,李彦宏和徐勇。google的2位创始人都在攻读博士时休学,而baidu则是2个海归,李硕士,徐博士后,2家学历相当。    此外,google是世界最大的搜索引擎,而Baidu则是中国的google; google,baidu创业时间接近,且发展方向类似。 google创业史:  

  • 开发指南: http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0/%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97   申请KEY: http://dev.baidu.com/wiki/static/imap/key/   API,文档和例子下载: http://dev.baidu.

  • 近来看了一篇文章,讲baidu.com已经占了国内搜索市场份额的第一位,超出google.com很多等等。可我本人以及我认识的朋友,同事,他们每天用的主要还是google,而不是baidu.com. 所以有些奇怪。。。。。。 方便的话,留言您正在用的搜索引擎。我们也可以大概了解一下。。。。。。 转载于:https://www.cnblogs.com/userinterface/archive/20

  • 1、百度搜索明显慢于Google。 2、百度推广的广告太多,而Google更加纯净。 3、百度网盘其实做的挺不错的,但是没有充分利用网盘的优势。 4、百度要充分利用国内版权意识的薄弱来来推出Google不能推出的产品。

  • 一面1. 网络编程经验:    如何判断一个http请求,一个客户端请求已经结束;如何处理服务器多线程    获得一个http请求后,是如何处理的?返回什么?有没有试过返回图片?    服务器给客户端请求时,是用什么函数写?服务器如何获取客户端请求,用什么函数    (需要函数级别的连接有一个认识) 2. cv操作是什么函数 cv_init, cv_wait, cv_signal 3. 有一些关键

  • package com.example.myapplication import org.junit.Test import org.junit.Assert.* import java.io.File /** * Example local unit test, which will execute on the development machine (host). * * See

  • 各大搜索引擎产商都鼓吹自己最理解中文,笔者做了个一个比较搞笑的测试,有图有真相,大家自己看吧,哈哈哈! 谁能“读懂”中文,抽出其中的核心语义词,一目了然啊!拜google大神,顶sogou国产(还需努力)! 谁敢说这个是软文,自己上网测试去,嘿嘿嘿! :wink: [img]http://linliangyi2007.iteye.com/upload/picture/pic/85503/b2cec

 相关资料
  • 本文向大家介绍Java前端Layer.open.btn验证无效解决方法,包括了Java前端Layer.open.btn验证无效解决方法的使用技巧和注意事项,需要的朋友参考一下 今天遇到了一个很可笑的问题,在.Layer弹窗open中设置了多个按钮,只有yes按钮有效,btn2点击后直接关闭弹窗,排查了2个小时后终于解决,就是btn2要return false! 以上方法大家可以测试下 ,感谢你的阅

  • 本文向大家介绍浅谈SpringCache与redis集成实现缓存解决方案,包括了浅谈SpringCache与redis集成实现缓存解决方案的使用技巧和注意事项,需要的朋友参考一下 缓存可以说是加速服务响应速度的一种非常有效并且简单的方式。在缓存领域,有很多知名的框架,如EhCache 、Guava、HazelCast等。Redis作为key-value型数据库,由于他的这一特性,Redis也成为一

  • 本地nginx部署请求响应显示We're sorry but DataEase doesn't work properly without JavaScript enabled. Please enable it to continue.如何解决? get请求状态是200但是响应We're sorry but DataEase doesn't work properly without JavaS

  • 我用elementui写了一个表格但是没有分页,所以导致排序速度特别慢,这种有什么特殊的处理方法嘛,纯前端解决? 怎么能优化一下速度

  • 本文向大家介绍JSP服务器端和前端出现乱码问题解决方案,包括了JSP服务器端和前端出现乱码问题解决方案的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JSP服务器端和前端出现乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在前端和服务器端交互的过程中主要是通过HTTP协议进行交互的,而在Servlet接口中有提供一个H

  • 本文向大家介绍springboot集成mybatis-plus遇到的问题及解决方法,包括了springboot集成mybatis-plus遇到的问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 在使用spring boot集成mybatis-plus的过程中遇到的问题 如图, 首先我放xml的包的是没问题的,而是引入的架包和配置问题,问题配置如下 解决方法:请将mybatis-plus改成m

  • 这个怎么解决? 把他们调换顺序也不对

  • 网页如何做到所见即打印的效果呢 我用了bootstrap等一些框架,大量使用里面的css样式 然后ctrl + P打印时啥也米有,就是一些乱七八糟的框子 但是google随便搜个东西,ctrl + P后打印的都是页面显示出来的样子 要怎么做呢 我试了css引入时加media=all,好像没有用