Получение геолокации пользователя без index.html

Будет ли вторая реализация включать несколько изменений размера HashMap или оптимизирована для выделения достаточно памяти?

В вашем коде первый. См. https://stackoverflow.com/a/51333961/139985

Стоит отметить, что для вашей текущей реализации:

  1. Большая часть дополнительная память, потребляемая путем изменения размера, будет восстановлена ​​при следующем запуске GC.
  2. После окончания collect вы все равно можете получить основной массив хэшей, который в два раза больше. Память «впустую» может составлять до 8 байтов на запись в таблице, но в среднем она будет 4 байта на запись.
  3. Тем не менее, узлы ввода хешей будут самым большим потребителем памяти в a HashMap. Каждая запись потребляет примерно 32 байта ... в дополнение к пространству, используемому для представления ключа и значения.

(Приведенные выше числа предполагают 64-битные ссылки.)


В качестве альтернативы, если вы используете перегрузку аргумента 4 в toMap(), вы можете предоставить Supplier для создания Map для заполнения. Это позволяет сделать следующее:

  • Выделить HashMap с начальной мощностью, достаточной для того, чтобы избежать изменения размера, но не слишком большого.
  • Используйте (гипотетический) альтернативная реализация Map, которая использует меньше памяти для каждой записи, чем HashMap.
  • Создайте оболочку, чтобы заполнить объект, похожий на карту, который не реализует Map ... для вашего K и V. (Например, вы могли бы использовать TLongObjectHashMap в библиотеке GNU Trove.)

(В последних двух случаях целью является найти Map или «map-like «класс, который использует меньше памяти (для ваших типов K и V), но все же имеет соответствующую производительность для поиска.)

-1
задан user8360723 18 January 2019 в 19:18
поделиться

1 ответ

Это не файл, а стандарт HTML5, который работает в браузерах. В предоставленной вами ссылке язык навигации находится в теге script. Если вы поместите метод navigator.geolocation в функцию getUserLoc(), которая выполняет чуть больше, чем setState с координатами при щелчке, вы сможете обновить положение карты, установив состояние. Вы установили бы начальное состояние в конструкторе LandingPage, а затем передали функцию `getUserLoc () вашему компоненту NavBar, где ее можно запустить с помощью this.props.getUserLoc ().

 const mapStyles = {
  width: '100%',
  height: '100%'
};
export class LandingPage extends Component {
 constructor(props) {
  super(props)
  this.state={
    lat: 28.871812,
    lng: -34.814106
 }
 this.getUserLoc = this.getUserLoc.bind(this)
 }
getUserLoc() {
 if (navigator.geolocation) {
   navigator.geolocation.getCurrentPosition(function(position) {
    var pos = {
      lat: position.coords.latitude,
      lng: position.coords.longitude
      };
        this.setState({
         userLat: pos.lat,
         userLng: pos.lng
        })
       });
     } else {
      // Browser doesn't support Geolocation
      handleLocationError(false, infoWindow, map.getCenter());
    }
   }
   render() {
    return(
      <div>
        <Map
        google={this.props.google}
        zoom={3}
        style={mapStyles}
        initialCenter={{
            lat: this.state.userLat,
            lng: this.state.userLng
        }}
        >
        </Map>
        <NavBar getUserLoc={this.getUserLoc}/>
      </div>
      )
   }
 }
0
ответ дан stever 18 January 2019 в 19:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: