[原]使用算法放大用户点击坐标数据的粒度

    最近在公司昨做了一个关于用户点击行为的各种统计,其中包括最直观的 点击热点图。   样貌如下: 

    

    我是做后端的,前端肯定直接用写好的库,其中用到的生成热点图的类库是 heatmap,详情参看 github。在此感谢作者。

    关于这个heatmap 还是有一些坑的,之后我在写一个关于heatmap的文章。下面介绍另外的一个问题,就是数据量的问题。一个网站的页面用户的点击量是很大的,即使只有一天。因为用户的每一次点击都会被记录下来。这些数据不论存储在关系数据库里面 还是 nosql里面 都是不小的。效率问题很严重。

    如果这个页面被点击了100W次,再除去坐标重复,因为存储的时候会有一个坐标计数,也就是同一个坐标被点击多次,只有一个记录,但是即使这样,数据量依旧很大,将近100W条记录。这在程序里面直接读出来然后交给JS再画到canvas画布上,服务器内存再大也是吃不消的,

    举个栗子:如果PHP被开的memory limit 内存限制是8G的话,也就能取出10-20W条记录,就爆掉了。而且没有大数据字段,字段数据量都不大。

    比如我们当时的记录是 url:xxxx , x_y:100,200 , count 10 , time:xxxxxx 。就是这样一些简单的字段。

    所以解决方案有两种:

Continue reading

Code | wwpeng | | (1) |

[原]子站点不可控的情况下iframe跨域自动适应高度

    关于iframe如何自动适应内部网站的高度,这个 在网上搜出来的千篇一律,都是用js获取内部内容的高度然后重新设置iframe的高度。但是这个方式在非跨域的情况下完全没有问题。只是跨域的时候,js是不能获得内部内容的高度的,什么都获取不到。

    很多的跨域解决方案都需要内部子站点做出动作,主动发起通知父站点的iframe。但是还有一种很棘手的情况,就是你对于子站点完全没有权限,或者,也不想为了这个事情,再去做一个通知这样的功能。

    所以,就只能自己动手满足自己的需求了。

    这里的方案的主要思路是:把跨域的转换成非跨域的

    我再本地项目中做一个页面专门用来对url对应网站的内容进行转发。

    a.php?url=www.baidu.com

<?php
echo file_get_contents('http://'.$_GET['url']);
?>

     这样的话,只需要将当前站点的 a.php?url=www.baidu.com 放在iframe当中就可以了,内部的css,js,图片等资源还是用的原来的远程地址,但是加载这些东西不会存在跨域问题,最重要的是这样我们就可以随意的用js去获取内部内容的高度了,然后再设置外部iframe的高度。

    唯一的弊端是:如果这个网站中又大量ajax加载的内容的话,就不适用这个方案,当然,jsonp的话是没关系的。

    因为如果页面中得内容是ajax加载进来的话,因为把页面转发到了本地网站,所以ajax会存在跨域请求不成功的问题,内容自然也就加载不出来了。

    所以,都是有缺点的,所以根据具体情况具体确定方案吧。

    

PS:我找过CSS的解决方案,但是没找到,不好使。有没有前端大神。知道可行的CSS解决方案???

Code | wwpeng | | (0) |