我有一个函数,我在其中填充了一个包含大约10万个项目的下拉列表。
显然这会导致我的网页在渲染时暂停一段时间。
public function GetOrderDropDown($id){
$CI =& get_instance();
$CI->load->database();
$qry = $CI->db->query("Select orderID, CONCAT('Order ID: ', orderID) As OrderName From vwSelectOrders Order By orderStarted Desc", FALSE);
$res = $qry->result_array();
if($res){
$rCt = count($res);
echo '<option value="0">- Please select an order -</option>';
for($i = 0; $i < $rCt; ++$i){
$sel = ($id == $res[$i]['orderID']) ? ' selected="selected"': null;
echo '<option value="' . $res[$i]['orderID'] . '"' . $sel . '>' . $res[$i]['OrderName'] . '</option>';
if($i % 50 === 0){
ob_flush();
flush();
}
}
}
}
在SQL MS中应用时,查询本身运行得非常快,实际上当我print_r
返回的数组时,它仍然非常快。所以我认为通过在每50次迭代中添加一个响应的刷新就可以做到这一点......它看起来似乎挂得更少,但是......我想知道它是否会更好。
在ajaxed加载页面中调用此特定函数,该页面在页面加载时显示加载图形...也许我可以强制它等待页面完全准备好显示?
// Load in a page
function LoadPage($url, $where){
var $loading = '<div class="pageLoader">Loading...<br /><img src="/assets/images/ajax-loader.gif" alt="loading..." height="11" width="16" /></div>';
var $container = jQuery((typeof($where) !== 'undefined') ? $where : '#content-container');
var $t = Math.round(new Date().getTime() / 1000);
var options = {
url: $url + '?_=' + $t,
cache: false,
type: 'POST',
beforeSend: function(){
$container.slideUp('slow', function(){
$container.slideDown('fast').html($loading);
});
},
success: function(data, status, jqXhr){
$container.slideUp('fast', function(){
$container.slideDown('fast').html(data);
});
},
complete: function(jqXhr, status){},
error: function(jqXhr, status, error){
$container.slideUp('fast', function(){
$container.slideDown('fast').html('<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><i class="fa fa-exclamation-triangle fa-4x pull-left"></i><p><strong>Danger Will Robinson!</strong><br />There was an issue pulling in this page. Our support team has been notified, please check back later.</p></div>');
});
}
};
jQuery.ajax(options);
}
我还能做些什么,Firefox在加载时实际上变得没有响应......?
答案 0 :(得分:3)
实际上,您不应该将<select>
用于100k项目。这不是用户友好的。尝试搜索自动完成解决方案。
关于您的问题:不,您不能在不重载浏览器的情况下添加具有100k子节点的元素。