本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格.库存.服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后拼装网页模板的. 如图所示,商品页主要包括商品基本信息(基本信息.图片列表.颜色/尺码关系.扩展属性.规格参数.包装清单.售后保障等).商品介绍.其他信息(分类.品牌.店铺[第三方卖家].店内分类[第三方卖家].同类相关品牌).更多细节此处就不阐述了. 整个京东有数亿商品,如果每次动态获取如上内容进…
模版渲染 动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现.而Lua中也有许多模板引擎,如目前京东在使用的lua-resty-template,可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的. 如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行:而lua-resty-template模板引擎可以认为是JSP,其最终会被翻译成Lua代码,然后通过ngx.print…
Nginx Lua 模块指令 Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构:另外指令可以在http.server.server if.location.location if几个范围进行配置: 指令 所处处理阶段 使用范围 解释 init_by_luainit_by_lua_file loading-config http nginx Master进程加载配置时执行:通常用于初始化全局配置/预加载Lua模块 init_worker_by_luainit_work…
流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流:另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发执行来模拟复制. 构造两个服务: location /test1 { keepalive_timeou…
此处我说的HTTP服务主要指如访问京东网站时我们看到的热门搜索.用户登录.实时价格.实时库存.服务支持.广告语等这种非Web页面,而是在Web页面中异步加载的相关数据.这些服务有个特点即访问量巨大.逻辑比较单一:但是如实时库存逻辑其实是非常复杂的.在京东这些服务每天有几亿十几亿的访问量,比如实时库存服务曾经在没有任何IP限流.DDos防御的情况被刷到600多万/分钟的访问量,而且能轻松应对.支撑如此大的访问量就需要考虑设计良好的架构,并很容易实现水平扩展. 架构 此处介绍下Nginx+JavaE…
Nginx Lua API 和一般的Web Server类似,我们需要接收请求.处理并输出响应.而对于请求我们需要获取如请求参数.请求头.Body体等信息:而对于处理就是调用相应的Lua代码即可:输出响应需要进行响应状态码.响应头和响应内容体的输出.因此我们从如上几个点出发即可. 接收请求 1. openResty.conf配置文件 server { listen 80; server_name _; location ~ /lua_request/(\d+)/(\d+) { # 设置nginx…
OpenResty是一款基于Nginx的高性能负载均衡服务器容器,简单来说是Nginx+Lua.结合了Lua语言来对Nginx进行扩展,使得在Nginx上具有web容器功能. OpenResty运行环境搭建 首先是在CentOS 7.6上的安装过程: cd /opt 安装编译所需要的环境: yum install readline-devel pcre-devel openssl-devel gcc 去OpenResty的官网下载安装包: 地址:http://openresty.org/cn/d…
Redis客户端 lua-resty-redis是为基于cosocket API的ngx_lua提供的Lua redis客户端,通过它可以完成Redis的操作.默认安装OpenResty时已经自带了该模块,使用文档可参考https://github.com/openresty/lua-resty-redis. 基本操作 1. 创建redis/test_redis_baisc.lua local function close_redes( red ) if not red then return…
在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发:而且模块化是高性能Lua应用的关键.使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享:另外注意之前我们使用init_by_lua中初始化的全局变量是每请求复制一个:如果想在多个Worker进程间共享数据可以使用ngx.shared.…
JSON库 在进行数据传输时JSON格式目前应用广泛,因此从Lua对象与JSON字符串之间相互转换是一个非常常见的功能:目前Lua也有几个JSON库,如:cjson.dkjson.其中cjson的语法严格(比如unicode \u0020\u7eaf),要求符合规范否则会解析失败(如\u002),而dkjson相对宽松,当然也可以通过修改cjson的源码来完成一些特殊要求.而在使用dkjson时也没有遇到性能问题,目前使用的就是dkjson.使用时要特别注意的是大部分JSON库都仅支持UTF-8…
Mysql客户端 lua-resty-mysql是为基于cosocket API的ngx_lua提供的Lua Mysql客户端,通过它可以完成Mysql的操作.默认安装OpenResty时已经自带了该模块,使用文档可参考https://github.com/openresty/lua-resty-mysql. 1. 编辑mysql/test_mysql.lua local function close_db( db ) if not db then return end db:close() e…
在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Nginx团队也开始意识到这个问题,开发了nginxScript:可以在Nginx中使用JavaScript进行动态配置一些变量和动态脚本执行:而目前市面上…
使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Ngin…
摘自(http://jinnianshilongnian.iteye.com/blog/2280928) 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Nginx团队也开始意识到这个问题,开发了ngin…
安装Nginx+Lua+OpenResty开发环境配置全过程实例 OpenResty由Nginx核心加很多第三方模块组成,默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用. 借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序. 而且OpenResty提供了大量组件如Mysql.Redis.Memcached等等,使在Nginx上开发Web应用更方便更简单. 目前在京东如实时价格.秒杀.动态服务.单品页.列表页等都在使用Nginx+Lua架构,其…
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/431172001487671163 来源:腾云阁 https://www.qcloud.com/community 如何用Baas快速在腾讯云上开发小程序-系列4:实现客户侧商品列表.商品详情页程序 一.实验简介通过实现商品列表.商品详情页程序,熟练掌握云端数据表查询操作. 二.实验目标 掌握小程序调试方法 掌握小程序操作云端数据方法 掌握云端数据表…
http://jinnianshilongnian.iteye.com/blog/2245925 博客分类: 架构   在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一服务系统(页面中异步加载的很多服务,如库存服务.图书相关服务.延保服务等)中使用了Servlet3请求异步化模型,总结了Servlet3请求异步化的一些经验和想法跟大家分享和交流. 我将从如下几点阐述Servlet3异步化之后的好处: 1.为什么实现请求异步化需要使用Servlet3 2.请求异步化…
--------------------------------------------------------------------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/53151462 作者:朱培      ID:sdksdk0      -----------------------------------------------…
在做一个商城的项目时,做到商品详情页的时候需要实现这种下拉跳转到商品详情页加载许多图片,上拉回到商品简介的效果,并且需要用户在滑动时有一种费力的感觉.最初是通过iscroll插件实现的,但这个插件在使用时有太多坑儿,总是下面会出现大片空白,还找不到是哪里的问题. 这里用了js原生事件,核心是移动端的touchstart,touchmove,touchend三个事件,判断相对位移来绑定相应的事件.下面是相应的代码,效果还不是很完善. <!DOCTYPE html><html><…
会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /includes/lib_goods.php 将 $row['shop_price_formated'] = price_format($row['shop_price']); 修改为 $row['shop_price_formated'] = $_SESSION[user_rank] ? price_…
1.打开goods.php文件找到下面代码 $smarty->assign('goods_rank', get_goods_rank($goods_id)); // 商品的销售排名 在上面的代码下加如下代码 $children = get_children($goods['cat_id']); $smarty->assign('best_goods', get_category_recommend_goods('best', $children)); 2.找到goods.dwt文件,在需要增加…
有人说,将商品详情页的文件名 goods.php 改一个名字,对百度收录会有帮助,也许吧,这里不讨论是否有帮助,这里只讲解如何重命名. 例如:我们将 goods.php 改为 shangpin.php ,当然不一定非是shangpin.php , 你也可以修改成 product.php .fuzhuang.php.lingshi.php.......等等,方法都一样. 第一步: 进入网站根目录,将 文件名 goods.php 重命名为 shangpin.php,这个应该都会吧,这是电脑的基本操作…
近期公司在新版本号上有一个须要. 要在首页加入一个滑动效果, 详细就是仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果, 例如以下图 X东的商品详情页,假设用户继续向上拉的话就进入商品图文描写叙述界面: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""> 刚開始是想拿…
首页列表: 在这里我用a标签进行跳转,在vue里面使用<router-link></router-link> <router-link :to="{path:'/news',query:{ id:item.NewsID }}" class="around"></router-link> 商品详情页: //请求接口created: function() { var newsID=this.$route.query.id;…
仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="-100%p" a…
import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity…
新项目就要开始做了,里面有购物那块,就试着先把淘宝商品详情页的效果做了一下. 1.需求 1.第一次上拉时,A视图拉到一定距离将视图B从底部弹出,A视图也向上 2.显示B视图时下拉时,有刷新效果,之后将A回到原处,B向下 3.A视图再次上拉时,能看到B视图,拉到一定距离时,和1一样A.B向上 2.思路 刚看到时,我是想到我们小区宝2.0的登录弹出效果,想着A向上滑动一定距离时A.B向上,B向下滑动时让A.B向下滑动,实现了之后和小伙伴讨论了一下,发现了一些细节这样是实现不了的,就是A上拉时可以看到…
  公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很不详细.于是乎就自己摸着石头过河了,还好自己搞出来了. 虽说淘宝的文档不详细,但有些必须的说明还是要看的. 接入之前要先看看: 准备工作百川接入说明SDK3.1接入文档这些还是有作用的. 注意事项: 1.阿里百川的依赖库一定要添加完整了.否则会初始化失败!   依赖库 注意:貌似少了一个libsql…
最近涉及的一个业务,在app内的一个广告,点击打开webView,加载的是一个淘宝商品详情页,效果是打开该webView自动跳转至淘宝对应的页面,同时在自己的app仍然加载页面,点击评论等也同样能跳转至淘宝客户端 经过拦截该网页,得出一个结论,如果是需要跳转,淘宝都会调用一个tbopen开头的地址,这样那就简单了,以下直接贴代码 1.第一步:info.plist添加白名单 这里经过反复测试,发现淘宝自定义跳转协议只有tbopen,所以我猜测淘宝客户端肯定添加了tbopen这样一个url sche…
最近项目的有个需求是点击购买资料按钮进入淘宝界面,简单分析一下,如果用户手机有淘宝就打开淘宝的页面,没有的话也可以选择使用webView进行展示,还是使用手机浏览器进行展示. 判断有无淘宝的代码就不贴了,在webView展示的代码也不贴,相信度娘上都有,下面就是跳转淘宝商品详情的页面 Intent intent = new Intent(); intent.setAction("Android.intent.action.VIEW"); Uri uri = Uri.parse(tbPa…