前端页面请求PHP接口返回超大数据(几万条以上)解决办法总结 - Go语言中文社区

前端页面请求PHP接口返回超大数据(几万条以上)解决办法总结


起因:

当我web前端向php请求数据时,几千条记录都能正常获取,但是要请求几万条记录的时候php就不响应了。

多种方法总结:

一、修改php.ini配置文件

  1. memory_limit = 128 改成memory_limit = 256。

PHP5中,对于memory_limit的设定已经从以往的8M扩大到128M的上限。

对于配置中的定义解释是: memory_limit = 128M ; Maximum amount of memory a scriptmay consume (128MB) 最大单线程的独立内存使用量。

也就是一个web请求,给予线程最大的内存使用量的定义。

memory_limit的内存分配,标配是128M。一旦独立的线程超过了128M,那PHP会报错: Fatal error: Allowed memory size of 33554432bytes对于8G内存的服务器,如果同时并发的响应达到50,每个都是128M的峰值,那估计也是服务器会卡死的时候。

尽量降低128M的内存配置,如果调整至64M,服务器的负载基本能下降一半左右,如果能调整至32M效果更好。但是对于应用的要求就更高,很多表建立初期就没有考虑到这个问题,如果你要采用memcache作为数据的存储,必须提前完成优化数据表的设计部署,降低独立线程PHP的内存使用量,服务器的响应和负载降低的就不仅仅是几个百分点的效果了。

2、max_execution_time = 30 改高一点,或者在代码里set_time_limit(800);

当你的页面有大量数据时,建议使用set_time_limit()来控制运行时间,配置该页最久执行时间。设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误,时间是秒单位。

(a)、php.ini:它预设的限制时间是30秒,max_execution_time的值定义在结构档案中,如果将秒数设为0,表示无时间上的限制,修改后重新启动apache/nginx服务器

(b)、php代码里使用函数:set_time_limit(800);

这个函数指定了当前所在php脚本的最大执行时间为800秒,实际上最大执行时间=php.ini里的max_execution_time数值 - 当前脚本已经执行的时间 + 设定值

假如php.ini里的max_execution_time=30,当前脚本已经执行5秒,则:

最大执行时间=30-5+800=825秒。

注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中的时间限制。

(c)、php长连接

如果我们需要一个脚本持续的运行,那么我们就要通过php长连接的方式,来达到运行目的。通过 set_time_limit 来设置一个脚本的执行时间为无限长;然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。

二、查询分页,或者压缩key,不返回无用字段。

如果是异步崩溃,那么就是数据量太大了。可以考虑如上所说的分页。减少每次的数据量。如果说减少不了,那么就考虑其他的办法,如压缩,把key压缩成一个字母,在你的程序里面一个key的压缩就节省了几万个字母了。再者就是返回的时候,不返回无用字段

三、前端页面ajax请求时,设置请求头长连接 

Connection:keep-alive

四、数据库连接不要写localhost,改成127.0.0.1

'DB_HOST'               => '127.0.0.1', // 服务器地址

五、Nginx服务器中http模块相关配置的设置改大:

http {
    keepalive_timeout  65;
    fastcgi_connect_timeout 100000;
    fastcgi_send_timeout 100000;
    fastcgi_read_timeout 100000;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 64 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;
}

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_57116438/article/details/122101643
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2022-12-29 20:19:42
  • 阅读 ( 426 )
  • 分类:大数据

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢